UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[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.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 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) / zusätzlich: 3500M/#935, 3500L/#1297

CHD
Reactions:
Beiträge: 302
Registriert: Fr Dez 14, 2018 9:32 pm
Wohnort: Gronau
Hat sich bedankt: 1026 Mal
Danksagung erhalten: 212 Mal

#2

Beitrag von CHD »

Erster :D :dance: glaube ich... :whistle:
Viele Grüße, Christian

Timberwolf Server 2600 #200 ULTRA842 / PBM #778 / PBM #779 / PBM #780 / Reboot erlaubt / VPN offen

blaubaerli
Reactions:
Beiträge: 2307
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 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: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 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) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 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) / zusätzlich: 3500M/#935, 3500L/#1297

blaubaerli
Reactions:
Beiträge: 2307
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 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: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 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) / zusätzlich: 3500M/#935, 3500L/#1297

blaubaerli
Reactions:
Beiträge: 2307
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 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: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 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) / zusätzlich: 3500M/#935, 3500L/#1297

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#10

Beitrag von Robosoc »

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

Zurück zu „Zusätzliche Logikbausteine“