KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[TIPP] [V4.5 IP5] Zeitschaltuhr zu bestimmten Zeiten schalten

Informationen und Diskussionen über Logik-Engine und Logik-Editor
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
Antworten

Ersteller
devilchris
Reactions:
Beiträge: 133
Registriert: So Aug 12, 2018 9:26 am
Hat sich bedankt: 25 Mal
Danksagung erhalten: 71 Mal

[V4.5 IP5] Zeitschaltuhr zu bestimmten Zeiten schalten

#1

Beitrag von devilchris »

Hallo,

ich benötige etwas Hilfe bei der Erstellung einer einfachen Zeitschaltuhr mit den standart Boardmitteln der Logik.
Ich möchte um 18:31Uhr einschalten und um 18:52Uhr ausschalten, mit welchem Baustein kann ich dies umsetzten.
Christian

TWS 2600 #185, 1x PBM#241 40/40/40, 3x USB-BM, VPN offen, Reboot möglich

gbglace
Reactions:
Beiträge: 4088
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1415 Mal
Danksagung erhalten: 1901 Mal

#2

Beitrag von gbglace »

Mit Standard Boardmitteln, Stand V4.5 IP5. Zwei Bausteine Kalender Timer.

Einen für die Uhrzeit Beginn und einen für die Uhrzeit Ende. Einer der Ausgänge bekommt den Bubble "Wert invertieren" gesetzt. Beide Ausgänge sind dann in einer KNX Nutzung mit dem selben KNX-Objekt verbunden.

Die beiden gewünschten Zeiten müssen jeweils in CRON Syntax als fixer Parameter erfasst werden.

Mit Customlogiken, schau mal in den entsprechenden Foren-Bereich, da haben einige schon ZSU Module vorgestellt, wo Du dann auch mehr einstellen kannst.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

SchateMuhl
Reactions:
Beiträge: 472
Registriert: Mi Nov 23, 2022 9:31 pm
Wohnort: Werther bei Nordhausen
Hat sich bedankt: 128 Mal
Danksagung erhalten: 185 Mal
Kontaktdaten:

#3

Beitrag von SchateMuhl »

Hallo Christian

folgende Logik habe ich ein wenig für die VISU abgewandelt.

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],
        ["$In_Stunde_Minute_An","int",0],   // Erweiterung um den Eingang 1000 = 10 Stunden 0 Minuten
        ["$In_Stunde_Minute_Aus","int",0],  // Erweiterung um den Eingang 1000 = 10 Stunden 0 Minuten
	//
    	["$Output","bool",false], 
    	["$MQTT_Output","string","off"], 
    	["$VISU_AN","string","00:00"],
    	["$VISU_AUS","string","00:00"],
	//
	["$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],
	["$KonstOn","string","on"],
	["$KonstOff","string","off"],
    
    ["$Stunde_an","int",0],
    ["$Minute_an","int",0],
    ["$Stunde_aus","int",0],
    ["$Minute_aus","int",0],
    ["$Formula_Stunde","string","X1/100"],
    ["$Formula_Minute","string","X1-(X2*100)"],
    ["$DP","string",":"],
   	["$VISU_AN_string","string","00:00"],
   	["$VISU_AUS_string","string","00:00"],
    ["$Stunde_String","string","  "],
    ["$Minute_String","string","  "],
    ["$Format","string","%02d"],
    

	["$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"]],	
    ["CalcFormula",["$In_Stunde_Minute_An"], "$Stunde_an", "$Formula_Stunde"],
    ["CalcFormula",["$In_Stunde_Minute_An","$Stunde_an"], "$Minute_an", "$Formula_Minute"],
    ["Polynomial", "$Konst60", "$Time_SinceMidNight_on",["$I_sec_on", "$Minute_an","$Stunde_an"]],
    ["Printf","$Stunde_an","$Format", "$Stunde_String"],
    ["Printf","$Minute_an","$Format", "$Minute_String"],
    ["Concat",["$Stunde_String","$DP","$Minute_String"],"$VISU_AN_string"],
    ["Latch","$VISU_AN_string","$VISU_AN","$KonstTrue",0],
    
	// 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"]],	
    ["CalcFormula",["$In_Stunde_Minute_Aus"], "$Stunde_aus", "$Formula_Stunde"],
    ["CalcFormula",["$In_Stunde_Minute_Aus","$Stunde_aus"], "$Minute_aus", "$Formula_Minute"],
    ["Polynomial", "$Konst60", "$Time_SinceMidNight_off",["$I_sec_off", "$Minute_aus","$Stunde_aus"]],
    ["Printf","$Stunde_aus","$Format", "$Stunde_String"],
    ["Printf","$Minute_aus","$Format", "$Minute_String"],
    ["Concat",["$Stunde_String","$DP","$Minute_String"],"$VISU_AUS_string"],
    ["Latch","$VISU_AUS_string","$VISU_AUS","$KonstTrue",0],





	// 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","$KonstOn","$MQTT_Output","$Wake_on",1],	
	["Latch","$KonstTrue","$Output","$Wake_on",1],
	["Latch","$KonstOff","$MQTT_Output","$Wake_off",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"],
		["Einschalten Stunde /Minute","Stunde/Minute AN","$In_Stunde_Minute_An","c"],
		["Ausschalten Stunde /Minute","Stunde/Minute AUS","$In_Stunde_Minute_Aus","c"]
    ],
    "Output":[
        ["Schaltausgang","Output","$Output","c"],
        ["MQTTausgang","MQTT","$MQTT_Output","c"],
        ["AN-Zeit für VISU","An-Zeit","$VISU_AN","a"],
        ["AUS-Zeit für VISU","Aus-Zeit","$VISU_AUS","a"]
        
	    //["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"]
	    
    ]
}
Hier reicht es wenn du nur bei dem Eingang I10 (Einschalten) und I11 (Ausschalten) die Zahl zwischen 1 und 2359 per VISU übergibst.
Für die richtige Anzeige in der VISU kannst du die Formatierten Ausgänge O3 und O4 verwenden

siehe hier.
Bildschirmfoto 2025-05-05 um 21.10.22.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Grüße
Andreas

TWS 3500M ID:992 /XL ID:1198 , VPN offen, Reboot nach Absprache
- KNX mit TWS, 1Home, ENO Gateway, ETS6.3
- PV Anlagen AC gekoppelt mit Fronius IG 40/60 und Symo 10KW
- 96kWh LiFePo mit 3 x MultiPlus 48/8000 und DC PV Anlagen über MPPT

Ersteller
devilchris
Reactions:
Beiträge: 133
Registriert: So Aug 12, 2018 9:26 am
Hat sich bedankt: 25 Mal
Danksagung erhalten: 71 Mal

#4

Beitrag von devilchris »

Hallo,

danke für die schnelle Antwort.
Ich schau mir das mal an.
Christian

TWS 2600 #185, 1x PBM#241 40/40/40, 3x USB-BM, VPN offen, Reboot möglich
Antworten

Zurück zu „Logikengine & Logik-Editor“