Code: Alles auswählen
Switch Heizungsschalter_Alle_Heizungen "Hauptschalter Automatik"
Group gSPOnline "Smartphones online"
Switch onlineLuca "Smartphone Luca" (gSPOnline) {channel="network:pingdevice:88c07738b0:online"}
Switch onlineNelly "Smartphone Nelly" (gSPOnline) {channel="network:pingdevice:7e73fbb35d:online"}
Switch onlineSilvia "Smartphone Silvia" (gSPOnline) {channel="network:pingdevice:4b2154548b:online"}
Switch onlineDaniel "Smartphone Daniel" (gSPOnline) {channel="network:pingdevice:d3462f161f:online"}
Group gTempSoll "Solltemperaturen"
Number:Temperature HeizungLucaZimmer_Solltemperatur "Solltemperatur Luca" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:1624e16bb3374ba8937d5244df2e789e:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungLucaZimmer_Solltemperatur_Fensterkontakt "Solltemperatur Luca Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:1624e16bb3374ba8937d5244df2e789e:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungNellyZimmer_Solltemperatur "Solltemperatur Nelly" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:ced269ec08fa447793a2b40a07d25ad5:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungNellyZimmer_Solltemperatur_Fensterkontakt "Solltemperatur Nelly Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:ced269ec08fa447793a2b40a07d25ad5:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungSchlafzimmer_Solltemperatur "Solltemperatur Schlafzimmer" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:5a5cb035986f494d8d048c582e52bc55:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungSchlafzimmer_Solltemperatur_Fensterkontakt "Solltemperatur Schlafzimmer Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:5a5cb035986f494d8d048c582e52bc55:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungBadezimmer_Solltemperatur "Solltemperatur Bad" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:f4ab49cd8ef44f85abf748fd513f6d21:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungBadezimmer_Solltemperatur_Fensterkontakt "Solltemperatur Bad Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:f4ab49cd8ef44f85abf748fd513f6d21:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungUnteresBadezimmer_Solltemperatur "Solltemperatur Bad unten" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:41297270ca984a8d8570a0030243a973:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungPartyraum_Solltemperatur "Solltemperatur Partyraum" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:17918643887840698438d721a6e9e86d:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungPartyraum_Solltemperatur_Fensterkontakt "Solltemperatur Partyraum Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:17918643887840698438d721a6e9e86d:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungTreppenhaus_Solltemperatur "Solltemperatur Treppenhaus" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:cba6993b2b5b4a5094d1d9df957fed58:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Number:Temperature HeizungTreppenhaus_Solltemperatur_Fensterkontakt "Solltemperatur Treppenhaus Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:cba6993b2b5b4a5094d1d9df957fed58:targetTemperature", unit="°C", stateDescription=""[pattern="%.1f °C"]}
Die Rule habe ich noch mal etwas angepasst:
Code: Alles auswählen
// Globale Variablen vor der ersten Rule definieren!
var Timer tSoll = null // Timer für Solltemperatur
var nSoll = 18.0 // Default Temperatur
rule "Solltemperatur setzen"
when
Item Heizungsschalter_Alle_Heizungen changed to ON or
Member of gSPOnline changed
then
if(Heizungsschalter_Alle_Heizungen.state != ON) // rule inaktiv?
return;
val bOnline = (gSPOnline.members.filter[i|i.state != OFF].size > 0) // true falls mindestens ein Gerät nicht OFF
nSoll = if(bOnline) 21 else 18 // Solltemperatur
val nStart = if(bOnline) 1 else 600 // Zeitverzögerung abhängig von Soll
gTempSoll.members.filter[i|!(i.state instanceof Number)].forEach[j| // uninitialisierte Items notfalls initialisieren
j.postUpdate(19)
]
tSoll?.cancel // laufende Timer abbrechen
tSoll = createTimer(now.plusSeconds(nStart), [| // nach nStart Sekunden
val lItems = gTempSoll.members.sortBy[name].filter[i|
(i.state as Number).floatValue != nSoll] // Liste aller Items die vom Soll abweichen
if(lItems.size == 0) // falls noch Abweichungen vom Soll bestehen
return;
tSoll.reschedule(now.plusSeconds(5)) // führe Timer erneut aus
logInfo("soll","Setze {} auf {}", lItems.head.name, nSoll)
lItems.head.sendCommand(nSoll) // Solltemperatur setzen
])
end
Innerhalb des Timers habe ich den Code noch etwas angepasst, so dass nun doch noch ein Log erscheint.
Und: ich habe die Rule bei mir getestet
