Seite 1 von 3

ZSU Baustein (Zeitschaltuhr)

Verfasst: So Dez 27, 2020 7:32 pm
von Robert_Mini
Hallo zusammen!

Wie hier (viewtopic.php?f=24&t=2527) versprochen, möchte ich hier einen ersten Baustein für eine Zeitschaltuhr teilen.

Funktion:
Der Baustein schaltet zur jeweiligen Uhrzeit Ein/Aus. Über einen Freigabe-Eingang kann das Schalten jederzeit unterbrochen / fortgesetzt werden.
Die Uhrzeiten können fix hinterlegt werden oder über entsprechende (KNX-)Objekte (getrennt für h, min, sec jeweils für ein/aus) mit der Visu verbunden werden (siehe HInweise zu Persistenz/Rebootverhalten weiter unten).
  • ZSU_CometVisu.png
Besonderheiten:
  • Die Sommer/Winterzeitumstellung wird korrekt berücksichtig. Für Schaltzeiten zwischen 2:00 und 3:00 wird bei Umstellung auf Sommerzeit um 2:00 geschaltet (es gibt die Zeit zwischen 2:00 und 3:00 nicht), bei Umstellung auf Winterzeit wird in der Stunde 2A (das ist der erste Durchlauf von 2.00 bis 3:00) geschaltet.
  • Über eine zusätzlichen Trigger (einfach mit dem "+" hinzufügen), kann die Logik den aktuellen Zustand auch zyklisch senden.
  • Der Baustein schaltet exakt zur Sekunde (eventuell mit wenigen ms Abweichung), siehe Screenshot.
    ZSU_Timing.png
Anwendungsbeispiele:
Von der klassischen Weihnachtsbeleuchtung bis hin zu Zeitfenstern für Beschattung etc.

Eingänge:
  • Einschalten Stunde/Minute/Sekunde: Damit wird die Einschaltzeit festgelegt. Es können feste Werte per Parameter hinterlegt werden oder eine Objektverknüpfung verwendet werden.
  • Ausschalten Stunde/Minute/Sekunde: Damit wird die Ausschaltzeit festgelegt.
  • Freigabe/Enable: Mit diesem Eingang kann die Zeitschaltuhr aktiviert/deaktiviert werden. Damit kann zB für's Wochenende eine 2. ZSU mit anderen Schaltzeiten angelegt werden. Die beiden ZSU müssen dann wechselseitig aktiviert/gesperrt werden.
Ausgänge:
  • Schaltausgang: Sendet beim Einschalten ein EIN und beim Ausschalten ein AUS. Wird ein zyklischer Trigger verwendet, muss die Sendeoption auf "ct" gesetzt sein!
Hinweise:
Werden die Uhrzeiten mit einer Visu verknüpft ist sicherzustellen, dass die Werte auch nach einem Reboot des Servers oder Neustart der Visu korrekt gelesen werden können. Dazu bitte wie folgt vorgehen:
- Persistenz am ZSU Baustein aktivieren.
- L-Flag an den KNX-Objekten für die Schaltzeiten aktivieren, Das Initread-Flag muss deaktiviert sein!
- Den Baustein "Senden nach Reboot" verwenden. Es müssen alle Werte die ausschließlich über die Visu verknüpft sind in diesem Baustein gespeichert werden. Nach einem Reboot sendet dieser Bausteine die Werte neu auf den Bus. Damit sind die Einstellungen an der Visu und im ZSU-Baustein wieder synchron.

Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.

Falls wer einen freiwilligen Beitrag zur Motivation leisten will: Klick

Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert

Der Baustein:
ZSU_mitDST1.png

Code: Alles auswählen

/**===========================================================
Kommentar
============================================================*/
{
    "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_Enable","bool",false],
	//
	["$Output","bool",false], 
	//
	["$Time_on","integer",0],
	["$Time_off","integer",0],
	["$Time_act","integer",0],
	//
	["$Utime","integer",0],
	["$Utime_Midnight1","integer",0],
	["$Utime_Midnight2","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],
	["$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],
	["$SetCase1","bool",false],
	["$SetCase2","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],
	
        ["$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", "$Utime_temp",["$Utime", "-$Utime_min","-$Utime_hour"]],	
	["Polynomial", "$Konst1", "$Utime_Midnight1",["$Utime_temp", "-$Utime_sec"]],	
		
	// 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", "$Utime_temp",["$Utime_Midnight1", "$I_min_on","$I_hour_on"]],	
	["Polynomial", "$Konst1", "$Utime_on",["$Utime_temp", "$I_sec_on"]],	
	["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", "$Utime_temp",["$Utime_Midnight1", "$I_min_off","$I_hour_off"]],	
	["Polynomial", "$Konst1", "$Utime_off",["$Utime_temp", "$I_sec_off"]],	
	["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"],
	["Ausschalten Stunde","Input","$I_hour_off","c"],
	["Ausschalten Minute","Input","$I_min_off","c"],
	["Ausschalten Sekunde","Input","$I_sec_off","c"],
	["Enable","Input","$I_Enable","c"]
    ],
    "Output":[
        ["Schaltausgang","Output","$Output","c"]
    ]
}
/**Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: So Dez 27, 2020 7:48 pm
von CHD
Erster :D :dance: glaube ich... :whistle:

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: So Dez 27, 2020 9:44 pm
von blaubaerli
Hallo Robert,

danke für das neue Werk.

Wir haben doch noch irgendwo das Problem gehabt, dass es Stress gibt, wenn der Name eines Levels in seiner Gesamtheit zu Beginn eines and anderen Levels genutzt wird.

Das kommt hier in der Logik in mehrere Situationen vor, z.B. bei "$Utime", "$Utime_on", "$Set", "$State", etc. hast du noch einen Überblick, wann das genau zum Problem wird und wann das egal ist? Ich versuche das aktuell in meinen Logiken noch durchgängig zu vermeiden.

Beste Grüße
Jens

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: So Dez 27, 2020 9:55 pm
von Robert_Mini
Das Problem besteht nur, wenn man diese Namen in Ein/Ausgängen benützt und ändern will.
Ansonsten ganz egal.

Robert

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mo Dez 28, 2020 10:49 am
von Robert_Mini
Übrigens @SchlaubySchlu und alle anderen: Wer Beispiele hat, wie man die ZSU über die Visu bedient, bitte hier samt CV-Code posten!

Danke! Robert

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mo Dez 28, 2020 3:35 pm
von blaubaerli
Hallo Robert,

ich habe mal was geschrieben....: viewtopic.php?f=37&t=2557

Bewusst nicht hier, da mein Weg nicht 1:1 kompatibel zur hier vorgestellten Logik ist.

Beste Grüße
Jens

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mo Dez 28, 2020 4:26 pm
von Robert_Mini
Danke Jens!
Finde die Anregung gut. Ich könnte die ZSU ja so erweitern, dass sie zusätzlich auch DPT10 versteht :o .

Lg
Robert

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mo Dez 28, 2020 5:10 pm
von blaubaerli
Hi Robert,

das wäre natürlich prima, dann gibts die beiden Varianten durch entsprechende Auswahl der Eingangsparameter eben optional nebeneinander.

Beste Grüße
Jens

Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mi Jan 13, 2021 9:40 pm
von Robert_Mini
Hallo zusammen!

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.

lg
Robert
ZSU_DPT10.png

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"]
	    
    ]
}


Re: ZSU Baustein (Zeitschaltuhr)

Verfasst: Mi Jan 13, 2021 10:07 pm
von Robosoc
Mega, werde ich testen, Danke 🙏