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 +7 -4
- package/config.p1.json +4 -4
- package/duotecno/types.js +4 -4
- package/duotecno/types.ts +4 -4
- package/package.json +1 -1
- package/server/base.js +2 -1
- package/server/base.ts +4 -4
- package/server/p1.js +18 -16
- package/server/p1.ts +18 -16
- package/server/platform.js +3 -1
- package/server/platform.ts +2 -1
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.
|
|
252
|
-
-
|
|
253
|
-
-
|
|
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
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.
|
|
106
|
-
"p1": LogLevel.
|
|
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
|
-
|
|
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.
|
|
57
|
-
"p1": LogLevel.
|
|
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.
|
|
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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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']
|
|
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']
|
|
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']
|
|
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']
|
|
205
|
-
current: data['31.7.0']
|
|
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']
|
|
209
|
-
current: data['51.7.0']
|
|
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']
|
|
213
|
-
current: data['71.7.0']
|
|
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
|
|
package/server/platform.js
CHANGED
|
@@ -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
|
-
|
|
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 {
|
package/server/platform.ts
CHANGED
|
@@ -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
|
-
|
|
74
|
+
this.startPower("shelly", Shelly);
|
|
74
75
|
|
|
75
76
|
|
|
76
77
|
// startup a smartApp if configured -> only on Raspberry's
|