Das Thermostat von Danfoss ist jetzt integriert, aber es lässt sich die Themeratur nur manuell einstellen. Nun wäre schön, wenn sich die Temperatur zeitgesteuert automatisch einstellen würde. An den Werktagen benötige ich für meine Zwecke zwei Timer und am Wochenden einen. Jeder Timer hat eine Anfangs- und eine Endezeit. In diesem Zeitraum wird das Thermostat auf die gewählte Komforttemperatur eingestellt. Außerhalb des Zeitraums wird das Thermostat auf die Spartemperatur eingestellt.Da jeder Timer eine Anfangs- und eine Endezeit hat und zusätzlich noch die Komfort- und Spartemperatur konfiguriert werden soll sind 8 Number-Items notwendig.
Number Thermostat_Kom "Thermostat_Kom [%.1f]" Number Thermostat_Spar "Thermostat_Spar [%.1f]" Number Timer1_Stunde "Timer1_Stunde [%d]" Number Timer1_Minute "Timer1_Minute [%d]" Number Timer2_Stunde "Timer2_Stunde [%.1f]" Number Timer2_Minute "Timer2_Minute [%.1f]" Number Timer3_Stunde "Timer3_Stunde [%.1f]" Number Timer3_Minute "Timer3_Minute [%.1f]" Number Timer4_Stunde "Timer4_Stunde [%.1f]" Number Timer4_Minute "Timer4_Minute [%.1f]" Number Timer5_Stunde "Timer5_Stunde [%.1f]" Number Timer5_Minute "Timer5_Minute [%.1f]" Number Timer6_Stunde "Timer6_Stunde [%.1f]" Number Timer6_Minute "Timer6_Minute [%.1f]"
Zusätzlich habe ich die Timer- und Temperatureinstellungen in meiner MySQL Datenbank gespeichert und OpenHAB so konfiguriert das beim Neustart die gespeicherten Werte wiederhergestellt werden.
Items { Timer1_Stunde : strategy = restoreOnStartup, everyChange Timer1_Minute : strategy = restoreOnStartup, everyChange Timer2_Stunde : strategy = restoreOnStartup, everyChange Timer2_Minute : strategy = restoreOnStartup, everyChange Timer3_Stunde : strategy = everyChange, restoreOnStartup Timer3_Minute : strategy = restoreOnStartup, everyChange Timer4_Stunde : strategy = everyChange, restoreOnStartup Timer4_Minute : strategy = restoreOnStartup, everyChange Timer5_Stunde : strategy = everyChange, restoreOnStartup Timer5_Minute : strategy = restoreOnStartup, everyChange Timer6_Stunde : strategy = everyChange, restoreOnStartup Timer6_Minute : strategy = restoreOnStartup, everyChange Thermostat_Kom : strategy = restoreOnStartup, everyChange Thermostat_Spar : strategy = restoreOnStartup, everyChange }
Nun muss die Sitemap erstellt werden. Ich habe auf der Startseite die beiden Temperaturen dargestellt. In jeweils einem Untermenü sind die Timer für die Wochentage und das Wochenende untergebracht.
sitemap Test label="Main Menu" { Frame label="Thermostat" { Setpoint item=Thermostat_Kom label="Komfort Temperatur [%.1f C]" icon="heating" minValue=14 maxValue=26 step=0.5 Setpoint item=Thermostat_Spar label="Spar Temperatur [%.1f C]" icon="heating" minValue=14 maxValue=26 step=0.5 } Frame label="Zeiteinstellungen" { Text label="Einstellungen Wochentage" icon="heating" { Frame label="Timer 1" { Text label="Start Komfort Temperatur" icon="heating" Setpoint item=Timer1_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 step=1 Setpoint item=Timer1_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 Text label="Ende Komfort Temperatur" icon="heating" Setpoint item=Timer2_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 step=1 Setpoint item=Timer2_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 } Frame label="Timer 2" { Text label="Start Komfort Temperatur" icon="heating" Setpoint item=Timer3_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 step=1 Setpoint item=Timer3_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 Text label="Ende Komfort Temperatur" icon="heating" Setpoint item=Timer4_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 Setpoint item=Timer4_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 } } Text label="Einstellungen Wochenende" icon="heating" { Frame { Text label="Start Komfort Temperatur" icon="heating" Setpoint item=Timer5_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 step=1 Setpoint item=Timer5_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 Text label="Ende Komport Temperatur" icon="heating" Setpoint item=Timer6_Stunde label="Stunde [%d]" icon="clock" minValue=0 maxValue=23 step=1 Setpoint item=Timer6_Minute label="Minute [%d]" icon="clock" minValue=0 maxValue=59 step=5 } } } }
Ist das alles erledigt, muss das Regelwerk erstellt werden. Ich habe versucht die Regel so einfach wie möglich zu halten, da sie vielleicht später noch mal gewartet werden muss.
Diese Regel wir einmal pro Minute aufgerufen, immer zur 0. Sekunde. Nun wird geprüft welcher Wochentag ist. Die Funktion now.getDayofWeek gibt für jeden Wochentag eine Zahl zurück. Für Montag die 1, für Dienstag die 2 usw. Ist also DayofWeek kleiner 6 muss ein Wochentag sein, ist DayofWeek größer als 5 ist Wochenende. Nun muss noch die aktuelle Stunde und die aktuelle Minute mit den eingestellten Werten der SetPoint-Items verglichen werden und bei Übereinstimmung wird dem Thermostat die entsprechende Temperatur übermittelt.
rule "Kinderzimmer Thermostat" when Time cron "0 * * * * ?" then var Number komfort = 0.0 var Number spar = 0.0 var Number dow = now.getDayOfWeek() // Init Komfort Temp if (komfort.state == "Uninitialized") { komfort=20.5 } else { komfort=(komfort.state as DecimalType) } // Init Spar Temp if (spar.state == "Uninitialized") { spar=16.0 } else { spar=(spar.state as DecimalType) } if dow < 6 { logInfo("Thermostat Kinderzimmer","Wochenende: nein" ) //Komfort Temp Start if( Timer1_Stunde.state == now.getHourOfDay() && Timer1_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + komfort.toString) sendCommand(Thermostat_Kinderzimmer ,komfort.toString) } // Komfort Temp Stop if( Timer2_Stunde.state == now.getHourOfDay() && Timer2_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + spar.toString) sendCommand(Thermostat_Kinderzimmer, spar.toString) } //Komfort Temp Start if( Timer3_Stunde.state == now.getHourOfDay() && Timer3_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + komfort.toString) sendCommand(Thermostat_Kinderzimmer, komfort.toString) } // Komfort Temp Stop if( Timer4_Stunde.state == now.getHourOfDay() && Timer4_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + spar.toString) sendCommand(Thermostat_Kinderzimmer, spar.toString) } } else { logInfo("Thermostat Kinderzimmer","Wochenende: ja" ) if( Timer5_Stunde.state == now.getHourOfDay() && Timer5_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + komfort.toString) sendCommand(Thermostat_Kinderzimmer, komfort.toString) } // Komfort Temp Stop if( Timer6_Stunde.state == now.getHourOfDay() && Timer6_Minute.state == now.getMinuteOfHour() ) { logInfo("Thermostat Kinderzimmer","Set Temp: " + spar.toString) sendCommand(Thermostat_Kinderzimmer, spar.toString) } } end
Wenn das alles eingerichtet ist, sollte es so aussehen.
Auf der Haupseite sieht man die eingestellten Temperaturen und die Untermenüs für Werktage und Wochenende.