Hallo Zusammen,
nachdem BMX schon einige Makros ins Forum gestellt hat, stelle ich hier die erste Version einer Anwesenheitssimulation auf Basis einiger Lampen und der Rolläden zur Verfügung bzw. Diskussion.
Gestartet wird die Simulation über einen Taster mit der GA "Abwesenheit Ein/Aus-5/0/0".
Gibt es Anregungen zur Verbesserung oder Optimierung?
Viele Grüße
Michael
[highlight=epc]
// Anwesenheitssimulation (AWS)
//
// AWS: Zufallsgeneratoren
Zufall5Min=60+(convert(random(240u32),0u08))
Min=Zufall5Min/60
Sek=Zufall5Min-Min*60
if cycle(30,00) then \\
Zufall5Min=60+(convert(random(180u32),0u08)) \\
endif
// AWS: Stehlampe im Esszimmer ein- und ausschalten
if "Abwesenheit Ein/Aus-5/0/0"==EIN and elevation()<-3f32 then \\
write("Eßzimmer Stehleuchte-2/1/14",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and "Eßzimmer Stehleuchte-2/1/14"==EIN and htime(22,3*Min,Sek) then \\
write("Eßzimmer Stehleuchte-2/1/14",AUS) \\
endif
// AWS: Rolladen im Eß- und Wohnzimmer nach Sonnenuntergang/-aufgang runter-/hochfahren
if "Abwesenheit Ein/Aus-5/0/0"==EIN and elevation()<-4f32 then \\
write("Eßzimmer R Auf/Ab-3/1/12",EIN); \\
write("Eßzimmer H Auf/Ab-3/1/15",EIN); \\
write("Wohnzimmer Auf/Ab-3/1/18",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and htime(08,15+2*Min,Sek) then \\
write("Eßzimmer R Auf/Ab-3/1/12",AUS); \\
write("Eßzimmer H Auf/Ab-3/1/15",AUS); \\
write("Wohnzimmer Auf/Ab-3/1/18",AUS) \\
endif
endif
// AWS: Küchenbeleuchtung die ersten beiden Stunden nach Sonnenuntergang 1x pro Stunde zufällig ein- und ausschalten
LeuchtSekunden=60u32+random(300u32)
if cycle(6,00) then \\
LeuchtSekunden=60u32+random(300u32) \\
endif
Zufallsekunden1=300u32+random(3600u32)
if cycle(60,00) then \\
Zufallsekunden1=300u32+random(3600u32) \\
endif
Einschaltzeitpunkt1=convert(sunsethour(),0u32)*360 0u32+convert(sunsetminute(),0u32)*60u32+Zufallseku nden1
EinschaltStunde1=Einschaltzeitpunkt1/3600u32
EinschaltMinute1=(Einschaltzeitpunkt1-(EinschaltStunde1*3600u32))/60u32
EinschaltSekunde1=Einschaltzeitpunkt1-(EinschaltStunde1*3600u32)-(EinschaltMinute1*60u32)
Zufallsekunden2=3600u32+random(3600u32)
if cycle(60,00) then \\
Zufallsekunden2=3600u32+random(3600u32) \\
endif
Einschaltzeitpunkt2=convert(sunsethour(),0u32)*360 0u32+convert(sunsetminute(),0u32)*60u32+Zufallseku nden2
EinschaltStunde2=Einschaltzeitpunkt2/3600u32
EinschaltMinute2=(Einschaltzeitpunkt2-(EinschaltStunde2*3600u32))/60u32
EinschaltSekunde2=Einschaltzeitpunkt2-(EinschaltStunde2*3600u32)-(EinschaltMinute2*60u32)
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and chtime(convert(EinschaltStunde1,0u08),convert(Eins chaltMinute1,0u08),convert(EinschaltSekunde1,0u08) ) then \\
write("Küche Deckenspots-2/1/9",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and chtime(convert(EinschaltStunde2,0u08),convert(Eins chaltMinute2,0u08),convert(EinschaltSekunde2,0u08) ) then \\
write("Küche Deckenspots-2/1/9",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and after("Küche Deckenspots-2/1/9"==EIN,convert(LeuchtSekunden,0u64)*1000u64) then \\
write("Küche Deckenspots-2/1/9",AUS) \\
endif
// AWS: Kind geht schlafen
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and htime(20,2*Min,Sek) then \\
write("Kinderzimmer R Wandleuchte-2/2/3",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Kinderzimmer R Wandleuchte-2/2/3"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Kinderzimmer R/R Auf/Ab-3/2/12",EIN); \\
write("Kinderzimmer R/V Auf/Ab-3/2/15",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Kinderzimmer R/R Auf/Ab-3/2/12"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Kinderzimmer R Wandleuchte-2/2/3",AUS) \\
endif
// AWS: Eltern gehen Schlafen
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and htime(22,5*Min,Sek) then \\
write ("Diele Wandspots-2/2/1",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Diele Wandspots-2/2/1"==EIN,convert(Min,0u64)*30000u64)) then \\
write("Schlafzimmer R Auf/Ab-3/2/30",EIN); \\
write("Schlafzimmer M Auf/Ab-3/2/27",EIN); \\
write("Schlafzimmer L Auf/Ab-3/2/24",EIN); \\
write("Badezimmer Deckenspots-2/2/4",EIN); \\
write("Diele Wandspots-2/2/1",AUS) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Badezimmer Deckenspots-2/2/4"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Badezimmer Auf/Ab-3/2/18",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Badezimmer Deckenspots-2/2/4"==EIN,convert(Min,0u64)*90000u64)) then \\
write("Badezimmer Deckenspots-2/2/4",AUS) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and htime(08,15+Min,Sek) then \\
write("Schlafzimmer R Auf/Ab-3/2/30",AUS); \\
write("Schlafzimmer M Auf/Ab-3/2/27",AUS); \\
write("Schlafzimmer L Auf/Ab-3/2/24",AUS); \\
write("Badezimmer Auf/Ab-3/2/18",AUS); \\
write("Kinderzimmer R/R Auf/Ab-3/2/12",AUS); \\
write("Kinderzimmer R/V Auf/Ab-3/2/15",AUS) \\
endif
[/highlight]
nachdem BMX schon einige Makros ins Forum gestellt hat, stelle ich hier die erste Version einer Anwesenheitssimulation auf Basis einiger Lampen und der Rolläden zur Verfügung bzw. Diskussion.
Gestartet wird die Simulation über einen Taster mit der GA "Abwesenheit Ein/Aus-5/0/0".
Gibt es Anregungen zur Verbesserung oder Optimierung?

Viele Grüße
Michael
[highlight=epc]
// Anwesenheitssimulation (AWS)
//
// AWS: Zufallsgeneratoren
Zufall5Min=60+(convert(random(240u32),0u08))
Min=Zufall5Min/60
Sek=Zufall5Min-Min*60
if cycle(30,00) then \\
Zufall5Min=60+(convert(random(180u32),0u08)) \\
endif
// AWS: Stehlampe im Esszimmer ein- und ausschalten
if "Abwesenheit Ein/Aus-5/0/0"==EIN and elevation()<-3f32 then \\
write("Eßzimmer Stehleuchte-2/1/14",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and "Eßzimmer Stehleuchte-2/1/14"==EIN and htime(22,3*Min,Sek) then \\
write("Eßzimmer Stehleuchte-2/1/14",AUS) \\
endif
// AWS: Rolladen im Eß- und Wohnzimmer nach Sonnenuntergang/-aufgang runter-/hochfahren
if "Abwesenheit Ein/Aus-5/0/0"==EIN and elevation()<-4f32 then \\
write("Eßzimmer R Auf/Ab-3/1/12",EIN); \\
write("Eßzimmer H Auf/Ab-3/1/15",EIN); \\
write("Wohnzimmer Auf/Ab-3/1/18",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and htime(08,15+2*Min,Sek) then \\
write("Eßzimmer R Auf/Ab-3/1/12",AUS); \\
write("Eßzimmer H Auf/Ab-3/1/15",AUS); \\
write("Wohnzimmer Auf/Ab-3/1/18",AUS) \\
endif
endif
// AWS: Küchenbeleuchtung die ersten beiden Stunden nach Sonnenuntergang 1x pro Stunde zufällig ein- und ausschalten
LeuchtSekunden=60u32+random(300u32)
if cycle(6,00) then \\
LeuchtSekunden=60u32+random(300u32) \\
endif
Zufallsekunden1=300u32+random(3600u32)
if cycle(60,00) then \\
Zufallsekunden1=300u32+random(3600u32) \\
endif
Einschaltzeitpunkt1=convert(sunsethour(),0u32)*360 0u32+convert(sunsetminute(),0u32)*60u32+Zufallseku nden1
EinschaltStunde1=Einschaltzeitpunkt1/3600u32
EinschaltMinute1=(Einschaltzeitpunkt1-(EinschaltStunde1*3600u32))/60u32
EinschaltSekunde1=Einschaltzeitpunkt1-(EinschaltStunde1*3600u32)-(EinschaltMinute1*60u32)
Zufallsekunden2=3600u32+random(3600u32)
if cycle(60,00) then \\
Zufallsekunden2=3600u32+random(3600u32) \\
endif
Einschaltzeitpunkt2=convert(sunsethour(),0u32)*360 0u32+convert(sunsetminute(),0u32)*60u32+Zufallseku nden2
EinschaltStunde2=Einschaltzeitpunkt2/3600u32
EinschaltMinute2=(Einschaltzeitpunkt2-(EinschaltStunde2*3600u32))/60u32
EinschaltSekunde2=Einschaltzeitpunkt2-(EinschaltStunde2*3600u32)-(EinschaltMinute2*60u32)
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and chtime(convert(EinschaltStunde1,0u08),convert(Eins chaltMinute1,0u08),convert(EinschaltSekunde1,0u08) ) then \\
write("Küche Deckenspots-2/1/9",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and chtime(convert(EinschaltStunde2,0u08),convert(Eins chaltMinute2,0u08),convert(EinschaltSekunde2,0u08) ) then \\
write("Küche Deckenspots-2/1/9",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and after("Küche Deckenspots-2/1/9"==EIN,convert(LeuchtSekunden,0u64)*1000u64) then \\
write("Küche Deckenspots-2/1/9",AUS) \\
endif
// AWS: Kind geht schlafen
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and htime(20,2*Min,Sek) then \\
write("Kinderzimmer R Wandleuchte-2/2/3",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Kinderzimmer R Wandleuchte-2/2/3"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Kinderzimmer R/R Auf/Ab-3/2/12",EIN); \\
write("Kinderzimmer R/V Auf/Ab-3/2/15",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Kinderzimmer R/R Auf/Ab-3/2/12"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Kinderzimmer R Wandleuchte-2/2/3",AUS) \\
endif
// AWS: Eltern gehen Schlafen
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and htime(22,5*Min,Sek) then \\
write ("Diele Wandspots-2/2/1",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Diele Wandspots-2/2/1"==EIN,convert(Min,0u64)*30000u64)) then \\
write("Schlafzimmer R Auf/Ab-3/2/30",EIN); \\
write("Schlafzimmer M Auf/Ab-3/2/27",EIN); \\
write("Schlafzimmer L Auf/Ab-3/2/24",EIN); \\
write("Badezimmer Deckenspots-2/2/4",EIN); \\
write("Diele Wandspots-2/2/1",AUS) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Badezimmer Deckenspots-2/2/4"==EIN,convert(Min,0u64)*60000u64)) then \\
write("Badezimmer Auf/Ab-3/2/18",EIN) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
and (after("Badezimmer Deckenspots-2/2/4"==EIN,convert(Min,0u64)*90000u64)) then \\
write("Badezimmer Deckenspots-2/2/4",AUS) \\
endif
if "Abwesenheit Ein/Aus-5/0/0"==EIN and htime(08,15+Min,Sek) then \\
write("Schlafzimmer R Auf/Ab-3/2/30",AUS); \\
write("Schlafzimmer M Auf/Ab-3/2/27",AUS); \\
write("Schlafzimmer L Auf/Ab-3/2/24",AUS); \\
write("Badezimmer Auf/Ab-3/2/18",AUS); \\
write("Kinderzimmer R/R Auf/Ab-3/2/12",AUS); \\
write("Kinderzimmer R/V Auf/Ab-3/2/15",AUS) \\
endif
[/highlight]
Kommentar