NEWS
[gelöst]Anfängerfragen
-
Hallo,
ich habe jetzt den Broker auf meinem FreeNAS system installiert. Jetzt würde ich gerne einfachste Pogramme realisieren. Auf ccu.io habe ich das mit ScripGUI gemacht. Leider gibts das ja noch nicht für den Broker, weshalb ich begonnen habe mich mit node-red zu beschäftigen.
1. Ich möchte jetzt zuerst einfache states in Homematic-Variablen ablegen (um mein Mediola Tablet damit zu füttern). Also habe ich eine Homematic-Variable angelegt und ein iobroker .input und -output dazu verknüpft.
Bei einigen Zuständen klappt das schon prima, aber bei Squeezebox states wird wenn ich einen Value (z.B. Titel) übertrage wird dieser immer nach max 30 sec von drei ??? überschrieben. Wenn ich es als Command eintrage, dann funktioniert es. Wie kann ich das Überschreiben verhindern (Block unless Value changes etc hab ich ausprobiert).
2. Bei meinem Yamaha AVR wird zwar in der ioBroker-Objekte Liste der richtige Wert eingetragen, aber in node-red wird nicht z.B. an . den Debug-Ausgang übertragen. Woran kann das liegen?
3. Ist node-red eigentlich das richtige Mittel um ohne nennenswerte Programmierkenntsnisse so etwas zu realisieren, oder würdet ihr etwas anderes vorschlagen?
4. Wie kann ich eigentlich node-red dazu bringen nach neu angelegten Homematic-variablen zu suchen? Ein neustarten des Adapters hat bei mir keine Besserung gebracht. Ich habe die namen immer direkt eingetragen, denn häfig wurden die neuen Variablen im Baum (von red) noch nicht angezeigt.
-
Hallo MrMuppet,
im js-controller hat sich in den letzten Wochen was verändert. Seit dem werden von den Adaptern States, die von anderen Adaptern geändert wurden, nur noch dann ausgewertet, wenn diese ACK=false haben (auf der Admin-Seite rot dargestellt werden).
Nur wenn ACK=false ist, werden die Werte dann an das jeweilige Gerät geschickt.
Dies betrifft insbesondere den hm-rega-Adapter, der alle Variablen aus der Homematic alle 30 Sekunden abruft und überschreibt. Dies dürfte wohl auch für alle anderen Adapter gelten, die die Werte regelmäßig pollen.
Der Out-Node in node-red ist hier ein wenig missverständlich. Der Type hat die beiden Werte "value" und "command". In Wirklichkeit wird hier aber gesteuert, ob der Wert ACK=true (bei value) oder ACK=false (bei command) haben soll. Für alle States, die in einem Adapter eine Aktion auslösen sollen, muss der Type nun auf command stehen. Ansonsten passiert danach nichts.
"Block unless Value changes" gibt es nur für den in-Node. Dieser sorgt dafür, dass der Flow nicht bei allen Aktualisierungen des States aufgerufen wird sondern nur, wenn sich auch der Wert geändert hat. Der js-controller informiert normalerweise nicht nur bei Wert-Änderungen, sondern auch, wenn sich eines der Attribute (ACK-Flag, Datum der letzten Änderung usw.) geändert hat. Dies würde z.B. bei States des hm-rega Adapter dazu führen, dass der Flow alle 30 Sekunden gestartet wird, auch wenn sich der Wert nicht geändert hat.
Punkt 2 kann ich so nicht nachvollziehen.
Zu 3:
in ioBroker gibt es prinzipiell drei Möglichkeiten zur Automatisierung:
Szenen:
Erlaubt einfache Konfigurationsübergänge.
Javascript-Adapter:
Sehr gut in ioBroker integriert. Man kann alle Funktionen der Adapter nutzen. Jedoch nur wenig bis keine Tool-Unterstützung.
Für die meisten, die zuvor schon programmiert haben, wohl die auf den ersten Blick intuitivste Möglichkeit.
node-red:
Grafische Oberfläche und Dialoge suggerieren schnelle Erfolge. Der flussbasierte Ablauf mit dem Nachrichtenweiterschieben ist jedoch gerade für Skriptprogrammierer gewöhnungsbedürftig. Node-Red ist eigentlich ein eigenständiges Open Source-Projekt von IBM. Die Integration in IOBroker beschränkt sich zurzeit auf die drei Nodes. Auf Funktionen anderer ioBroker-Adapter kann aber über ein Javascript-Objekt zugegriffen werden.
Die eigentliche Stärke von Node-Red sind neben der Oberfläche mit integrierter Debug-Funktion die vielen fertigen Adapter, die unter http://flows.nodered.org/ aufgelistet sind. Falls man aber mal eine etwas komplexere Logik abbilden will, kommt man auch hier nicht um das Schreiben von Javascript herum.
Ob nun Javascript oder node-red ist zum einen Geschmacksache und hängt von den konkreten Anforderungen ab. Es ist zum Beispiel mit Node-Red erheblich einfacher, die gpio-Ports des Pi anzusprechen, periodisch Temperatursensoren auszulesen, Funktionen als Webservice oder über eine REST-Api bereitzustellen oder abzufragen usw. Vieles davon würde zwar auch mit dem Javascript-Adapter und/oder ioBroker-Adaptern funktionieren, aber der Zeitbedarf ist hier aus meiner Sicht höher, weil man sich dann erstmal in deren Logik oder den nativen node.js-Modulen einarbeiten muss.
Zu 4:
In und get-Nodes lesen die States aus dem js-controller aus. Dies erfolgt jedoch nicht bei jedem Aufruf des edit-Dialogs eines in- oder get-Node sondern nur einmal. Wenn der node-red-Adapter und somit auch node-red neu gestartet werden, sollten neue Werte auch angezeigt werden (wenn sie auf der ioBroker-Admin-Seite auch angezeigt werden).
Es gibt im Node keine Persistierung der Daten, somit kann die veraltete Liste nicht aus node-red kommen. Wäre aber auch möglich, dass diese Daten vom Browser aus dem Cache genommen werden.
-
Vielen Dank für die schnelle und ausführliche Antwort! Das hilft mir sehr weiter.
Gesendet von meinem A0001 mit Tapatalk