NEWS
NodeRed IO Broker Nodes
-
Hallo Forum,
ich bin gerade dabei meine NodeRed Skills zu erweitern.
Ich steh aber etwas auf dem Schlauch. Die folgenden Nodes habe ich bislang noch nie genutzt und auch als Test habe ich das Verhalten getestet, mir ist aber der Anwendungsfall nicht ganz klar. Wofür nutze ich die denn bitte?
-
@taddy81 Dir fehlen eher die Grundlagen. Alles im ioBroker ist ein Objekt. Und die Objektdefinition (nicht den State) kannst Du mit dem ersten Baustein holen.
Oder mit sendTo Nachrichten an bestimmte Instanzen senden (was genau die Instanzen können, hängt dann vom Adapter ab. Siehe pushover, telegram, influxdb, history, ...).
-
@taddy81 Also es stimmt schon, dass alle "states" auch Objekte sind, das siehst Du ja wenn Du im Admin des iobrokers den tab "Objekte" aufmachst und dann auf den Bleistift klickst - dann findest Du so was:
und auf das kannst Du mit diesen Nodes "teilweise zugreifen".
Fangen wir mal bei der Node an, die NEU ist und bei der ich froh bin, dass es sie nun endlich gibt, da sie nun ein Defizit zu den Puzzlefreunden ausmerzt
Über diese Node kannst Du ein Kommando an einen Adapter schicken und kommunizierst nicht über Objekte resp. Datenpunkte. So kannst Du SQL Kommandos an einen SQL Adapter schicken, Mqtt publish commandos an den mqtt Adaper ohne erst Datenpunkte zu erstellen usw.
Ein Beispiel wie so ein Kommando an einen Adapter aussehen könnte, hat @haus-automatisierung auf github erstellt.
Leider fehlt der Hilfetext in dieser Node - aber ist auch schwierig, da das Kommando ja auch von Adapter zu Adapter unterschiedlich aussieht. Man muss also bei den Adaptern nachlesen.=================================================================================
So nun zu den anderen Nodes.Grundsätzlich kennst Du ja die iobroker-get Node. Sie ist dazu da, wenn Du aktiv in einem Flow Werte oder Objekte auslesen willst und die nicht selbst triggert. Sprich Du nutzt die iobroker get Node um Werte auszulesen, wenn es im Flow erforderlich ist.
Um es gleich vorwegzunehmen:
die "iobroker get object" Node kannst Du in meinen Augen vergessen.
Diese Node ist entweder ein Überbleibsel aus der Vergangenheit und hat in meinen Augen kaum einen Wert, da die Informationen nur teilweise kommen, diese Node unflexibel ist und andere Nodes das besser können.
Ich würde Dir empfehlen diese Node zu vergessen, da die iobroker list Node WESENTLICH leistungsfähiger ist und Dir mehr Informationen über die Objekte ausgibt.
Trotzdem noch ein paar Worte zu iobroker get object Node. Der einzige Vorteil eine iobroker-get object Node gegenüber einer iobroker get Node mit der Du das Objekt ausliest ist, dass die Informationen zwar vollständiger sind, aber lange nicht so vollständig wie bei einer list node.
Wenn man bei einer iobroker-get Node sich das Objekt ausgeben lässt dann
und dann mit einer iobroker get Objekt Node vergleicht, dann stellt man folgendes fest:
In der iobroker-get Node findet man nur einen Teil der Objektinformationen, die man in der iobroker get object Node hat. Allerdings fehlen in der get object Node sowohl die timestamps (ts und lc) als auch das value. Für mich ist diese Node obsolet.
Fazit: Wenn man die paar zusätzlichen Informationen der iobroker-get object Node noch in die normale iobroker-get Node packen würden, könnte man auf die iobroker get object Node verzichten!
=====================================================================================
Sehr mächtig und vielseitig ist hingegen die list Node:
Sie kann alles was die get Nodes können und noch viel mehr.
Nehmen wir wieder das Objekt dieses Mal als Text
{ "common": { "read": true, "write": true, "desc": "Created by Node-Red", "role": "state", "name": "0_userdata.0.Test.FritzBox7590.Zähler.stündlich", "type": "number" }, "native": {}, "type": "state", "from": "system.adapter.node-red.1", "user": "system.user.admin", "ts": 1713787200217, "_id": "0_userdata.0.Test.FritzBox7590.Zähler.stündlich", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "enums": {}, "val": 2096572, "ack": true, "q": 0, "lc": 1713787200217 }
Man sieht hier nicht nur alle Angaben des iobroker-get Object Node, sondern zugleich KANN man sich den Value ausgeben lassen und man sieht die enums.
Dies ist übrigens die einzige Möglichkeit in NodeRed, um zu sehen, ob ein Datenpunkt einem Raum oder einer Funktion zugeordnet ist. Ein Möglichkeit alle Datenpunkte zu einem Raum auszugeben gibt es nicht - über die List Node kann man sich aber in begrenztem Rahmen helfen.
Um sowohl die gesamten Objekte zu sehen, muss man sich diese ausgeben lassen.
Nun was macht diese Node aber noch so mächtig (meines Erachtens die mächtigste der iobroker Nodes).
Nun über den Typ kann man den Typ filtern, so dass man Verzeichnisse etc ausfiltern kann. In den Objekteigenschaften kann man ja den Typ angeben:
Möchte man alle Objekte haben kann sich die auch über Any ausgeben lassen:
Nun kommt aber das wichtigste man kann sich somit alle Objekte ausgeben lassen, da das die EINZIGE Node, neben der iobroker IN Node ist, die mit Wildcards arbeiten kann.
Lässt man sich die IDs ausgeben (und hier muss man darauf achten, dass man sich die Werte nicht ausgeben lässt), bekommt man ein Array - das man zum Beispiel für normale iobroker-get verwenden kann, wobei man dann selbst filter kann - ansonsten macht die list Node das automatisch.
Dröselt man das Array auf - kann man es ggf. filtern und sich so alle Values aufeinmal ausgeben lassen.
Man verschiebt die payload nur auf das topic und füttert die iobroker-get Node und schon hast Du alle Werte Deiner Datenpunkte:will man aber nicht selber filtern - kann die list Node sowas schon out of the box.
So kann man sich dann die Werte über die val Eigenschaft bereits als einzelne Nachrichten ausgeben lassen.
Super praktisch ist, wenn man sich das als Array ausgeben lässt, dann kann man sich ggf. auch JOIN Node sparen wenn man alles in einem Array sich ausgeben lässt.
In diesem Fall selektiert man die val Eigenschaft dann einfach via JSONATA aus den Objekten heraus.
Diese Wildcards lassen sich nicht nur am Ende der iobroker Pfade (ids) nutzen sondern auch in der Mitte. Hier werden beide Geräte aus der Struktur erfasst.
Zu guter Letzt hast Du noch eine mächtige Möglichkeit alle IDs durch eine RegEx Filter zu jagen. Wenn ich also aus den obigen 10 Objekten nur die wöchentlichen und täglichen Objekte haben will, kann ich das der Node gleich mitgeben.
Du siehst also - warum ich die iobroker list Node, als einer der mächtigsten iobroker Nodes nenne.
So ich hoffe, das gibt Dir genügend Ideen zum Ausprobieren.
-
Wie ich schon sagte, sind die Aufzählungen und Räume im iobroker in meinen Augen unglücklich implementiert und in NodeRed ist die einzige Möglichkeit auf diese Informationen zuzugreifen über die iobroker-list node.
Um beispielsweise, wie in der Objektansicht nur die states zu selektieren, die die Funktion Licht aufweisen, muss man alle Objekte auswerten.
Über JSONATA geht das zwar relativ einfach, aber man kann halt leider (auch bei den triggern) nicht auf diese Funktionen und Räume oder sonstigen Aufzählungen zugreifen, wie in Javascript . Aber zumindest ein kleiner Workaround ist möglich.
An den Screenshot sieht man die iobroker list node mit allen states ergibt 48 Objekte, gefiltert nach der Funktion Licht dann nur noch 21 Objekte.
Ich persönlich nutze deshalb diese Aufzählungen und Räume nie, sondern speichere mir ggf. eigene Listen ab.
-
@mickym Wahnsinn, vielen vielen Dank für deine Mühe und Zeit mir (und vllt noch dem ein oder anderem) die Nodes näher zu bringen.
Wie hast du dir das ganze wissen drauf geschafft?
-
@taddy81 sagte in NodeRed IO Broker Nodes:
Wie hast du dir das ganze wissen drauf geschafft?
Ich nutze iobroker nur mit Node Red und das beinahe nun 5 Jahre- und auch durch das Supporten hier, lerne ich viel anhand der Problemstellungen. Meine Flows sehen heute auch teilweise anders aus, als vor ein paar Jahren, wenn man immer mehr Möglichkeiten entdeckt. Allerdings bin ich bei alten Flows auch teilweise zu faul, diese neu zu schreiben, da sie ja funktionieren.
-
Deine Nachricht empfinde ich als Unterstellung und anscheinend hast du meine Frage falsch verstanden. Wie IOBroker seine Stati speichert ist mir bewusst, nehme aber Objekte aus der Admin Oberfläche. Für die üblichen Arbeiten brauche ich die Definition aber nicht, daher die Frage, was ich mit diesen Nodes genau anstellen kann
-
@taddy81 Mh? Dann weißt Du doch dass man daraus Meta-Informationen wie Einheit, Datentyp, Min- und Max-Werte usw. lesen kann.
-
Ich sage nochmals Danke, ich habe mir eine langfristige Auswertung meiner PVDaten erstellt und denke, dass ich mit List Node diese Daten sogar noch besser auswerten kann.
Sicher nicht die intelligenteste oder effektivste Art mit Daten zu arbeiten, aber das macht NodeRed für mich so einzigartig.
Du kannst über die verschiedensten Wege ans Ziel kommen. Und um die Antwort vor weg zu nehmen, ja, mittels Flux könnte ich die Daten auch ohne diesen Aufwand aggregieren. Die FluxSprache finde ich aber furchtbar unintuitiv.Ich bin erst seit einem Jahr mit NodeRed unterwegs, wenn ich mir alleine meine Schaltung für den Heizstab ansehe, dann hat sich da schon eine Menge getan.
Version 1 (März 2023)
Version Heute