NEWS
Node-RED Nodes für externe ioBroker Integration
-
Re: Externes node-RED und ioBroker. Wie verbinden ?
Hallo,
wie bereits mal in dem Parallelthread erwähnt, habe ich ein paar Nodes für die ioBroker-Anbindung für "Standalone Node-REDs" entwickelt. Nach dem ersten Entwurf auf Basis der REST-API wurde das ganze noch auf Websocket umgebaut.
Das Paket richtet sich an Nutzer (wie mich), die Node-RED unabhängig von ioBroker betreiben möchten (und nicht als Adapter).
Funktionen:
- WebSocket-Verbindung zu ioBroker (über Web-, WebSocket- oder Admin-Adapter)
- Bidirektionale Kommunikation (Lesen/Schreiben von States)
- Wildcard-Pattern für Subscriptions (z.B. system.adapter.*.alive)
- Interaktive State-Auswahl mit Suchfunktion
- OAuth2-Authentifizierung und "No-Auth"-Modus
- Automatische Wiederverbindung
Das Paket ist als "node-red-contrib-iobroker" über die Palette oder npm verfügbar und auf GitHub dokumentiert.
Falls jemand Interesse hat, das Paket zu testen oder Feedback zu geben, freue ich mich über Rückmeldungen. Besonders bei größeren ioBroker-Setups wäre Input hilfreich.
Vielen Dank!Hinweis: Dies ist kein ioBroker-Adapter, sondern für externe Node-RED Installationen gedacht.
-
@marc-berg Macht bisher einen sehr guten Job. Danke für deine Arbeit.
Kann leider noch nichts über größere Projekte sagen. Ich verwende sowas gerne zum Test von größeren Projekten. Habe bisher eine eigene WS-Implementierung in einem function-node dafür verwendet. Aber mit deinen nodes geht das Ganze doch schon komfortabler. -
@marc-berg Ich finde, dass ist eine großartige Arbeit von Dir. Ich hatte selbst vor ein paar Jahren mal diese Idee, aber mir fehlte zum Teil das Vorwissen und mir war das ganze Projekt dann zu groß.
Strategisch sind diese Nodes sehr wertvoll, da man damit genauso von einer externen Instanz auf Homeassistant wie auf iobroker zugreifen kann.
Ich habe momentan nur gerade wenig Lust - generell mein ganzes Projekt umzuschreiben, wobei ich schon Ideen und angefangen habe. Alleine für den neuen Desktop wollte ich meine ganzes Dashboard umschreiben.
Was Du Dir damit angetan hast, ist halt, dass Du es vielleicht generell länger unterstützen müsstest. Ich hatte in der Vergangenheit oft das Gefühl, dass das IOB Team zum einen deswegen die interne Adapterlösung verwendet haben, da es ggf. geringerer Aufwand ist und das es vielleicht strategisch nicht gewollt ist, ein API von außen zugänglich zu machen.
Jedenfalls vielen Dank - vielleicht berichtest Du mal - gerade in der NodeRed Community wie Deine Nodes ankommen.
Hier im iobroker Bereich habe ich das Gefühl, dass die Zahl der NodeRed Interessenten/Anwender inzwischen sehr klein geworden ist und alle lieber puzzeln.
Also ich beobachte einfach bisschen, wie sich Dein Projekt weiter entwickelt - aber bin schon mal sehr begeistert und werde mal in meiner Testumgebung Deine Nodes ausprobieren. -
So die Nodes ließen sich problemlos installieren, allerdings bekomme ich keine Verbindung zustande - habe es mit 2 Iobroker Servern versucht.
Meine NodeRed Instanz läuft als LXC auf 192.168.178.108
mwadmin@mwnodered:~$ sudo ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.178.108 netmask 255.255.255.0 broadcast 192.168.178.255 inet6 2001:9e8:a5da:e000:be24:11ff:feda:120f prefixlen 64 scopeid 0x0<global> inet6 fd00:2403:1961:0:be24:11ff:feda:120f prefixlen 64 scopeid 0x0<global> inet6 fe80::be24:11ff:feda:120f prefixlen 64 scopeid 0x20<link> ether bc:24:11:da:12:0f txqueuelen 1000 (Ethernet) RX packets 13458517 bytes 2232990941 (2.0 GiB) RX errors 0 dropped 2698590 overruns 0 frame 0 TX packets 6444167 bytes 436372240 (416.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Lokale Schleife) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 mwadmin@mwnodered:~$ ping -4 mwhome PING (192.168.178.28) 56(84) bytes of data. 64 bytes from mwhome.fritz.box (192.168.178.28): icmp_seq=1 ttl=64 time=0.488 ms 64 bytes from mwhome.fritz.box (192.168.178.28): icmp_seq=2 ttl=64 time=0.158 ms 64 bytes from mwhome.fritz.box (192.168.178.28): icmp_seq=3 ttl=64 time=0.183 ms
Auch von meiner Standalone Windows NodeRed Installation bekomme ich keine Verbindung. Muss auf der Iobroker Seite noch was eingestellt werden?
Ich nutze keine Authentifizierung .Die Websocket Verbindung funktioniert nicht:
[info] [WebSocket Manager] Creating connection 2 to mwhome:8084 (non-SSL, no-auth) 23 Jun 22:00:08 - [info] Started modified nodes [error] [WebSocketClient:1750708808060-trhij11rf] socket hang up [error] [WebSocket Manager] Connection error for mwhome:8084 (connection 2): socket hang up [error] [WebSocketClient:1750708808060-trhij11rf] socket hang up [error] [WebSocket Manager] Connection error for mwhome:8084 (connection 2): socket hang up [error] [WebSocket Manager] Failed to create connection 2 to mwhome:8084: socket hang up [error] [WebSocket Manager] Subscribe failed for node 8b6f889fde2a90f0: socket hang up 23 Jun 22:00:09 - [error] [iobin:8b6f889fde2a90f0] Connection failed: socket hang up 23 Jun 22:00:09 - [error] [iobin:8b6f889fde2a90f0] WebSocket subscription failed: socket hang up [info] [WebSocket Manager] Deploy #2 completed [error] [WebSocketClient:1750708808060-trhij11rf] socket hang up [error] [WebSocket Manager] Connection error for mwhome:8084 (connection 2): socket hang up [error] [WebSocketClient:1750708808060-trhij11rf] socket hang up [error] [WebSocket Manager] Connection error for mwhome:8084 (connection 2): socket hang up [ioBroker] States API error: No active connection for mwhome:8084 [ioBroker] States API error: No active connection for mwhome:8084 [ioBroker] States API error: No active connection for mwhome:8084
-
OK - es läuft über den Admin Port 8081. Ist das richtig?
Ich habe noch ein socket.io Adapter am Laufen der läuft auf 8084. Aber ich hab auch nichts dagegen wenn man den normalen iob Port 8081 nutzen muss.
Aber ansonsten läuft die Kommunikation erst mal -
Super!!!!
-
OK - das mit dem Refresh scheint noch manchmal bissi zu haken - und das Erstellen von Datenpunkten mit der automatischen Generierung der Hierarchien steht noch aus. Das ist so das, was ich auf die Schnelle entdecken konnte.
Irgendwie ist das so ein Zwischending. Wenn man ein nicht existierenden Datenpunkt mit dem topic definiert, taucht der nicht auf. Wenn man den dann manuell in den Objekten erstellt, dann hat er aber die payload.
Wenn man "cleared" und anschließend "refreshed" dann scheint das Aktualisieren zu funktionieren.
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
OK - es läuft über den Admin Port 8081. Ist das richtig?
Ich habe noch ein socket.io Adapter am Laufen der läuft auf 8084. Aber ich hab auch nichts dagegen wenn man den normalen iob Port 8081 nutzen muss.
Aber ansonsten läuft die Kommunikation erst mal -
Super!!!!
Schau mal bitte in die Readme. Du kannst drei Adapter nutzen: admin, ws und web (mit bestimmten Einstellungen) Der socket.io Adapter geht nicht (der spricht nicht websocket).
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
und das Erstellen von Datenpunkten mit der automatischen Generierung der Hierarchien steht noch aus.
Ja, das steht als Nächstes auf der Todo List, ich benutze das nicht.
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Wenn man "cleared" und anschließend "refreshed" dann scheint das Aktualisieren zu funktionieren.
Okay, das war ein Browser-Cache Thema. Die 0.4.4 sollte dies fixen und die neu geladenen Daten in jedem Fall an den Browser durchreichen. Nach dem Laden des Updates unbedingt den Cache löschen, es sollte der Text oben angezeigt werden.
In der 0.4.4 wurden auch noch ein paar Edge Cases bzgl. der Verbindung zum ioBroker angegangen. Bisher war es u.a. noch so, dass der ioBroker zum Start von Node RED laufen musste. Jetzt wird auch unabhängig davon der Verbindungsaufbau versucht.
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Ich hatte in der Vergangenheit oft das Gefühl, dass das IOB Team zum einen deswegen die interne Adapterlösung verwendet haben, da es ggf. geringerer Aufwand ist
Es IST natürlich ein viel geringerer Aufwand. Ca. 90% der Entwicklungsarbeit für die externen Nodes gingen in den Test und das Handling der verschiedenen potentiellen Connection-Probleme, Token Ablauf Erneuerung (bei aktivierter Authentifizierung) inkl. der dann jeweils zu erneuernden Subscriptions, Node-Status-Texte, etc.
Beim Adapter ist die Gleichung im Vergleich recht einfach: "Wenn ioBroker aus, dann auch Node RED". Und für 99% aller Nutzer ist der Adapter auch die bessere Lösung.
und das es vielleicht strategisch nicht gewollt ist, ein API von außen zugänglich zu machen.
Im Ernst? Bei der Anzahl der zur Verfügung stehenden Schnittstellen (REST API, Simple API, Websocket, socket.io, ...)?
-
@marc-berg sagte in Node-RED Nodes für externe ioBroker Integration:
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Wenn man "cleared" und anschließend "refreshed" dann scheint das Aktualisieren zu funktionieren.
Okay, das war ein Browser-Cache Thema. Die 0.4.4 sollte dies fixen und die neu geladenen Daten in jedem Fall an den Browser durchreichen. Nach dem Laden des Updates unbedingt den Cache löschen, es sollte der Text oben angezeigt werden.
In der 0.4.4 wurden auch noch ein paar Edge Cases bzgl. der Verbindung zum ioBroker angegangen. Bisher war es u.a. noch so, dass der ioBroker zum Start von Node RED laufen musste. Jetzt wird auch unabhängig davon der Verbindungsaufbau versucht.
Das mit dem Refresh funktioniert jetzt wunderbar (auch die Anzeige ob Cache oder neu eingelesen). - Der Clear Button erschließt sich mir allerdings nicht ganz.
Allerdings wenn kein gültiger Topic/State eingetragen ist - also bei einer leeren Node oder wenn man das topic löscht und dann auf den Refresh-Button oder die Baumansicht geht, dann verheddert sich die Node.
Erst wenn man dann manuell einen gültigen Pfad eingibt und deployed - dann kann man auch den Treeview in der Node wieder verwenden. -
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Allerdings wenn kein gültiger Topic/State eingetragen ist - also bei einer leeren Node oder wenn man das topic löscht und dann auf den Refresh-Button oder die Baumansicht geht, dann verheddert sich die Node.
Dann hat dein Browser noch einen alten Stand im Cache. Tritt es auch auf, wenn du mal einen Inkognito Tab öffnest? Wenn ja, bitte mal Schritt für Schritt, damit ich es nachstellen kann.
-
@marc-berg In dem Inkognito Fenster trat der Fehler nicht auf. Ich hatte zwar den Cache gelöscht, aber vielleicht hätte ich alles zu machen müssen.
Also alles fein.Kannst Du mir noch erklären, wofür der Clear Button ist?
Etwas gewöhnungsbedürftig ist noch, dass man aus dem Tree-View die Übernahme des Topics mit einem Doppelklick machen muss. Oft klickt man auf die manuelle Ansicht oder denkt man hat den topic ausgewählt und schließt den Dialog und wundert sich, warum das Topic nicht übernommen wurde.
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Kannst Du mir noch erklären, wofür der Clear Button ist?
Der löscht den search Input und setzt den Baum zurück, (falls man sich verlaufen hat)
-
@marc-berg sagte in Node-RED Nodes für externe ioBroker Integration:
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
und das Erstellen von Datenpunkten mit der automatischen Generierung der Hierarchien steht noch aus.
Ja, das steht als Nächstes auf der Todo List, ich benutze das nicht.
In der 0.5.0 gibt es jetzt eine Node "iob out+"
Die kann jetzt auch Objekte erstellen. Bin noch nicht groß zum Testen gekommen, insbesondere die Autodetect Funktion für den Payload-Type müsste mal durchgetestet werden. Wenn das alles gut ist, würde ich die Funktion in die iobout Node übernehmen.
-
@marc-berg sagte in Node-RED Nodes für externe ioBroker Integration:
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Kannst Du mir noch erklären, wofür der Clear Button ist?
Der löscht den search Input und setzt den Baum zurück, (falls man sich verlaufen hat)
OK
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Etwas gewöhnungsbedürftig ist noch, dass man aus dem Tree-View die Übernahme des Topics mit einem Doppelklick machen muss. Oft klickt man auf die manuelle Ansicht oder denkt man hat den topic ausgewählt und schließt den Dialog und wundert sich, warum das Topic nicht übernommen wurde.
Meines Erachtens wäre es sinnvoll den aktiven State auch in dem Tree View als Read-Only anzuzeigen.
Das sind halt kleine Anpassungen, um den Dialog etwas intuitiver zu machen.
-
@marc-berg Die 0.5.0 Version wird mir in der Palette nicht angeboten.
Du kannst das aber mit meinem Subflow selbst testen.Im Prinzip hänge ich sonst nur noch die iob-Out Node dran. Die Angaben die in der iob-out stehen - stehen dann halt in der Prio über die automatischen Erkennungen.
Im Topic steht ja - welche Datenpunkte zu beschreiben sind - egal, ob er bereits existiert oder nicht.
Hier der Testflow:
Im Prinzip ist das das 6. Beispiel JSON String in meinem Subflow und so sollte der Baum dann auch aussehen:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Ich muss jetzt für heute erst mal weg. Also lass Dir ruhig Zeit. -
@marc-berg sagte in Node-RED Nodes für externe ioBroker Integration:
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Kannst Du mir noch erklären, wofür der Clear Button ist?
Der löscht den search Input und setzt den Baum zurück, (falls man sich verlaufen hat)
Meines Erachtens braucht es den Button aber nicht, weil der Refreshknopf ja auch die Suche zurücksetzt - aber Du bist der Chef.
-
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Meines Erachtens braucht es den Button aber nicht, weil der Refreshknopf ja auch die Suche zurücksetzt - aber Du bist der Chef.
Wenn man eine Vielzahl von States hat, kann das Refreshen schon mal länger dauern, deshalb diese einfache Alternative.
Als very-very-very-nice-to-have möchte ich den refresh Button abschaffen und auf Objekt-Änderungen in Realtime reagieren.
-
@marc-berg sagte in Node-RED Nodes für externe ioBroker Integration:
@mickym sagte in Node-RED Nodes für externe ioBroker Integration:
Meines Erachtens braucht es den Button aber nicht, weil der Refreshknopf ja auch die Suche zurücksetzt - aber Du bist der Chef.
Wenn man eine Vielzahl von States hat, kann das Refreshen schon mal länger dauern, deshalb diese einfache Alternative.
Als very-very-very-nice-to-have möchte ich den refresh Button abschaffen und auf Objekt-Änderungen in Realtime reagieren.
Ich finde, dass Dein Refresh Button gut funktioniert. Im Adapter funktioniert der Refresh bis heute nicht und ich hatte das schon vor Jahren "angemerkt". - Also lieber ein funktionierender Refresh, als kein Refresh.