WakeUp Intervall per Lua anpassen

WakeUp Intervall per Lua anpassen

24. Januar 2017 28 344 Von Bastian

Batteriebetriebene Z-Wave Geräte, wie der weit verbreitete Heizungsthermostat LC-13 der Firma Danfoss – sowie dessen Derivate von Devolo und Co. – senden und empfangen nicht permanent im Z-Wave Netzwerk. Parameter wie beispielsweise die Solltemperatur werden in definierten Intervallen übertragen um die Laufzeit der Batterien zu erhöhen. So werden die aktuellen Werte alle X Minuten beim Gateway angefragt und übertragen.

Danfoss WakeUp Intervall

Danfoss WakeUp Intervall

WakeUp Intervall

Bei der Wahl dieses Intervalls galt es bisher, einen brauchbaren Mittelwert aus schneller Übertragung und Batterieschonung zu finden. Wirklich passende Werte zu finden um beispielsweise beim Öffnen eines Fensters die Heizung zeitnah herunterzuregeln, ohne alle 8 Wochen die Batterien wechseln zu müssen, gibt es nicht. Auch gibt es keine Fibaro Lua Funktion mit der die Änderung des WakeUp Intervalls in einer einfachen Szene möglich ist. In diesem Artikel stelle ich eine Szene vor mit der möglich ist, den Intervall für das Danfoss LC-13 automatisch zu ändern.

wakeUp Intervall Danfoss

wakeUp Intervall Danfoss

Sinnvoll oder sinnfrei?

Über die Frage ob die Änderung des Intervalls überhaupt sinnvoll ist, herrscht keine Einigkeit in der Community. Die eine Partei vertritt die Meinung, dass der vom Home Center definierte Intervall schon der richtige sein wird und es auf eine Verzögerung von 2 oder 3 Minuten nicht ankomm. Die Befürworter hingegen sind der Meinung, dass es sich lohnt den Intervall im Auge zu haben, um schnelle Reaktionen zu ermöglichen und alle Energiequellen (Heizung und Batterien) optimal zu nutzen. Die Sinnfrage ist nicht Teil dieses Artikels, hier geht es lediglich um die Möglichkeit der Anpassung.

Fibaro REST API

Manuell lassen sich die Parameter im Webinterface anpassen, automatisiert mit Lua Funktionen ist es nicht möglich. Jedoch ist es mit wenigen Handgriffen möglich den Intervall über die vom Home Center 2 zur Verfügung gestellte REST API zu ändern. Vereinfacht ausgedrückt wird die aktuelle Konfiguration des Gerätes ausgelesen, verändert und wieder zurück an die API gesendet. Klingt einfach? Ist es im Grunde auch, wenn da nicht das kleine „Aber“ wäre welches hier mal wieder einen Strich durch die Rechnung macht. Denn die einfach Änderung des Parameters wakeUpTime – auch über die REST API – hat keinerlei Effekt. Doch woran liegt das?

Parent / Child Module

Danfoss Master Slave Geräte

Danfoss Master Slave Geräte

Z-Wave Module bestehen in der Regel aus Master und Slave Device. Diese werden vom Gateway als unterschiedliche Geräte wahrgenommen. Gut zu erkennen, wenn man sich einmal die Eigenschaften eines Danfoss LC-13 ansieht. Technisch gesehen besteht der Thermostat also aus 2 Geräten. Dem eigentlichen Thermostaten an dem die Temperatur geregelt werden kann (hier mit der Fibaro ID 218) und dem Z-Wave Basismodul mit der ID 217. Im Home Center unter den verstecksten Geräten zu finden.

WakeUpTime ist Parameter des Z-Wave Moduls

Und genau hier liegt die Herausforderung. Die Parameter des Z-Wave Moduls werden vererbt. Stehen also auch dem Thermostaten zur Verfügung, können durch ihn aber nicht geändert werden. Um den Aufwachintervall zu manipulieren muss die Änderung also im darüberliegenden Modul – dem Parent – durchgeführt werden.

Da es auch Module mit mehr als einem Untermodul – Child(s) – gibt, ist die Identifizierung des Parents nicht durch einfache Grundrechenarten zu bewerkstelligen. Auch gibt es keine Möglichkeit den Parameter parentIdmit den Fibaro Funktionen abzufragen. Die Ausgabe des folgenden Lua Codes ist immer nil, also nicht verfügbar.


In der REST API Ausgabe des Thermostaten ist die ID des Parents jedoch vorhanden.


Es ist also erforderlich, die Parameter des Thermostatet (ID 218) auszulesen, das Parent-Modul zu identifizieren und die gewünschten Änderungen dort hinzusenden.

Nur Danfoss, dafür aber alle

Ich habe keine Derivate des LC-13 zur Verfügung, daher beschränkt sich diese Szene momentan auf die Original Thermostate der Firma Danfoss. Die Szene fragt alle im Home Center 2 vorhandenen Geräte über die API ab und wendet die Änderungen des Intervalls auf alle im System befindlichen Dannfoss LC-13 an. Daher müssen keine IDs angegeben werden.

Wenn mir jemand die API Ausgabe der Derivate (Devolo und Co.) zur Verfügung stellt, kann ich die Szene gern erweitern.

Die Szene „smart“ machen

Das einfache ändern des Parameters und die daraus resultierende häufigere oder seltenere Abfrage der Sollwerte allein kann schon einen kleinen Komfortgewinn darstellen. Richtig „smart“ wird es aber nur durch die Berücksichtigung weiterer Faktoren. Diese setzen sich aus der An- und Abwesenheit sowie der Jahreszeit zusammen. Ist niemand Zuhause, werden bei uns Zuhause die Zieltemperaturen alle Heizgeräte auf 15°C eingestellt. Ähnlich verhält es sich in den Sommermonaten. Hier ist die schnelle Reaktion auf Änderungen nicht notwendig. Diese Gegebenheiten werden in der Szene berücksichtig, aber sieh selbst.

Intervallbestimmung

Die Szene ermöglicht zwei unterschiedliche Arten der Intervallbestimmung. Zum einen lassen sich Zielwerte für die unterschiedlichen Zustände der globalen Variable presentState definieren und zum andere ist eine mathematische Ermittlung eines vermeintlich idealen Intervalls implementiert. Die Rechnung erfolgt unter Zuhilfenahme der aktuellen Außen- sowie der definierten Zieltemperatur an einem Thermostaten. Weiterhin gibt es einen Basiswert der in den Parameters definiert wird. Die Formel ist folgendermaßen implementiert:

Intervall = round( Basiswert + ( Innentemperatur * Aussentemperatur ) )

Bei einer Zieltemperatur von 22°C und einer Aussentemperatur von 2,4°C ergibt sich bei einem Basiswert von 100 Sekunden somit ein wakeUp-Intervall von 153 Sekunden. Ist es hingegen draußen 18,8°C warm, so ergibt dies einen Intervall von 514 Sekunden. Für Aussentemperaturen kleiner 0°C gibt es einen Parameter welcher den Intervall konstant hält (Standard: 90 Sekunden).

Sommer- und Wintermonate

Es werden für Sommer- und Wintermonaten unterschiedliche Konfigurationsmöglichkeiten für Intervalle zur Verfügung gestellt. Die Unterscheidung ob Sommer oder Winter erfolgt über eine Variable (Table) in der die Wintermonate definiert werden. Jeder nicht aufgeführte Monat ist automatisch ein Sommermonat.

Scheduler, globale Variable und manueller Start

Die Szene kann sowohl mit einem Scheduler – also einem Zeitplan – im 15 Minutentakt, als auch durch die Veränderung der globalen Variable der die An- und Abwesenheit abildet, gestartet werden. Weiterhin ist es möglich die Szene – trotz laufendem Scheduler – manuell durch betätigen des Start Buttons auszuführen.

Konfiguration der Szene

Allgemein

  • advdebug = weiterführendes Debug (true/false)
  • scheduler = stündliches Ausführen der Szene
  • runMinute = die Minute zu der die Szene stündlich ausgeführt werden soll

Temperaturen

Die Konfiguration der Temperaturen für die Ermittlung des Intervalls.

  • outdoorTemp = liest die aktuelle Aussentemperatur (hier vom HC2 = ID 3)
  • indoorTemp = liest die aktuelle Solltemperatur eines Thermostaten

Beispiel

  • 1. Stelle der Table: ID des Gerätes (hier das HC2)
  • 2. Stelle der Table: abzufragende Eigenschaft

Wird die aktuelle Zieltemperatur eines LC-13 als Indoor Referenz verwendet, so ist hier nicht der übliche Wert Value zu verwenden, da dieser den zuletzt an den Thermostaten übertragenen Wert wiederspiegelt. Wo hingegen targetLevel der im Home Center 2 manuell oder durch den Heizplan definierten Zielwert ist.

Zeiten

Einstellung des Basis- und Windestwert sowie der Wintermonate.

  • basisSeconds = der Basiswert für die Intervallermittlung
  • minSeconds = der Wert für Aussentemperaturen < 0°C
  • winterMonth = die Wintermonate als Zahl

Intervallkonfiguration

Die Definition der globalen Variable – für die An- und Abwesenheitssteuerung sowie die Definition der Intervallermittlung bzw. Festsetzung dessen. Die Szene kennt 3 Zustände der An- und Abwesenheit: Home, Away und Holiday. Für jeden dieser Zustände ist eine weitere Variable mit der Konfiguration definiert.

  • presentVar = beinhaltet den Namen der globalen Variable zur An- und Abwesenheitssteuerung
  • presentHomeVar = Table zur Definition der Ausprägung der Intervalle (siehe unten)
  • presentAwayVar = Table zur Definition der Ausprägung der Intervalle (siehe unten)
  • presentHolidayVar = Table zur Definition der Ausprägung der Intervalle (siehe unten)

Beispiel

  • 1. Stelle der Table: der Zustand der An- und Abwesenheitsvariable entspricht dem Wert Home
  • 2. Stelle der Table: Für die Sommermonate ist ein fester Intervall von 900 Sekunden eingestellt
  • 3. Stelle der Table: Der Intervall wird nach der oben dargestellten Formel ermittel

Die 2. und 3. Stelle der Table kann jeweils einen festen Wert (wie oben ‚900‘) oder die rechnerische Ermittlung ( ‚calc‘ ) beinhalten.

Download

Die aktuelle Version der Szene zum Download: 

Download “Danfoss WakeUp Intervall” Danfoss-WakeUpTime-1.1.1.zip – 43-mal heruntergeladen – 2 KB

Feedback, Kritik und Anregungen

Ein sensibles Thema das vermutlich nicht Jeder für sinnvoll erachtet. Dennoch bitte ich um Feedback, Kritik und Anregungen in der Kommentarfunktion oder im Fibaro Forum.

 

Der Autor

Moin, ich heiße Bastian und bin Autor dieser kleinen bescheidenen Seite. Zwanghaft, ja fast schon neurotisch beschäftige ich mich seit Jahren mit jedem erdenklichen technischen Schnick-Schnack. Nichts, was einen Stecker hat ist vor mir sicher. So war es klar, dass ich eines Tages das Haus auf den Kopf stellen und alles vernetzen würde.

Da ich bei meinem Vorhaben sehr viel Hilfe und Unterstützung in diversen Foren, Blogs und Boards erfahren habe, möchte ich diesen Blog zum sammeln meiner Smarthome- und Technikerrungenschaften nutzen um der Community zumindest ein klein wenig was zurückgeben zu können.

Artikel teilen