Hallo zusammen,
Ich habe eine Szene erstellt, die einige von euch interessieren könnte: Erkennung eines Stromausfalls zu Hause und Benachrichtigung über Telegram.
Szenenniveau: Fortgeschritten
Dieses Szenario verwendet Funktionen, die in Gladys noch nicht vorhanden sind. Um dies zu umgehen, habe ich Node-Red verwendet, das auf demselben Raspberry Pi installiert ist.
Offizielle Gladys-Dokumentation zum Thema: Intégrer Node-RED avec Gladys Assistant en MQTT | Gladys Assistant
Voraussetzungen
Ich nutze zu Hause 100% Zigbee. Für diese Szene verwende ich zwei Komponenten, von denen eine nicht verbunden ist:
-
Eine verbundene 220V-Steckdose https://www.domadoo.fr/fr/peripheriques/6182-nous-lot-de-2x-prise-intelligente-zigbee-30-mesure-de-consommation-5907772033524.html?domid=17
Ich nutze die Gelegenheit, um diese Steckdosen zu empfehlen, sie sind nicht zu teuer, wirklich sehr klein und messen den Verbrauch! -
Ein USV, verbunden oder nicht. In meinem Fall habe ich es gebraucht für 50€ auf Leboncoin gekauft und habe Gladys und meine Operator-Fiberbox daran angeschlossen.
Im Falle eines Stromausfalls kann ich etwa 2 Stunden lang weiter im Homeoffice arbeiten und Gladys kann mir weiterhin Telegram-Benachrichtigungen senden!
Hier ist ein Schema, das (in dieser Reihenfolge) darstellt: die verbundene Steckdose, die USV, das Mehrfachsteckbrett (für die Fiberbox) und der Raspberry Pi mit Gladys und Node Red.
Warum eine USV?
Dies ermöglicht es, im Falle eines Stromausfalls im Haus, Gladys weiterhin mit Strom zu versorgen.
Wie erkennt man einen Stromausfall?
Die Idee ist sehr einfach, es gibt einen Stromausfall, wenn:
- meine verbundene Steckdose keinen Strom mehr verbraucht (Achtung, wenn sie ausgeschaltet ist, wird dies auch erkannt)
- meine Steckdose keine Daten mehr sendet für mehr als eine Minute
Dieser zweite Punkt wird (soweit ich weiß) von Gladys zum Zeitpunkt des Schreibens dieser Zeilen noch nicht verwaltet.
Node Red Konfiguration
Man muss Node Red installieren und die Verbindung mit Zigbee2MQTT konfigurieren (bereits von einer großen Anzahl von Tutorials abgedeckt).
Allgemeines Schema
Wie geht das?
-
Zuerst speichere ich den letzten von der verbundenen Steckdose zurückgegebenen Wert in einer Datei.
Ich füge den Baustein « Get Complete State » hinzu, um sicherzustellen, dass ich alle Daten der Steckdose habe. Dann ermöglicht mir « Add timestamp » das Hinzufügen des Datums des Datenempfangs, das ich schließlich in einer Datei mit dem willkürlichen Namen « prise_nous2_last_data.txt » speichere.
-
Dann lese ich diese Datei jede Minute und vergleiche das darin enthaltene Datum mit der aktuellen Zeit minus einer Minute.
Der Baustein « Parse JSON » ist notwendig, um die in der Datei gespeicherten Daten korrekt zu verwenden.
Dann berechne ich mit einem Funktionsblock die aktuelle Zeit minus einer Minute:
Schließlich führe ich zwei Tests mit den beiden « switch mode » Bausteinen durch: wenn die Steckdose weniger als 5W verbraucht oder wenn das Datum 1 Minute überschritten hat:
.png)
>
Zum Abschluss erstelle ich eine Nachricht, die in Telegra gesendet werden soll, mit dem letzten Block « JSON »:
Export JSON Node Red
[
{
"id": "877e6dde4f64094e",
"type": "tab",
"label": "Stromausfall",
"disabled": false,
"info": "",
"env": []
},
{
"id": "2d047039d3727cc5",
"type": "zigbee2mqtt-in",
"z": "877e6dde4f64094e",
"name": "SteckdoseWir2 (USV)",
"server": "6dda341ee7a029cb",
"friendly_name": "SteckdoseWir2",
"device_id": "REDACTED",
"state": "0",
"outputAtStartup": true,
"x": 140,
"y": 160,
"wires": [
[
"9cc8b65f8ce767af"
]
]
},
{
"id": "c57fa22873f8262e",
"type": "file",
"z": "877e6dde4f64094e",
"name": "Datei schreiben",
"filename": "steckdose_wir2_last_data.txt",
"filenameType": "str",
"appendNewline": false,
"createDir": false,
"overwriteFile": "true",
"encoding": "none",
"x": 740,
"y": 160,
"wires": [
[]
]
},
{
"id": "3c9969810f1b7d9c",
"type": "file in",
"z": "877e6dde4f64094e",
"name": "Datei lesen",
"filename": "steckdose_wir2_last_data.txt",
"filenameType": "str",
"format": "utf8",
"chunk": false,
"sendError": false,
"encoding": "none",
"allProps": false,
"x": 300,
"y": 320,
"wires": [
[
"393212bfa20c5210"
]
]
},
{
"id": "4f2d7369b4194a31",
"type": "inject",
"z": "877e6dde4f64094e",
"name": "Alle Minuten",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "10",
"crontab": "",
"once": false,
"onceDelay": "60",
"topic": "",
"payload": "",
"payloadType": "date",
"x": 140,
"y": 320,
"wires": [
[
"3c9969810f1b7d9c"
]
]
},
{
"id": "21bca9ada5443cb1",
"type": "change",
"z": "877e6dde4f64094e",
"name": "Zeitstempel hinzufügen",
"rules": [
{
"t": "set",
"p": "payload.timestamp",
"pt": "msg",
"to": "",
"tot": "date"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 580,
"y": 160,
"wires": [
[
"c57fa22873f8262e"
]
]
},
{
"id": "d32f71ec6761bdda",
"type": "switch",
"z": "877e6dde4f64094e",
"name": "Zeitstempel testen",
"property": "payload.timestamp",
"propertyType": "msg",
"rules": [
{
"t": "lt",
"v": "payload.lastminutetimestamp",
"vt": "msg"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 880,
"y": 320,
"wires": [
[
"cabbc5db0e4652b6",
"e803e70cdfe1f77a"
]
]
},
{
"id": "09bee4816c7b6a4b",
"type": "function",
"z": "877e6dde4f64094e",
"name": "Letzten 1-Minuten-Zeitstempel abrufen",
"func": "var oneMinInMs = 60000;\nvar lastminute = Date.now() - oneMinInMs;\nmsg.payload.lastminutetimestamp = lastminute;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 660,
"y": 320,
"wires": [
[
"d32f71ec6761bdda"
]
]
},
{
"id": "cabbc5db0e4652b6",
"type": "debug",
"z": "877e6dde4f64094e",
"name": "STROMAUSFALL",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 910,
"y": 280,
"wires": []
},
{
"id": "393212bfa20c5210",
"type": "json",
"z": "877e6dde4f64094e",
"name": "JSON parsieren",
"property": "payload",
"action": "",
"pretty": false,
"x": 450,
"y": 320,
"wires": [
[
"09bee4816c7b6a4b",
"af16ab7a64e96d55"
]
]
},
{
"id": "1868c1c355f975cf",
"type": "telegram sender",
"z": "877e6dde4f64094e",
"name": "Telegram",
"bot": "REDACTED",
"haserroroutput": false,
"outputs": 1,
"x": 1500,
"y": 320,
"wires": [
[]
]
},
{
"id": "dfaa974da87838fe",
"type": "function",
"z": "877e6dde4f64094e",
"name": "JSON TELEGRAM",
"func": "msg.payload = {\n chatId: REDACTED,\n type: 'message',\n content: '⚡‼️ Stromausfall im Haus festgestellt'\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1330,
"y": 320,
"wires": [
[
"1868c1c355f975cf"
]
]
},
{
"id": "e803e70cdfe1f77a",
"type": "switch",
"z": "877e6dde4f64094e",
"name": "Test Strom > 5W",
"property": "payload.power",
"propertyType": "msg",
"rules": [
{
"t": "lt",
"v": "5",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 1110,
"y": 320,
"wires": [
[
"dfaa974da87838fe"
]
]
},
{
"id": "af16ab7a64e96d55",
"type": "debug",
"z": "877e6dde4f64094e",
"name": "DATEI LESEN",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 450,
"y": 360,
"wires": []
},
{
"id": "9cc8b65f8ce767af",
"type": "zigbee2mqtt-get",
"z": "877e6dde4f64094e",
"name": "Vollständigen Zustand abrufen",
"server": "6dda341ee7a029cb",
"friendly_name": "SteckdoseWir2",
"device_id": "REDACTED",
"state": "0",
"x": 370,
"y": 160,
"wires": [
[
"21bca9ada5443cb1"
]
]
},
{
"id": "6dda341ee7a029cb",
"type": "zigbee2mqtt-server",
"name": "Zigbee2MQTT",
"host": "127.0.0.1",
"mqtt_port": "1884",
"mqtt_username": "z2m",
"mqtt_password": "REDACTED",
"tls": "",
"usetls": false,
"base_topic": "zigbee2mqtt"
},
{
"id": "1008fcc5ae346779",
"type": "telegram bot",
"botname": "Node Red Gladys Ermont",
"usernames": "",
"chatids": "REDACTED",
"baseapiurl": "",
"updatemode": "polling",
"pollinterval": "300",
"usesocks": false,
"sockshost": "",
"socksport": "6667",
"socksusername": "anonymous",
"sockspassword": "",
"bothost": "",
"botpath": "",
"localbotport": "8443",
"publicbotport": "8443",
"privatekey": "",
"certificate": "",
"useselfsignedcertificate": false,
"sslterminated": false,
"verboselogging": false
}
]
Fazit
Falls mein Wechselrichter keinen Strom mehr verbraucht, bedeutet das, dass es im Haus keinen Strom mehr gibt. In diesem Fall wird die Steckdose, an die der Wechselrichter angeschlossen ist, keinen Strom mehr verbrauchen oder Daten senden.
Node Red ermöglicht es mir, dies tatsächlich relativ einfach umzusetzen.
Zögern Sie nicht, mir Ihr Feedback zu geben, falls bestimmte Teile noch genauer erklärt werden müssen!











