HowTo: Node Red – Kühlschrank-Tür-Überwachung mithilfe des Energieverbrauchs

In den vergangenen Wochen hatte ich des Öfteren das Problem, dass meine Gefrierschranktür nicht richtig schloss. Das führte dazu, dass mindestens in einer Nacht die Kühlschranktür fast sieben Stunden nicht richtig geschlossen war.

Als mir das ein paar Tage später schon wieder passiert war, hatte ich beschlossen etwas dagegen unternehmen zu wollen. Dabei würde es mir schon reichen, wenn ich darüber informiert würde, wenn ich die Kühlschranktür mal wieder zu lange offen stehen lassen würde.

Nach ein bisschen experimentieren ist dabei der unten beschrieben NodeRed Code herausgekommen. Mit diesem (und einer Wifi fähigen Steckdose die auch in der Lage ist die genutzte Energie zu messen) kann man anhand des Energieverbrauchs des Kühlschranks erkennen ob die Kühlschranktür geschlossen oder offen ist.

Der NodeCode misst dazu (mithilfe der Steckdose) kontinuierlich den Stromverbrauch und erkennt, wenn dieser zu Hoch ist. Dies ist nämlich typischerweise der Fall, wenn die Kühlschranktür zu lange offen steht, dadurch die Temperatur im inneren steigt und das wiederum dazu führt, dass der Kältekompressor des Kühlschranks öfter anspringt oder gar nicht mehr ausgeht.

Mehr Details und was Ihr zum Aufbau Eurer eigenen Kühlschranküberwachung beachten müsst, ist im folgenden Artikel beschrieben.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Damit Ihr neue Nodes installieren könnt sollte NodeRed natürlich schon installiert sein.
Wie ihr einen RaspberryPi dazu vorbereitet und dann NodeRed darauf installiert ist in den folgenden Artikeln beschrieben.

Die folgenden drei Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPi – Die Erste Konfiguration!
RaspberryPi – Den RaspberryPi über SSH steuern

NodeRed – Installation von NodeRed auf dem RaspberryPi
NodeRed – Neue Nodes installieren
NodeRed – Node-Code importieren und exportieren

Benötigtes Werkzeug:
-keins-

Benötigtes Material:

In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.


Benötigte Nodes installieren

Für diesen Flow werden eigentlich keine speziellen Nodes benötigt. Die meisten davon gehören zu den standard-nodes von NodeRed. Lediglich die Dashboard Node wird benötigt um die gesammelten Daten zu visualisieren. Mehr Infos dazu findet Ihr im Artikel NodeRed – Mit Dashboard-Nodes eine Benutzeroberfläche erstellen.


Die Funktion

Als erstes: Dieser NodeCode ist noch nicht perfekt, funktioniert für meinen Kühlschrank nun aber schon seit ein paar Wochen recht zuverlässig.

Die Funktion lässt sich dabei am besten mithilfe der unten stehenden Bilder und ein bisschen Erklärung zur Funktionsweise eines Kühlschranks erklären.

Ein Kühlschrank kühlt die Luft im inneren mithilfe eines Kältekompressors. Dieser Kältekompressor wird über einen Thermostat automatisch ein- und ausgeschaltet, wenn die Luft im inneren des Kühlschranks zu warm wird/ist. Dies führt (zum Beispiel bei meinem Kühlschrank) dazu, dass der Kältekompressor nur ca. 30 Minuten pro Stunde wirklich eingeschaltet ist. In der restlichen zeit hält sich die Temperatur im inneren aufgrund der guten thermischen Isolierung eines Kühlschranks. Diese Werte können bei anderen Kühlschränken natürlich anders aussehen. Wenn ein Kühlschrank zum Beispiel besser isoliert ist, muss der Kältekompressor nicht so oft anspringen.

Auf jeden Fall kann man sich die Laufzeit des Kältekompressors zur nutze machen. Denn ist es im Kühlschrank dauerhaft zu warm (zum Beispiel aufgrund einer offenen Tür) bleibt auch der Kältekompressor länger eingeschaltet. Wenn die Temperatur im inneren des Kühlschranks nicht sinkt, kann dies sogar dazu führen, dass der Kältekompressor dauerhaft eingeschaltet bleibt.

Ein eingeschalteter Kältekompressor lässt sich wiederum am Stromverbrauch des Kühlschranks erkennen. Mein Kühlschrank (zum Beispiel) verbraucht bei eingeschaltetem Kältekompressor ca. 80 bis 100W. Da er aber nur ca. 30 MInuten pro Stunde eingeschaltet ist entspricht dies einem Verbrauch von 40 bis 50W pro Stunde.

Ihr merkt es vielleicht schon: Wenn man weiß, welcher Verbrauch normalerweise pro Stunde zu erwarten ist und plötzlich erkennt, dass der aktuelle Verbrauch des Kühlschranks höher ist, kann man sich ziemlich sicher sein, dass das an einem zu lange laufenden Kältekompressor und somit einer offenen Kühlschranktür liegt.

Das Problem:

Die Erkennung über den zurückliegenden durchschnittlichen verbrauch ist sehr langsam.

In dem rot markierten und mit einer 1 markierten Bereich könnt Ihr den Verbrauch meines Kühlschranks bei geöffneter Tür sehen. Man kann erkennen, dass der Verbrauch fast durchgehend bei ca. 80 bis 100W liegt.

In dem gleichen Bereich ist auch eine etwas dunklere blaue Linie eingetragen, welche den Durchschnittlichen Energieverbrauch in diesem Zeitraum darstellt.

wie man dort auch erkennen kann steigt der durchschnittliche Energieverbrauch zwar an. Leider aber sehr langsam. Eine zuverlässige Erkennung wäre somit entweder erst sehr spät oder nicht sehr zuverlässig möglich.

Die Lösung

Nach ein paar weiteren Experimenten habe ich eine bessere Möglichkeit zur Detektion der Kältekompressor-Einschaltdauer gefunden. Wenn man den Energieverbrauch auf eventuelle Flanken abtastet kann man recht zuverlässig herausfinden wann der Kältekompressor ein- und ausgeschaltet wird. Sobald man diese beiden Zeitpunkte hat kennt man auch die Laufzeit des Kältekompressors.

Nun könnt Ihr die Einschaltdauer nach einem ähnlichen Prinzip überwachen wie vorher den Energieverbrauch: Wenn der Kältekompressor deutlich länger eingeschaltet ist, als die durchschnittliche Einschaltdauer, könnt Ihr davon ausgehen, dass dies an einer offenen Kühlschranktür liegt.

Dieses Verfahren erkennt eine offene Kühlschranktür zwar auch nicht “direkt” aber (bei meinem Kühlschrank) immerhin innerhalb 30 bis 45 Minuten. Dies ist ausreichend um mindestens ein paar Lebensmittel vor dem Auftauen zu retten.


Die Steckdose

Damit die Messung des Energieverbrauchs Eures Kühlschranks überhaupt erst möglich wird, benötigt Ihr eine Steckdose bzw. einen Zwischenstecker, der den aktuellen Energieverbrauch Eures Kühlschranks an Euer smartHome sendet. ich habe dazu eine WiFi Zwischenstecker mit Energiemessung verwendet, den ich dazu auch noch mit der Tasmota Firmware geflasht habe. Der NodeRed code empfängt dessen Daten dann später über MQTT.

Wie Ihr einen Zwischenstecker mit der Tasmota Firmware flashen und etwas besser konfigurieren könnt ist zum Teil in dem Artikel Tasmota – Firmware mit TuyaConvert flashen beschrieben.


Anzeigen im Dashboard

Wenn Ihr den unten stehenden NodeCode in Eure NodeRed Konfiguration importiert werden auch die folgenden Ansichten zu Eurem Dashboard hinzugefügt.

In dieser Ansicht seht Ihr ganz oben ein Textfeld in welchem angegeben wird ob bereits ausreichend Messwerte vorliegen um aufgrund des durchschnittlichen Verbrauchs einen abnormalen Verbrauchswert zu erkennen.

In mittleren Bereich wird der vergangene und durchschnittliche Energieverbrauch eures Kühlschranks angezeigt.

Im unteren Bereich sind die aus dem Energieverbrauch ermittelten Einschaltphasen des Kältekompressors zu sehen. Die Zeitdauer ist jeweils in Sekunden eingetragen. Dabei ist jeweils die aktuelle, vorherige als auch die Durchschnittliche Einschaltdauer eingetragen.

Zusätzlich zu den oben stehenden Verlaufsdaten werden Euch auch die links stehenden Daten angezeigt.

Ganz oben seht Ihr den vergangenen durchschnittlichen Verbrauch Eures Kühlschranks

In der Mitte den aktuellen Verbrauch eures Kühlschranks

Ganz unten wird die zuletzt ermittelte Einschaltdauer Eures Kältekompressors angezeigt.


Node Code einfügen

Der unten stehende NodeCode enthält alles notwendige um den Energieverbrauch Eures Kühlschranks nach oben beschriebenem Schema auszuwerten und ggf. via Pushbullet eine Benachrichtigung an Euch zu senden. Wie Ihr NodeCode in Eure NodeRed Konfiguration einfügen könnt, ist im Artikel NodeRed – Node-Code importieren und exportieren beschrieben.

Damit die Benachrichtigung mithilfe von Pushbullet an Euch weitergeleitet werden kann, müsst Ihr die Pushbullet Node natürlich entsprechend konfigurieren. Tipps dazu findet Ihr im Artikel NodeRed – Pushbullet Nachrichten bei Ereignissen senden

Ein paar weitere Infos:
Die Pushbullet Nachricht wird ausgelöst, wenn die aktuelle Einschaltdauer 1,8mal so hoch ist wie die durchschnittliche Einschaltdauer. Dies bedeutet also, dass das die abnormale Einschaltdauer erst nach Ablauf der 1,8fachen durchschnittlichen Kältekompressor-Einschaltdauer Eures Kühlschranks erkannt wird. Bei einer durchschnittlichen Einschaltdauer von 30 Minuten würdet Ihr so also erst nach 54 Minuten einen Hinweis auf eine abnormale Einschaltdauer erhalten.

Diesen Wert könnt Ihr natürlich auch verringern. Der einzige Nachteil ist, dass es zu einem “Fehlalarm” kommen kann. Wenn ihr wollt probiert doch einfach Mal verschiedene Werte aus. Diese Erkennung ist in der Function Node “checkForAbnormalValues” implementiert.

Den NodeCode findet Ihr im Nerdiy-Git unter folgendem Link:

https://github.com/Nerdiyde/NodeRedSnippets/blob/master/snippets/fridge_door_monitoring_by_energy_consumption.json


Viel Spaß mit dem Projekt

Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com       

4 Kommentare

    1. Jap, hast du absolut recht. Das ganze ist damals aus der “Not” geboren, dass ich die Steckdose schon zuhause hatte und so keine neue Hardware kaufen musste. 🙂
      Danke 🙂

  1. Hallo!
    Ich arbeite mich gerade erst etwas in NodeRed ein. Deshlab wahrscheinlich ein paar einfache blöde Fragen. Ich denke mal, Smooth kommt über die Palette node-red-node-smooth mit rein. Dann kommen bei mir über den Tasmota Sensor alle Werte hintereinander als String rein:
    ——————-
    “{“Time”:”2021-01-25T11:44:20″,”ENERGY”:{“TotalStartTime”:”2020-12-11T17:29:39″,”Total”:15.316,”Yesterday”:0.288,”Today”:0.103,”Period”:0,”Power”:0,”ApparentPower”:0,”ReactivePower”:0,”Factor”:0.00,”Voltage”:0,”Current”:0.000}}”
    —————————-
    Wo nimmst du den String auseinander? Das erschließt ich mit leider noch nicht.

    Stefan

    1. Hey Stefan,
      ach das ist keine blöde Frage. Ich glaube das ist recht typisch wenn man das was jemand anders geschrieben/gebaut hat nachvollziehen muss/will. Ist beim programmieren ja genauso 🙂
      Ich hoffe ich habe dich richtig verstanden. Zum einen baue ich die Nachrichten in der Node die im Bild “Ändern: 2rules” heißt um. Da werden die Infos aus der Nachricht msg.payload.ENERGY.Today in die Nachricht msg.Energy kopiert. Außerdem wird der Inhalt von msg.payload.ENERGY.Power in msg.payload kopiert. Ein Großteil der Verarbeitung ist dann in der Node “checkValue” implementiert. Ich hoffe das hilft dir weiter. Ansonsten frag gerne. 🙂
      Beste Grüße
      Fabian

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.