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] Sommer / Winterumschaltung nach DIN

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

blaubaerli
Reactions:
Beiträge: 2308
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 884 Mal
Danksagung erhalten: 677 Mal

#21

Beitrag von blaubaerli »

Hi Georg,

danke Dir und allen anderen auch frohe Weihnachten.

Beste Grüße
Jens
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung

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

#22

Beitrag von Robosoc »

Ich habe Roberts Code leicht ergänzt um:

A) einen manuellen Schalter, mit dem man im Doktormodus einen Ausgangswert erzwingen kann, der solange anliegt, bis der Ausgang von einem automatischen Wert überschrieben wird (was bei Ausgangsmodus "ct" eben defaultmäßig um 7:00, 14:00 oder 22:00 Uhr passiert).

B) in den ersten 24 Stunden jeweils alle 15 minunten den aktuellen Temperaturwert in die Speicher schreibt, solange wie die Speicher noch nicht vom Automatismus beschrieben wurden. Sobald ein Speicher um 7:00, 14:00 oder 22:00 Uhr beschrieben wird, wird nur noch der Wert genutzt. Sobald alle drei Speicher mindestens einmal vom Automatismus beschrieben wurden, wird der 15 Minuten Trigger (Cron) nicht mehr ausgeführt.
Auf diese Weise hat man auch in den ersten 24h nach einem Update der Logik (zum Beispiel hinzuzufügen eines weiteren Ausganges) bereits einen abgeschätzten Wert erhalten. Ohne die Änderung hat die Logik bis zu 24 h nach Erstinbetiebname meist Winter angezeigt, auch wenn Hochsommer war.

Code: Alles auswählen

/**===========================================================
Temperaturmittel und Sommer/Winter Umschaltung nach DIN 
mit Initialabschätzung (nicht nach DIN) und manuellem Schalter zum temporären übersteuern
============================================================*/
{
  "Input": [
        ["Außentemperatur","Gemessene Außentemperatur","$I_Temperature","u"], 
		["Temp. Sommer","Außentemperatur bei der auf Sommer umgeschaltet wird","$I_TempSommer","c"], 
		["Temp. Winter","Außentemperatur bei der auf Winter umgeschaltet wird","$I_TempWinter","c"],
		["Manueller Schalter", "Mannuelles Schreiben des Ausgangs bis zum nächsten automatichen Wert","$manTrigger","a"]
  ],
  "Output": [
		["Heizungsmodus Sommer/Winter","Ausgabe ob Sommer oder Winter","$Output","ct"],
		["Temperatur Tag gleitend","(T1+T2+T3*T3)/4","$Temperature_avg","ct"],
		["Temperatur Mittelwert Monat","Mittelwert seit Monatswechsel","$Temperature_avg_Monat","c"],
		["Counter","Anzahl Werte","$Counter?","c"],
		["Temp1 / 7:00","Anzahl Werte","$Temp1_?","c"],
		["Temp2 / 14:00","Anzahl Werte","$Temp2_?","c"],
		["Temp3 / 22:00","Anzahl Werte","$Temp3_?","c"]
  ],
  "Level": [
		["$manTrigger","bool",false],
		["$touched","bool",false],
		["$I_Temperature","float",0.0],
		["$I_TempSommer","float",0.0],
		["$I_TempWinter","float",0.0],
		["$I_Totzone","float",0.0],
		["$Output","bool",false],
		["$Temperature_sum","float",0.0],
		["$Temperature_avg","float",0.0],
		["$Temperature_sum_Monat","float",0.0],
		["$Temperature_sum_temp","float",0.0],
		["$Temperature_avg_Monat","float",0.0],
		["$Temperature_avg_MonatLast","float",0.0],
		["$Counter","integer",0],
		["$Counter_temp","integer",1],
		["$Counter_Lim","integer",0],
		["$Val_ok","bool",false],
		["$Temp1_","float",0.0],
		["$Temp2_","float",0.0],
		["$Temp3_","float",0.0],
		["$Init","bool",true],
		["$Reset0","bool",false],
		["$Reset1","bool",false],
		["$Reset2","bool",false],
		["$Reset3","bool",false],
		["$Temp1_gesetzt","bool",false],
		["$Temp2_gesetzt","bool",false],
		["$Temp3_gesetzt","bool",false],
		["$ResetMonatTrigger","bool",false],
		["$KonstTrue","bool",true],
		["$Konst0","float",0.0],
		//["$Konst0int","int",0],
		["$Konst1","float",1.0],
		["$Konst4","float",4.0],
		["$KonstFalse","bool",false],
		["$Zeitpunkt_init","string","0 10 * * * *"],
		["$Zeitpunkt1","string","0 0 7 * * *"],
		["$Zeitpunkt2","string","0 0 14 * * *"],
		["$Zeitpunkt3","string","0 0 22 * * *"],
		["$ResetMonat","string","20 2 0 1 * *"]
  ],
  "Module": [
		// manuelles triggeren erkennen
		[ "Triggered", "$manTrigger", "$touched" ],
		
		//Initialisierung
		["And" , ["-$Temp1_gesetzt","-$Temp2_gesetzt","-$Temp3_gesetzt"], "$Init"],
		["Cron","$Init","$Reset0",0,"$Zeitpunkt_init"],
        ["Latch","$I_Temperature","$Temp1_","-$Temp1_gesetzt",0],
        ["Latch","$I_Temperature","$Temp2_","-$Temp2_gesetzt",0],
        ["Latch","$I_Temperature","$Temp3_","-$Temp3_gesetzt",0],
		
		// Trigger für 7 / 14 und 22 Uhr
		["Cron","$KonstTrue","$Reset1",0,"$Zeitpunkt1"],
		["Cron","$KonstTrue","$Reset2",0,"$Zeitpunkt2"],
		["Cron","$KonstTrue","$Reset3",0,"$Zeitpunkt3"],
		["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
		// Temperatur speichern
		["Multiplexer",["$Temp1_","$I_Temperature"],"$Temp1_","$Reset1"],
		["Multiplexer",["$Temp2_","$I_Temperature"],"$Temp2_","$Reset2"],
		["Multiplexer",["$Temp3_","$I_Temperature"],"$Temp3_","$Reset3"],
		// Pürfung ob Temperaturen gesichert sind
		["Multiplexer",["$Temp1_gesetzt","$KonstTrue"],"$Temp1_gesetzt","$Reset1"],
		["Multiplexer",["$Temp2_gesetzt","$KonstTrue"],"$Temp2_gesetzt","$Reset1"],
		["Multiplexer",["$Temp3_gesetzt","$KonstTrue"],"$Temp3_gesetzt","$Reset1"],
		// Mittelwert berechnen
		["Polynomial","$Konst1","$Temperature_sum",["$Temp1_","$Temp2_","$Temp3_","$Temp3_"]],
		["Ratio", "$Temperature_sum", "$Temperature_avg", "$Konst4"],
		// Überprüfung 
		["Comparator","$Temperature_avg","$Output",["$I_TempWinter","$I_TempSommer"]],
		
		// Summe um aktuellen Mittelwert erhöhen (nur bei Reset3)
	    ["Polynomial","$Konst1","$Temperature_sum_temp",["$Temperature_sum_Monat","$Temperature_avg"]],
	    ["Polynomial","$Konst1","$Counter_temp",["$Counter","$Konst1"]],
	    ["Multiplexer",["$Temperature_sum_Monat","$Temperature_sum_temp"],"$Temperature_sum_Monat","$Reset3"],
	    ["Multiplexer",["$Counter","$Counter_temp"],"$Counter","$Reset3"],
	    
	    // Divisor prüfen und bei Null mit 1 ersetzen
	    ["Limiter","$Counter","$Counter_Lim","$Val_ok",["$Konst0", "$Konst0"]],
	    ["Latch","$Konst1","$Counter","$Val_ok",0],
	    ["Ratio", "$Temperature_sum_Monat", "$Temperature_avg_Monat", "$Counter"],
	    // Ergebnis überschreiben und alten Divisor wiederherstellen
	    ["Latch","$Konst0","$Temperature_avg_Monat","$Val_ok",0],
	    ["Latch","$Konst0","$Counter","$Val_ok",0],
	    
	    // Summe und Counter zurücksetzen
	    ["Multiplexer",["$Counter","$Konst0"],"$Counter","$ResetMonatTrigger"],
	    ["Multiplexer",["$Temperature_sum_Monat","$Konst0"],"$Temperature_sum_Monat","$ResetMonatTrigger"],
	    
		// Reset auf 0 setzen
		["Multiplexer",["$Reset1","$KonstFalse"],"$Reset1","$Reset1"],
		["Multiplexer",["$Reset2","$KonstFalse"],"$Reset2","$Reset2"],
		["Multiplexer",["$Reset3","$KonstFalse"],"$Reset3","$Reset3"],
		["Multiplexer",["$ResetMonatTrigger","$KonstFalse"],"$ResetMonatTrigger","$ResetMonatTrigger"],
		
		// manuelles Schalten ausführen
		["Latch","$manTrigger","$Output","$touched",0]
  ]
}
/** 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. */

Empfehlung: Das Startverhalten des Temperatureingang habe ich auf I statt X gestellt. Das geht aber nur manuell vor dem Speichern der Logik.
Zuletzt geändert von Robosoc am Di Jul 20, 2021 1:13 pm, insgesamt 2-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Zusätzliche Logikbausteine“