Erweiterung um DPT10 ist fertig.
Sobald ein DPT10 anliegt, wird dieser anstelle der Eingabe für hh:mm:ss verwendet. Dies gilt je Schaltzeit, d.h. auch DPT für die Einschaltzeit und hh:mm:ss für die Ausschaltzeit.
Bevor ich das im Eingangsthread ergänze, bitte mal ausgiebig testen.
Code: Alles auswählen
/**===========================================================
ZSU mit Erweiterung DPT10
============================================================*/
{
"Level":[
["$I_hour_on","integer",0],
["$I_min_on","integer",0],
["$I_sec_on","integer",0],
["$I_hour_off","integer",0],
["$I_min_off","integer",0],
["$I_sec_off","integer",0],
["$I_DPT10_on","integer",0],
["$I_DPT10_off","integer",0],
["$I_Enable","bool",false],
//
["$Output","bool",false],
//
["$Time_on","integer",0],
["$Time_off","integer",0],
["$Time_act","integer",0],
["$DPT10_on","integer",0],
["$DPT10_off","integer",0],
//
["$Utime","integer",0],
["$Utime_Midnight1","integer",0],
["$Utime_Midnight2","integer",0],
["$Utime_Midnight3","integer",0],
["$Utime_NextMidnight","integer",0],
["$Utime_on","integer",0],
["$Utime_on_mod","integer",0],
["$Utime_on_tomorrow","integer",0],
["$Utime_off","integer",0],
["$Utime_off_mod","integer",0],
["$Utime_off_tomorrow","integer",0],
["$Utime_Ref","integer",0],
["$Utime_temp","integer",0],
["$Time_SinceMidNight","integer",0],
["$Time_SinceMidNight_on","integer",0],
["$Time_SinceMidNight_off","integer",0],
["$Utime_hour","integer",0],
["$Utime_min","integer",0],
["$Utime_sec","integer",0],
["$LengthOfDay","integer",0],
//
["$Set_Utime_Midnight","bool",false],
["$Set_on","bool",false],
["$Set_off","bool",false],
["$Set","bool",false],
["$Set_on_tomorrow","bool",false],
["$Set_off_tomorrow","bool",false],
["$Wake_on","bool",false],
["$Wake_off","bool",false],
// Init nach Reboot
["$Enable","bool",false],
["$State","bool",false],
["$StateOut","bool",false],
["$Delay","float",5.0],
["$TimerStatus","bool",false],
["$SelectDPT10_on","bool",false],
["$SelectDPT10_off","bool",false],
["$Set_DST_on","bool",false],
["$Set_DST_off","bool",false],
["$SelectDST_Winter1","bool",false],
["$SelectDST_Winter2","bool",false],
["$SelectDST_Summer1","bool",false],
["$SelectDST_Summer2","bool",false],
["$SelectDST_hour_on","bool",false], // ein nach 2
["$SelectDST_hour_off","bool",false], // aus nach 2
["$SelectDST_hour_on2","bool",false], // ein nach 3
["$SelectDST_hour_off2","bool",false], // aus nach 3
["$Select_DST_on","integer",0],
["$Select_DST_off","integer",0],
["$Corr_DST_on","integer",0],
["$Corr_DST_off","integer",0],
["$Corr_2_on","integer",3600],
["$Corr_2_off","integer",3600],
["$Temp_Float","integer",0.0],
["$Konst3","integer",3],
["$Konst2","integer",2],
["$Konst1","integer",1],
["$Konst0","integer",0],
["$Konst60","integer",60],
["$Konst86400","integer",86400],
["$Konst3600","integer",3600],
["$Konst7200","integer",7200],
["$Konst10800","integer",10800],
["$Konst1_","float",1.0],
["$Konst0_","float",0.0],
["$KonstTrue","bool",true],
["$KonstFalse","bool",false],
["$Cron_Midnight","string","0 0 0 * * *"]
],
"Module":[
// Logik beim speichern bzw. Reboot Aufrufen
["Latch","$StateOut","$State","$KonstTrue",0],
["Clocksignal","-$State",0,"$Delay"],
// State nach Start auf 1 setzen und Clocksignal deaktivieren
["Latch","$KonstTrue","$StateOut","-$State",0],
// Aktuelle Zeit ermitteln
["Localtime",0,"$Utime","$Utime_sec","$Utime_min","$Utime_hour",0,0,0,0,0,0],
// Letztes Mitternacht berechnen
["Polynomial", "$Konst60", "$Time_SinceMidNight",["$Utime_sec", "$Utime_min","$Utime_hour"]],
["Polynomial", "$Konst1", "$Utime_Midnight1",["$Utime", "-$Time_SinceMidNight"]],
// Letztes Mitternacht merken da utime dem cron nachhinkt.
["Latch","$Utime_NextMidnight","$Utime_Midnight2","$KonstTrue",0],
// Zu Mitternacht triggern und Tageslänge ermitteln
["Cron","$KonstTrue","$Set_Utime_Midnight","$Utime_NextMidnight","$Cron_Midnight"],
["Latch","$Utime_Midnight2","$Utime_Midnight1","$Set_Utime_Midnight",0],
// Tageslänge auswerten für Erkennung Sommer/winterzeit Umstellung
["Polynomial", "$Konst1", "$LengthOfDay",["$Utime_NextMidnight", "-$Utime_Midnight1"]],
// Tag länger als 24h => Umstellung auf Winterzeit
["Comparator", "$LengthOfDay", "$SelectDST_Winter1", "$Konst86400"],
// Tag kürzer als 24h => Umstellung auf Sommerzeit
["Comparator", "$Konst86400", "$SelectDST_Summer1", "$LengthOfDay"],
["Polynomial", "$Konst60", "$Time_on",["$I_sec_on", "$I_min_on","$I_hour_on"]],
["Polynomial", "$Konst60", "$Time_off",["$I_sec_off", "$I_min_off","$I_hour_off"]],
["Polynomial", "$Konst60", "$Time_act",["$Utime_sec", "$Utime_min","$Utime_hour"]],
// ON/OFF liegt zwischen 2 und 3
["Limiter","$Time_on","$Temp_Float","$SelectDST_hour_on",["$Konst7200", "$Konst10800"]],
["Limiter","$Time_off","$Temp_Float","$SelectDST_hour_off",["$Konst7200", "$Konst10800"]],
// ON/OFF >= 3:00
["Comparator", "$Konst10800", "-$SelectDST_hour_on2", "$Time_on"],
["Comparator", "$Konst10800", "-$SelectDST_hour_off2", "$Time_off"],
// Und nur bei Aufrufen vor 2:00 korrigieren
["Comparator", "$Time_act", "-$SelectDST_Summer2", "$Konst7200"],
["And" , ["$SelectDST_Summer1","$SelectDST_hour_on","$SelectDST_Summer2"], "$Set_DST_on"],
["And" , ["$SelectDST_Summer1","$SelectDST_hour_off","$SelectDST_Summer2"], "$Set_DST_off"],
// Wenn bei Sommerzeitumstellung Schaltzeit zwischen 2:00 und 3:00 liegt, dann zusätzliche Korrektur auf 2:00
["Polynomial", "$Konst60", "$Corr_2_on",["$I_sec_on", "$I_min_on"]],
["Polynomial", "$Konst60", "$Corr_2_off",["$I_sec_off", "$I_min_off"]],
["BinaryMultiplexer",["$SelectDST_hour_on","$SelectDST_hour_on2","-$Set_DST_on"],"$Select_DST_on"],
["Multiplexer",["$Konst0","-$Corr_2_on","-$Konst3600","-$Corr_2_on","$Konst0","$Konst0","$Konst0","$Konst0" ],"$Corr_DST_on","$Select_DST_on"],
// Und nur bei Aufrufen vor erstmals 3:00 korrigieren, beim 2. Durchlauf von 2:00-3:00 ist die Berechnung der Tageslänge bereits wieder 24h => keine Korrektur
["Comparator", "$Time_act", "-$SelectDST_Winter2", "$Konst10800"],
["And" , ["$SelectDST_Winter1","$SelectDST_hour_on2","$SelectDST_Winter2"], "$Set_DST_on"],
["And" , ["$SelectDST_Winter1","$SelectDST_hour_off2","$SelectDST_Winter2"], "$Set_DST_off"],
["Latch","$Konst3600","$Corr_DST_on","$Set_DST_on",0],
["Latch","$Konst3600","$Corr_DST_off","$Set_DST_off",0],
// Weckzeit ON berechnen
["Polynomial", "$Konst60", "$Time_SinceMidNight_on",["$I_sec_on", "$I_min_on","$I_hour_on"]],
// Wenn DPT10 >0, dann verwenden
["Comparator", "$I_DPT10_on", "$SelectDPT10_on", "$Konst0"],
["Multiplexer",["$Time_SinceMidNight_on","$I_DPT10_on"],"$DPT10_on","$SelectDPT10_on"],
// Weckzeit OFF in utime berechnen
["Polynomial", "$Konst1", "$Utime_on",["$DPT10_on", "$Utime_Midnight1"]],
["Polynomial", "$Konst1", "$Utime_on_mod",["$Utime_on", "$Corr_DST_on"]],
// Schaltzeit liegt in der Vergangenheit? Gilt nicht zum Schaltzeitpunkt!
["Comparator", "$Utime", "$Set_on_tomorrow", "$Utime_on_mod"],
["Polynomial", "$Konst1", "$Utime_on_tomorrow",["$Utime_on_mod", "$Konst86400"]],
["Latch","$Utime_on_tomorrow","$Utime_on_mod","$Set_on_tomorrow",0],
//
// Weckzeit OFF berechnen
["Polynomial", "$Konst60", "$Time_SinceMidNight_off",["$I_sec_off", "$I_min_off","$I_hour_off"]],
// Wenn DPT10 >0, dann verwenden
["Comparator", "$I_DPT10_off", "$SelectDPT10_off", "$Konst0"],
["Multiplexer",["$Time_SinceMidNight_off","$I_DPT10_off"],"$DPT10_off","$SelectDPT10_off"],
// Weckzeit OFF in utime berechnen
["Polynomial", "$Konst1", "$Utime_off",["$DPT10_off", "$Utime_Midnight1"]],
["Polynomial", "$Konst1", "$Utime_off_mod",["$Utime_off", "$Corr_DST_off"]],
// Schaltzeit liegt in der Vergangenheit? Gilt nicht zum Schaltzeitpunkt!
["Comparator", "$Utime", "$Set_off_tomorrow", "$Utime_off_mod"],
["Polynomial", "$Konst1", "$Utime_off_tomorrow",["$Utime_off_mod", "$Konst86400"]],
["Latch","$Utime_off_tomorrow","$Utime_off_mod","$Set_off_tomorrow",0],
// Wecker auswertern => Liefert true, wenn Wakeup getriggert hat, danach unmittelbar wieder false, da die Weckzeit auf den nächsten Tag vorgesetzt wird.
["Wakeup","$Utime_on_mod","$Wake_on"],
["Wakeup","$Utime_off_mod","$Wake_off"],
["Latch","$KonstTrue","$Output","$Wake_on",1],
["Latch","$KonstFalse","$Output","$Wake_off",1]
],
"Input":[
["Einschalten Stunde","Input","$I_hour_on","c"],
["Einschalten Minute","Input","$I_min_on","c"],
["Einschalten Sekunde","Input","$I_sec_on","c"],
["Einschalten DPT10","Input","$I_DPT10_on","c"],
["Ausschalten Stunde","Input","$I_hour_off","c"],
["Ausschalten Minute","Input","$I_min_off","c"],
["Ausschalten Sekunde","Input","$I_sec_off","c"],
["Ausschalten DPT10","Input","$I_DPT10_off","c"],
["Enable","Input","$I_Enable","c"]
],
"Output":[
["Schaltausgang","Output","$Output","c"]
//["Debug Utime_Midnight1","","$Utime_Midnight1","a"],
//["Debug Utime_on_mod","","$Utime_on_mod","a"],
//["Debug Utime_off_mod","","$Utime_off_mod","a"],
//["Debug LengthOfDay","","$LengthOfDay","a"]
]
}