iobroker.ebus 3.6.9 → 3.7.0
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 +6 -0
- package/io-package.json +27 -27
- package/lib/TelnetClient.js +88 -0
- package/main.js +130 -62
- package/package.json +4 -5
package/README.md
CHANGED
|
@@ -76,6 +76,12 @@ in /opt/iobroker/node_modules/iobroker.ebus/lib/scripts you can find a scripts t
|
|
|
76
76
|
Placeholder for the next version (at the beginning of the line):
|
|
77
77
|
### **WORK IN PROGRESS**
|
|
78
78
|
-->
|
|
79
|
+
### 3.7.0 (2025-11-02)
|
|
80
|
+
* (René) issue #469: telnet connection overworked, promise-socket removed
|
|
81
|
+
|
|
82
|
+
### 3.6.10 (2025-10-26)
|
|
83
|
+
* (René) sentry bug fix
|
|
84
|
+
|
|
79
85
|
### 3.6.9 (2025-10-21)
|
|
80
86
|
* (René) update dependencies + changes based on adapter checker
|
|
81
87
|
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "ebus",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.7.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"3.7.0": {
|
|
7
|
+
"en": "issue #469: telnet connection overworked, promise-socket removed",
|
|
8
|
+
"de": "ausgabe #469: telnet-verbindung überbearbeitet, versprechen-socket entfernt",
|
|
9
|
+
"ru": "проблема no 469: перегруженное соединение с сетью telnet, удаленное сокет-обещание",
|
|
10
|
+
"pt": "problema #469: conexão telnet overworked, promessa-socket removido",
|
|
11
|
+
"nl": "nummer #469: telnetverbinding overwerkt, belofte-socket verwijderd",
|
|
12
|
+
"fr": "numéro 469: connexion telnet surchargée, promesse-socket supprimée",
|
|
13
|
+
"it": "numero #469: connessione telnet overworked, promessa-socket rimosso",
|
|
14
|
+
"es": "cuestión #469: conexión de telnet superada, promesa-socket eliminado",
|
|
15
|
+
"pl": "numer # 469: przepracowane połączenie telnet, usunięte gniazdo",
|
|
16
|
+
"uk": "problem #469: перероблено зв'язку телнет, вилучено обіцянку",
|
|
17
|
+
"zh-cn": "第469期: 电话网连接超负荷工作, 承诺口袋被移除"
|
|
18
|
+
},
|
|
19
|
+
"3.6.10": {
|
|
20
|
+
"en": "sentry bug fix",
|
|
21
|
+
"de": "fehler beheben",
|
|
22
|
+
"ru": "исправлять ошибки",
|
|
23
|
+
"pt": "correcção de erros de sentinela",
|
|
24
|
+
"nl": "sentry bug fix",
|
|
25
|
+
"fr": "correction du bug sentitoire",
|
|
26
|
+
"it": "correzione bug inviato",
|
|
27
|
+
"es": "centry bug fix",
|
|
28
|
+
"pl": "naprawianie błędu serwera",
|
|
29
|
+
"uk": "усунення несправностей",
|
|
30
|
+
"zh-cn": "监视器修复"
|
|
31
|
+
},
|
|
6
32
|
"3.6.9": {
|
|
7
33
|
"en": "update dependencies + changes based on adapter checker",
|
|
8
34
|
"de": "aktualisierung abhängigkeiten + änderungen basierend auf adapter-checker",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "uzyskać informacje o wersji dla ebusd z github, jeśli lokalnie nie jest dostępny\naktualizacji zależności\nnowe badania",
|
|
68
94
|
"uk": "отримати інформацію про версію для ebusd від github, якщо локально не доступний\nоновлення залежності\nновий тест",
|
|
69
95
|
"zh-cn": "如果本地不可用, 从 github 获取 ebusd 的版本信息\n更新依赖关系\n新测试"
|
|
70
|
-
},
|
|
71
|
-
"3.6.2": {
|
|
72
|
-
"en": "(Galileo53) #419 avoid Warning and error when history list is empty",
|
|
73
|
-
"de": "(Galileo53) #419 vermeiden Warnung und Fehler bei leerer Geschichtsliste",
|
|
74
|
-
"ru": "(Galileo53) #419 Избегайте Предупреждение и ошибка, когда список истории пуст",
|
|
75
|
-
"pt": "#419 evitam Aviso e erro quando a lista de histórico estiver vazia",
|
|
76
|
-
"nl": "(Galileo53) #419 vermijden Waarschuwing en fout wanneer geschiedenislijst leeg is",
|
|
77
|
-
"fr": "(Galileo53) #419 éviter Avertissement et erreur lorsque la liste d'historique est vide",
|
|
78
|
-
"it": "#419 evita Avvertenza ed errore quando l'elenco di storia è vuoto",
|
|
79
|
-
"es": "(Galileo53) #419 evitar Advertencia y error cuando la lista de historia está vacía",
|
|
80
|
-
"pl": "(Galileo53) # 419 unikać Ostrzeżenie i błąd, gdy lista historii jest pusta",
|
|
81
|
-
"uk": "(Galileo53) #419 уникнути Попередження та похибка, коли список історії порожній",
|
|
82
|
-
"zh-cn": "(加利略53) #419避免 历史列表为空时的警告和错误"
|
|
83
|
-
},
|
|
84
|
-
"3.6.1": {
|
|
85
|
-
"en": "changes suggested by adapter checker",
|
|
86
|
-
"de": "änderungen vorgeschlagen von adapter checker",
|
|
87
|
-
"ru": "изменения, предложенные adapter checker",
|
|
88
|
-
"pt": "alterações sugeridas pelo verificador do adaptador",
|
|
89
|
-
"nl": "wijzigingen voorgesteld door adaptercontrole",
|
|
90
|
-
"fr": "changements suggérés par l'adaptateur checker",
|
|
91
|
-
"it": "modifiche suggerite da adattatore checker",
|
|
92
|
-
"es": "cambios sugeridos por el adaptador",
|
|
93
|
-
"pl": "zmiany sugerowane przez sprawdzacz adaptera",
|
|
94
|
-
"uk": "зміни, запропоновані адаптером",
|
|
95
|
-
"zh-cn": "适配器检查器建议的更改"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* eslint-disable prefer-template */
|
|
2
|
+
const net = require("net");
|
|
3
|
+
|
|
4
|
+
class TelnetClient {
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
this.socket = new net.Socket();
|
|
8
|
+
this.connected = false;
|
|
9
|
+
|
|
10
|
+
// Fehlerbehandlung
|
|
11
|
+
this.socket.on("error", (err) => {
|
|
12
|
+
console.error("Socket Error:", err);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async connect(host, port) {
|
|
17
|
+
if (this.connected) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
await new Promise((resolve, reject) => {
|
|
21
|
+
this.socket.connect(port, host, () => {
|
|
22
|
+
this.connected = true;
|
|
23
|
+
resolve();
|
|
24
|
+
});
|
|
25
|
+
this.socket.once("error", reject);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async write(data) {
|
|
30
|
+
if (!this.connected) {
|
|
31
|
+
throw new Error("Socket not connected");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
await new Promise((resolve, reject) => {
|
|
35
|
+
this.socket.write(data, (err) => {
|
|
36
|
+
if (err) {
|
|
37
|
+
reject(err);
|
|
38
|
+
} else {
|
|
39
|
+
resolve();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async read(timeoutMs = 4000) {
|
|
46
|
+
if (!this.connected) {
|
|
47
|
+
throw new Error("Socket not connected");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
const onData = (data) => {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
this.socket.removeListener("error", onError);
|
|
54
|
+
resolve(data.toString());
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const onError = (err) => {
|
|
58
|
+
clearTimeout(timer);
|
|
59
|
+
this.socket.removeListener("data", onData);
|
|
60
|
+
reject(err);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const timer = setTimeout(() => {
|
|
64
|
+
this.socket.removeListener("data", onData);
|
|
65
|
+
this.socket.removeListener("error", onError);
|
|
66
|
+
reject(new Error("Read timeout"));
|
|
67
|
+
}, timeoutMs);
|
|
68
|
+
|
|
69
|
+
this.socket.once("data", onData);
|
|
70
|
+
this.socket.once("error", onError);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
async disconnect() {
|
|
76
|
+
if (!this.connected) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
await new Promise((resolve) => {
|
|
80
|
+
this.socket.end(() => {
|
|
81
|
+
this.connected = false;
|
|
82
|
+
resolve();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
module.exports = TelnetClient;
|
package/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable prefer-template */
|
|
2
2
|
/*
|
|
3
3
|
* ebus adapter für iobroker
|
|
4
4
|
*
|
|
@@ -19,8 +19,10 @@ const { spawn } = require("child_process");
|
|
|
19
19
|
const fs = require("fs");
|
|
20
20
|
const path = require("path");
|
|
21
21
|
const axios = require("axios");
|
|
22
|
-
const net = require("net");
|
|
23
|
-
const { PromiseSocket } = require("promise-socket");
|
|
22
|
+
//const net = require("net");
|
|
23
|
+
//const { PromiseSocket } = require("promise-socket");
|
|
24
|
+
|
|
25
|
+
const telnetClient = require("./lib/TelnetClient");
|
|
24
26
|
|
|
25
27
|
const ebusdMinVersion = [25, 1];
|
|
26
28
|
const ebusdVersion = [0, 0];
|
|
@@ -324,12 +326,15 @@ async function ebusd_Command() {
|
|
|
324
326
|
adapter.log.debug(`connect telnet to IP ${ adapter.config.targetIP } port ${ parseInt(adapter.config.targetTelnetPort)}`);
|
|
325
327
|
|
|
326
328
|
try {
|
|
327
|
-
const socket = new net.Socket();
|
|
328
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
329
|
+
//const socket = new net.Socket();
|
|
330
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
331
|
+
|
|
332
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
333
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
334
|
+
//promiseSocket.setTimeout(5000);
|
|
329
335
|
|
|
330
|
-
|
|
331
|
-
adapter.
|
|
332
|
-
promiseSocket.setTimeout(5000);
|
|
336
|
+
const telnet = new telnetClient();
|
|
337
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
333
338
|
|
|
334
339
|
const oCmds = cmds.split(",");
|
|
335
340
|
|
|
@@ -337,9 +342,11 @@ async function ebusd_Command() {
|
|
|
337
342
|
let received = "";
|
|
338
343
|
for (let n = 0; n < oCmds.length; n++) {
|
|
339
344
|
adapter.log.debug(`send ${ oCmds[n]}`);
|
|
340
|
-
await promiseSocket.write(`${oCmds[n] }\n`);
|
|
345
|
+
//await promiseSocket.write(`${oCmds[n] }\n`);
|
|
346
|
+
await telnet.write(`${oCmds[n]}\n`);
|
|
341
347
|
|
|
342
|
-
const data = await promiseSocket.read();
|
|
348
|
+
//const data = await promiseSocket.read();
|
|
349
|
+
const data = await telnet.read();
|
|
343
350
|
|
|
344
351
|
if (data.includes("ERR")) {
|
|
345
352
|
adapter.log.warn(`sent ${ oCmds[n] }, received ${ data } please check ebusd logs for details!`);
|
|
@@ -362,7 +369,8 @@ async function ebusd_Command() {
|
|
|
362
369
|
}
|
|
363
370
|
await adapter.setStateAsync("cmd", { ack: true, val: "" });
|
|
364
371
|
|
|
365
|
-
promiseSocket.destroy();
|
|
372
|
+
//promiseSocket.destroy();
|
|
373
|
+
await telnet.disconnect();
|
|
366
374
|
} catch (e) {
|
|
367
375
|
adapter.log.error(`exception from tcp socket` + `[${ e }]`);
|
|
368
376
|
}
|
|
@@ -374,16 +382,21 @@ async function ebusd_Command() {
|
|
|
374
382
|
|
|
375
383
|
async function ebusd_find() {
|
|
376
384
|
try {
|
|
377
|
-
const socket = new net.Socket();
|
|
378
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
385
|
+
//const socket = new net.Socket();
|
|
386
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
379
387
|
|
|
380
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
381
|
-
adapter.log.debug("telnet connected for cmd");
|
|
382
|
-
promiseSocket.setTimeout(5000);
|
|
388
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
389
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
390
|
+
//promiseSocket.setTimeout(5000);
|
|
391
|
+
const telnet = new telnetClient();
|
|
392
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
383
393
|
|
|
384
|
-
await promiseSocket.write("find -F circuit,name,comment\n");
|
|
385
394
|
|
|
386
|
-
|
|
395
|
+
//await promiseSocket.write("find -F circuit,name,comment\n");
|
|
396
|
+
await telnet.write("find -F circuit,name,comment\n");
|
|
397
|
+
|
|
398
|
+
//const data = await promiseSocket.read();
|
|
399
|
+
const data = await telnet.read();
|
|
387
400
|
|
|
388
401
|
if (data.includes("ERR")) {
|
|
389
402
|
adapter.log.warn(`received error! sent find, received ${ data } please check ebusd logs for details!`);
|
|
@@ -407,14 +420,18 @@ async function ebusd_find() {
|
|
|
407
420
|
adapter.log.debug(`send cmd ${ cmd}`);
|
|
408
421
|
|
|
409
422
|
cmd += "\n";
|
|
410
|
-
await promiseSocket.write(cmd);
|
|
423
|
+
//await promiseSocket.write(cmd);
|
|
424
|
+
await telnet.write(cmd);
|
|
411
425
|
|
|
412
|
-
const result = await promiseSocket.read();
|
|
426
|
+
//const result = await promiseSocket.read();
|
|
427
|
+
const result = await telnet.read();
|
|
413
428
|
|
|
414
429
|
adapter.log.debug(`received ${ typeof result } ${ result}`);
|
|
415
430
|
}
|
|
416
431
|
|
|
417
|
-
promiseSocket.destroy();
|
|
432
|
+
//promiseSocket.destroy();
|
|
433
|
+
await telnet.disconnect();
|
|
434
|
+
|
|
418
435
|
} catch (e) {
|
|
419
436
|
adapter.log.error(`exception from tcp socket in ebusd_find` + `[${ e }]`);
|
|
420
437
|
}
|
|
@@ -1445,12 +1462,15 @@ async function ebusd_ReadValues() {
|
|
|
1445
1462
|
adapter.log.debug(`to poll ctr ${ oPolledVars.length } vals: ${ JSON.stringify(oPolledVars)}`);
|
|
1446
1463
|
|
|
1447
1464
|
try {
|
|
1448
|
-
const socket = new net.Socket();
|
|
1449
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
1465
|
+
//const socket = new net.Socket();
|
|
1466
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
1450
1467
|
|
|
1451
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1452
|
-
adapter.log.debug(`telnet connected to poll variables ${ adapter.config.targetIP } port ${ adapter.config.targetTelnetPort}`);
|
|
1453
|
-
promiseSocket.setTimeout(5000);
|
|
1468
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1469
|
+
//adapter.log.debug(`telnet connected to poll variables ${ adapter.config.targetIP } port ${ adapter.config.targetTelnetPort}`);
|
|
1470
|
+
//promiseSocket.setTimeout(5000);
|
|
1471
|
+
|
|
1472
|
+
const telnet = new telnetClient();
|
|
1473
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
1454
1474
|
|
|
1455
1475
|
let retries = 0;
|
|
1456
1476
|
for (let nCtr = 0; nCtr < oPolledVars.length; nCtr++) {
|
|
@@ -1467,32 +1487,58 @@ async function ebusd_ReadValues() {
|
|
|
1467
1487
|
adapter.log.debug(`send cmd ${ cmd}`);
|
|
1468
1488
|
|
|
1469
1489
|
cmd += "\n";
|
|
1470
|
-
|
|
1490
|
+
let data = null;
|
|
1491
|
+
|
|
1492
|
+
try {
|
|
1493
|
+
//await promiseSocket.write(cmd);
|
|
1494
|
+
await telnet.write(cmd);
|
|
1495
|
+
|
|
1496
|
+
//const data = await promiseSocket.read();
|
|
1497
|
+
data = await telnet.read();
|
|
1498
|
+
} catch (e) {
|
|
1499
|
+
adapter.log.warn(`exception from tcp socket write/read in ebusd_ReadValues for cmd ${cmd}` + `[${e}]` + ` -> retry` );
|
|
1500
|
+
|
|
1501
|
+
//todo: retry nur für timeout und arbitration lost? 2025-11-01
|
|
1502
|
+
retries++;
|
|
1503
|
+
if (retries > adapter.config.maxretries) {
|
|
1504
|
+
adapter.log.error(`max retries, skip cmd ${cmd}`);
|
|
1505
|
+
|
|
1506
|
+
} else {
|
|
1507
|
+
nCtr--; //counter wieder zurücksetzen
|
|
1508
|
+
adapter.log.debug("retry to send data ");
|
|
1509
|
+
}
|
|
1471
1510
|
|
|
1472
|
-
|
|
1511
|
+
}
|
|
1512
|
+
if (data !== null) {
|
|
1513
|
+
adapter.log.debug(`received ${data} for ${JSON.stringify(oPolledVars[nCtr])}`);
|
|
1473
1514
|
|
|
1474
|
-
|
|
1475
|
-
if (data.includes("ERR")) {
|
|
1476
|
-
adapter.log.warn(`sent ${ cmd }, received ${ data } for ${ JSON.stringify(oPolledVars[nCtr]) } please check ebusd logs for details!`);
|
|
1477
|
-
|
|
1478
|
-
/*
|
|
1479
|
-
* sent read -f YieldLastYear, received ERR: arbitration lost for {"circuit":"","name":"YieldLastYear","parameter":""}
|
|
1480
|
-
* */
|
|
1481
|
-
if (data.includes("arbitration lost")) {
|
|
1482
|
-
retries++;
|
|
1483
|
-
if (retries > adapter.config.maxretries) {
|
|
1484
|
-
adapter.log.error(`max retries, skip cmd ${ cmd}`);
|
|
1485
|
-
retries = 0;
|
|
1486
|
-
} else {
|
|
1487
|
-
nCtr--;
|
|
1488
|
-
adapter.log.debug("retry to send data ");
|
|
1489
|
-
}
|
|
1490
|
-
}
|
|
1491
|
-
} else {
|
|
1492
|
-
adapter.log.debug(`received ${ data } for ${ JSON.stringify(oPolledVars[nCtr])}`);
|
|
1515
|
+
//todo: parse data and set DP's 2025-11-01
|
|
1493
1516
|
}
|
|
1517
|
+
//received ERR: arbitration lost for YieldThisYear
|
|
1518
|
+
//if (data !== null && data.includes("ERR")) {
|
|
1519
|
+
// adapter.log.warn(`sent ${ cmd }, received ${ data } for ${ JSON.stringify(oPolledVars[nCtr]) } please check ebusd logs for details!`);
|
|
1520
|
+
//
|
|
1521
|
+
// /*
|
|
1522
|
+
// * sent read -f YieldLastYear, received ERR: arbitration lost for {"circuit":"","name":"YieldLastYear","parameter":""}
|
|
1523
|
+
// * */
|
|
1524
|
+
// if (data.includes("arbitration lost")) {
|
|
1525
|
+
// retries++;
|
|
1526
|
+
// if (retries > adapter.config.maxretries) {
|
|
1527
|
+
// adapter.log.error(`max retries, skip cmd ${ cmd}`);
|
|
1528
|
+
// retries = 0;
|
|
1529
|
+
// } else {
|
|
1530
|
+
// nCtr--;
|
|
1531
|
+
// adapter.log.debug("retry to send data ");
|
|
1532
|
+
// }
|
|
1533
|
+
// }
|
|
1534
|
+
//} else {
|
|
1535
|
+
//
|
|
1536
|
+
// //muss wieder debug werden 2025-11-01 todo
|
|
1537
|
+
// adapter.log.info(`received ${ data } for ${ JSON.stringify(oPolledVars[nCtr])}`);
|
|
1538
|
+
//}
|
|
1494
1539
|
}
|
|
1495
|
-
promiseSocket.destroy();
|
|
1540
|
+
//promiseSocket.destroy();
|
|
1541
|
+
await telnet.disconnect();
|
|
1496
1542
|
adapter.log.debug("telnet disonnected");
|
|
1497
1543
|
} catch (e) {
|
|
1498
1544
|
adapter.log.error(`exception from tcp socket in ebusd_ReadValues ` + `[${ e }]`);
|
|
@@ -1503,42 +1549,55 @@ async function ebusd_ReadValues() {
|
|
|
1503
1549
|
}
|
|
1504
1550
|
|
|
1505
1551
|
async function FindParams(obj) {
|
|
1506
|
-
|
|
1552
|
+
|
|
1553
|
+
//todo muss wieder debug werden 2025-11-01
|
|
1554
|
+
adapter.log.info(`FindParams ${ JSON.stringify(obj) } ${ JSON.stringify(obj.message) } ${ JSON.stringify(obj.message.circuit)}`);
|
|
1507
1555
|
|
|
1508
1556
|
const list = [];
|
|
1509
1557
|
|
|
1510
1558
|
try {
|
|
1511
1559
|
//FindParams {"command":"findParams","message":{"circuit":"cc"},"from":"system.adapter.admin.0","callback":{"message":{"circuit":"cc"},"id":90,"ack":false,"time":1733690088670},"_id":39690903}
|
|
1512
1560
|
|
|
1513
|
-
if (obj.message
|
|
1561
|
+
if (obj.message !== null && obj.message.circuit!== null) {
|
|
1514
1562
|
const circuit = obj.message.circuit;
|
|
1515
1563
|
|
|
1516
|
-
const socket = new net.Socket();
|
|
1517
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
1564
|
+
//const socket = new net.Socket();
|
|
1565
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
1518
1566
|
|
|
1519
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1520
|
-
adapter.log.debug("telnet connected for cmd");
|
|
1521
|
-
promiseSocket.setTimeout(5000);
|
|
1567
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1568
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
1569
|
+
//promiseSocket.setTimeout(5000);
|
|
1570
|
+
|
|
1571
|
+
const telnet = new telnetClient();
|
|
1572
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
1522
1573
|
|
|
1523
1574
|
const cmd = `find -c ${ circuit } -F circuit,name\n`;
|
|
1524
|
-
await promiseSocket.write(cmd);
|
|
1575
|
+
//await promiseSocket.write(cmd);
|
|
1576
|
+
|
|
1577
|
+
adapter.log.debug(`send cmd ${cmd}`);
|
|
1578
|
+
await telnet.write(cmd);
|
|
1525
1579
|
|
|
1526
|
-
|
|
1580
|
+
adapter.log.debug(`sent, wait for data...`);
|
|
1581
|
+
//const data = await promiseSocket.read();
|
|
1582
|
+
const data = await telnet.read();
|
|
1583
|
+
adapter.log.info(`data received: ` + data);
|
|
1527
1584
|
|
|
1528
|
-
if (data.includes("ERR")) {
|
|
1585
|
+
if ( data.includes("ERR")) {
|
|
1529
1586
|
adapter.log.warn(`received error! sent find, received ${ data } please check ebusd logs for details! ${ cmd}`);
|
|
1530
1587
|
|
|
1531
1588
|
} else {
|
|
1532
|
-
adapter.log.
|
|
1589
|
+
adapter.log.info(`received ${ typeof data } ${ data } ${ + cmd}`);
|
|
1533
1590
|
}
|
|
1534
1591
|
/*
|
|
1535
1592
|
received object ehp,AccelerationTestModeehp,AccelerationTestModeehp,ActualEnvironmentPowerehp,ActualEnvironmentPowerehp,ActualEnvironmentPowerPercentageehp,ActualEnvironmentPowerPercentageehp,ApplianceCodeehp,ApplianceCodeehp,Backupehp,Backupehp,BackupHoursehp,BackupHoursHcehp,BackupHoursHwcehp,BackupHysteresisehp,BackupIntegralehp,BackupModeHcehp,BackupModeHwcehp,BackupPowerCutehp,BackupStartsehp,BackupStartsHcehp,BackupStartsHwcehp,BackupTypeehp,BivalentTempehp,Bleedingehp,Bleedingehp,CirPumpehp,CirPumpehp,Code1ehp,Code1Code2Validehp,Code2ehp,Compehp,Compehp,CompControlStateehp,CompCutPressHighCountehp,CompCutPressLowCountehp,CompCutTempCountehp,CompDemandehp,CompHoursehp,CompHoursHcehp,CompHoursHwcehp,CompHysteresisehp,CompIntegralehp,CompPressHighehp,CompPressHighehp,CompPressLowehp,CompPressLowehp,CompStartsehp,CompStartsHcehp,CompStartsHwcehp,CompStateehp,CondensorTempehp,CondensorTempehp,currenterrorehp,Dateehp,DateTimeehp,DeltaTempT6T7ehp,ElectricWiringDiagramehp,ElectricWiringDiagramehp,EnergyBalancingReleaseehp,errorhistoryehp,FlowTempehp,FlowTempehp,FlowtempCoolingMinehp,FlowTempOffsetehp,Hc1Pumpehp,Hc1Pumpehp,Hc1PumpHoursehp,Hc1PumpPortehp,Hc1PumpStartsehp,Hc2Pumpehp,Hc2PumpHoursehp,HcFlowTempehp,HcFlowTempOffsetehp,HcModeDemandHoursehp,HcModeFulfilledHoursehp,HcParallelStorageFillingEnabledehp,HcPressehp,HcReturnTempehp,HcReturnTempehp,HcReturnTempOffsetehp,HeatPumpStatusehp,HeatPumpStatusehp,HeatpumpTypeehp,HwcHcValveehp,HwcHcValveehp,HwcHcValveStartsehp,HwcLaggingTimeehp,HwcLoadingDelayehp,HwcModeDemandHoursehp,HwcModeFulfilledHoursehp,HwcPumpStartsehp,HwcSwitchehp,HwcTempehp,HwcTempehp,HwcTempOffsetehp,HydraulicSchemeehp,ICLOutehp,ICLOutehp,Injectionehp,Integralehp,Mixer1DutyCycleehp,NumberCompStartsehp,OutsideTempehp,OutsideTempOffsetehp,OverpressureThresholdehp,PhaseOrderehp,PhaseOrderehp,PhaseStatusehp,PhaseStatusehp,PowerCutehp,PowerCutPreloadingehp,PressSwitchehp,PressSwitchehp,RebootCounterehp,ReturnTempMaxehp,SetModeehp,SoftwareCodeehp,Source2PumpHoursehp,Sourceehp,Sourceehp,SourceHoursehp,SourcePortehp,SourcePressehp,SourcePumpPrerunTimeehp,SourceStartsehp,SourceSwitchehp,SourceSwitchehp,SourceTempInputehp,SourceTempInputehp,SourceTempInputOffsetehp,SourceTempOutputehp,SourceTempOutputehp,SourceTempOutputOffsetehp,SourceTempOutputT8Minehp,StateSoftwareCodeehp,StateSoftwareCodeehp,Status01ehp,Status02ehp,Status16ehp,Statusehp,StatusCirPumpehp,StorageTempBottomehp,StorageTempBottomehp,StorageTempBottomOffsetehp,StorageTempTopehp,StorageTempTopehp,StorageTempTopOffsetehp,Subcoolingehp,Superheatehp,T19MaxToCompOffehp,TempInputehp,TempInputehp,TempInputOffsetehp,TempOutputehp,TempOutputehp,TempOutputOffsetehp,Timeehp,TimeBetweenTwoCompStartsMinehp,TimeCompOffMinehp,TimeCompOnMinehp,TimeOfNextPredictedPowerCutehp,TimeOfNextPredictedPowerCutehp,Weekdayehp,YieldTotalehp,YieldTotal
|
|
1536
1593
|
*/
|
|
1537
|
-
const str = new TextDecoder().decode(data);
|
|
1538
|
-
const datas =
|
|
1594
|
+
//const str = new TextDecoder().decode(data);
|
|
1595
|
+
const datas = data.split(/[\r?\n,]+/);
|
|
1596
|
+
|
|
1597
|
+
adapter.log.info("found entries: " + datas.length);
|
|
1539
1598
|
|
|
1540
1599
|
for (let i = 0; i < datas.length; i++) {
|
|
1541
|
-
//adapter.log.
|
|
1600
|
+
//adapter.log.info(JSON.stringify(datas[i]));
|
|
1542
1601
|
|
|
1543
1602
|
const names = datas[i].split(",");
|
|
1544
1603
|
|
|
@@ -1567,6 +1626,8 @@ async function FindParams(obj) {
|
|
|
1567
1626
|
list.push(entry);
|
|
1568
1627
|
}
|
|
1569
1628
|
}
|
|
1629
|
+
|
|
1630
|
+
await telnet.disconnect();
|
|
1570
1631
|
} else {
|
|
1571
1632
|
adapter.log.error("no circuit defined where to look for parameter, check values!");
|
|
1572
1633
|
}
|
|
@@ -1727,6 +1788,13 @@ async function GetLatestVersionGithub() {
|
|
|
1727
1788
|
return latestVersion;
|
|
1728
1789
|
}
|
|
1729
1790
|
|
|
1791
|
+
|
|
1792
|
+
|
|
1793
|
+
|
|
1794
|
+
|
|
1795
|
+
|
|
1796
|
+
|
|
1797
|
+
|
|
1730
1798
|
// If started as allInOne/compact mode => return function to create instance
|
|
1731
1799
|
if (module && module.parent) {
|
|
1732
1800
|
module.exports = startAdapter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.ebus",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "ioBroker ebus Adapter",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "René G.",
|
|
@@ -17,16 +17,15 @@
|
|
|
17
17
|
],
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "https://github.com/rg-engineering/ioBroker.ebus"
|
|
20
|
+
"url": "git+https://github.com/rg-engineering/ioBroker.ebus.git"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
23
|
"node": ">= 20"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@iobroker/adapter-core": "^3.3.2",
|
|
27
|
-
"axios": "^1.
|
|
28
|
-
"net": "^1.0.2"
|
|
29
|
-
"promise-socket": "^8.0.0"
|
|
27
|
+
"axios": "^1.13.1",
|
|
28
|
+
"net": "^1.0.2"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
31
|
"@alcalzone/release-script": "^5.0.0",
|