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 +11 -10
- package/build/main.js +357 -0
- package/build/main.js.map +7 -0
- package/io-package.json +53 -30
- package/package.json +39 -20
- package/admin/index_m.html +0 -201
- package/admin/style.css +0 -80
- package/lib/adapter-config.d.ts +0 -16
- package/main.js +0 -482
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.
|
|
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
|
}
|