NEWS
Zugriff auf andere ioBroker Objekte im Flow?
-
Ich würde gerne innerhalb eines Flows, der z.B. durch das Außenthermometer getriggert wird, auf die Werte von anderen Homematic Sensoren innerhalb eines Function Nodes zugreifen - bin aber nicht sicher ob - und wie - es gehen könnte.
Die einzige Lösung, die mir in den Sinn gekommen ist: Den Topic "*" abonnieren und einfach alles in ein context.global.state Objekt in node-red zu schreiben. Gibt's noch einen besseren Weg?
-
Die Frage hatte ich auch einmal gestellt und sie wurde negativ beantwortet (nicht möglich), mit der Erklärung warum:
-
Danke, das dachte ich mir schon. Dann will ich hier zumindest meinen Workaround veröffentlichen.

Ich nehme alle Nachrichten von einem bestimmten Zweig aus dem IOBroker und schreibe die in eine globale Variable in node-red:
context.global.state=context.global.state || {}; var topics = msg.topic.split("/"); var obj=context.global.state[topics[2]] || {}; obj[topics[4]]=msg.payload; context.global.state[topics[2]]=obj; msg.payload=context.global.state; return msg;Damit baut sich in node-red eine Kopie des Status auf, der in jedem anderen Knoten ausgelesen werden kann.
Hier der gesamte Flow:
[{"id":"4cd83049.b327d","type":"function","name":"HM Status","func":"context.global.state=context.global.state || {};\nvar topics = msg.topic.split(\"/\");\nvar obj=context.global.state[topics[2]] || {};\nobj[topics[4]]=msg.payload;\ncontext.global.state[topics[2]]=obj;\nmsg.payload=context.global.state;\nreturn msg;","outputs":1,"noerr":0,"x":307,"y":43,"z":"88669efa.77996","wires":[["45440a29.babbf4"]]},{"id":"45440a29.babbf4","type":"debug","name":"","active":true,"console":"false","complete":"false","x":529,"y":43,"z":"88669efa.77996","wires":[]},{"id":"3f5d8b2c.c0a274","type":"http in","name":"","url":"/state","method":"get","swaggerDoc":"","x":94,"y":155,"z":"88669efa.77996","wires":[["bef86295.4107a"]]},{"id":"cbe3f0f4.341c1","type":"http response","name":"","x":450,"y":155,"z":"88669efa.77996","wires":[]},{"id":"bef86295.4107a","type":"function","name":"","func":"msg.payload=context.global.state || {};\nreturn msg;","outputs":1,"noerr":0,"x":269,"y":155,"z":"88669efa.77996","wires":[["cbe3f0f4.341c1"]]},{"id":"4e385fd6.b1c7a","type":"ioBroker in","name":"","topic":"hm-rpc.0.*","payloadType":"object","x":100,"y":43,"z":"88669efa.77996","wires":[["4cd83049.b327d"]]}]Im Flow gibt es auch einen http Knoten, um sich den Zustand im Browser anzusehen: http://raspi2:1880/state.
Beispiel Ausgabe im Browser:
{ "JEQ015XXXX": { "BRIGHTNESS": { "val": 49, "ack": true, "ts": 1438836131, "from": "system.adapter.hm-rpc.0", "lc": 1438836131 }, "ERROR": { "val": 0, "ack": true, "ts": 1438836131, "from": "system.adapter.hm-rpc.0", "lc": 1437798650 } }, "LEQ053XXXX": { "BOOT": { "val": true, "ack": true, "ts": 1438836140, "from": "system.adapter.hm-rpc.0", "lc": 1437798621 }, "ENERGY_COUNTER": { "val": 4.8, "ack": true, "ts": 1438836140, "from": "system.adapter.hm-rpc.0", "lc": 1438799077 }, "POWER": { "val": 0, "ack": true, "ts": 1438836140, "from": "system.adapter.hm-rpc.0", "lc": 1438799086 }, ... }
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden