homebridge-smartsystem 6.1.2 → 6.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -248,10 +248,13 @@ switch =>
248
248
  - global debug, log, err functions in types.ts
249
249
  - split smappee.ts in PowerBase + smappee/p1/shelly
250
250
 
251
- ## v6.1.1 - 21-07-2022 - P1 release
252
- - R1: implemented P1 power meter telegram
253
- - R2: bugfixes, timeout mgt, etc...
254
-
251
+ ## v6.1.x - 21-07-2022 - P1 release
252
+ - 0: implemented P1 power meter telegram
253
+ - 1: bugfixes, timeout mgt, etc...
254
+ - 2: try fixing logfunction errors
255
+ - 3: reverting to console.log
256
+ - 4: errors when starting power mgrs from platform.ts
257
+ - 5: v6.1.3 changes were gone... restored them.
255
258
 
256
259
  ## Hardware
257
260
  A Raspberry Pi that connects to a Duotecno IP Node
package/config.p1.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "rules": [
3
- ],
4
- "address": "192.168.0.186",
5
- "debug": false
2
+ "rules": [],
3
+ "address": "192.168.0.214",
4
+ "debug": false,
5
+ "bindings": []
6
6
  }
package/duotecno/types.js CHANGED
@@ -102,15 +102,15 @@ exports.logSettings = {
102
102
  "*": LogLevel.log,
103
103
  "master": LogLevel.log,
104
104
  "protocol": LogLevel.noLog,
105
- "webapp": LogLevel.debug,
106
- "p1": LogLevel.debug,
105
+ "webapp": LogLevel.log,
106
+ "p1": LogLevel.log,
107
107
  "power": LogLevel.noLog
108
108
  };
109
109
  // can be overriden with server log function
110
110
  exports.logFunction = console.log;
111
111
  function setLogFunction(F) {
112
- console.log(">>>>>>>>> changing logfunction to: " + F.name + " <<<<<<<<<<");
113
- exports.logFunction = (m) => { F(m); };
112
+ console.log(">>>>>>>>> NOT changing logfunction to: " + F.name + " <<<<<<<<<<");
113
+ // logFunction = (m) => { F(m) };
114
114
  }
115
115
  exports.setLogFunction = setLogFunction;
116
116
  function err(type, message) {
package/duotecno/types.ts CHANGED
@@ -53,16 +53,16 @@ export const logSettings = {
53
53
  "*": LogLevel.log,
54
54
  "master": LogLevel.log,
55
55
  "protocol": LogLevel.noLog,
56
- "webapp": LogLevel.debug,
57
- "p1": LogLevel.debug,
56
+ "webapp": LogLevel.log,
57
+ "p1": LogLevel.log,
58
58
  "power": LogLevel.noLog
59
59
  }
60
60
 
61
61
  // can be overriden with server log function
62
62
  export let logFunction = console.log;
63
63
  export function setLogFunction(F) {
64
- console.log(">>>>>>>>> changing logfunction to: " + F.name + " <<<<<<<<<<");
65
- logFunction = (m) => { F(m) };
64
+ console.log(">>>>>>>>> NOT changing logfunction to: " + F.name + " <<<<<<<<<<");
65
+ // logFunction = (m) => { F(m) };
66
66
  }
67
67
 
68
68
  export function err(type: string, message: string | object) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "homebridge-smartsystem",
3
3
  "displayname": "Duotecno Bridge",
4
- "version": "6.1.2",
4
+ "version": "6.1.5",
5
5
  "description": "SmartServer (Proxy Websockets to TCP sockets, Smappee MQTT, Duotecno IP Nodes, Homekit interface)",
6
6
  "main": "index.js",
7
7
  "author": "Johan Coppieters",
package/server/base.js CHANGED
@@ -5,7 +5,8 @@ const fs = require("fs");
5
5
  const types_1 = require("../duotecno/types");
6
6
  const fs_1 = require("fs");
7
7
  const os_1 = require("os");
8
- const kConfigFiles = (0, os_1.homedir)() + "/duotecno";
8
+ const isMac = ((0, os_1.platform)() === "darwin");
9
+ const kConfigFiles = (isMac) ? (__dirname + "/..") : ((0, os_1.homedir)() + "/duotecno");
9
10
  if (!(0, fs_1.existsSync)(kConfigFiles))
10
11
  (0, fs_1.mkdirSync)(kConfigFiles);
11
12
  ///////////////
package/server/base.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as fs from 'fs';
2
- import { Protocol } from "../duotecno/protocol";
3
- import { debug, err, log, LogFunction, LogLevel, logSettings, now, Sanitizers } from "../duotecno/types";
2
+ import { debug, err, log, LogFunction, LogLevel, logSettings, Sanitizers } from "../duotecno/types";
4
3
 
5
4
 
6
5
  import { existsSync, mkdirSync } from "fs";
7
- import { homedir } from "os";
6
+ import { homedir, platform } from "os";
8
7
 
9
- const kConfigFiles = homedir() + "/duotecno";
8
+ const isMac = (platform() === "darwin");
9
+ const kConfigFiles = (isMac) ? (__dirname+"/..") : (homedir() + "/duotecno");
10
10
  if (! existsSync(kConfigFiles)) mkdirSync(kConfigFiles);
11
11
 
12
12
 
package/server/p1.js CHANGED
@@ -79,8 +79,7 @@ class P1 extends powerbase_1.PowerBase {
79
79
  const value = V[1].substring(0, V[1].length - 1); // remove last ")"
80
80
  const VU = value.split("*"); // split "value*unit"
81
81
  return { key, value: VU[0], unit: VU[1] };
82
- }).forEach(R => result[R.key] = { value: parseFloat(R.value), unit: R.unit
83
- });
82
+ }).forEach(R => result[R.key] = { value: parseFloat(R.value), unit: R.unit });
84
83
  return result;
85
84
  }
86
85
  catch (error) {
@@ -90,42 +89,45 @@ class P1 extends powerbase_1.PowerBase {
90
89
  });
91
90
  }
92
91
  consume(data) {
93
- this.voltages = [data['32.7.0'].value, data['52.7.0'].value, data['72.7.0'].value];
94
- this.realtime = { totalPower: data['1.7.0'].value * 1000,
95
- totalReactivePower: data['2.7.0'].value * 1000,
96
- totalExportEnergy: data['2.8.1'].value + data['2.8.2'].value,
97
- totalImportEnergy: data['1.8.1'].value + data['1.8.2'].value,
92
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
93
+ if (!data['32.7.0'])
94
+ return;
95
+ this.voltages = [(_a = data['32.7.0']) === null || _a === void 0 ? void 0 : _a.value, (_b = data['52.7.0']) === null || _b === void 0 ? void 0 : _b.value, (_c = data['72.7.0']) === null || _c === void 0 ? void 0 : _c.value];
96
+ this.realtime = { totalPower: ((_d = data['1.7.0']) === null || _d === void 0 ? void 0 : _d.value) * 1000,
97
+ totalReactivePower: ((_e = data['2.7.0']) === null || _e === void 0 ? void 0 : _e.value) * 1000,
98
+ totalExportEnergy: ((_f = data['2.8.1']) === null || _f === void 0 ? void 0 : _f.value) + ((_g = data['2.8.2']) === null || _g === void 0 ? void 0 : _g.value),
99
+ totalImportEnergy: ((_h = data['1.8.1']) === null || _h === void 0 ? void 0 : _h.value) + ((_j = data['1.8.2']) === null || _j === void 0 ? void 0 : _j.value),
98
100
  monitorStatus: 0, utcTimeStamp: new Date().getTime() };
99
101
  this.channels = {
100
102
  0: {
101
103
  name: "Zonnepanelen L1", type: "CT", flow: "PRODUCTION",
102
- power: data['22.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
104
+ power: ((_k = data['22.7.0']) === null || _k === void 0 ? void 0 : _k.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
103
105
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""
104
106
  },
105
107
  1: {
106
108
  name: "Zonnepanelen L2", type: "CT", flow: "PRODUCTION",
107
- power: data['42.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
109
+ power: ((_l = data['42.7.0']) === null || _l === void 0 ? void 0 : _l.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
108
110
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""
109
111
  },
110
112
  2: {
111
113
  name: "Zonnepanelen L3", type: "CT", flow: "PRODUCTION",
112
- power: data['62.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
114
+ power: ((_m = data['62.7.0']) === null || _m === void 0 ? void 0 : _m.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
113
115
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""
114
116
  },
115
117
  3: {
116
118
  name: "Grid L1", type: "CT", flow: "CONSUMPTION",
117
- power: data['21.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
118
- current: data['31.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""
119
+ power: ((_o = data['21.7.0']) === null || _o === void 0 ? void 0 : _o.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
120
+ current: (_p = data['31.7.0']) === null || _p === void 0 ? void 0 : _p.value, apparentPower: 0, cosPhi: 0, formula: ""
119
121
  },
120
122
  4: {
121
123
  name: "Grid L2", type: "CT", flow: "CONSUMPTION",
122
- power: data['41.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
123
- current: data['51.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""
124
+ power: ((_q = data['41.7.0']) === null || _q === void 0 ? void 0 : _q.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
125
+ current: (_r = data['51.7.0']) === null || _r === void 0 ? void 0 : _r.value, apparentPower: 0, cosPhi: 0, formula: ""
124
126
  },
125
127
  5: {
126
128
  name: "Grid L3", type: "CT", flow: "CONSUMPTION",
127
- power: data['61.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
128
- current: data['71.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""
129
+ power: ((_s = data['61.7.0']) === null || _s === void 0 ? void 0 : _s.value) * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
130
+ current: (_t = data['71.7.0']) === null || _t === void 0 ? void 0 : _t.value, apparentPower: 0, cosPhi: 0, formula: ""
129
131
  }
130
132
  };
131
133
  // console.log(data);
package/server/p1.ts CHANGED
@@ -167,8 +167,8 @@ export class P1 extends PowerBase {
167
167
 
168
168
  return { key, value: VU[0], unit: VU[1]};
169
169
  }).forEach(R =>
170
- result[R.key] = {value: parseFloat(R.value), unit: R.unit
171
- });
170
+ result[R.key] = {value: parseFloat(R.value), unit: R.unit}
171
+ );
172
172
 
173
173
  return result;
174
174
 
@@ -179,38 +179,40 @@ export class P1 extends PowerBase {
179
179
  }
180
180
 
181
181
  consume(data: P1Data) {
182
- this.voltages = [data['32.7.0'].value, data['52.7.0'].value, data['72.7.0'].value];
183
- this.realtime = { totalPower: data['1.7.0'].value * 1000,
184
- totalReactivePower: data['2.7.0'].value * 1000,
185
- totalExportEnergy: data['2.8.1'].value + data['2.8.2'].value,
186
- totalImportEnergy: data['1.8.1'].value + data['1.8.2'].value,
182
+ if (! data['32.7.0']) return;
183
+
184
+ this.voltages = [data['32.7.0']?.value, data['52.7.0']?.value, data['72.7.0']?.value];
185
+ this.realtime = { totalPower: data['1.7.0']?.value * 1000,
186
+ totalReactivePower: data['2.7.0']?.value * 1000,
187
+ totalExportEnergy: data['2.8.1']?.value + data['2.8.2']?.value,
188
+ totalImportEnergy: data['1.8.1']?.value + data['1.8.2']?.value,
187
189
  monitorStatus: 0, utcTimeStamp: new Date().getTime() };
188
190
 
189
191
  this.channels = {
190
192
  0: {
191
193
  name: "Zonnepanelen L1", type: "CT", flow: "PRODUCTION",
192
- power: data['22.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
194
+ power: data['22.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
193
195
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""},
194
196
  1: {
195
197
  name: "Zonnepanelen L2", type: "CT", flow: "PRODUCTION",
196
- power: data['42.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
198
+ power: data['42.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
197
199
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""},
198
200
  2: {
199
201
  name: "Zonnepanelen L3", type: "CT", flow: "PRODUCTION",
200
- power: data['62.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
202
+ power: data['62.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
201
203
  current: 0, apparentPower: 0, cosPhi: 0, formula: ""},
202
204
  3: {
203
205
  name: "Grid L1", type: "CT", flow: "CONSUMPTION",
204
- power: data['21.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
205
- current: data['31.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""},
206
+ power: data['21.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 0,
207
+ current: data['31.7.0']?.value, apparentPower: 0, cosPhi: 0, formula: ""},
206
208
  4: {
207
209
  name: "Grid L2", type: "CT", flow: "CONSUMPTION",
208
- power: data['41.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
209
- current: data['51.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""},
210
+ power: data['41.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 1,
211
+ current: data['51.7.0']?.value, apparentPower: 0, cosPhi: 0, formula: ""},
210
212
  5: {
211
213
  name: "Grid L3", type: "CT", flow: "CONSUMPTION",
212
- power: data['61.7.0'].value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
213
- current: data['71.7.0'].value, apparentPower: 0, cosPhi: 0, formula: ""}
214
+ power: data['61.7.0']?.value * 1000, exportEnergy: 0, importEnergy: 0, phaseId: 2,
215
+ current: data['71.7.0']?.value, apparentPower: 0, cosPhi: 0, formula: ""}
214
216
  };
215
217
  // console.log(data);
216
218
 
@@ -26,6 +26,7 @@ const socapp_1 = require("./socapp");
26
26
  const door_1 = require("../accessories/door");
27
27
  const lock_1 = require("../accessories/lock");
28
28
  const p1_1 = require("./p1");
29
+ const shelly_1 = require("./shelly");
29
30
  class Platform extends base_1.Base {
30
31
  constructor(logger, config, api) {
31
32
  // set debug to true for new config files
@@ -64,9 +65,10 @@ class Platform extends base_1.Base {
64
65
  return;
65
66
  }
66
67
  // start power managers
68
+ this.power = {};
67
69
  this.startPower("smappee", smappee_1.Smappee);
68
70
  this.startPower("p1", p1_1.P1);
69
- // this.startPower("shelly", Shelly);
71
+ this.startPower("shelly", shelly_1.Shelly);
70
72
  // startup a smartApp if configured -> only on Raspberry's
71
73
  if (this.config.smartapp) {
72
74
  try {
@@ -68,9 +68,10 @@ export class Platform extends Base {
68
68
  }
69
69
 
70
70
  // start power managers
71
+ this.power = {};
71
72
  this.startPower("smappee", Smappee);
72
73
  this.startPower("p1", P1);
73
- // this.startPower("shelly", Shelly);
74
+ this.startPower("shelly", Shelly);
74
75
 
75
76
 
76
77
  // startup a smartApp if configured -> only on Raspberry's