NEWS
[Geloest] Bitte um Hilfe bei Script ccu-> iobroker
-
MOD-Edit by eric2905; 19.05.2017 / 21:15; Betreff geändert und Code-Tags eingefügt
Hallo,
ich habe den iobroker nun schon eine Weile laufen und einiges hier schon erlesen und umgesetzt.
Da meine CCU immer mehr Abstürze fabrizierte, habe ich dort einiges rausgeworfen und iobroker übertragen.
Das mit den Adaptern ist wirklich eine tolle Sache.
Nun möchte ich noch das nachfolgende Script von meiner CCU zum iobroker "konvertieren"
Da fehlt mir momentan ein Adapter
Könnt ihr mir helfen und mir schreiben, wie ich die Telnetabfrage meines Danfoss WR in iobroker bewerkstelligen kann?
Hier mein Script von der CCU über cuxd:
! Per Telnet auslesen dom.GetObject("CUxD.CUX2801001:9.CMD_SETS").State("(echo '00*'; usleep 50000) | telnet 192.168.1.82 15000"); dom.GetObject("CUxD.CUX2801001:9.CMD_QUERY_RET").State(1); ! in Variable solarroh schreiben var Solarroh; string Solarroh = dom.GetObject("CUxD.CUX2801001:9.CMD_RETS").State(); !WriteLine(solarroh); !Einspeisung separieren var x; string x =Solarroh.Substr(23, 4); !WriteLine(x); var m; string m =Solarroh.Substr(29, 4); !WriteLine(m); !Wert in Systemvariable Einspeisung schreiben dom.GetObject('Solar').State(x); dom.GetObject('Solar_Monat').State(m);
Vielen Dank für eure Hilfe im voraus
-
Sorry für die Fehler bei der Erstellung und Danke für die Änderung.
Ich werde mich bessern
-
Sorry für die Fehler bei der Erstellung und Danke für die Änderung.
Ich werde mich bessern `
Alles gut - das erhöht nur die Lesbarkeit.Gruß,
Eric
-
Hier der Versuch einer Übersetzung HM Script –> Javascript (nicht getestet):
var debug = true; // Logging var cmd = "(echo '00*'; usleep 50000) | telnet 192.168.1.82 15000"; exec(cmd, function (error, stdout, stderr) { if(error) log('Exec-Fehler: ' + stderr, 'error'); else { var Solarroh = stdout; if(debug) log(Solarroh); var x = Solarroh.substr(23, 4); if(debug) log(x); var m = Solarroh.substr(29, 4); if(debug) log(m); setState('Solar', parseFloat(x)); setState('Solar_Monat', parseFloat(m)); } });
Die beiden Datenpunkte 'Solar' und 'Solar_Monat' vom Typ Zahl müssen vorher im Reiter "Objekte" unter javascript.0 erstellt werden.
-
Vielen Dank für Deine Hilfe.
Leider scheitere ich am fehlenden TELNET.
Da es hier keinen Adapter über iobroker gibt, habe ich im GIT gesucht und einen 3 Jahre alten Eintrag gefunden.
Diesen habe ich nun versucht über eine eigene URL zu installieren.
Leider bekomme ich hier Fehler angezeigt.
$ ./iobroker url "https://github.com/ioBroker/ioBroker.telnet" install https://github.com/ioBroker/ioBroker.telnet/tarball/master npm install https://github.com/ioBroker/ioBroker.telnet/tarball/master --production --prefix "/opt/iobroker" (System call) npm http GET https://github.com/ioBroker/ioBroker.telnet/tarball/master npm http 200 https://github.com/ioBroker/ioBroker.telnet/tarball/master npm ERR! Error: No name providednpm ERR! at needName (/usr/local/lib/node_modules/npm/lib/cache.js:1247:37) npm ERR! at /usr/local/lib/node_modules/npm/lib/cache.js:1123:10 npm ERR! at process._tickCallback (node.js:415:13) npm ERR! If you need help, you may report this log at: npm ERR! <http: github.com/isaacs/npm/issues=""> npm ERR! or email it to: npm ERR! <npm-@googlegroups.com> npm ERR! System Linux 3.4.112-sun7i npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "https://github.com/ioBroker/ioBroker.telnet/tarball/master" "--production" "--prefix" "/opt/iobroker"npm ERR! cwd /optnpm ERR! node -v v0.10.22npm ERR! npm -v 1.3.14 npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /opt/npm-debug.lognpm ERR! not ok code 0 ERROR: host.cubietruck Cannot install https://github.com/ioBroker/ioBroker.telnet/tarball/master: 1 ERROR: process exited with code 25</npm-@googlegroups.com></http:>
Alles nicht so einfach
-
Nun habe ich socket.io installiert und bekomme noch:
20:58:54.618 [error] javascript.0 script.js.common.Solar: Exec-Fehler: /bin/sh: 1: telnet: not found sh: echo: I/O error /bin/sh: 1: usleep: not found
-
Nun habe ich telnet installiert und bekomme noch
21:18:15.331 [error] javascript.0 script.js.common.Solar: Exec-Fehler: /bin/sh: 1: usleep: not found Connection closed by foreign host.
-
Ich komme nicht weiter.
Scheinbar gibt es unter JavaScript kein USLEEP.
Mein TCP Server wartet nach Eingabe von Telnet … 15000 drei Sekunden auf 00*, dann wird die Verbindung geschlossen.
-
Scheinbar gibt es unter JavaScript kein USLEEP. `
Das hat nichts mit Javascript oder ioBroker zu tun, sondern liegt an den Unterschieden der Linux-Varianten. -
OK. Ist also ein fehlender Befehl in meinem Armbian
Sleep ist da!
Unterschied zu usleep scheint nur zu sein, dass sleep mit Sekunden arbeitet.
Also habe ich sleep 1 für usleep 50000 eingegeben.
Ergebnis:
[error] javascript.0 script.js.common.Solar: Exec-Fehler: Connection closed by foreign host.
Das Script pausiert 1 oder 2 Sekunden, je nach Vorgabe, führt die Eingabe 00* wohl nicht aus.
-
die CMD Zeile habe ich umgestellt und das script läuft scheinbar.
var cmd = "telnet 192.168.1.82 15000 | (echo '00*'; sleep 1s)";
Leider werden die Variablen nicht gefüllt.
LOG:
javascript.0 2017-05-21 12:31:41.633 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_Monat_iob, state=null) javascript.0 2017-05-21 12:31:41.632 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_iob, state=null) javascript.0 2017-05-21 12:31:41.632 info script.js.common.Solar: javascript.0 2017-05-21 12:31:41.631 info script.js.common.Solar: javascript.0 2017-05-21 12:31:41.628 info script.js.common.Solar: 00* javascript.0 2017-05-21 12:31:35.637 info script.js.common.Solar: registered 0 subscriptions and 0 schedules javascript.0 2017-05-21 12:31:35.637 info script.js.common.Solar: exec: telnet 192.168.1.82 15000 | (echo '00*'; sleep 1s)
-
Der SLEEP Befehl funktioniert wohl doch nicht.
Im Log sehe einen neuen LOG Eintrag immer nach 6 Sekunden.
Egal ob ich den Sleep Befehl drinnen habe oder ihn rausnehme.
javascript.0 2017-05-21 12:47:45.535 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_Monat_iob, state=null) javascript.0 2017-05-21 12:47:45.531 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_iob, state=null) javascript.0 2017-05-21 12:47:45.530 info script.js.common.Solar: javascript.0 2017-05-21 12:47:45.527 info script.js.common.Solar: javascript.0 2017-05-21 12:47:45.525 info script.js.common.Solar: 00* javascript.0 2017-05-21 12:47:39.491 info script.js.common.Solar: registered 0 subscriptions and 0 schedules javascript.0 2017-05-21 12:47:39.470 info script.js.common.Solar: exec: telnet 192.168.1.82 15000 | (echo '00*') javascript.0 2017-05-21 12:47:39.455 info Start javascript script.js.common.Solar javascript.0 2017-05-21 12:47:39.430 info Stop script script.js.common.Solar javascript.0 2017-05-21 12:46:57.803 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_Monat_iob, state=null) javascript.0 2017-05-21 12:46:57.798 info script.js.common.Solar: setForeignState(id=javascript.0.Solar_iob, state=null) javascript.0 2017-05-21 12:46:57.796 info script.js.common.Solar: javascript.0 2017-05-21 12:46:57.795 info script.js.common.Solar: javascript.0 2017-05-21 12:46:57.793 info script.js.common.Solar: 00* javascript.0 2017-05-21 12:46:51.720 info script.js.common.Solar: registered 0 subscriptions and 0 schedules javascript.0 2017-05-21 12:46:51.695 info script.js.common.Solar: exec: telnet 192.168.1.82 15000 | (echo '00*'; sleep 1s) javascript.0 2017-05-21 12:46:51.689 info Start javascript script.js.common.Solar
-
die CMD Zeile habe ich umgestellt und das script läuft scheinbar.
var cmd = "telnet 192.168.1.82 15000 | (echo '00*'; sleep 1s)"; ```` `
Als blutiger Linux-Laie behaupte ich: In dieser Reihenfolge kann die pipe nicht funktionieren; das Ergebnis muss "00*" sein. Versuche es mal ohne sleep (mit und ohne Semikolon / Klammern).
var cmd = "echo '00*' | telnet 192.168.1.82 15000";
Woher hast Du dieses Kommando ? Was bedeutet '15000' ? Liefert Deine Quelle noch andere Möglichkeiten ?
-
Hab ich auch schon wieder umgestellt.
15000 ist der Port, auf den der TCP Server auf Anfragen wartet.
root@cubietruck:~# telnet 192.168.1.82 15000 Trying 192.168.1.82... Connected to 192.168.1.82. Escape character is '^]'. 00* {00,21,05,2017,13,38,0030.6,00678,003240,00045138,06203,000,000.0,000,000.0,000,000.0,000,000.0,00},: Connection closed by foreign host.
Das ist die Ausgabe, wenn ich die Sachen manuell über die Konsole eingebe.
Connection Closed kommt nach einem zweiten Enter.
Manuell funktioniert das über den IOBroker Cubie.
-
Andere Möglichkeiten gibt es auch.
Es gibt CSV Dateien auf dem SolarviewPI.
Diese müsste dann geholt werden, taggleich mit dem aktuellen Datum.
Die TelnetFunktion läuft seit 2 Jahren ohne Probleme auf dem CCUPi.
Wie geschrieben, möchte ich die CCU weiter entscripten!
-
Evtl. funktioniert das Script ja auch.
Das Schließen kann doch auch darauf hindeuten, dass wie im Terminal die Verbindung halt geschlossen wurde.javascript.0 2017-05-21 13:51:51.342````
error script.js.common.Solar: Exec-Fehler: Connection closed by foreign host.
javascript.0 2017-05-21 13:51:50.300 info script.js.common.Solar: registered 0 subscriptions and 0 schedules
javascript.0 2017-05-21 13:51:50.275 info script.js.common.Solar: exec: echo '00*';sleep 1 | telnet 192.168.1.82 15000
javascript.0 2017-05-21 13:51:50.266 info Start javascript script.js.common.Solar
javascript.0 2017-05-21 13:51:50.221 info Stop script script.js.common.SolarDann läuft das Parsen evtl. nicht. Müsste da im Log etwas auftauchen? Was ist das mit den Adaptern einfach… :)
-
Dann läuft das Parsen evtl. nicht.
Müsste da im Log etwas auftauchen? `
if(debug) log(Solarroh);
müsste genau den String liefern:
{00,21,05,2017,13,38,0030.6,00678,003240,00045138,06203,000,000.0,000,000.0,000,000.0,000,000.0,00},:
Das Parsen erfolgt erst im Anschluss. Ergebnis sollte sein '30.6' und '0678'.
Das Parsen geht allerdings besser, da die Werte Komma-separiert sind:
Solarroh = Solarroh.split(','); // erzeugt ein Array var x = Solarroh[6]; if(debug) log(x); var m = Solarroh[7]; if(debug) log(m);
-
Vielleicht dauert 'sleep 1' zu lange ? Versuche es mal mit 'sleep 0.05'.
-
Danke Dir für Deine Hilfe.
Leider kein Erfolg.
Keinerlei Änderung.
-
In den Variablen kommt nichts an.