NEWS
Externes node-RED und ioBroker. Wie verbinden ?
-
geht nicht!!!
-
@mickym Sehr konstruktiver Beitrag!
Ich glaube, dass es aktuell nicht geht kann man diesem Thread und dem Feature Request ganz gut entnehmen. Wollte nur sicherstellen, dass andere User, die Google bedienen können, (evtl. schneller) zur gleichen Erkenntnis gelangen... Weiß ehrlich gesagt nicht warum dich das jetzt getriggert hat...Dass es allerdings nicht geht, finde ich persönlich sehr schade. Gerade in Bezug auf containerisierte Umgebungen strebt man ja bekanntlich eher nach der Unabhängigkeit und Isolation der einzelnen Services, statt diese in andere Software zu inkludieren und Abhängigkeiten zu schaffen.
Ich sehe technisch keinen Grund warum es keine ioBroker Nodes für NodeRED geben können sollte. Immerhin können es "die Anderen" ja auch.Ich persönlich werde für meine custom Alexa Integration jetzt den Umweg über MQTT gehen um NodeRED aus ioBroker heraus lösen zu können. Schade.
MfG,
André -
@andre sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Ich sehe technisch keinen Grund warum es keine ioBroker Nodes für NodeRED geben können sollte. Immerhin können es "die Anderen" ja auch.
geben können wäre auch meiner Meinung nach möglich.
im Moment sind sie aber nur Bestandteil des Adapters und nicht als "Einzelmodul" verfügbar -
@homoran sagte in Externes node-RED und ioBroker. Wie verbinden ?:
im Moment sind sie aber nur Bestandteil des Adapters und nicht als "Einzelmodul" verfügbar
Das hat technische Gründe, weil die ioBroker-Nodes aktuell ganz normal mit den
adapter-utils
implementiert wurden. Also die nodes kommunizieren genau auf dem gleichen Weg mit dem js-controller, wie jede andere Instanz auch. Das hat den Vorteil, dass man das Rad nicht neu erfinden musste.Möchte man das nun extern auslagern, müsste man diese Nodes gegen irgendetwas verbinden (rest-api, sockets, ...) mit Authentication und allem drum und dran.
Bei der Rest-API kann man sich auch für State-Changes usw. "anmelden" und bekommt dann einen HTTP-Push: https://github.com/ioBroker/ioBroker.rest-api?tab=readme-ov-file#subscribe-to-the-states-or-objects-changes
Das könnte man jetzt schon genau so in Node-RED selbst bauen (mit den HTTP-Nodes).
-
So z.B.
[ { "id": "e4524f82656cd957", "type": "tab", "label": "Flow 2", "disabled": false, "info": "", "env": [] }, { "id": "ac1e2c56d66e6954", "type": "http in", "z": "e4524f82656cd957", "name": "ioBroker State Change", "url": "/ioBroker/stateChange", "method": "post", "upload": false, "swaggerDoc": "", "x": 220, "y": 120, "wires": [ [ "1d7f4181f4024d03", "b59cdb052b959c5e" ] ] }, { "id": "a3320f282da607bf", "type": "inject", "z": "e4524f82656cd957", "name": "Register for state changes", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": true, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 240, "y": 60, "wires": [ [ "2438b2516da0d404" ] ] }, { "id": "18d235b5987d73d7", "type": "http request", "z": "e4524f82656cd957", "name": "ioBroker Subscribe", "method": "POST", "ret": "txt", "paytoqs": "ignore", "url": "", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 770, "y": 60, "wires": [ [ "3558d8854fd87800" ] ] }, { "id": "2438b2516da0d404", "type": "function", "z": "e4524f82656cd957", "name": "Set url and payload", "func": "const nodeRedIp = '10.10.9.27:1880';\nconst ioBrokerIp = '10.10.2.51';\n\nconst stateId = '0_userdata.0.test';\n\nmsg.url = `http://${ioBrokerIp}:8082/rest-api/v1/state/${stateId}/subscribe`;\nmsg.payload = {\n url: `http://${nodeRedIp}/ioBroker/stateChange`\n};\n\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 530, "y": 60, "wires": [ [ "18d235b5987d73d7" ] ] }, { "id": "3558d8854fd87800", "type": "debug", "z": "e4524f82656cd957", "name": "debug 3", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 980, "y": 60, "wires": [] }, { "id": "1d7f4181f4024d03", "type": "http response", "z": "e4524f82656cd957", "name": "", "statusCode": "", "headers": {}, "x": 450, "y": 160, "wires": [] }, { "id": "b59cdb052b959c5e", "type": "switch", "z": "e4524f82656cd957", "name": "Just a test?", "property": "payload.test", "propertyType": "msg", "rules": [ { "t": "true" }, { "t": "else" } ], "checkall": "false", "repair": false, "outputs": 2, "x": 470, "y": 120, "wires": [ [], [ "375c837e9615b225" ] ] }, { "id": "375c837e9615b225", "type": "debug", "z": "e4524f82656cd957", "name": "debug 4", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 680, "y": 120, "wires": [] } ]
- Erfordert im ioBroker die rest-api
- In diesem Beispiel ist die rest-api als web-Extension konfiguriert (ansonsten url anpassen)
-
@haus-automatisierung sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Bei der Rest-API kann man sich auch für State-Changes usw. "anmelden" und bekommt dann einen HTTP-Push: https://github.com/ioBroker/ioBroker.rest-api?tab=readme-ov-file#subscribe-to-the-states-or-objects-changes
Du hast mal wieder absolut recht!
Danke für den Schubs in diese Richtung und das Beispiel. Für einfaches lesen/schreiben (bei mir geht es aktuell primär um states schreiben) würde sogar simple-api reichen. Der Witz ist, dass ich eine vergleichbare Lösung (abseits von Node-RED) sogar schon für eine handvoll States im ioBroker nutze.MfG,
André -
Ich bin zu doof.
Wenn ich deine Node kopiere, kommt eine Fehlermeldung. Klar. Falsche IP's und fehlender Adapter.
Bisher nur Simple Api vom WEB Adapter benutzt, oder besser gekannt.
Angapsst. Läuft.
Nodes Kopiert. Dein Flow gelöscht. Nichts geht mehr.
Funktioniert das alles nur mit dem Node Red adapter von ioBroker ?Wo ist da der (mein) Fehler ?
Den auf das Triggern von Node Red Nodes durch den ioBroker habe ich ewig gesucht und nichts gefunden.
Falls dir Ideen ausgehen für Videos. Ich hätte da eine
-
@dreistein sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Funktioniert das alles nur mit dem Node Red adapter von ioBroker ?
Nein - genau darum ging es doch hier. Um eine externe Installation von Node-RED.
@dreistein sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Falls dir Ideen ausgehen für Videos. Ich hätte da eine
Das sind ja absolute Basics und das habe ich (meiner Meinung nach) schon zig mal gezeigt. Was fehlt Dir an Infos? Wie man die rest-api anspricht?!
-
@dreistein sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Wenn ich deine Node kopiere, kommt eine Fehlermeldung.
Beim kopieren? Beim Import? Oder beim Ausführen? Was denn genau für eine Meldung? Ich habe das mit Node-RED 3.1 getestet und es werden nur Standard-Nodes verwendet.
-
UI, jetzt wird es für mich kompliziert.,
Deine Nodes, bei mir in Flow 2 markiert, und in meinen "Spielplatz" kopiert.
IP's angepasst.
Deploy.
Werte änderungen im '0_userdata.0.test' werden über 'Debug 4' angezeigt. (Dein Flow)
Dein Flow (Flow2) deaktivert. Keine Änderung wird mehr angezigt.
Bei mir wäre das dann z.b. Debug 31.Antwort: Alles OK
Und die Antworten kommen nur einmal irgendwo an.
Wenn man verschieden Abos in verschiedenen Flows hat, kommt die Antwort, scheinbar zufällig, und nur einmal
an irgendeinem "Http In Node" an.
Ziemlich verwirrend das ganze. -
@dreistein sagte in Externes node-RED und ioBroker. Wie verbinden ?:
und nur einmal
an irgendeinem "Http In Node" an.Naja Du brauchst ja nur eine http-In Node. Dort kommen alle abonnierten Nachrichten an. Oder Du müsstest für jeden State eine eigene URL anlegen (finde ich etwas nervig).
-
Schade. Funktioniert dann nicht wie erhofft.
Alle Trigger laufen auf einen Node. Eher suboptimal.
Dann eben doch HA.Danke für deine Mühe.
-
@dreistein sagte in Externes node-RED und ioBroker. Wie verbinden ?:
Alle Trigger laufen auf einen Node. Eher suboptimal.
Mh? Einfach eine Switch-Node dahinter und gut.
Oder eben jede Subscription auf einer eigenen Url registrieren. -
Wie schon geschrieben, ich scheitetere schon an den Basics. Sprich dem Import und änderung an deinem Flow.
Ich werde wohl doch alt ... und sehe dann Wald vor lauter Bäumen nicht.
Nachtrag:
Nach Stunden des rumprobierens funktioniert es jetzt.
Was habe ich gemacht:- WEB Adapter mir aktivierter Simple API. (Weniger änderungen an meinen Flows)
- Adapter "rest-api" läuft ohnne integration in den WEB Adapter auf einem eigenen Port (8083).
- Die Pfade wurden angepasst. (/rest-api/ hat nie funktioniert)
- Die " HTTP In" - Node läuft in einem eigenem Flow und verzweigt dann mit über "Link In / Out" - Nodes in alle anderen Flows.
Dort werden dann "Switch" - Nodes verwendet. (Wie Vorgeschlagen)
Ein langer und nerviger Weg des Probierens.
Danke für die Geduld und das Schubsen in die richtige Richtung.Nachtrag zum Nachtrag. Nach einem Neustart von Node Red und ioBroker geht nichts mehr.
Error 403 .
Ich geb's auf . Ohne Informatik Studium wird das nichts mit dem ioBroker.Mein Spielplatz Flow :
[gelöscht]
[ -
@dreistein Meine url war ja (wie geschrieben) für den rest api als Web Extension. Ginge auch nur per rest api Adapter auf port 8083. Dann hat der web adapter damit auch nix mehr zu tun.
Simple api hat mit dem ganzen Thema gar nichts zu tun.
-
Ja, Lesen und so. Noob halt.
Nur wenn man keine Ahnung hat und nicht versteht was da steht, verrent man sich ständig und rafft nichts.
Wald und so ....Generation YT Click, Click , geht nicht -> Mist.
Ich würde mir ja immer noch die ioBroker Nodes zur "freien" Verfühgung wünschen.
Click, Click. Geht -> Toll -
@dreistein Dann erklär gerne wie technisch die Kommunikation der ioBroker Nodes laufen soll. Dass es die nicht separat gibt, hat ja einen technischen Grund und wurde nicht gemacht um Dich zu ärgern
-
@andre sagte in Externes node-RED und ioBroker. Wie verbinden ?:
@mickym Sehr konstruktiver Beitrag!
Ich glaube, dass es aktuell nicht geht kann man diesem Thread und dem Feature Request ganz gut entnehmen. Wollte nur sicherstellen, dass andere User, die Google bedienen können, (evtl. schneller) zur gleichen Erkenntnis gelangen... Weiß ehrlich gesagt nicht warum dich das jetzt getriggert hat..Na ich schaue jetzt diesem Beitrag nun schon eine Weile zu. Dass man alles irgendwie mit viel Aufwand betreiben realisieren kann ist ja klar. Das man sich darüber mokiert, wenn ich einfach schreibe es geht NICHT und sich nicht mal die Mühe macht zu begreifen WARUM nicht ist mir nicht klar.
Man recherchiert und sieht, dass dieser Feature Request seit 2020 offen ist, dann sollte es wohl einen Grund haben. Und gerade als Entwickler, sollte man vielleicht etwas hinter die Kulissen schauen.Im Prinzip hat @haus-automatisierung alles erklärt - warum es nicht geht und was man alles implementieren müsste, um eine Kommunikation herzustellen. (s. hier: https://forum.iobroker.net/post/1122336)
Die HA Nodes kommunizieren über websockets und teilweise ist selbst das nicht ausreichend - denn zum Erstellen von eigenen States benötigt man noch den Node-Red Companion. Klar kann man das alles selbst bauen, aber das ist halt ein vergleichsweise unverhältnismäßig hoher Aufwand.
Und ich habe erklärt, wie man mqtt eine Behelfsbrücke bauen kann oder von mir aus nutzt man die iobroker Node-red Instanz durch Bildung eines Web-servers eine Proxy-API - aber dann sieht man ja wie das läuft ....
Deswegen ist es einfacher nach dem 10. Posting zu schreiben: geht nicht!!!
Und wer das immer noch nicht glauben kann, der sollte sich lieber mit der Programmierung von eigenen Nodes und websocket Kommunikation und der entsprechenden Doku beschäftigen. Die ursprünlgiche Doku ist glaub schon längst veraltet.
Ich habe mich selbst mal an die Node-Programmierung mit socket-io gewagt: https://forum.iobroker.net/topic/41728/zugriff-auf-iobroker-via-soket-io
und habe sogar einen Minierfolg mit einer kleinen Node - die spätestens bei gleichzeitigem Zugriff Dein gesamte Node Red abschiesst versucht: https://forum.iobroker.net/post/578047Das hatte damals auch Gründe, weil die Wildcards nicht funktioniert haben. Aber selbst da habe ich schon gemerkt, dass es mir an Doku zur Websockets Kommunikation fehlt und ich nur diese Beispielanwendung von Ingo gefunden hatte: https://github.com/ioBroker/ioBroker.socketio/tree/master/example
Ich gebe aber auch zu, dass ich kein richtiger Entwickler (sondern nur beschränkten JS Code schreiben kann) und mir bei asynchroner Programmierung schon schwer tu, auch wenn ich das Prinzip an sich verstehe. Ich habe damals mit C++ und multithreating was unter Microsoft Visual Studio gemacht - aber sowie ich verstanden habe, kann NodeJS auf dem alles basiert kein echtes Mulitthreading und arbeitet deshalb mit dieses promises. Aber egal - ich bin KEIN Entwickler.
So und dann versteht man nicht, warum es einfacher ist, zu sagen: geht nicht!!! ???????????
Von einem Entwickler hätte ich da etwas mehr erwartet und ich bewundere @haus-automatisierung wegen der Geduld hier jemand zu erklären, dass es nicht geht, obwohl er es eigentlich schon erklärt hat. Die anderen Möglichkeiten über das interne NodeRed eine eigene API als Proxy aufzubauen oder mqtt zu nutzen, dass ist @Dreistein schon zu viel. Er stürzt sich nur auf den Hoffnungsschimmer, weil jemand anderes auch den Feature Request unterstüzt.
Wie gesagt, ich verstehe es - aber es ist halt nicht banal - und deshalb bleibe ich bei meinem "geht nicht" - und wer gut programmieren kann, sich in die Programmierung von Nodes zutraut. So schlimm ist das nicht - zumindest habe ich schon mal eine Node gemacht - und eine noch gültige websockets Verbindunge mit dem iobroker zustande bekommt, der kann ja mal im nächsten halben Jahr ein paar Nodes basteln. Im Prinzip müsste er ja nur eine Server Konfigurations Node basteln und dann die bestehenden Nodes darauf aufsetzen.
Lange Rede, kurzer Sinn: Ich weiß von was ich rede, wenn ich schreibe: Es geht nicht!!! - und ich habe mich verhältnis mäßig viel damit beschäftigt (wie man ja an dem anderen Thread den ich hier zitiert haben sieht). Vielleicht kann ja @andre als Entwickler sich das mal durchlesen und sich dann selbst daran setzen.
Nachtrag: Im Übrigen wurde seit damals vieles (bei mir waren die externen Nodes - nur mal ein Grund es zu probieren) in die nun existieren Nodes bereits eingebaut ist, was damals alles noch nicht möglich war (Wildcards, Ack Filter etc.)
-
@Dreistein Und wenn Du Geduld mitbringst und Dir mit dem NodeRed Adapter einen eigenen Node-Red Companion über die HTTP Schnittstelle zu basteln, da bin ich gerne mit dabei - aber nicht mit wo sind meine Nodes für den externen Zugriff.
Und wie gesagt auch bei den HA Nodes:
funktioniert dieser Teil zum Anlegen von Entitäten auch nur mit dem HA Node-Red Companion
und nicht mit der reinen websockets Kommunikation. -
Ich bin im übrigen auch dabei meine Flows zu überarbeiten und auch da kannst Du selbst durch Neustukturierung Deiner Flows viel erreichen, um Dein NodeRed flexibler und kompatibler an verschiedene Hausautomationssysteme anzupassen, wenn Du Deine Ein-, Ausgaben und reiner Verarbeitung sauber trennst. Als Bindeglied kannst Du wieder mqtt verwenden. Kleines Beispiel - wenn man mein NR Dashboard kennt, dann sieht ja die Übersichtsseite so aus:
Man kann also direkt auf das Dashboard (oder VIS, Jarvis etc) ausgeben oder eine mqtt Schicht dazwischen schalten, in dem man die Ausgaben ins mqtt schreibst
Und dann kann man sie dort rausholen
und sie dann auf der UI (NR-Dashbord, vis, Jarvis) ausgeben oder in states/Entitäten unterschiedlicher Systeme schreibt (iobroker, HA etc.)
Im Prinzip könnte man sich auch überlegen die ganzen I/O in eigene Flows zusammenzufassen, dann kann man sich überlegen ob man direkt in die states/Entitäten oder mqtt schreiben will und dann nur die Ausgabeflows entsprechend anpassen.
Und wie gesagt über die HTTP - WEB API von Node-Red kann man die iobroker Nodes selbst bilden, in dem man kleine Subflows schreibt. Ist alles nicht so schlimm - aber man muss halt mal selbst anfangen - und wie gesagt, ich bin bei so einem Projekt gerne dabei. Das einzige was man sich dann von @haus-automatisierung noch wünschen könnte, wäre eine iobroker-IN Node mit variablen Subscriptions (also über msg Properties) so wie es mit Javascript auch möglich ist.