iobroker.ebus 3.6.10 → 3.8.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/LICENSE +1 -1
- package/README.md +9 -1
- package/io-package.json +28 -28
- package/lib/TelnetClient.js +88 -0
- package/main.js +135 -64
- package/package.json +11 -11
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2017-
|
|
3
|
+
Copyright (c) 2017-2026 René G. <info@rg-engineering.eu>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -76,6 +76,14 @@ 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.8.0 (2026-03-17)
|
|
80
|
+
* (René): avoid exception, reported by sentry
|
|
81
|
+
* (René) update dependencies + changes based on adapter checker
|
|
82
|
+
* (René) see issue #497: support of ebusd 26.1
|
|
83
|
+
|
|
84
|
+
### 3.7.0 (2025-11-02)
|
|
85
|
+
* (René) issue #469: telnet connection overworked, promise-socket removed
|
|
86
|
+
|
|
79
87
|
### 3.6.10 (2025-10-26)
|
|
80
88
|
* (René) sentry bug fix
|
|
81
89
|
|
|
@@ -283,7 +291,7 @@ in /opt/iobroker/node_modules/iobroker.ebus/lib/scripts you can find a scripts t
|
|
|
283
291
|
## License
|
|
284
292
|
MIT License
|
|
285
293
|
|
|
286
|
-
Copyright (c) 2017-
|
|
294
|
+
Copyright (c) 2017-2026 René G. <info@rg-engineering.eu>
|
|
287
295
|
|
|
288
296
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
289
297
|
of this software and associated documentation files (the "Software"), to deal
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "ebus",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.8.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"3.8.0": {
|
|
7
|
+
"en": ": avoid exception, reported by sentry\nupdate dependencies + changes based on adapter checker\nsee issue #497: support of ebusd 26.1",
|
|
8
|
+
"de": ": vermeidung von ausnahmen, von der sendung gemeldet\naktualisierung abhängigkeiten + änderungen basierend auf adapter-checker\nsiehe ausgabe #497: unterstützung von ebusd 26.1",
|
|
9
|
+
"ru": "избегайте исключений, о которых сообщает часовой\nзависимости обновления + изменения на основе проверки адаптера\nсм. выпуск #497: поддержка ebusd 26.1",
|
|
10
|
+
"pt": ": evitar exceção, reportada por sentinela\natualizar dependências + alterações com base no verificador de adaptadores\nver número 497: apoio do ebusd 26.1",
|
|
11
|
+
"nl": ": uitzondering vermijden, gemeld door de wachtdienst\nupdate afhankelijkheden + wijzigingen op basis van adaptercontrole\nzie nummer #497: ondersteuning van ebusd 26.1",
|
|
12
|
+
"fr": ": éviter l'exception, rapportée par sentinelle\nmettre à jour les dépendances + les changements basés sur le vérificateur d'adaptateur\nvoir numéro 497: soutien de l'ebusd 26.1",
|
|
13
|
+
"it": ": evitare eccezioni, riportate dalla sentinella\naggiornamento dipendenze + modifiche in base all'adattatore checker\nvedi numero #497: supporto di ebusd 26.1",
|
|
14
|
+
"es": ": evitar la excepción, reportada por centinela\ndependencias de actualización + cambios basados en el control de adaptador\nver número #497: soporte de ebusd 26.1",
|
|
15
|
+
"pl": ": uniknąć wyjątku, zgłaszane przez wartownika\naktualizacja zależności + zmiany w oparciu o sprawdzacz adaptera\nzob. numer # 497: wsparcie ebusd 26.1",
|
|
16
|
+
"uk": ": уникнути винятків, повідомляється відправником\nоновлення залежності + зміни на основі перевірки адаптера\nпереглянути номер #497: підтримка ebusd 26.1",
|
|
17
|
+
"zh-cn": ":避免例外,由哨兵报告\n根据适配器检查器更新依赖性+变化\n见问题497:支持ebusd 26.1"
|
|
18
|
+
},
|
|
19
|
+
"3.7.0": {
|
|
20
|
+
"en": "issue #469: telnet connection overworked, promise-socket removed",
|
|
21
|
+
"de": "ausgabe #469: telnet-verbindung überbearbeitet, versprechen-socket entfernt",
|
|
22
|
+
"ru": "проблема no 469: перегруженное соединение с сетью telnet, удаленное сокет-обещание",
|
|
23
|
+
"pt": "problema #469: conexão telnet overworked, promessa-socket removido",
|
|
24
|
+
"nl": "nummer #469: telnetverbinding overwerkt, belofte-socket verwijderd",
|
|
25
|
+
"fr": "numéro 469: connexion telnet surchargée, promesse-socket supprimée",
|
|
26
|
+
"it": "numero #469: connessione telnet overworked, promessa-socket rimosso",
|
|
27
|
+
"es": "cuestión #469: conexión de telnet superada, promesa-socket eliminado",
|
|
28
|
+
"pl": "numer # 469: przepracowane połączenie telnet, usunięte gniazdo",
|
|
29
|
+
"uk": "problem #469: перероблено зв'язку телнет, вилучено обіцянку",
|
|
30
|
+
"zh-cn": "第469期: 电话网连接超负荷工作, 承诺口袋被移除"
|
|
31
|
+
},
|
|
6
32
|
"3.6.10": {
|
|
7
33
|
"en": "sentry bug fix",
|
|
8
34
|
"de": "fehler beheben",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "zobacz numer # 430: błąd naprawić",
|
|
68
94
|
"uk": "переглянути проблему #430: виправлення помилок",
|
|
69
95
|
"zh-cn": "参见第430期: 错误修正"
|
|
70
|
-
},
|
|
71
|
-
"3.6.3": {
|
|
72
|
-
"en": "get version info for ebusd from github if locally not available\nupdate dependencies\nnew testing",
|
|
73
|
-
"de": "versionsinformationen für ebusd von github erhalten, wenn lokal nicht verfügbar\naktualisierung der abhängigkeiten\nneue tests",
|
|
74
|
-
"ru": "получить информацию о версии для вытеснения из github, если локально недоступно\nобновление зависимостей\nновые испытания",
|
|
75
|
-
"pt": "obter informações de versão para o ebusd do github se não estiver disponível localmente\natualizar dependências\nnovos testes",
|
|
76
|
-
"nl": "krijgen versie-informatie voor ebusd van github als lokaal niet beschikbaar\nafhankelijkheden bijwerken\nnieuwe tests",
|
|
77
|
-
"fr": "obtenir des informations de version pour ebusd de github si localement pas disponible\nmettre à jour les dépendances\nnouveaux essais",
|
|
78
|
-
"it": "ottenere informazioni sulla versione per ebusd da github se localmente non disponibile\naggiornamento dipendenze\nnuovi test",
|
|
79
|
-
"es": "obtener información de la versión para ebusd de github si localmente no disponible\ndependencias de actualización\nnuevas pruebas",
|
|
80
|
-
"pl": "uzyskać informacje o wersji dla ebusd z github, jeśli lokalnie nie jest dostępny\naktualizacji zależności\nnowe badania",
|
|
81
|
-
"uk": "отримати інформацію про версію для ebusd від github, якщо локально не доступний\nоновлення залежності\nновий тест",
|
|
82
|
-
"zh-cn": "如果本地不可用, 从 github 获取 ebusd 的版本信息\n更新依赖关系\n新测试"
|
|
83
|
-
},
|
|
84
|
-
"3.6.2": {
|
|
85
|
-
"en": "(Galileo53) #419 avoid Warning and error when history list is empty",
|
|
86
|
-
"de": "(Galileo53) #419 vermeiden Warnung und Fehler bei leerer Geschichtsliste",
|
|
87
|
-
"ru": "(Galileo53) #419 Избегайте Предупреждение и ошибка, когда список истории пуст",
|
|
88
|
-
"pt": "#419 evitam Aviso e erro quando a lista de histórico estiver vazia",
|
|
89
|
-
"nl": "(Galileo53) #419 vermijden Waarschuwing en fout wanneer geschiedenislijst leeg is",
|
|
90
|
-
"fr": "(Galileo53) #419 éviter Avertissement et erreur lorsque la liste d'historique est vide",
|
|
91
|
-
"it": "#419 evita Avvertenza ed errore quando l'elenco di storia è vuoto",
|
|
92
|
-
"es": "(Galileo53) #419 evitar Advertencia y error cuando la lista de historia está vacía",
|
|
93
|
-
"pl": "(Galileo53) # 419 unikać Ostrzeżenie i błąd, gdy lista historii jest pusta",
|
|
94
|
-
"uk": "(Galileo53) #419 уникнути Попередження та похибка, коли список історії порожній",
|
|
95
|
-
"zh-cn": "(加利略53) #419避免 历史列表为空时的警告和错误"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
],
|
|
147
147
|
"globalDependencies": [
|
|
148
148
|
{
|
|
149
|
-
"admin": ">=7.6.
|
|
149
|
+
"admin": ">=7.6.20"
|
|
150
150
|
}
|
|
151
151
|
],
|
|
152
152
|
"plugins": {
|
|
@@ -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,10 +19,12 @@ 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
24
|
|
|
25
|
-
const
|
|
25
|
+
const telnetClient = require("./lib/TelnetClient");
|
|
26
|
+
|
|
27
|
+
const ebusdMinVersion = [26, 1];
|
|
26
28
|
const ebusdVersion = [0, 0];
|
|
27
29
|
const ebusdUpdateVersion = [0, 0];
|
|
28
30
|
|
|
@@ -211,7 +213,10 @@ function FillPolledVars() {
|
|
|
211
213
|
//make it compatible to old versions
|
|
212
214
|
adapter.log.debug(`check old comma separeted list for polled vars ${ adapter.config.PolledValues}`);
|
|
213
215
|
|
|
214
|
-
if (adapter.config.PolledValues !== undefined
|
|
216
|
+
if (adapter.config.PolledValues !== undefined
|
|
217
|
+
&& adapter.config.PolledValues != null
|
|
218
|
+
&& typeof adapter.config.PolledValues == "string") {
|
|
219
|
+
|
|
215
220
|
const oPolled = adapter.config.PolledValues.split(",");
|
|
216
221
|
|
|
217
222
|
if (oPolled.length > 0) {
|
|
@@ -324,12 +329,15 @@ async function ebusd_Command() {
|
|
|
324
329
|
adapter.log.debug(`connect telnet to IP ${ adapter.config.targetIP } port ${ parseInt(adapter.config.targetTelnetPort)}`);
|
|
325
330
|
|
|
326
331
|
try {
|
|
327
|
-
const socket = new net.Socket();
|
|
328
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
332
|
+
//const socket = new net.Socket();
|
|
333
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
329
334
|
|
|
330
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
331
|
-
adapter.log.debug("telnet connected for cmd");
|
|
332
|
-
promiseSocket.setTimeout(5000);
|
|
335
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
336
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
337
|
+
//promiseSocket.setTimeout(5000);
|
|
338
|
+
|
|
339
|
+
const telnet = new telnetClient();
|
|
340
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
333
341
|
|
|
334
342
|
const oCmds = cmds.split(",");
|
|
335
343
|
|
|
@@ -337,9 +345,11 @@ async function ebusd_Command() {
|
|
|
337
345
|
let received = "";
|
|
338
346
|
for (let n = 0; n < oCmds.length; n++) {
|
|
339
347
|
adapter.log.debug(`send ${ oCmds[n]}`);
|
|
340
|
-
await promiseSocket.write(`${oCmds[n] }\n`);
|
|
348
|
+
//await promiseSocket.write(`${oCmds[n] }\n`);
|
|
349
|
+
await telnet.write(`${oCmds[n]}\n`);
|
|
341
350
|
|
|
342
|
-
const data = await promiseSocket.read();
|
|
351
|
+
//const data = await promiseSocket.read();
|
|
352
|
+
const data = await telnet.read();
|
|
343
353
|
|
|
344
354
|
if (data.includes("ERR")) {
|
|
345
355
|
adapter.log.warn(`sent ${ oCmds[n] }, received ${ data } please check ebusd logs for details!`);
|
|
@@ -362,7 +372,8 @@ async function ebusd_Command() {
|
|
|
362
372
|
}
|
|
363
373
|
await adapter.setStateAsync("cmd", { ack: true, val: "" });
|
|
364
374
|
|
|
365
|
-
promiseSocket.destroy();
|
|
375
|
+
//promiseSocket.destroy();
|
|
376
|
+
await telnet.disconnect();
|
|
366
377
|
} catch (e) {
|
|
367
378
|
adapter.log.error(`exception from tcp socket` + `[${ e }]`);
|
|
368
379
|
}
|
|
@@ -374,16 +385,21 @@ async function ebusd_Command() {
|
|
|
374
385
|
|
|
375
386
|
async function ebusd_find() {
|
|
376
387
|
try {
|
|
377
|
-
const socket = new net.Socket();
|
|
378
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
388
|
+
//const socket = new net.Socket();
|
|
389
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
390
|
+
|
|
391
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
392
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
393
|
+
//promiseSocket.setTimeout(5000);
|
|
394
|
+
const telnet = new telnetClient();
|
|
395
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
379
396
|
|
|
380
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
381
|
-
adapter.log.debug("telnet connected for cmd");
|
|
382
|
-
promiseSocket.setTimeout(5000);
|
|
383
397
|
|
|
384
|
-
await promiseSocket.write("find -F circuit,name,comment\n");
|
|
398
|
+
//await promiseSocket.write("find -F circuit,name,comment\n");
|
|
399
|
+
await telnet.write("find -F circuit,name,comment\n");
|
|
385
400
|
|
|
386
|
-
const data = await promiseSocket.read();
|
|
401
|
+
//const data = await promiseSocket.read();
|
|
402
|
+
const data = await telnet.read();
|
|
387
403
|
|
|
388
404
|
if (data.includes("ERR")) {
|
|
389
405
|
adapter.log.warn(`received error! sent find, received ${ data } please check ebusd logs for details!`);
|
|
@@ -407,14 +423,18 @@ async function ebusd_find() {
|
|
|
407
423
|
adapter.log.debug(`send cmd ${ cmd}`);
|
|
408
424
|
|
|
409
425
|
cmd += "\n";
|
|
410
|
-
await promiseSocket.write(cmd);
|
|
426
|
+
//await promiseSocket.write(cmd);
|
|
427
|
+
await telnet.write(cmd);
|
|
411
428
|
|
|
412
|
-
const result = await promiseSocket.read();
|
|
429
|
+
//const result = await promiseSocket.read();
|
|
430
|
+
const result = await telnet.read();
|
|
413
431
|
|
|
414
432
|
adapter.log.debug(`received ${ typeof result } ${ result}`);
|
|
415
433
|
}
|
|
416
434
|
|
|
417
|
-
promiseSocket.destroy();
|
|
435
|
+
//promiseSocket.destroy();
|
|
436
|
+
await telnet.disconnect();
|
|
437
|
+
|
|
418
438
|
} catch (e) {
|
|
419
439
|
adapter.log.error(`exception from tcp socket in ebusd_find` + `[${ e }]`);
|
|
420
440
|
}
|
|
@@ -1445,12 +1465,15 @@ async function ebusd_ReadValues() {
|
|
|
1445
1465
|
adapter.log.debug(`to poll ctr ${ oPolledVars.length } vals: ${ JSON.stringify(oPolledVars)}`);
|
|
1446
1466
|
|
|
1447
1467
|
try {
|
|
1448
|
-
const socket = new net.Socket();
|
|
1449
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
1468
|
+
//const socket = new net.Socket();
|
|
1469
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
1470
|
+
|
|
1471
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1472
|
+
//adapter.log.debug(`telnet connected to poll variables ${ adapter.config.targetIP } port ${ adapter.config.targetTelnetPort}`);
|
|
1473
|
+
//promiseSocket.setTimeout(5000);
|
|
1450
1474
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
promiseSocket.setTimeout(5000);
|
|
1475
|
+
const telnet = new telnetClient();
|
|
1476
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
1454
1477
|
|
|
1455
1478
|
let retries = 0;
|
|
1456
1479
|
for (let nCtr = 0; nCtr < oPolledVars.length; nCtr++) {
|
|
@@ -1467,32 +1490,58 @@ async function ebusd_ReadValues() {
|
|
|
1467
1490
|
adapter.log.debug(`send cmd ${ cmd}`);
|
|
1468
1491
|
|
|
1469
1492
|
cmd += "\n";
|
|
1470
|
-
|
|
1493
|
+
let data = null;
|
|
1494
|
+
|
|
1495
|
+
try {
|
|
1496
|
+
//await promiseSocket.write(cmd);
|
|
1497
|
+
await telnet.write(cmd);
|
|
1498
|
+
|
|
1499
|
+
//const data = await promiseSocket.read();
|
|
1500
|
+
data = await telnet.read();
|
|
1501
|
+
} catch (e) {
|
|
1502
|
+
adapter.log.warn(`exception from tcp socket write/read in ebusd_ReadValues for cmd ${cmd}` + `[${e}]` + ` -> retry` );
|
|
1503
|
+
|
|
1504
|
+
//todo: retry nur für timeout und arbitration lost? 2025-11-01
|
|
1505
|
+
retries++;
|
|
1506
|
+
if (retries > adapter.config.maxretries) {
|
|
1507
|
+
adapter.log.error(`max retries, skip cmd ${cmd}`);
|
|
1508
|
+
|
|
1509
|
+
} else {
|
|
1510
|
+
nCtr--; //counter wieder zurücksetzen
|
|
1511
|
+
adapter.log.debug("retry to send data ");
|
|
1512
|
+
}
|
|
1471
1513
|
|
|
1472
|
-
|
|
1514
|
+
}
|
|
1515
|
+
if (data !== null) {
|
|
1516
|
+
adapter.log.debug(`received ${data} for ${JSON.stringify(oPolledVars[nCtr])}`);
|
|
1473
1517
|
|
|
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])}`);
|
|
1518
|
+
//todo: parse data and set DP's 2025-11-01
|
|
1493
1519
|
}
|
|
1520
|
+
//received ERR: arbitration lost for YieldThisYear
|
|
1521
|
+
//if (data !== null && data.includes("ERR")) {
|
|
1522
|
+
// adapter.log.warn(`sent ${ cmd }, received ${ data } for ${ JSON.stringify(oPolledVars[nCtr]) } please check ebusd logs for details!`);
|
|
1523
|
+
//
|
|
1524
|
+
// /*
|
|
1525
|
+
// * sent read -f YieldLastYear, received ERR: arbitration lost for {"circuit":"","name":"YieldLastYear","parameter":""}
|
|
1526
|
+
// * */
|
|
1527
|
+
// if (data.includes("arbitration lost")) {
|
|
1528
|
+
// retries++;
|
|
1529
|
+
// if (retries > adapter.config.maxretries) {
|
|
1530
|
+
// adapter.log.error(`max retries, skip cmd ${ cmd}`);
|
|
1531
|
+
// retries = 0;
|
|
1532
|
+
// } else {
|
|
1533
|
+
// nCtr--;
|
|
1534
|
+
// adapter.log.debug("retry to send data ");
|
|
1535
|
+
// }
|
|
1536
|
+
// }
|
|
1537
|
+
//} else {
|
|
1538
|
+
//
|
|
1539
|
+
// //muss wieder debug werden 2025-11-01 todo
|
|
1540
|
+
// adapter.log.info(`received ${ data } for ${ JSON.stringify(oPolledVars[nCtr])}`);
|
|
1541
|
+
//}
|
|
1494
1542
|
}
|
|
1495
|
-
promiseSocket.destroy();
|
|
1543
|
+
//promiseSocket.destroy();
|
|
1544
|
+
await telnet.disconnect();
|
|
1496
1545
|
adapter.log.debug("telnet disonnected");
|
|
1497
1546
|
} catch (e) {
|
|
1498
1547
|
adapter.log.error(`exception from tcp socket in ebusd_ReadValues ` + `[${ e }]`);
|
|
@@ -1503,42 +1552,55 @@ async function ebusd_ReadValues() {
|
|
|
1503
1552
|
}
|
|
1504
1553
|
|
|
1505
1554
|
async function FindParams(obj) {
|
|
1506
|
-
|
|
1555
|
+
|
|
1556
|
+
//todo muss wieder debug werden 2025-11-01
|
|
1557
|
+
adapter.log.info(`FindParams ${ JSON.stringify(obj) } ${ JSON.stringify(obj.message) } ${ JSON.stringify(obj.message.circuit)}`);
|
|
1507
1558
|
|
|
1508
1559
|
const list = [];
|
|
1509
1560
|
|
|
1510
1561
|
try {
|
|
1511
1562
|
//FindParams {"command":"findParams","message":{"circuit":"cc"},"from":"system.adapter.admin.0","callback":{"message":{"circuit":"cc"},"id":90,"ack":false,"time":1733690088670},"_id":39690903}
|
|
1512
1563
|
|
|
1513
|
-
if (obj.message
|
|
1564
|
+
if (obj.message !== null && obj.message.circuit!== null) {
|
|
1514
1565
|
const circuit = obj.message.circuit;
|
|
1515
1566
|
|
|
1516
|
-
const socket = new net.Socket();
|
|
1517
|
-
const promiseSocket = new PromiseSocket(socket);
|
|
1567
|
+
//const socket = new net.Socket();
|
|
1568
|
+
//const promiseSocket = new PromiseSocket(socket);
|
|
1518
1569
|
|
|
1519
|
-
await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1520
|
-
adapter.log.debug("telnet connected for cmd");
|
|
1521
|
-
promiseSocket.setTimeout(5000);
|
|
1570
|
+
//await promiseSocket.connect(parseInt(adapter.config.targetTelnetPort), adapter.config.targetIP);
|
|
1571
|
+
//adapter.log.debug("telnet connected for cmd");
|
|
1572
|
+
//promiseSocket.setTimeout(5000);
|
|
1573
|
+
|
|
1574
|
+
const telnet = new telnetClient();
|
|
1575
|
+
await telnet.connect(adapter.config.targetIP, parseInt(adapter.config.targetTelnetPort));
|
|
1522
1576
|
|
|
1523
1577
|
const cmd = `find -c ${ circuit } -F circuit,name\n`;
|
|
1524
|
-
await promiseSocket.write(cmd);
|
|
1578
|
+
//await promiseSocket.write(cmd);
|
|
1579
|
+
|
|
1580
|
+
adapter.log.debug(`send cmd ${cmd}`);
|
|
1581
|
+
await telnet.write(cmd);
|
|
1525
1582
|
|
|
1526
|
-
|
|
1583
|
+
adapter.log.debug(`sent, wait for data...`);
|
|
1584
|
+
//const data = await promiseSocket.read();
|
|
1585
|
+
const data = await telnet.read();
|
|
1586
|
+
adapter.log.info(`data received: ` + data);
|
|
1527
1587
|
|
|
1528
|
-
if (data.includes("ERR")) {
|
|
1588
|
+
if ( data.includes("ERR")) {
|
|
1529
1589
|
adapter.log.warn(`received error! sent find, received ${ data } please check ebusd logs for details! ${ cmd}`);
|
|
1530
1590
|
|
|
1531
1591
|
} else {
|
|
1532
|
-
adapter.log.
|
|
1592
|
+
adapter.log.info(`received ${ typeof data } ${ data } ${ + cmd}`);
|
|
1533
1593
|
}
|
|
1534
1594
|
/*
|
|
1535
1595
|
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
1596
|
*/
|
|
1537
|
-
const str = new TextDecoder().decode(data);
|
|
1538
|
-
const datas =
|
|
1597
|
+
//const str = new TextDecoder().decode(data);
|
|
1598
|
+
const datas = data.split(/[\r?\n,]+/);
|
|
1599
|
+
|
|
1600
|
+
adapter.log.info("found entries: " + datas.length);
|
|
1539
1601
|
|
|
1540
1602
|
for (let i = 0; i < datas.length; i++) {
|
|
1541
|
-
//adapter.log.
|
|
1603
|
+
//adapter.log.info(JSON.stringify(datas[i]));
|
|
1542
1604
|
|
|
1543
1605
|
const names = datas[i].split(",");
|
|
1544
1606
|
|
|
@@ -1567,6 +1629,8 @@ async function FindParams(obj) {
|
|
|
1567
1629
|
list.push(entry);
|
|
1568
1630
|
}
|
|
1569
1631
|
}
|
|
1632
|
+
|
|
1633
|
+
await telnet.disconnect();
|
|
1570
1634
|
} else {
|
|
1571
1635
|
adapter.log.error("no circuit defined where to look for parameter, check values!");
|
|
1572
1636
|
}
|
|
@@ -1727,6 +1791,13 @@ async function GetLatestVersionGithub() {
|
|
|
1727
1791
|
return latestVersion;
|
|
1728
1792
|
}
|
|
1729
1793
|
|
|
1794
|
+
|
|
1795
|
+
|
|
1796
|
+
|
|
1797
|
+
|
|
1798
|
+
|
|
1799
|
+
|
|
1800
|
+
|
|
1730
1801
|
// If started as allInOne/compact mode => return function to create instance
|
|
1731
1802
|
if (module && module.parent) {
|
|
1732
1803
|
module.exports = startAdapter;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.ebus",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"description": "ioBroker ebus Adapter",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "René G.",
|
|
@@ -17,25 +17,24 @@
|
|
|
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.6",
|
|
28
|
+
"net": "^1.0.2"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
|
-
"@alcalzone/release-script": "^5.
|
|
33
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
34
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
35
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
31
|
+
"@alcalzone/release-script": "^5.1.1",
|
|
32
|
+
"@alcalzone/release-script-plugin-iobroker": "^5.1.2",
|
|
33
|
+
"@alcalzone/release-script-plugin-license": "^5.1.1",
|
|
34
|
+
"@alcalzone/release-script-plugin-manual-review": "^5.1.1",
|
|
36
35
|
"@iobroker/adapter-dev": "^1.5.0",
|
|
37
36
|
"@iobroker/eslint-config": "^2.2.0",
|
|
38
|
-
"@iobroker/testing": "^5.
|
|
37
|
+
"@iobroker/testing": "^5.2.2"
|
|
39
38
|
},
|
|
40
39
|
"main": "main.js",
|
|
41
40
|
"bugs": {
|
|
@@ -70,6 +69,7 @@
|
|
|
70
69
|
"lint": "eslint -c eslint.config.mjs .",
|
|
71
70
|
"translate": "translate-adapter",
|
|
72
71
|
"translate1": "translate-adapter adminLanguages2words",
|
|
73
|
-
"release": "release-script"
|
|
72
|
+
"release": "release-script",
|
|
73
|
+
"npm": "npm i"
|
|
74
74
|
}
|
|
75
75
|
}
|