iobroker.solarviewdatareader 1.1.0 → 1.1.2

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
@@ -60,6 +60,17 @@ UL3, IL3 = mains voltage, mains power phase 3
60
60
  TKK= Temperature inverter
61
61
 
62
62
  ## Changelog
63
+ ### 1.1.2 (2024-09-13)
64
+ * (afuerhoff) adapter checker changes
65
+ * (afuerhoff) dependencies updated
66
+ * (afuerhoff) automatic restart [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)
67
+
68
+ ### 1.1.1 (2024-06-28)
69
+ * (afuerhoff) change to typescript
70
+ * (afuerhoff) dependencies updated
71
+ * (afuerhoff) bugfix CCU variable
72
+ * (afuerhoff) documentation changed
73
+
63
74
  ### 1.1.0 (2024-05-29)
64
75
  * (afuerhoff) code optimizations
65
76
  * (afuerhoff) jsonConfig added
@@ -74,16 +85,6 @@ TKK= Temperature inverter
74
85
  ### 1.0.7 (2022-12-21)
75
86
  * (afuerhoff) dependencies updated
76
87
 
77
- ### 1.0.6 (2022-07-04)
78
- * (afuerhoff) dependencies updated
79
- * (afuerhoff) Interval settings changed from minutes to seconds
80
- * (afuerhoff) States only writen after changes
81
-
82
- ### 1.0.5 (2022-02-17)
83
- * (afuerhoff) dependencies updated
84
- * (afuerhoff) test and release updated
85
- * (afuerhoff) smaller changes
86
-
87
88
  ## License
88
89
  MIT License
89
90
 
package/build/main.js ADDED
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var utils = __toESM(require("@iobroker/adapter-core"));
25
+ var net = __toESM(require("net"));
26
+ const sv_cmd = "00*";
27
+ let conn;
28
+ let jobSchedule;
29
+ let chkCnt = 0;
30
+ let tout;
31
+ class Solarviewdatareader extends utils.Adapter {
32
+ pTimeoutcnt;
33
+ constructor(options = {}) {
34
+ super({
35
+ ...options,
36
+ name: "solarviewdatareader"
37
+ });
38
+ this.pTimeoutcnt = 0;
39
+ this.on("ready", this.onReady.bind(this));
40
+ this.on("unload", this.onUnload.bind(this));
41
+ }
42
+ // Nullen voranstellen - add Leading Zero
43
+ aLZ(n) {
44
+ return n <= 9 ? "0" + n : n.toString();
45
+ }
46
+ calcChecksum(inputString) {
47
+ const buffer = Buffer.from(inputString);
48
+ let sum = 0;
49
+ let index = 0;
50
+ for (let i = 0; i < buffer.length; i++) {
51
+ sum = (sum + buffer[i]) % 128;
52
+ if (buffer[i] === 125) {
53
+ index = i + 2;
54
+ break;
55
+ }
56
+ }
57
+ const result = {
58
+ "result": buffer[index] === sum,
59
+ "chksum": sum,
60
+ "ind": index,
61
+ "data": buffer
62
+ };
63
+ return result;
64
+ }
65
+ //async createObject(that: Solarviewdatareader, id: string, typeVal: ioBroker.CommonType, name: string, commonType: string, role: string, def: any, rd: boolean, wr: boolean, desc: string, unit: string) {
66
+ async createObject(id, obj) {
67
+ await this.setObjectNotExistsAsync(id, obj);
68
+ this.extendObject(id, obj);
69
+ const currentState = await this.getStateAsync(id);
70
+ const stCommon = obj.common;
71
+ if (currentState === null && stCommon.def !== void 0) {
72
+ this.setState(id, stCommon.def, true);
73
+ }
74
+ }
75
+ async createGlobalObjects() {
76
+ const options = [
77
+ ["info.connection", { type: "state", common: { name: "connection", type: "boolean", role: "indicator.connected", def: false, read: true, write: false, desc: "Solarview connection state", unit: "" }, native: {} }],
78
+ ["info.lastUpdate", { type: "state", common: { name: "lastUpdate", type: "string", role: "date", def: (/* @__PURE__ */ new Date("1900-01-01T00:00:00")).toString(), read: true, write: false, desc: "Last connection date/time", unit: "" }, native: {} }]
79
+ ];
80
+ for (const option of options) {
81
+ await this.createObject(...option);
82
+ }
83
+ }
84
+ async createSolarviewObjects(device, additional = false) {
85
+ let options = [
86
+ [device, { type: "channel", common: { name: device }, native: {} }],
87
+ [device + ".current", { type: "state", common: { name: "current", type: "number", role: "value.power", def: 0, read: true, write: false, desc: "Current PAC", unit: "W" }, native: {} }],
88
+ [device + ".daily", { type: "state", common: { name: "daily", type: "number", role: "value.energy", def: 0, read: true, write: false, desc: "Daily yield", unit: "kWh" }, native: {} }],
89
+ [device + ".monthly", { type: "state", common: { name: "monthly", type: "number", role: "value.energy", def: 0, read: true, write: false, desc: "Monthly yield", unit: "kWh" }, native: {} }],
90
+ [device + ".yearly", { type: "state", common: { name: "yearly", type: "number", role: "value.energy", def: 0, read: true, write: false, desc: "Yearly yield", unit: "kWh" }, native: {} }],
91
+ [device + ".total", { type: "state", common: { name: "total", type: "number", role: "value.energy", def: 0, read: true, write: false, desc: "Total yield", unit: "kWh" }, native: {} }]
92
+ ];
93
+ if (additional) {
94
+ const additionalOptions = [
95
+ [device + ".udc", { type: "state", common: { name: "udc", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Generator voltage", unit: "V" }, native: {} }],
96
+ [device + ".idc", { type: "state", common: { name: "idc", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Generator current", unit: "A" }, native: {} }],
97
+ [device + ".udcb", { type: "state", common: { name: "udcb", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Generator voltage", unit: "V" }, native: {} }],
98
+ [device + ".idcb", { type: "state", common: { name: "idcb", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Generator current", unit: "A" }, native: {} }],
99
+ [device + ".udcc", { type: "state", common: { name: "udcc", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Generator voltage", unit: "V" }, native: {} }],
100
+ [device + ".idcc", { type: "state", common: { name: "idcc", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Generator current", unit: "A" }, native: {} }],
101
+ [device + ".udcd", { type: "state", common: { name: "udcd", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Generator voltage", unit: "V" }, native: {} }],
102
+ [device + ".idcd", { type: "state", common: { name: "idcd", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Generator current", unit: "A" }, native: {} }],
103
+ [device + ".ul1", { type: "state", common: { name: "ul1", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Mains voltage", unit: "V" }, native: {} }],
104
+ [device + ".il1", { type: "state", common: { name: "il1", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Mains current", unit: "A" }, native: {} }],
105
+ [device + ".ul2", { type: "state", common: { name: "ul2", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Mains voltage", unit: "V" }, native: {} }],
106
+ [device + ".il2", { type: "state", common: { name: "il2", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Mains current", unit: "A" }, native: {} }],
107
+ [device + ".ul3", { type: "state", common: { name: "ul3", type: "number", role: "value.voltage", def: 0, read: true, write: false, desc: "Mains voltage", unit: "V" }, native: {} }],
108
+ [device + ".il3", { type: "state", common: { name: "il3", type: "number", role: "value.current", def: 0, read: true, write: false, desc: "Mains current", unit: "A" }, native: {} }],
109
+ [device + ".tkk", { type: "state", common: { name: "tkk", type: "number", role: "value.temperature", def: 0, read: true, write: false, desc: "Temperature", unit: "\xB0C" }, native: {} }]
110
+ ];
111
+ options = options.concat(additionalOptions);
112
+ }
113
+ for (const option of options) {
114
+ await this.createObject(...option);
115
+ }
116
+ }
117
+ async adjustIntervalToSeconds() {
118
+ const adapterObj = await this.getForeignObjectAsync(`system.adapter.${this.namespace}`);
119
+ if (!this.config.interval_seconds) {
120
+ if (adapterObj) {
121
+ adapterObj.native.interval_seconds = true;
122
+ adapterObj.native.intervalVal *= 60;
123
+ this.log.warn("Interval changed to seconds!");
124
+ this.log.info("Interval attribute changed! Please check the configuration");
125
+ this.log.info("Adapter restarts");
126
+ }
127
+ }
128
+ }
129
+ preprocessSolarviewData(response) {
130
+ let sv_data = response.toString("ascii");
131
+ sv_data = sv_data.replace(/[{}]+/g, "");
132
+ return sv_data.split(",");
133
+ }
134
+ getSolarviewPrefix(dataCode) {
135
+ const prefixMap = {
136
+ "00": "pvig.",
137
+ "01": "pvi1.",
138
+ "02": "pvi2.",
139
+ "03": "pvi3.",
140
+ "04": "pvi4.",
141
+ "10": "scm0.",
142
+ "11": "scm1.",
143
+ "12": "scm2.",
144
+ "13": "scm3.",
145
+ "14": "scm4.",
146
+ "21": "d0supply.",
147
+ "22": "d0consumption."
148
+ };
149
+ return prefixMap[dataCode] || "";
150
+ }
151
+ processData = async (data) => {
152
+ const strdata = this.preprocessSolarviewData(data);
153
+ const id = this.getSolarviewPrefix(strdata[0]);
154
+ const cs = this.calcChecksum(data.toString("ascii"));
155
+ if (cs.result) {
156
+ this.handleChecksumSuccess(strdata, id, data);
157
+ } else {
158
+ this.handleChecksumFailure(cs, data);
159
+ }
160
+ };
161
+ handleConnectionError(errorMessage) {
162
+ this.log.error(errorMessage);
163
+ this.setStateChanged("info.connection", { val: false, ack: true });
164
+ }
165
+ handleChecksumSuccess(sv_data, sv_prefix, response) {
166
+ chkCnt = 0;
167
+ this.log.debug(sv_cmd + ": " + response.toString("ascii"));
168
+ this.updateSolarviewStates(sv_data, sv_prefix);
169
+ const sDate = `${sv_data[3]}-${this.aLZ(parseInt(sv_data[2]))}-${this.aLZ(parseInt(sv_data[1]))} ${this.aLZ(parseInt(sv_data[4]))}:${this.aLZ(parseInt(sv_data[5]))}`;
170
+ this.setStateChanged("info.lastUpdate", { val: sDate, ack: true });
171
+ this.setStateChanged("info.connection", { val: true, ack: true });
172
+ }
173
+ handleChecksumFailure(csum, response) {
174
+ chkCnt += 1;
175
+ if (chkCnt > 0 && csum.chksum !== 0) {
176
+ const buf = Buffer.from(response.toString("ascii"));
177
+ this.log.warn(`checksum not correct! <${buf[csum.ind - 1]} ${buf[csum.ind]} ${buf[csum.ind + 1]} ${buf[csum.ind + 2]} ${csum.chksum}>`);
178
+ this.log.warn(`${sv_cmd}: ${csum.data}`);
179
+ }
180
+ }
181
+ updateSolarviewStates(sv_data, sv_prefix) {
182
+ this.updateState(sv_prefix + "current", sv_data, 10);
183
+ if (sv_prefix === "pvig.") {
184
+ this.handleCCUUpdate(sv_data);
185
+ }
186
+ this.updateState(sv_prefix + "daily", sv_data, 6);
187
+ this.updateState(sv_prefix + "monthly", sv_data, 7);
188
+ this.updateState(sv_prefix + "yearly", sv_data, 8);
189
+ this.updateState(sv_prefix + "total", sv_data, 9);
190
+ if (sv_data.length >= 23) {
191
+ this.updateExtendedStates(sv_data, sv_prefix);
192
+ }
193
+ }
194
+ updateState(stateName, sv_data, index) {
195
+ const value = Number(sv_data[index]);
196
+ this.setStateChanged(stateName, { val: value, ack: true });
197
+ }
198
+ async handleCCUUpdate(sv_data) {
199
+ if (this.config.setCCU) {
200
+ const obj = await this.findForeignObjectAsync(this.config.CCUSystemV, "state");
201
+ if (obj && obj.name) {
202
+ this.log.debug("set CCU system variable: " + this.config.CCUSystemV);
203
+ this.setForeignState(this.config.CCUSystemV, { val: Number(sv_data[10]), ack: false });
204
+ } else {
205
+ this.log.error(`CCU system variable ${this.config.CCUSystemV} does not exist!`);
206
+ }
207
+ }
208
+ }
209
+ updateExtendedStates(sv_data, sv_prefix) {
210
+ this.updateState(sv_prefix + "udc", sv_data, 11);
211
+ this.updateState(sv_prefix + "idc", sv_data, 12);
212
+ this.updateState(sv_prefix + "udcb", sv_data, 13);
213
+ this.updateState(sv_prefix + "idcb", sv_data, 14);
214
+ this.updateState(sv_prefix + "udcc", sv_data, 15);
215
+ this.updateState(sv_prefix + "idcc", sv_data, 16);
216
+ this.updateState(sv_prefix + "udcd", sv_data, 17);
217
+ this.updateState(sv_prefix + "idcd", sv_data, 18);
218
+ if (sv_data.length === 27) {
219
+ this.updateState(sv_prefix + "ul1", sv_data, 19);
220
+ this.updateState(sv_prefix + "il1", sv_data, 20);
221
+ this.updateState(sv_prefix + "ul2", sv_data, 21);
222
+ this.updateState(sv_prefix + "il2", sv_data, 22);
223
+ this.updateState(sv_prefix + "ul3", sv_data, 23);
224
+ this.updateState(sv_prefix + "il3", sv_data, 24);
225
+ this.updateState(sv_prefix + "tkk", sv_data, 25);
226
+ } else if (sv_data.length === 23) {
227
+ this.updateState(sv_prefix + "ul1", sv_data, 19);
228
+ this.updateState(sv_prefix + "il1", sv_data, 20);
229
+ this.updateState(sv_prefix + "tkk", sv_data, 21);
230
+ }
231
+ }
232
+ async onReady() {
233
+ const ip_address = this.config.ipaddress;
234
+ const port = this.config.port;
235
+ let chkCnt2 = 0;
236
+ conn = new net.Socket();
237
+ conn.setTimeout(2e3);
238
+ const starttime = this.config.intervalstart.split(":").slice(0, 2).join(":");
239
+ const endtime = this.config.intervalend.split(":").slice(0, 2).join(":");
240
+ this.log.info("start solarview " + ip_address + ":" + port + " - polling interval: " + this.config.intervalVal + "s (" + starttime + " to " + endtime + ")");
241
+ this.log.info("d0 converter: " + this.config.d0converter.toString());
242
+ await this.createGlobalObjects();
243
+ await this.createSolarviewObjects("pvig", false);
244
+ if (this.config.d0converter)
245
+ await this.createSolarviewObjects("d0supply", false);
246
+ if (this.config.d0converter)
247
+ await this.createSolarviewObjects("d0consumption", false);
248
+ if (this.config.scm0)
249
+ await this.createSolarviewObjects("scm0", false);
250
+ if (this.config.scm1)
251
+ await this.createSolarviewObjects("scm1", false);
252
+ if (this.config.scm2)
253
+ await this.createSolarviewObjects("scm2", false);
254
+ if (this.config.scm3)
255
+ await this.createSolarviewObjects("scm3", false);
256
+ if (this.config.scm4)
257
+ await this.createSolarviewObjects("scm4", false);
258
+ if (this.config.pvi1)
259
+ await this.createSolarviewObjects("pvi1", true);
260
+ if (this.config.pvi2)
261
+ await this.createSolarviewObjects("pvi2", true);
262
+ if (this.config.pvi3)
263
+ await this.createSolarviewObjects("pvi3", true);
264
+ if (this.config.pvi4)
265
+ await this.createSolarviewObjects("pvi4", true);
266
+ conn.on("data", async (data) => {
267
+ chkCnt2 = 0;
268
+ await this.processData(data);
269
+ });
270
+ conn.on("close", () => {
271
+ this.log.debug("connection closed");
272
+ if (chkCnt2 > 3) {
273
+ this.setState("info.connection", false, true);
274
+ this.log.warn("Solarview Server is not reachable");
275
+ chkCnt2 = 0;
276
+ }
277
+ chkCnt2++;
278
+ });
279
+ conn.on("error", (err) => {
280
+ this.log.error(err.message);
281
+ this.setStateChanged("info.connection", { val: false, ack: true });
282
+ });
283
+ if (this.config.interval_seconds) {
284
+ this.config.intervalVal = this.config.intervalVal;
285
+ } else {
286
+ await this.adjustIntervalToSeconds.call(this);
287
+ }
288
+ this.getData(port, ip_address);
289
+ jobSchedule = setInterval(async () => {
290
+ this.getData(port, ip_address);
291
+ }, this.config.intervalVal * 1e3);
292
+ }
293
+ async getData(port, ip_address) {
294
+ const { intervalstart, intervalend, d0converter, scm0, scm1, scm2, scm3, scm4, pvi1, pvi2, pvi3, pvi4 } = this.config;
295
+ const starttime = intervalstart.split(":").slice(0, 2).join(":");
296
+ let endtime = intervalend.split(":").slice(0, 2).join(":");
297
+ endtime = endtime === "00:00" ? "23:59" : endtime;
298
+ const dnow = /* @__PURE__ */ new Date();
299
+ const dstart = /* @__PURE__ */ new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${starttime}`);
300
+ const dend = /* @__PURE__ */ new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${endtime}`);
301
+ let timeoutCnt = 0;
302
+ const executeCommand = (cmd) => {
303
+ timeoutCnt += 500;
304
+ tout = setTimeout(() => {
305
+ conn.connect(port, ip_address, () => {
306
+ conn.write(cmd);
307
+ conn.end();
308
+ });
309
+ }, timeoutCnt);
310
+ };
311
+ if (dnow >= dstart && dnow <= dend) {
312
+ executeCommand("00*");
313
+ if (d0converter)
314
+ executeCommand("21*");
315
+ if (pvi1)
316
+ executeCommand("01*");
317
+ if (pvi2)
318
+ executeCommand("02*");
319
+ if (pvi3)
320
+ executeCommand("03*");
321
+ if (pvi4)
322
+ executeCommand("04*");
323
+ }
324
+ if (d0converter)
325
+ executeCommand("22*");
326
+ if (scm0)
327
+ executeCommand("10*");
328
+ if (scm1)
329
+ executeCommand("11*");
330
+ if (scm2)
331
+ executeCommand("12*");
332
+ if (scm3)
333
+ executeCommand("13*");
334
+ if (scm4)
335
+ executeCommand("14*");
336
+ if (this.pTimeoutcnt === 0)
337
+ this.pTimeoutcnt = timeoutCnt;
338
+ }
339
+ onUnload(callback) {
340
+ try {
341
+ clearInterval(jobSchedule);
342
+ clearTimeout(tout);
343
+ conn.destroy();
344
+ this.setStateChanged("info.connection", { val: false, ack: true });
345
+ this.log.info("cleaned everything up...");
346
+ callback();
347
+ } catch (e) {
348
+ callback();
349
+ }
350
+ }
351
+ }
352
+ if (require.main !== module) {
353
+ module.exports = (options) => new Solarviewdatareader(options);
354
+ } else {
355
+ (() => new Solarviewdatareader())();
356
+ }
357
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/main.ts"],
4
+ "sourcesContent": ["'use strict';\n/*\n * Created with @iobroker/create-adapter v1.14.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\nimport * as utils from '@iobroker/adapter-core';\n\n// Load your modules here, e.g.:\nimport * as net from 'net';\n\nconst sv_cmd : string = '00*';\nlet conn: net.Socket;\nlet jobSchedule: NodeJS.Timeout;\nlet chkCnt: number = 0;\n\n//Timeout\nlet tout: NodeJS.Timeout;\n//let to1, to2, to3, to4, to5, to6, to7, to8, to9, to10, to11;\n\ninterface ChecksumResult {\n result: boolean;\n chksum: number;\n ind: number;\n data: Buffer;\n}\n\nclass Solarviewdatareader extends utils.Adapter {\n pTimeoutcnt!: number;\n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'solarviewdatareader',\n });\n this.pTimeoutcnt = 0;\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n }\n\n // Nullen voranstellen - add Leading Zero\n aLZ(n: number): string {\n return n <= 9 ? '0' + n : n.toString();\n }\n\n calcChecksum(inputString:string): ChecksumResult {\n const buffer = Buffer.from(inputString);\n let sum = 0;\n let index = 0;\n\n for (let i = 0; i < buffer.length; i++) {\n sum = (sum + buffer[i]) % 128;\n if (buffer[i] === 125) {\n index = i + 2;\n break;\n }\n }\n\n const result: ChecksumResult = {\n 'result': buffer[index] === sum,\n 'chksum': sum,\n 'ind': index,\n 'data': buffer\n };\n\n return result;\n }\n\n //async createObject(that: Solarviewdatareader, id: string, typeVal: ioBroker.CommonType, name: string, commonType: string, role: string, def: any, rd: boolean, wr: boolean, desc: string, unit: string) {\n async createObject(id: string, obj: ioBroker.SettableObject): Promise<void> {\n await this.setObjectNotExistsAsync(id, obj);\n this.extendObject(id, obj);\n\n const currentState = await this.getStateAsync(id);\n const stCommon: ioBroker.StateCommon = obj.common as ioBroker.StateCommon; // Type Assertion\n if (currentState === null && stCommon.def !== undefined) {\n this.setState(id, stCommon.def, true); // set default\n }\n }\n\n async createGlobalObjects(): Promise<void> {\n const options: [string, ioBroker.SettableObject][] =[\n ['info.connection', {type: 'state', common: {name: 'connection', type: 'boolean', role: 'indicator.connected', def: false, read: true, write: false, desc: 'Solarview connection state', unit: ''}, native: {}}],\n ['info.lastUpdate', {type: 'state', common: {name: 'lastUpdate', type: 'string', role: 'date', def: (new Date('1900-01-01T00:00:00')).toString(), read: true, write: false, desc: 'Last connection date/time', unit: ''}, native: {}}],\n ];\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n async createSolarviewObjects(device: string, additional: boolean = false): Promise<void> {\n let options: [string, ioBroker.SettableObject][] =[\n [device, {type: 'channel', common: {name: device}, native: {}}],\n [device + '.current', {type: 'state', common: {name: 'current', type: 'number', role: 'value.power', def: 0, read: true, write: false, desc: 'Current PAC', unit: 'W'}, native: {}}],\n [device + '.daily', {type: 'state', common: {name: 'daily', type: 'number', role: 'value.energy', def: 0, read: true, write: false, desc: 'Daily yield', unit: 'kWh'}, native: {}}],\n [device + '.monthly', {type: 'state', common: {name: 'monthly', type: 'number', role: 'value.energy', def: 0, read: true, write: false, desc: 'Monthly yield', unit: 'kWh'}, native: {}}],\n [device + '.yearly', {type: 'state', common: {name: 'yearly', type: 'number', role: 'value.energy', def: 0, read: true, write: false, desc: 'Yearly yield', unit: 'kWh'}, native: {}}],\n [device + '.total', {type: 'state', common: {name: 'total', type: 'number', role: 'value.energy', def: 0, read: true, write: false, desc: 'Total yield', unit: 'kWh'}, native: {}}],\n ];\n\n if (additional) {\n const additionalOptions: [string, ioBroker.SettableObject][] =[\n [device + '.udc', {type: 'state', common: {name: 'udc', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Generator voltage', unit: 'V'}, native: {}}],\n [device + '.idc', {type: 'state', common: {name: 'idc', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Generator current', unit: 'A'}, native: {}}],\n [device + '.udcb', {type: 'state', common: {name: 'udcb', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Generator voltage', unit: 'V'}, native: {}}],\n [device + '.idcb', {type: 'state', common: {name: 'idcb', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Generator current', unit: 'A'}, native: {}}],\n [device + '.udcc', {type: 'state', common: {name: 'udcc', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Generator voltage', unit: 'V'}, native: {}}],\n [device + '.idcc', {type: 'state', common: {name: 'idcc', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Generator current', unit: 'A'}, native: {}}],\n [device + '.udcd', {type: 'state', common: {name: 'udcd', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Generator voltage', unit: 'V'}, native: {}}],\n [device + '.idcd', {type: 'state', common: {name: 'idcd', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Generator current', unit: 'A'}, native: {}}],\n [device + '.ul1', {type: 'state', common: {name: 'ul1', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Mains voltage', unit: 'V'}, native: {}}],\n [device + '.il1', {type: 'state', common: {name: 'il1', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Mains current', unit: 'A'}, native: {}}],\n [device + '.ul2', {type: 'state', common: {name: 'ul2', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Mains voltage', unit: 'V'}, native: {}}],\n [device + '.il2', {type: 'state', common: {name: 'il2', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Mains current', unit: 'A'}, native: {}}],\n [device + '.ul3', {type: 'state', common: {name: 'ul3', type: 'number', role: 'value.voltage', def: 0, read: true, write: false, desc: 'Mains voltage', unit: 'V'}, native: {}}],\n [device + '.il3', {type: 'state', common: {name: 'il3', type: 'number', role: 'value.current', def: 0, read: true, write: false, desc: 'Mains current', unit: 'A'}, native: {}}],\n [device + '.tkk', {type: 'state', common: {name: 'tkk', type: 'number', role: 'value.temperature', def: 0, read: true, write: false, desc: 'Temperature', unit: '\u00B0C'}, native: {}}],\n ];\n options = options.concat(additionalOptions);\n }\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n async adjustIntervalToSeconds(): Promise<void> {\n const adapterObj: ioBroker.Object | null | undefined = await this.getForeignObjectAsync(`system.adapter.${this.namespace}`);\n if (!this.config.interval_seconds) {\n if (adapterObj) {\n adapterObj.native.interval_seconds = true;\n adapterObj.native.intervalVal *= 60;\n this.log.warn('Interval changed to seconds!');\n this.log.info('Interval attribute changed! Please check the configuration');\n this.log.info('Adapter restarts');\n }\n }\n }\n\n preprocessSolarviewData(response: Buffer): string[] {\n let sv_data = response.toString('ascii');\n sv_data = sv_data.replace(/[{}]+/g, ''); // Remove \"{}\"\n return sv_data.split(',');\n }\n\n getSolarviewPrefix(dataCode: string): string {\n const prefixMap: { [key: string]: string } = {\n '00': 'pvig.',\n '01': 'pvi1.',\n '02': 'pvi2.',\n '03': 'pvi3.',\n '04': 'pvi4.',\n '10': 'scm0.',\n '11': 'scm1.',\n '12': 'scm2.',\n '13': 'scm3.',\n '14': 'scm4.',\n '21': 'd0supply.',\n '22': 'd0consumption.'\n };\n return prefixMap[dataCode] || '';\n }\n\n processData = async (data: Buffer): Promise<void> => {\n const strdata: string[] = this.preprocessSolarviewData(data);\n const id = this.getSolarviewPrefix(strdata[0]);\n const cs: ChecksumResult = this.calcChecksum(data.toString('ascii'));\n if (cs.result) {\n this.handleChecksumSuccess(strdata, id, data);\n } else {\n this.handleChecksumFailure(cs, data);\n }\n };\n\n handleConnectionError(errorMessage: string): void {\n this.log.error(errorMessage);\n this.setStateChanged('info.connection', { val: false, ack: true });\n }\n\n handleChecksumSuccess(sv_data: string[], sv_prefix: string, response: Buffer): void {\n chkCnt = 0;\n this.log.debug(sv_cmd + ': ' + response.toString('ascii'));\n\n this.updateSolarviewStates(sv_data, sv_prefix);\n\n const sDate = `${sv_data[3]}-${this.aLZ(parseInt(sv_data[2]))}-${this.aLZ(parseInt(sv_data[1]))} ${this.aLZ(parseInt(sv_data[4]))}:${this.aLZ(parseInt(sv_data[5]))}`;\n this.setStateChanged('info.lastUpdate', { val: sDate, ack: true });\n this.setStateChanged('info.connection', { val: true, ack: true });\n }\n\n handleChecksumFailure(csum: ChecksumResult, response: Buffer): void {\n chkCnt += 1;\n if (chkCnt > 0 && csum.chksum !== 0) {\n const buf = Buffer.from(response.toString('ascii'));\n this.log.warn(`checksum not correct! <${buf[csum.ind - 1]} ${buf[csum.ind]} ${buf[csum.ind + 1]} ${buf[csum.ind + 2]} ${csum.chksum}>`);\n this.log.warn(`${sv_cmd}: ${csum.data}`);\n }\n }\n\n updateSolarviewStates(sv_data: string[], sv_prefix: string): void {\n this.updateState(sv_prefix + 'current', sv_data, 10);\n if (sv_prefix === 'pvig.') {\n this.handleCCUUpdate(sv_data);\n }\n this.updateState(sv_prefix + 'daily', sv_data, 6);\n this.updateState(sv_prefix + 'monthly', sv_data, 7);\n this.updateState(sv_prefix + 'yearly', sv_data, 8);\n this.updateState(sv_prefix + 'total', sv_data, 9);\n\n if (sv_data.length >= 23) {\n this.updateExtendedStates(sv_data, sv_prefix);\n }\n }\n\n updateState(stateName: string, sv_data: string[], index: number): void {\n const value = Number(sv_data[index]);\n this.setStateChanged(stateName, { val: value, ack: true });\n }\n\n async handleCCUUpdate(sv_data: string[]): Promise<void> {\n if (this.config.setCCU) {\n const obj = await this.findForeignObjectAsync(this.config.CCUSystemV, 'state');\n if (obj && obj.name) {\n this.log.debug('set CCU system variable: ' + this.config.CCUSystemV);\n this.setForeignState(this.config.CCUSystemV, { val: Number(sv_data[10]), ack: false });\n } else {\n this.log.error(`CCU system variable ${this.config.CCUSystemV} does not exist!`);\n }\n }\n }\n\n updateExtendedStates(sv_data: string[], sv_prefix: string): void {\n this.updateState(sv_prefix + 'udc', sv_data, 11);\n this.updateState(sv_prefix + 'idc', sv_data, 12);\n this.updateState(sv_prefix + 'udcb', sv_data, 13);\n this.updateState(sv_prefix + 'idcb', sv_data, 14);\n this.updateState(sv_prefix + 'udcc', sv_data, 15);\n this.updateState(sv_prefix + 'idcc', sv_data, 16);\n this.updateState(sv_prefix + 'udcd', sv_data, 17);\n this.updateState(sv_prefix + 'idcd', sv_data, 18);\n\n if (sv_data.length === 27) { // Neue Version Solarview\n this.updateState(sv_prefix + 'ul1', sv_data, 19);\n this.updateState(sv_prefix + 'il1', sv_data, 20);\n this.updateState(sv_prefix + 'ul2', sv_data, 21);\n this.updateState(sv_prefix + 'il2', sv_data, 22);\n this.updateState(sv_prefix + 'ul3', sv_data, 23);\n this.updateState(sv_prefix + 'il3', sv_data, 24);\n this.updateState(sv_prefix + 'tkk', sv_data, 25);\n } else if (sv_data.length === 23) { // Alte Version Solarview\n this.updateState(sv_prefix + 'ul1', sv_data, 19);\n this.updateState(sv_prefix + 'il1', sv_data, 20);\n this.updateState(sv_prefix + 'tkk', sv_data, 21);\n }\n }\n\n private async onReady(): Promise<void> {\n const ip_address: string = this.config.ipaddress;\n const port: number = this.config.port;\n let chkCnt = 0;\n\n conn = new net.Socket();\n conn.setTimeout(2000);\n\n const starttime = this.config.intervalstart.split(':').slice(0, 2).join(':');\n const endtime = this.config.intervalend.split(':').slice(0, 2).join(':');\n\n this.log.info('start solarview ' + ip_address + ':' + port + ' - polling interval: ' + this.config.intervalVal + 's (' + starttime + ' to ' + endtime + ')');\n this.log.info('d0 converter: ' + this.config.d0converter.toString());\n\n await this.createGlobalObjects();\n\n await this.createSolarviewObjects('pvig', false);\n if (this.config.d0converter) await this.createSolarviewObjects('d0supply', false);\n if (this.config.d0converter) await this.createSolarviewObjects('d0consumption', false);\n if (this.config.scm0) await this.createSolarviewObjects('scm0', false);\n if (this.config.scm1) await this.createSolarviewObjects('scm1', false);\n if (this.config.scm2) await this.createSolarviewObjects('scm2', false);\n if (this.config.scm3) await this.createSolarviewObjects('scm3', false);\n if (this.config.scm4) await this.createSolarviewObjects('scm4', false);\n if (this.config.pvi1) await this.createSolarviewObjects('pvi1', true);\n if (this.config.pvi2) await this.createSolarviewObjects('pvi2', true);\n if (this.config.pvi3) await this.createSolarviewObjects('pvi3', true);\n if (this.config.pvi4) await this.createSolarviewObjects('pvi4', true);\n\n conn.on('data', async (data) => {\n chkCnt = 0;\n await this.processData(data);\n });\n\n conn.on('close', () => {\n this.log.debug('connection closed');\n if (chkCnt > 3) {\n this.setState('info.connection', false, true);\n this.log.warn('Solarview Server is not reachable');\n chkCnt = 0;\n }\n chkCnt++;\n });\n\n conn.on('error', (err) => {\n this.log.error(err.message);\n this.setStateChanged('info.connection', { val: false, ack: true });\n });\n\n if (this.config.interval_seconds) {\n this.config.intervalVal = this.config.intervalVal;\n } else {\n await this.adjustIntervalToSeconds.call(this);\n }\n\n //First start of getData\n this.getData(port, ip_address);\n\n jobSchedule = setInterval(async () => {\n this.getData(port, ip_address);\n }, this.config.intervalVal * 1000);\n }\n\n async getData(port: number, ip_address: string): Promise<void> {\n const { intervalstart, intervalend, d0converter, scm0, scm1, scm2, scm3, scm4, pvi1, pvi2, pvi3, pvi4 } = this.config;\n\n const starttime = intervalstart.split(':').slice(0, 2).join(':');\n let endtime = intervalend.split(':').slice(0, 2).join(':');\n endtime = endtime === '00:00' ? '23:59' : endtime;\n\n const dnow = new Date();\n const dstart = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${starttime}`);\n const dend = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${endtime}`);\n\n let timeoutCnt = 0;\n\n const executeCommand = (cmd: string):void => {\n timeoutCnt += 500;\n tout = setTimeout(() => {\n conn.connect(port, ip_address, () => {\n conn.write(cmd);\n conn.end();\n });\n }, timeoutCnt);\n };\n\n if (dnow >= dstart && dnow <= dend) {\n executeCommand('00*'); // pvig\n\n if (d0converter) executeCommand('21*');\n if (pvi1) executeCommand('01*');\n if (pvi2) executeCommand('02*');\n if (pvi3) executeCommand('03*');\n if (pvi4) executeCommand('04*');\n }\n\n if (d0converter) executeCommand('22*');\n if (scm0) executeCommand('10*');\n if (scm1) executeCommand('11*');\n if (scm2) executeCommand('12*');\n if (scm3) executeCommand('13*');\n if (scm4) executeCommand('14*');\n if (this.pTimeoutcnt === 0) this.pTimeoutcnt = timeoutCnt;\n }\n\n private onUnload(callback: () => void): void{\n try {\n clearInterval(jobSchedule);\n clearTimeout(tout);\n conn.destroy();\n this.setStateChanged('info.connection', { val: false, ack: true });\n this.log.info('cleaned everything up...');\n callback();\n } catch (e) {\n callback();\n }\n }\n}\n\nif (require.main !== module) {\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new Solarviewdatareader(options);\n} else {\n (() => new Solarviewdatareader())();\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["chkCnt"]
7
+ }
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "solarviewdatareader",
4
- "version": "1.1.0",
4
+ "version": "1.1.2",
5
5
  "news": {
6
+ "1.1.2": {
7
+ "en": "adapter checker changes\ndependencies updated\nautomatic restart [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
8
+ "de": "adapter checker änderungen\naktualisierte abhängigkeiten\nautomatischer Neustart [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
9
+ "ru": "изменения адаптера\nобновленная информация о зависимостях\nавтоматический перезапуск [#170] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
10
+ "pt": "alterações do verificador do adaptador\ndependências atualizadas\nautomatic restart [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
11
+ "nl": "wijzigingen in de adaptercontrole\nafhankelijkheden bijgewerkt\nautomatische herstart [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
12
+ "fr": "changement d'adaptateur\ndépendances mises à jour\nredémarrage automatique [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
13
+ "it": "adattatore checker modifiche\ndipendenze aggiornate\nriavvio automatico [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
14
+ "es": "cambios de control de adaptador\ndependencias actualizadas\nreinicio automático [#170](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170)",
15
+ "pl": "zmiany w kontrolerze adaptera\nzaktualizowane zależności\nw załączniku II wprowadza się następujące zmiany:",
16
+ "uk": "зміни адаптера\nоновлені залежності\nавтоматичний перезапуск [#170] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/products/170)",
17
+ "zh-cn": "适配器检查器更改\n更新依赖关系\n自动重启 [# 170] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/170) (中文(简体) )"
18
+ },
19
+ "1.1.1": {
20
+ "en": "change to typescript\ndependencies updated\nbugfix CCU variable\ndocumentation changed",
21
+ "de": "änderung der schrift\naktualisierte abhängigkeiten\nbugfix CCU Variable\ndokumentation geändert",
22
+ "ru": "изменения в типографию\nобновленная информация о зависимостях\nbugfix переменная CCU\nдокументация изменена",
23
+ "pt": "mudar para typescript\ndependências atualizadas\nvariável de bugfix CCU\ndocumentação alterada",
24
+ "nl": "wijzigen naar typescript\nafhankelijkheden bijgewerkt\nbugfix CCU variabele\ndocumentatie gewijzigd",
25
+ "fr": "changement de code\ndépendances mises à jour\nbugfix variable CCU\nmodification de la documentation",
26
+ "it": "cambiamento a typescript\ndipendenze aggiornate\nbugfix CCU variabile\ndocumentazione modificata",
27
+ "es": "cambio a la escritura\ndependencias actualizadas\nbugfix CCU variable\ndocumentación modificada",
28
+ "pl": "zmiana na maszynopis\nzaktualizowane zależności\nzmienna CCU bugfix\nzmiana dokumentacji",
29
+ "uk": "зміна за замовчуванням\nоновлені залежності\njavaScript licenses API Веб-сайт\nдокументація",
30
+ "zh-cn": "更改为打字符\n更新依赖关系\nbugfix CCU 变量\n文件已更改"
31
+ },
6
32
  "1.1.0": {
7
33
  "en": "code optimizations\njsonConfig added\ndependencies updated\nnode >= 18, js-controller >= 5.0.19\nadmin >= 6.17.13 due to timePicker failure",
8
34
  "de": "codeoptimierungen\njsonConfig hinzugefügt\naktualisierte abhängigkeiten\nknoten >= 18, js-controller >= 5.19\nadmin >= 6.17.13 aufgrund von timePicker Ausfall",
@@ -67,32 +93,6 @@
67
93
  "pl": "zaktualizowano zależności\nzaktualizowano test i wydanie\nmniejsze zmiany",
68
94
  "zh-cn": "已更新依赖项\n测试和发布更新\n较小的变化",
69
95
  "uk": "залежності оновлено\nтестування та випуск оновлено\nменші зміни"
70
- },
71
- "1.0.4": {
72
- "en": "dependencies updated\nissue #20 fixed",
73
- "de": "Abhängigkeiten aktualisiert\nProblem Nr. 20 behoben",
74
- "ru": "зависимости обновлены\nпроблема №20 исправлена",
75
- "pt": "dependências atualizadas\nproblema nº 20 corrigido",
76
- "nl": "afhankelijkheden bijgewerkt\nprobleem #20 opgelost",
77
- "fr": "dépendances mises à jour\nproblème #20 corrigé",
78
- "it": "dipendenze aggiornate\nproblema n. 20 risolto",
79
- "es": "dependencias actualizadas\nproblema #20 solucionado",
80
- "pl": "zaktualizowano zależności\nproblem nr 20 naprawiony",
81
- "zh-cn": "已更新依赖项\n问题 #20 已修复",
82
- "uk": "залежності оновлено\nпроблема №20 виправлена"
83
- },
84
- "1.0.3": {
85
- "en": "dependencies updated",
86
- "de": "Abhängigkeiten aktualisiert",
87
- "ru": "зависимости обновлены",
88
- "pt": "dependências atualizadas",
89
- "nl": "afhankelijkheden bijgewerkt",
90
- "fr": "dépendances mises à jour",
91
- "it": "dipendenze aggiornate",
92
- "es": "dependencias actualizadas",
93
- "pl": "zaktualizowano zależności",
94
- "zh-cn": "依赖项已更新",
95
- "uk": "залежності оновлено"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -136,7 +136,6 @@
136
136
  },
137
137
  "tier": 3,
138
138
  "platform": "Javascript/Node.js",
139
- "main": "main.js",
140
139
  "icon": "solarviewdatareader.png",
141
140
  "enabled": true,
142
141
  "extIcon": "https://raw.githubusercontent.com/afuerhoff/ioBroker.solarviewdatareader/master/admin/solarviewdatareader.png",
@@ -147,6 +146,8 @@
147
146
  "connectionType": "local",
148
147
  "dataSource": "poll",
149
148
  "compact": true,
149
+ "stopBeforeUpdate": true,
150
+ "stopTimeout": 1000,
150
151
  "adminUI": {
151
152
  "config": "json"
152
153
  },
@@ -173,14 +174,36 @@
173
174
  "pvi2": false,
174
175
  "pvi3": false,
175
176
  "pvi4": false,
177
+ "scm0": false,
176
178
  "scm1": false,
177
179
  "scm2": false,
178
180
  "scm3": false,
179
181
  "scm4": false,
180
- "scm5": false,
181
182
  "setCCU": false,
182
183
  "CCUSystemV": "hm-rega.0.xxxxx"
183
184
  },
184
185
  "objects": [],
185
- "instanceObjects": []
186
+ "instanceObjects": [
187
+ {
188
+ "_id": "info",
189
+ "type": "channel",
190
+ "common": {
191
+ "name": "Information"
192
+ },
193
+ "native": {}
194
+ },
195
+ {
196
+ "_id": "info.connection",
197
+ "type": "state",
198
+ "common": {
199
+ "role": "indicator.connected",
200
+ "name": "Device or service connected",
201
+ "type": "boolean",
202
+ "read": true,
203
+ "write": false,
204
+ "def": false
205
+ },
206
+ "native": {}
207
+ }
208
+ ]
186
209
  }