homebridge-smartsystem 7.1.12 → 7.1.15
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/duotecno/master.js +5 -3
- package/package.json +1 -1
- package/server/base.js +1 -0
- package/server/powerbase.js +30 -13
package/duotecno/master.js
CHANGED
|
@@ -452,7 +452,7 @@ class Master extends base_1.Base {
|
|
|
452
452
|
const value = protocol_1.Protocol.makeSigned(message, 4);
|
|
453
453
|
if ((register >= 0) && (register < 1024)) {
|
|
454
454
|
this.registers[register] = value;
|
|
455
|
-
this.log(
|
|
455
|
+
this.log(`<<< receiveRegister: register ${register} = ${value} (stored in master.registers[${register}])`);
|
|
456
456
|
}
|
|
457
457
|
else {
|
|
458
458
|
this.err("Received register out of bound: " + register);
|
|
@@ -773,12 +773,14 @@ class Master extends base_1.Base {
|
|
|
773
773
|
}
|
|
774
774
|
setRegisterValue(register, value) {
|
|
775
775
|
return __awaiter(this, void 0, void 0, function* () {
|
|
776
|
+
this.log(`### setRegisterValue called: register=${register}, value=${value}, protocol=${this.protocol}`);
|
|
776
777
|
if (this.protocol >= 209) {
|
|
778
|
+
this.log(`### Sending register update to ${this.getAddress()}: register ${register} = ${value}`);
|
|
777
779
|
yield this.send(protocol_1.Protocol.buildRegister(register, value));
|
|
778
|
-
this.
|
|
780
|
+
this.log(`### Register ${register} set to ${value} successfully`);
|
|
779
781
|
}
|
|
780
782
|
else {
|
|
781
|
-
this.err(
|
|
783
|
+
this.err(`### FC_REGISTERMAP not available before protocol v2.09 (current protocol: ${this.protocol})`);
|
|
782
784
|
}
|
|
783
785
|
});
|
|
784
786
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "homebridge-smartsystem",
|
|
3
3
|
"displayname": "Duotecno Bridge",
|
|
4
|
-
"version": "7.1.
|
|
4
|
+
"version": "7.1.15",
|
|
5
5
|
"description": "SmartServer (Proxy TCP sockets to the cloud, Smappee MQTT, Duotecno IP Nodes, Homekit interface)",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"author": "Johan Coppieters",
|
package/server/base.js
CHANGED
|
@@ -13,6 +13,7 @@ class Base {
|
|
|
13
13
|
this.config = config;
|
|
14
14
|
else
|
|
15
15
|
this.readConfig();
|
|
16
|
+
this.debug = (!!this.config.debug) || false;
|
|
16
17
|
if (this.debug)
|
|
17
18
|
logger_1.logSettings[this.type] = logger_1.LogLevel.debug;
|
|
18
19
|
else if (logger_1.logSettings[this.type] == logger_1.LogLevel.debug)
|
package/server/powerbase.js
CHANGED
|
@@ -22,6 +22,12 @@ class PowerBase extends base_1.Base {
|
|
|
22
22
|
constructor(type, system) {
|
|
23
23
|
super(type);
|
|
24
24
|
// called by Base: this.readConfig();
|
|
25
|
+
// Also enable "power" logger when debug is on (in addition to the specific type logger)
|
|
26
|
+
if (this.debug) {
|
|
27
|
+
const { logSettings, LogLevel } = require("../duotecno/logger");
|
|
28
|
+
logSettings["power"] = LogLevel.debug;
|
|
29
|
+
(0, logger_1.log)("power", `Debug logging enabled for power/${type}`);
|
|
30
|
+
}
|
|
25
31
|
this.system = system;
|
|
26
32
|
// will grow when we encounter one in the mqtt stream or if we receive a config message
|
|
27
33
|
this.switches = {};
|
|
@@ -112,39 +118,50 @@ class PowerBase extends base_1.Base {
|
|
|
112
118
|
}
|
|
113
119
|
applyBindings() {
|
|
114
120
|
if (this.realtimeCounter % 2 === 0) {
|
|
121
|
+
(0, logger_1.log)("power", `*** applyBindings: processing ${this.bindings.length} bindings ***`);
|
|
115
122
|
// for all bindings
|
|
116
|
-
this.bindings.forEach(b => {
|
|
123
|
+
this.bindings.forEach((b, idx) => {
|
|
124
|
+
var _a;
|
|
117
125
|
const power = this.evalPower(b.channel);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
" > threshold: 5% =" + Math.abs(b.value * 0.05) + " > threshold: 2% =" + Math.abs(b.value * 0.02));
|
|
126
|
+
const currentValue = (_a = b.value) !== null && _a !== void 0 ? _a : NaN;
|
|
127
|
+
(0, logger_1.log)("power", `[Binding ${idx}] channel=${b.channel}, register=${b.register}, master=${b.masterAddress}:${b.masterPort}, current_value=${currentValue}, calculated_power=${power}`);
|
|
128
|
+
if (this.significant(power, currentValue)) {
|
|
129
|
+
(0, logger_1.log)("power", `[Binding ${idx}] SIGNIFICANT CHANGE - APPLYING to register ${b.register}: ${currentValue} -> ${power}W (diff: ${Math.abs(currentValue - power)}W)`);
|
|
123
130
|
this.applyBinding(b, power)
|
|
124
131
|
.then(power => {
|
|
125
132
|
b.value = power;
|
|
126
|
-
(0, logger_1.
|
|
133
|
+
(0, logger_1.log)("power", `[Binding ${idx}] SUCCESS - set register ${b.register} to ${power}W`);
|
|
127
134
|
})
|
|
128
|
-
.catch((e) =>
|
|
135
|
+
.catch((e) => {
|
|
136
|
+
(0, logger_1.err)(this.type, `[Binding ${idx}] ERROR: ${e.message || e}`);
|
|
137
|
+
(0, logger_1.log)("power", `[Binding ${idx}] Failed to set register ${b.register}: ${e.message || e}`);
|
|
138
|
+
});
|
|
129
139
|
}
|
|
130
140
|
else {
|
|
131
|
-
(0, logger_1.debug)("power",
|
|
132
|
-
": difference: " + Math.abs(b.value - power) +
|
|
133
|
-
" <= threshold: 5% =" + Math.abs(b.value * 0.05) + " or 2% =" + Math.abs(b.value * 0.02));
|
|
141
|
+
(0, logger_1.debug)("power", `[Binding ${idx}] NOT significant for channel ${b.channel} -> register ${b.register}: ${currentValue}W -> ${power}W (diff: ${Math.abs(currentValue - power)}W, threshold: ${currentValue < 1000 ? '5%=' + Math.abs(currentValue * 0.05) : '2%=' + Math.abs(currentValue * 0.02)}W)`);
|
|
134
142
|
}
|
|
135
143
|
});
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
applyBinding(binding, value) {
|
|
139
147
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
(0, logger_1.log)("power", `>>> applyBinding: looking for master ${binding.masterAddress}:${binding.masterPort}`);
|
|
140
149
|
const master = this.system.findMaster(binding.masterAddress, binding.masterPort);
|
|
141
150
|
if (master) {
|
|
151
|
+
(0, logger_1.log)("power", `>>> applyBinding: MASTER FOUND (${master.getName()}), calling setRegisterValue(${binding.register}, ${value})`);
|
|
142
152
|
yield master.setRegisterValue(binding.register, value);
|
|
153
|
+
(0, logger_1.log)("power", `>>> applyBinding: setRegisterValue completed successfully for register ${binding.register}`);
|
|
143
154
|
return value;
|
|
144
155
|
}
|
|
145
156
|
else if ((!binding.masterAddress) || (binding.register)) {
|
|
146
|
-
|
|
147
|
-
|
|
157
|
+
const errMsg = "***** MASTER NOT FOUND for binding for value " + value + " to " + binding.masterAddress + ":" + binding.masterPort + " - register = " + binding.register + " *****";
|
|
158
|
+
(0, logger_1.log)("power", errMsg);
|
|
159
|
+
throw new Error(errMsg);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
(0, logger_1.log)("power", `>>> applyBinding: empty binding (no master or register), skipping`);
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
148
165
|
});
|
|
149
166
|
}
|
|
150
167
|
/////////////////////
|