NEWS
ioBroker Ojekt in Node abfragen
-
ich habe ein (Eigenbau) LED Matrix Display dem ich per MQTT einen String zur Anzeige schicken kann. Damit möchte ich nun abwechselnd Stati wie Temperaturen oder Ereignisse wie Türklingel anzeigen.
Die Temperaturen kommen unregelmässig von Sensoren rein und werden in ioB Objekten abgelegt, sind dann also Stati die zu irgendeiner Zeit abgefragt werden können.
Als Lösung habe ich mir vorgestellt in NR zyklisch alle 10 s eine Message zu erzeugen mit Index 0...n der immer hochzählt. Im Node müsste dann Variable[Index] an den Ausgang weitergeleitet werden.
Diese Triggermessage ist jetzt einfach, aber wie könnte ich eine Parameterliste von ioB Objekten als Parameter übergeben oder im Flow ablegen? Und kann ich in einem (Function)Node auf ioB Objekte zugreifen? -
konnte mir selber helfen, wenn man weiss wie es geht ist es einfach
Man kann Daten in einem Flow oder global speichern, ich habe im Flow ein Array erzeugt das man mit flow.get/flow.set holen/schreiben kann.
Ein 'register ioBroker objects' schreibt die Topics von angeschlossen ioBroker Objekten in das Array. Ein anderer Node löst zyklisch ein 'ioBroker get' mit den Topics aus dem Array aus und schreibt die gelesenen Werte in das Display.
Wirklich eine geniale Kombination der ioBroker und NodeRed. -
ich habe das noch weiter verfeinert, mit dem 'ioBroker get object' hole ich beim Start die Objektnamen die später abgefragt werden sollen. Kann man in dem 'get object' den Statusnamen begrenzen? Oder nur die _id holen? Ich habe schon mit dem 'Attribut' in dem Node gespielt aber ohne Erfolg.
Habe auch gesehen das seit kurzem eine 'object list' gibt die dafür evtl. auch geeignet wäre. -
@JojoS sagte in ioBroker Ojekt in Node abfragen:
... Kann man in dem 'get object' den Statusnamen begrenzen? Oder nur die _id holen? Ich habe schon mit dem 'Attribut' in dem Node gespielt aber ohne Erfolg.
..
Da kannst du z.B. den simple-API Adapter benutzen:Oder gleich den Websocket Adapter wenn es ganz universell sein soll.
-
danke, Simple-Api kannte ich auch noch nicht. Mit dem get/state könnte ich dann die states innerhalb eines Nodes holen, aber innerhalb des gleichen Prozesses scheint mir der Weg über HTTP ineffizienter zu sein als der 'iobroker in' node und es ist eine asynchrone Operation.
Und im oberen Teil hole ich noch keine Werte, da merke ich mir nur die Objektnamen die zyklisch angezeigt werden sollen. Ginge auch über string Konstanten die per cut & paste aus der Objektliste geholt werden, so kann die Auswahlliste im get Object Node benutzen. -
@JojoS Mit dem ioBroker-In bekommst du nur die States aus der State-db nicht die Namen des zugehörigen Objectes aus der Object-db. Jedenfalls kenne ich das so.
Die Simple-API kann auch darauf zugreifen.
Mit der Effizienz hast du recht.
Aber wie gesagt, wenn es richtig effizient sein soll, nimm Websocket. -
dafür habe ich ja das 'ioBroker get Object' benutzt, das liefert Namen + alle Attribute, den Namen kann man bequem aus dem Objektbaum auswählen. Sieht etwas einfacher aus als die SimpleAPI Variante.
Aber viele Wege führen da zum Ziel.Was die 'Attribut' Einstellung in dem Node macht hatte ich auch rausgefunden: da kann das Ergebnis alternativ zur msg.payload reingeschrieben werden. Das steht noch nicht im Hilfetext zum Node.
-
@JojoS sagte in ioBroker Ojekt in Node abfragen:
dafür habe ich ja das 'ioBroker get Object' benutzt
Na wieder was gelernt;-) Den gibt es wohl noch nicht so lange. Ich mach nicht mehr wirklich viel mit node-red. Meist nehme ich gleich Javascript her. Der 'ioBroker get Object' ist mir glatt durch die Lappen gegangen.
-
Nachtrag,
habs grad getestet, die Ausgaben vom Simple-API-get sind identisch mit dem ioB-get-Object.
Gut zu wissen. -
@JojoS: Geht m.M. auch mit dem"ioBroker List" und einem Topic wie z.B. "hm-rpc.0.*" und regex-Value (z.B. "
^hm-rpc[.]0[.]([A-Za-z0-9]{14})[.]1[.](LEVEL|STATE|ACTUAL_TEMPERATURE|PRESENCE_DETECTION_STATE)$
So hole ich mir alle Einträge aus dem Baum "hm-rpc.0" die mit LEVEL, STATE usw. enden.