Ankündigung

Einklappen
Keine Ankündigung bisher.

Codeschnipsel - Anwesenheitsimulation

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Codeschnipsel - Anwesenheitsimulation

    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]

    #2
    Ich schreibe alle Aktionen (Licht an/aus, Rolladen hoch/runter) in einen Ringspeicher. Der haelt alle Aktionen der letzten 14 Tage. Die Abwesenheitssimulation bedient sich aus diesem Ringspeicher und das Haus "lebt" unser Verhalten vor 14 Tagen vor. Recht simple und klappt so gut, dass unsere Nachbarn denken wir sind schon aus dem Urlaub zurueck ,-).

    Kommentar


      #3
      Hallo Ralf,

      stelle doch bitte den Code für die Ringspeicher-Lösung für alle einmal zur Verfügung.

      Ich habe den Ringspeicher Ansatz aus folgenden Gründen verworfen:
      • bei einem kurzzeitigen Stromausfall wird der Ringspeicher gelöscht und die Simulation ist für den Rest der Abwesenheit beendet
      • während einer Abwesenheit verwende ich nur einzelne Leuchten mit Energiesparlampen, welche für den Anblick nach Außen entscheidend sind, d.h. der Stromverbrauch ist deutlich geringer als bei vollständiger Simulation der täglichen Nutzung
      Falls Du noch eine KNX Anlage sehen willst, sende mir eine PM.

      Viele Grüße

      Michael

      Kommentar

      Lädt...
      X