NEWS
[gelöst] iobroker <command></command>–timeout
-
Guten Tag allerseits,
mit iobroker –help taucht u.a. folgende Zeile auf:
iobroker <command></command> --timeoutIn der Doku Console commands for ioBroker auf Github kann ich nichts darüber finden. Kann mir jemand sagen, was das für Commands sind.
Hintergrund: Ich suche eine Möglichkeit Javascript vom Javascript-Adapter über die Console auszuführen.
-
Hintergrund: Ich suche eine Möglichkeit Javascript vom Javascript-Adapter über die Console auszuführen. `
Die Frage zu den Kommandos kann ich leider nicht beantworten, aber eventuell hier einen Tipp geben:1. Du brauchst ein Objekt, in dem das Skript hinterlegt ist. Schau mal im Admin nach wie die aufgebaut sind, müsste unter javascript.X…. liegen, vom Typ "script".
2. Du brauchst den zugehörigen Datenpunkt javascript.X.scriptEnabled.<skriptname>, der zum Ausführen auf true gesetzt werden muss.
Die Objekte und Datenpunkte solltest du über die ioBroker-CLI bearbeiten können. Wenn das Skript schon existiert und du es nur ausführen willst, ist das noch einfacher. Source-Code über die Konsole einspeisen ist nicht so einfach, da solltest du vermutlich nen Umweg über socket.io oder simple-api nehmen.</skriptname>
-
@ALCalzone: Vielen Dank, das hilft mir schon mal weiter
Kann ja sein, dass die betreffende Zeile in der Hilfe nur allgemein beschreibt, dass der Parameter –timeout, bei allen Befehlen möglich ist.
> Die Objekte und Datenpunkte solltest du über die ioBroker-CLI bearbeiten können. Wenn das Skript schon existiert und du es nur ausführen willst, ist das noch einfacher. Source-Code über die Konsole einspeisen ist nicht so einfach, da solltest du vermutlich nen Umweg über socket.io oder simple-api nehmen.Ja, das Script existiert. Und dein Tip funktioniert auch. Muss ich es nur noch irgendwie hinbekommen, dass die Ausgabe auf der Konsole erfolgt.
Ich beschreib am Besten mal, was ich eigentlich erreichen will:
Also Javascript ist mir nicht fremd :) Und ich hab auch schon einiges mit node-red gemacht.
Leider kann ich unter node-red nicht auf die iobroker Javascript-Funktionen zugreifen (Jedenfalls weis ich nicht wie). Die iobroker-nodes gestatten den Zugriff auf einzelne Datenpunkte, was schon mal super ist.
Wenn ich aber z.B. alle STATEs aller Fenster (bei mir function=Verschluss) und dazu noch mit dem Namen haben will, muss ich in node-red alle DP einzeln angeben was sehr aufwendig ist.
In Javascript ist das ein Einzeiler
$('channel[state.id=*.STATE](functions=Verschluß)')Ich müßte also irgendwie entweder die Zeile Javascript in node-red ausführen können, oder die Ausgabe des Scripts in node-red importieren können.
Mit dem exec node ist es recht einfach iobroker-cli commands auszuführen, aber die eingebauten Filtermöglichkeiten (get state, list) sind da recht unflexibel und deren Textausgabe verkompliziert es weiter.
-
Ohjemine! Du müsstest also irgendwie an den stdout von einem bereits laufenden Prozess kommen (der des JS-Adapters), um die Logausgabe zu bekommen (vorausgesetzt, der wurde mit der Option –logs) gestartet.
Glaube fast, dass es einfacher und stabiler wäre, das über einen extra Node zu erledigen. Kannst ja mal ein Feature-Request stellen: https://github.com/ioBroker/ioBroker.node-red/issues
-
Schreibe die Ausgabe halt in einen State statt in das Log.
-
> Glaube fast, dass es einfacher und stabiler wäre, das über einen extra Node zu erledigen. Kannst ja mal ein Feature-Request stellen: [https://github.com/ioBroker/ioBroker.node-red/issues](https://github.com/ioBroker/ioBroker.node-red/issues)Ja, das werde ich machen. So ein (function)node, wo man die zugriff auf alle iobroker Javascript Funktionen hat, wäre klasse.
Hab mein Problem zwar auf die Schnelle so gelöst:
Mein javascript Script schreibt die Ausgabe in eine Datei:
const fs = require('fs'); const util = require('util'); var datei = "/opt/iobroker/test.txt"; var dps = $('channel[state.id=*.STATE](functions=Verschluß)'); fs.writeFile(datei, JSON.stringify(dps), function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); });Das Script wird per node-red -> exec-node über die iobroker-CLI angestossen.
Das geschriebene File wird dann in node-red importiert.
Recht umständlich, tut aber erst einmal :lol:
-
Schreibe die Ausgabe halt in einen State statt in das Log. `
Ja, so könnte das viel einfacher gehen :lol:
Also nach 2 Tagen iobroker bin ich wirklich noch total am Lernen. Also mal sehen, wie ich das hinbekommen.
-
Danke nochmal für eure Hilfe,
Hab's jetzt so gelöst:
-
ioBroker-Script schreibt Ergebnis in einen STATE
-
Node-red triggert das Script mit dem ioBroker-Out-node
-
Node-red ließt den STATE mit dem ioBroker-Get-node
Damit kann ich erst mal gut leben. Was ich noch nicht rausgefunden habe,
kann ich irgendwie über node-red rausbekommen, ob das Script korrekt gelaufen ist?
Nachtrag:
Hab's inzwischen gefunden. Wenn statt dem ioBroker-get-node den ioBroker-in-node verwende, tu er genau was er soll :) Auch mit der Möglichkeit, nur auf ack=true zu reagieren. So langsam wird es.
Ach und noch was, wie kennzeichne ich den Beitrag als gelöst? Gibt es da einen Knopf den ich nicht finde?
-