himpler.com himpler.com

Der neue homee Log Node

4 Min.

Heute hat das Node-RED Plugin für homee einen neuen Node spendiert bekommen. Mit dem homee Log Node lässt sich die Log-Datei eines homee abfragen und so in Automationen einbeziehen. Das Update mit der Versionsnummer 0.11.0 kann manuell mit npm oder über die Palette installiert werden.

Der neue homee Log Node

Der Log Node stellt eine weitere Schnittstelle zu eurem homee Brain Cube bereit. Der ansonsten nur aufwändig zugängliche Log lässt sich mit dem Node ohne großen Konfigurationsaufwand abfragen. Als Bonus kann zwischen drei verschiedenen Ausgabeformaten gewählt werden. Mehr dazu weiter unten.

Konfiguration

Zur Nutzung des Nodes muss lediglich ein homee Konfigurationsnode ausgewählt bzw. erstellt werden. Hier wird auf den gleichen Node zurückgegriffen, der auch im homee Api Node verwendet wird. Nutzt ihr das Plugin also bereits zur Kommunikation mit eurem homee Brain Cube, muss nur der schon bestehende Konfigurationsnode ausgewählt werden. Im zweiten Feld lässt sich optional ein beliebiger Name für den Node vergeben.

Die einfache Konfiguration des homee Log Nodes

Das dritte und letzte Konfigurationsfeld bestimmt das Ausgabeformat. Hier kann zwischen drei möglichen Optionen gewählt werden:

  • Rohdaten: Der Log wird so wie er von homee übermittelt wird ausgegeben. Perfekt um die Ausgabe automatisch in einer Datei zu speichern.
  • Array: Der Log wird zeilenweise in einen Array umgewandelt.
  • Collection: Zusätzlich zur zeilenweisen Umwandlung wird hier noch die eigentliche Log-Nachricht in ein Objekt mit den Eigenschaften datetime, topic, level und message umgewandelt. Eignet sich perfekt um z.B. nach einer bestimmten Eigenschaft zu filtern.

Beispiel-Flows zur Nutzung des homee Log Nodes

Um den Start ein wenig leichter zu machen, stelle ich hier noch drei Beispielflows bereit, die als Grundlage oder Anregung für eigene Flows genutzt werden können.

Automatisches Speichern des homee Logs

Der erste Flow ist sehr einfach gehalten. Hier wird einmal täglich der Log abgefragt in einer Datei archiviert.

Ein Flow zum automatischen Speichern der Log Datei

Dazu werden die Rohdaten der Abfrage einfach an eine Datei weitergereicht. Damit die Datei nicht überschrieben oder durch tägliches anhängen des neuen Payloads zu groß wird, erzeugt der Flow noch einen vom Tagesdatum abhängigen Dateinamen, der beliebig angepasst werden kann.

[{"id":"a2cf8fa4a5c30913","type":"homeeLog","z":"65a118636c2f2bd8","homee":"","name":"homeeLog abfragen","output":"raw","x":370,"y":100,"wires":[["c0dcfcf17dafad60"]]},{"id":"cbf839ddc4645fb9","type":"inject","z":"65a118636c2f2bd8","name":"täglich um 0:00 Uhr","props":[{"p":"payload"}],"repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":160,"y":100,"wires":[["a2cf8fa4a5c30913"]]},{"id":"6ec2ebebe1f3c0b4","type":"file","z":"65a118636c2f2bd8","name":"","filename":"","appendNewline":true,"createDir":false,"overwriteFile":"false","encoding":"none","x":750,"y":100,"wires":[[]]},{"id":"c0dcfcf17dafad60","type":"function","z":"65a118636c2f2bd8","name":"autom. Dateiname","func":"// legt den Dateinamen der Logdatei fest\n// es wird das Tagesdatum im Format YYYY-MM-DD verwendet\n// Enthält der Dateiname keinen absoluten Pfad, wird die Datei im Node-RED Arbeitsverzeichnis abgelegt\n\nmsg.filename = `${new Date().toISOString().substr(0,10)}-homee.log`\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":100,"wires":[["6ec2ebebe1f3c0b4"]]}]

Filtern der Lognachrichten auf ein bestimmtes Loglevel

Der zweite Flow nutzt das Ausgabeformat Collection um auf ein bestimmtes Loglevel (z.B. info, warning, error) zu filtern. Um die Weiterverarbeitung auf kritische Nachrichten zu beschränken, können wir mit einer kleinen Funktion z.B. nur die Nachrichten mit dem Loglevel error weiterreichen.

Ein Flow zum filtern des Loglevels

[{"id":"a34b5987545c76ac","type":"inject","z":"65a118636c2f2bd8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":260,"wires":[["144c444adb093ff7"]]},{"id":"144c444adb093ff7","type":"homeeLog","z":"65a118636c2f2bd8","homee":"","name":"homeeLog abfragen","output":"collection","x":290,"y":260,"wires":[["da51d7c97ffe14d3"]]},{"id":"da51d7c97ffe14d3","type":"function","z":"65a118636c2f2bd8","name":"Filtern auf Loglevel Error","func":"msg.payload = msg.payload.filter((m) => {\n    return m.level === 'error';\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":260,"wires":[["b81cfa28df7321b9"]]},{"id":"b81cfa28df7321b9","type":"debug","z":"65a118636c2f2bd8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":260,"wires":[]}]

Daily Log Rotate für homee

Wer sich schon etwas intensiver mit Logdateien beschäftigt hat, kennt bestimmt das Prinzip des täglichen Logfiles. Hier werden die Lognachrichten tageweise in Dateien abgelegt. Auch das lässt sich mit dem homee Log Node und einigen Funktionen realisieren.

Daily Log Rotate für den homee Log

Wie im Beispiel zuvor wird der Log als Collection weitergereicht. Anstelle des Loglevels filtert die Funktion des Nodes nun die Nachrichten heraus, die nicht am gestrigen Tag erzeugt wurden. Übrig bleibt damit nur noch der Log des gestrigen Tages. Die zweite Funktion erzeugt wieder einen automatischen Dateinamen und reicht diesen samt der gefilterten Log-Ausgabe an den File-Node weiter.

[{"id":"6ec2ebebe1f3c0b4","type":"file","z":"65a118636c2f2bd8","name":"","filename":"","appendNewline":true,"createDir":false,"overwriteFile":"false","encoding":"none","x":930,"y":260,"wires":[[]]},{"id":"c0dcfcf17dafad60","type":"function","z":"65a118636c2f2bd8","name":"autom. Dateiname","func":"// legt den Dateinamen der Logdatei fest\n// es wird das Tagesdatum im Format YYYY-MM-DD verwendet\n// Enthält der Dateiname keinen absoluten Pfad, wird die Datei im Node-RED Arbeitsverzeichnis abgelegt\n\nmsg.filename = `${new Date(Date.now() - 864e5).toISOString().substr(0,10)}-homee.log`\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":260,"wires":[["6ec2ebebe1f3c0b4"]]},{"id":"a34b5987545c76ac","type":"inject","z":"65a118636c2f2bd8","name":"täglich 00:00","props":[],"repeat":"","crontab":"00 00 * * *","once":false,"onceDelay":0.1,"topic":"","x":180,"y":260,"wires":[["144c444adb093ff7"]]},{"id":"144c444adb093ff7","type":"homeeLog","z":"65a118636c2f2bd8","homee":"","name":"homeeLog abfragen","output":"collection","x":350,"y":260,"wires":[["da51d7c97ffe14d3"]]},{"id":"da51d7c97ffe14d3","type":"function","z":"65a118636c2f2bd8","name":"nur gestrige Nachrichten","func":"// Gestern 0:00:00\nconst start = new Date(Date.now() - 864e5);\nstart.setHours(0,0,0,0);\n\n// Gestern 23:59:59\nconst end = new Date(Date.now() - 864e5);\nend.setHours(23,59,59,999);\n\n// Filtert die Nachrichten auf Basis des Zeitpunkts\nmsg.payload = msg.payload.filter((m) => {\n    if (!m.datetime) return false;\n    \n    const parsed = new Date(m.datetime.replace(' ', 'T'))\n    return start <= parsed && end >= parsed;\n});\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":260,"wires":[["c0dcfcf17dafad60"]]}]

tl;dr

Der homee Log Node bietet eine einfache Möglichkeit die Logdatei eines homee abzufragen. Dank der drei unterschiedlichen Ausgabeformate lassen sich die Daten vielfältig nutzen. Die drei Beispiel-Flows bieten dabei eine gute Grundlage um mit dem Log des homee zu arbeiten. So ist auch z.B. denkbar, bei bestimmten Ereignisse eine Benachrichtung per E-Mail zu versenden oder den homee automatisch neuzustarten.

Share this post!

Das könnte dir auch gefallen