NEUHEIT: Freigegebene Hauptversion V 1.6 ab sofort für alle Modelle des Timberwolf Server verfügbar. Infos: viewtopic.php?f=8&t=2588!

[NEUHEIT] ZSU Baustein (Zeitschaltuhr)

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Antworten

Ersteller
Robert_Mini
Reactions:
Beiträge: 2751
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1348 Mal

ZSU Baustein (Zeitschaltuhr)

#1

Beitrag 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. */
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Robert_Mini am So Dez 27, 2020 7:47 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / Wiregate-Fan

CHD
Reactions:
Beiträge: 155
Registriert: Fr Dez 14, 2018 9:32 pm
Wohnort: Gronau
Hat sich bedankt: 593 Mal
Danksagung erhalten: 133 Mal

#2

Beitrag von CHD »

Erster :D :dance: glaube ich... :whistle:
Timberwolf Server 2600 #200 / PBM #778 / PBM #779 / PBM #780 / Reboot erlaubt / VPN offen

blaubaerli
Reactions:
Beiträge: 977
Registriert: Sa Sep 15, 2018 10:26 am
Hat sich bedankt: 319 Mal
Danksagung erhalten: 234 Mal

#3

Beitrag 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
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung

Ersteller
Robert_Mini
Reactions:
Beiträge: 2751
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1348 Mal

#4

Beitrag von Robert_Mini »

Das Problem besteht nur, wenn man diese Namen in Ein/Ausgängen benützt und ändern will.
Ansonsten ganz egal.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / Wiregate-Fan

Ersteller
Robert_Mini
Reactions:
Beiträge: 2751
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1348 Mal

#5

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / Wiregate-Fan

blaubaerli
Reactions:
Beiträge: 977
Registriert: Sa Sep 15, 2018 10:26 am
Hat sich bedankt: 319 Mal
Danksagung erhalten: 234 Mal

#6

Beitrag 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
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung

Ersteller
Robert_Mini
Reactions:
Beiträge: 2751
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1348 Mal

#7

Beitrag 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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / Wiregate-Fan

blaubaerli
Reactions:
Beiträge: 977
Registriert: Sa Sep 15, 2018 10:26 am
Hat sich bedankt: 319 Mal
Danksagung erhalten: 234 Mal

#8

Beitrag 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
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung

Ersteller
Robert_Mini
Reactions:
Beiträge: 2751
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 698 Mal
Danksagung erhalten: 1348 Mal

#9

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

Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / Wiregate-Fan

Robosoc
Reactions:
Beiträge: 955
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 332 Mal
Danksagung erhalten: 387 Mal

#10

Beitrag von Robosoc »

Mega, werde ich testen, Danke 🙏
VG, Sven - TWS 950Q ID:335, VPN offen, Reboot OK
Antworten

Zurück zu „Zusätzliche Logikbausteine“