Node RED ist eine intelligente Lösung für stark anpassbare Smart Home Set-Ups ohne großen Coding-Aufwand. Um ein Smart Home über Node RED zu steuern, muss einfach eine Node RED Instanz lokal installiert werden (bspw. auf dem eigenen PC oder einem Raspberry PI). Anschließend können über die bereitgestellte Weboberfläche Flows erstellt und bearbeitet werden, um das Maximale aus den smarten Geräten in deinem Haushalt herauszuholen. Node RED bietet somit eine spannende Lösung für alle, die mehr Kontrolle und Flexibilität für ihr Smart Home wünschen ohne viel Code schreiben zu wollen.
IOmeter in Node RED integrieren
Dein IOmeter kannst du ganz einfach in Node RED über die lokale Schnittstelle der Bridge integrieren. Über {ip-adresse}/v1/status und {ip-adresse}/v1/reading lassen sich hierbei die Status- und Reading-Daten, die dein IOmeter ausgibt, abrufen. Die IP-Adresse deiner Bridge findest du bspw. in der IOmeter App im Gerätestatus.
Um die Abfrage der beiden lokalen Schnittstellen nun in Node-RED zu automatisieren sind zwei Nodes entscheidend: Der http request-Node sowie der change-Node:
Der http request-Node führt, nachdem er in einem Flow angesprochen wird, die Anfrage an die lokale Schnittstelle der Bridge aus. Hierfür muss in den Einstellungen des Nodes eine GET-Anfrage an den gewünschten Endpunkt (s.o.) gewählt werden. Unter "return" wird dann ein JSON-Objekt als Ausgabe-Wert gewählt. Hierbei handelt es sich um ein Dateiformat, das die Daten des Endpunkts enthält und das im Node RED Flow an den nächsten Node übergeben wird. Um beide Endpunkte (status und reading) abzufragen müssen zwei seperate http request-Nodes erstellt werden:
Anschließend können die Daten im JSON-Objekt im change-Node extrahiert und verarbeitet werden. Im untenstehenden Beispiel werden alle Zählerwerte aus dem JSON-Objekt des "readings"-Endpunkt extrahiert. Hierfür wählst du "Set", setzt hinter "msg." den Namen des gewünschten Rückgabewerts des Nodes und unter "to the value" dann "JSON expression". In dem "to the value"-Feld definierst du dann den Pfad zu den Werten die du extrahieren und ausgeben willst:
Um alle readings-Werte zu erhalten, kopiere in das "to the value"-Feld folgendes Objekt:
{
"consumption_total": payload.meter.reading.registers[obis="01-00:01.08.00*ff"][0].value,
"consumption_tariff1": payload.meter.reading.registers[obis="01-00:01.08.01*ff"][0].value,
"consumption_tariff2": payload.meter.reading.registers[obis="01-00:01.08.02*ff"][0].value,
"production": payload.meter.reading.registers[obis="01-00:02.08.00*ff"][0].value,
"power": payload.meter.reading.registers[obis="01-00:10.07.00*ff"][0].value
}
Um alle status-Werte zu erhalten, kopiere dieses Objekt in das Feld:
{
"meter_number": payload.meter.number,
"device_id": payload.device.id,
"connection_status": payload.device.core.connectionStatus,
"attachment_status": payload.device.core.attachmentStatus,
"pin_status": payload.device.core.pinStatus,
"power_status": payload.device.core.powerStatus,
"battery_level": payload.device.core.batteryLevel,
"device_rssi": payload.device.core.rssi,
"bridge_rssi": payload.device.bridge.rssi,
"device_version": payload.device.core.version,
"bridge_version": payload.device.bridge.version
}
Der change node gibt nun unter msg.{gewählter_name} die extrahierten Objekt für readings und status zurück. Um nun in einem folgenden Node auf die einzelnen Werte zuzugreifen, geht das bspw. unter msg.readings.total_consumption oder msg.status.attachment_status. Es kann natürlich auch das ganze Objekt mit allen Werten über msg.readings und msg.status abgerufen werden.