NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[TIPP] Tutorial - Schritt für Schritt zur Custom Logik: Duschlicht bei schnellem Temperaturanstieg einschalten

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

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

Tutorial - Schritt für Schritt zur Custom Logik: Duschlicht bei schnellem Temperaturanstieg einschalten

#1

Beitrag von Robert_Mini »

Hallo zusammen!

Der Diskussion in diesem Thread viewtopic.php?f=24&t=1592 folgend, möchte ich hier Schritt für Schritt eine Lösung entwickeln, um einmal mein Herangehen zu Custom Logiken zu teilen.

Ich hoffe, dass damit anderen der Einstieg erleichtert wird!
Bitte wirklich jeden Schritt mitdenken und einzeln im LE nachvollziehen, dann ist auch der Lerneffekt am größten!!

Schritt 1: Die wichtigsten Ein- und Ausgänge und Variablen anlegen.

Um Fehler schnell zu finden, empfehle ich ein schrittweises Erstellen der Custom Logiken. Als Texteditor verwende ich derzeit Notepad++ und kopiere von dort den Code in den LE.
Zuerst lege ich die wichtigsten Variablen an (zumindest jene, die für die Ein- / Ausgänge zu Beginn benötigt werden). Variabentypen nochmals überprüfen, denn Fehler, die durch Typ-Konvertierung im Code erfolgen zB. => Integer => Bool sind später nur schwer zu entdecken.

Nach dem Speichern sieht die Logik so aus, ist natürlich noch nicht funktional.

Bild

Code: Alles auswählen

{
  "Level": [
    ["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$Output","bool",false],
    ["$Time","float",0.0],
    ["$Level_Old","float",0.0],
    ["$Toleranz","float",0.01],
    ["$Inhibit","bool",false]
  ],
  "Input": [
    ["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Messwert","Eingang Messsignal","$Level_Actual","c"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
    ["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"]
  ],
  "Module": [   
	 
  ]
}
Schritt 2: Die ersten Module zur Zeitmessung hinzufügen

Leider habe ich derzeit Probleme mit einer Stoppuhr, so dass ich derzeit eine Lösung mit 2 Stoppuhren, die alternierend messen, umgesetzt.
Für das Tutorial trotzdem nicht schlecht, da es gut das Vorgehen zeigt.

Weiters habe ich zusätzliche (temporäre) Ausgänge zum Debuggen hinzugefügt.
Nach dem Speichern und Aktivieren des DokModes kann man durch Ändern des Eingangswertes kontrollieren:
  • Die Zeit zwischen dem Ändern der Werte auf Debug_Time1, Debug_Time2, wobei ein Timer immer 0 anzeigt, da er beim Aufruf zurückgesetzt wurde.
  • Der Ausgang Zeitdifferenz zeigt immer den letzten Wert, des richtigen Timers an. Dazu wird ein Multiplexer verwendet, der entweder $Time1 oder $Time2 auf den die Variable $Time schreibt und dann am Ausgang "Zeitdifferenz" anzeigt.
  • Das kontinuierliche Umschalten von "Debug_Start" von True auf False, das den aktuellen Timer auswählt.
  • Output und Anstieg aktuell zeigen noch keine Werte an, da sie mit keinem "Module" verbunden sind.
Bild

Code: Alles auswählen

{
  "Level": [
	["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$Output","bool",false],
    ["$Time1","float",1.0],
    ["$Time2","float",1.0],
    ["$Time","float",1.0],
	["$Konst1","float",1.0],
	["$KonstTrue","bool",true],
    ["$Start","bool",false]
  ],
  "Input": [
	["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Level Actual","Eingang Messsignal","$Level_Actual","a"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
	["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"],
	["Debug_Time1","Timer1","$Time1","a"],
	["Debug_Time2","Timer2","$Time2","a"],
	["Debug_Start","Start","$Start","a"]
  ],
  "Module": [   
	["Stopwatch","$Start","$Time1"],
	["Stopwatch","-$Start","$Time2"],
	// Aktuellen Timer umkopieren
	["Multiplexer",["$Time1","$Time2"],"$Time","-$Start"],
	// Variable $Start Toggeln
	["Polynomial","$Konst1","$Start",["-$Start"]]
  ]
}
Schritt 3:

Im nächsten Schritt habe ich folgende Vorgänge ergänzt:
  • Differenz aus aktuellem und letztem Wert berechnen (Polynomfunktion)
  • Anstiegsrate berechnen (Ratio Funktion)
  • Die Ergebnisse sind am Ausgang "Anstieg aktuell" und "Debug_Delta" zu sehen.
  • Aus den 3 Werten Anstieg aktuell", "Debug_Delta und "Zeitdifferenz" kann der berechnet Wert für die Anstiegsrate kontrolliert werden (3°C/4,09s => 0,73°C/s).
Bild

Code: Alles auswählen

{
  "Level": [
	["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$LevelRise_SwitchRate","float",0.0],
    ["$SwitchRate_CResult","bool",false],
    ["$Output","bool",false],
    ["$Time1","float",0.0],
    ["$Time2","float",0.0],
    ["$Time","float",0.0],
    ["$Level_Old","float",0.0],
	["$Delta","float",0.0],
	["$Konst1","float",1.0],
	["$KonstTrue","bool",true],
    ["$New","bool",false],
    ["$Start","bool",false],
    ["$Inhibit","bool",false]
  ],
  "Input": [
	["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Level Actual","Eingang Messsignal","$Level_Actual","a"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
	["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"],
	["Debug_Delta","Delta zw. Messwerten","$Delta","a"],
	["Debug_Time1","Timer1","$Time1","a"],
	["Debug_Time2","Timer2","$Time2","a"],
	["Debug_Start","Start","$Start","a"],
	["Debug_Comp","SwitchRate_CResult","$SwitchRate_CResult","a"]
  ],
  "Module": [   
	["Stopwatch","$Start","$Time1"],
	["Stopwatch","-$Start","$Time2"],
	// Aktuellen Timer umkopieren
	["Multiplexer",["$Time1","$Time2"],"$Time","-$Start"],
	// Variable $Start Toggeln
	["Polynomial","$Konst1","$Start",["-$Start"]],	
	// Differenz berechnen
	["Polynomial","-$Konst1","$Delta",["$Level_Actual", "$Level_Old"]],
	// Anstiegsrate berechnen
	["Ratio", "$Delta", "$LevelRise_Rate", "$Time"],
    //Alten Wert speichern
	["Polynomial","$Konst1","$Level_Old",["$Level_Actual"]]
  ]
}
Schritt 4+5 folgen.

lg
Robert
Zuletzt geändert von Robert_Mini am Sa Nov 30, 2019 7:45 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

gbglace
Reactions:
Beiträge: 3604
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1266 Mal
Danksagung erhalten: 1672 Mal

#2

Beitrag von gbglace »

Top.

Ich hoffe das wird kein allzu feuchtes Vergnügen die Logik zu entwickeln und die passenden Schwellwerte für die Steigraten zu ermitteln...
Zuletzt geändert von gbglace am Sa Nov 30, 2019 4:25 pm, insgesamt 1-mal geändert.
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
#3 PBM 3 Kanäle, #4 Modbus-Extension

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#3

Beitrag von Robert_Mini »

Weiter geht's!!!

Schritt 4: Prüfen der Anstiegsrate

Im diesem Schritt habe ich folgende Vorgänge ergänzt:
  • Zusätzlicher Eingang für den Grenzwert, ab dem eingeschaltet werden soll.
  • Comperator (=Vergleicher), der prüft, ob die berechnete Anstiegsrate den Grenzwert überschreitet
  • Nicht mehr benötigte Debug-Ausgänge habe ich entfernt.
Ich habe den Grenzwert als 0.01 mittels Parameter festgelegt. Im Dokmode kann man nun spielen und sehen, dass bei größerer Wertänderung (in nicht zu langen Zeitabständen) der Ausgang "Debug_Comp" auf True wechselt, gibt man 2x den gleichen Wert am Eingang "Messwert" ein, dann ist die Anstiegsrate 0 und "Debug_Comp" wechselt auf False.

Bild

Code: Alles auswählen

{
  "Level": [
	["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$LevelRise_SwitchRate","float",0.0],
    ["$SwitchRate_CResult","bool",false],
    ["$Output","bool",false],
    ["$Time1","float",0.0],
    ["$Time2","float",0.0],
    ["$Time","float",0.0],
    ["$Level_Old","float",0.0],
    ["$Toleranz","float",0.01],
	["$Delta","float",0.0],
	["$Konst1","float",1.0],
	["$KonstTrue","bool",true],
    ["$Start","bool",false],
    ["$Inhibit","bool",false]
  ],
  "Input": [
	["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Level Actual","Eingang Messsignal","$Level_Actual","a"],
    ["Grenzwert Anstiegsrate","Anstiegsrate bei der eingeschaltet werden soll","$LevelRise_SwitchRate","a"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
	["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"],
	["Debug_Comp","SwitchRate_CResult","$SwitchRate_CResult","a"]
  ],
  "Module": [   
	["Stopwatch","$Start","$Time1"],
	["Stopwatch","-$Start","$Time2"],
	// Aktuellen Timer umkopieren
	["Multiplexer",["$Time1","$Time2"],"$Time","-$Start"],
	// Variable $Start Toggeln
	["Polynomial","$Konst1","$Start",["-$Start"]],	
	// Differenz berechnen
	["Polynomial","-$Konst1","$Delta",["$Level_Actual", "$Level_Old"]],
	// Anstiegsrate berechnen
	["Ratio", "$Delta", "$LevelRise_Rate", "$Time"],
	//Anstiegsrate mit Grenzwert vergleichen
	["Comparator","$LevelRise_Rate","$SwitchRate_CResult","$LevelRise_SwitchRate"],
        //Alten Wert speichern
	["Polynomial","$Konst1","$Level_Old",["$Level_Actual"]]
  ]
}
Schritt 5: Ausgang einschalten

Im diesem Schritt habe ich das Thema Ausschaltverhalten ergänzt:
  • Zusätzlicher Eingang für einen Trigger, der Ausschalten soll (zB Zentral Aus).
  • Zusätzlicher Eingang Verzögerungszeit, der definiert, wann automatisch ausgeschaltet wird (Treppenlichtzeit)
  • Ein Monoflop (Timer-Baustein), der durch Überschreiten der Anstiegsrate gestartet wird und mit dem Ausgang "Output" ($Output) verbunden ist.
  • Der Eingang "Ausschalten" ($Reset) wird auf den Reset-Eingang des Monoflops gelegt. Bei $Reset=1 wird somit der Ausgang ausgeschaltet und der Timer zurückgesetzt.
Im Test im DokMode kann man nun das Einschalten des Ausgang "Output" prüfen und das automatische Ausschalten nach Ablauf des Timers.
Schaltet man den Eingang "Ausschalten" ($Reset) auf 1 wird der Ausgang ebenfalls ausgeschaltet.

Hinweis: Die Anpassung für Zentral-Aus (nur 0-Telegramme kommt im Schritt 6.

Bild

Code: Alles auswählen

{
  "Level": [
	["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$LevelRise_SwitchRate","float",0.0],
    ["$SwitchRate_CResult","bool",false],
    ["$Output","bool",false],
    ["$Reset","bool",false],
	["$Delay","float",10.0],
    ["$Time1","float",1.0],
    ["$Time2","float",1.0],
    ["$Time","float",1.0],
    ["$Level_Old","float",0.0],
	["$Delta","float",0.0],
	["$Konst1","float",1.0],
	["$KonstTrue","bool",true],
    ["$Start","bool",false],
    ["$Inhibit","bool",false]
  ],
  "Input": [
	["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Level Actual","Eingang Messsignal","$Level_Actual","a"],
    ["Switch Rate","Mindestanstiegsrate um einzuschalten","$LevelRise_SwitchRate","u"],
	["Ausschalten","Ausschalten über Taster o.ä.","$Reset","c"],
	["Verzögerungszeit","Automatisch nach x sec ausschalten","$Delay","c"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
	["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"],
	["Debug_Comp","SwitchRate_CResult","$SwitchRate_CResult","a"]
  ],
  "Module": [   
	["Stopwatch","$Start","$Time1"],
	["Stopwatch","-$Start","$Time2"],
	// Aktuellen Timer umkopieren
	["Multiplexer",["$Time1","$Time2"],"$Time","-$Start"],
	// Start Toggeln
	["Polynomial","$Konst1","$Start",["-$Start"]],	
	// Letzten Wert merken
	["Polynomial","-$Konst1","$Delta",["$Level_Actual", "$Level_Old"]],
	// Rate berechnen
	["Ratio", "$Delta", "$LevelRise_Rate", "$Time"],
	//Anstiegsrate mit Grenzwert vergleichen
	["Comparator","$LevelRise_Rate","$SwitchRate_CResult","$LevelRise_SwitchRate"],
	// Timer starten
	["Monoflop","$SwitchRate_CResult","$Reset","$Output","$Delay",0],   
	//Alten Wert speichern
	["Polynomial","$Konst1","$Level_Old",["$Level_Actual"]]
  ]
}
Schritt 6: Richtigstellen des Ausschalttriggers für Zentral-Aus

Damit die Logik beim Empfang von 0 am Eingang "Ausschalten" den Timer zurücksetzt, sind folgende Anpassungen erforderlich:
  • Defaultwert für $Reset auf true
  • Beim Monoflop Reset invertieren: -$Reset
  • Nach dem Reset die Variable auf 1 setzen => ["Multiplexer",["$KonstTrue"],"$Reset","-$KonstTrue"],. Damit wird der Eingang nach dem Triggern mit 0 wieder auf 1 gesetzt. An der Oberfläche ist das "false" daher nie sichtbar, da es sofort wieder mit "true" überschrieben wird.
  • Wichtig in diesem Zusammenhang ist die Triggeroption "a" für always, damit die Logik überhaupt getriggert wird (da immer nur 0 empfangen wird).
Bild

Code: Alles auswählen

/**=====================================================================
Erkennung der Anstiegsrate eines Messsignals zB Temperatur und 
Einschalten bei überschreiten einer Mindestrate. 
======================================================================*/
{
  "Level": [
	["$Enable","bool",false],
    ["$Level_Actual","float",0.0],
    ["$LevelRise_Rate","float",0.0],
    ["$LevelRise_SwitchRate","float",0.0],
    ["$SwitchRate_CResult","bool",false],
    ["$Output","bool",false],
    ["$Reset","bool",true],
	["$Delay","float",10.0],
    ["$Time1","float",1.0],
    ["$Time2","float",1.0],
    ["$Time","float",1.0],
    ["$Level_Old","float",0.0],
	["$Delta","float",0.0],
	["$Konst1","float",1.0],
	["$KonstTrue","bool",true],
    ["$Start","bool",false],
    ["$Inhibit","bool",false]
  ],
  "Input": [
	["Enable","Freigabe des Bausteins","$Enable","c"],
    ["Level Actual","Eingang Messsignal","$Level_Actual","a"],
    ["Switch Rate","Mindestanstiegsrate um einzuschalten","$LevelRise_SwitchRate","u"],
	["Ausschalten","Ausschalten über Taster o.ä.","$Reset","a"],
	["Verzögerungszeit","Automatisch nach x sec ausschalten","$Delay","c"]
  ],
  "Output": [
    ["Output","Schaltausgang","$Output","c"],
    ["Anstieg aktuell","Aktuelle Anstiegsrate","$LevelRise_Rate","c"],
	["Zeitdifferenz","Zeit seit letztem Wert","$Time","c"],
	["Debug_Comp","SwitchRate_CResult","$SwitchRate_CResult","a"]
  ],
  "Module": [   
	["Stopwatch","$Start","$Time1"],
	["Stopwatch","-$Start","$Time2"],
	// Aktuellen Timer umkopieren
	["Multiplexer",["$Time1","$Time2"],"$Time","-$Start"],
	// Start Toggeln
	["Polynomial","$Konst1","$Start",["-$Start"]],	
	// Differenz berechnen
	["Polynomial","-$Konst1","$Delta",["$Level_Actual", "$Level_Old"]],
	// Rate berechnen
	["Ratio", "$Delta", "$LevelRise_Rate", "$Time"],
	//Anstiegsrate mit Grenzwert vergleichen
	["Comparator","$LevelRise_Rate","$SwitchRate_CResult","$LevelRise_SwitchRate"],
	// Timer starten
	["Monoflop","$SwitchRate_CResult","-$Reset","$Output","$Delay",0],
	// $ Reset auf 0 Setzen:
	["Multiplexer",["$KonstTrue"],"$Reset","-$KonstTrue"],
	//Alten Wert speichern
	["Polynomial","$Konst1","$Level_Old",["$Level_Actual"]]
  ]
}
Schritt 7: Freigabe mit Enable-Eingang

Fast hätte ich es vergessen!

Damit die Logik auch gesperrt werden kann, wird am Ende ein weiterer Multiplexer hinzugefügt. Dieser Überschreibt den Ausgang fix mit "false", wenn $enable="false" (d.h. der Eingang Freigabe false ist). Ich habe den Eingang gerade noch auf Deutsch umbenannt, falls sich wer wundert.

Zusätzlich alle nicht benötigten Ausgänge entfernen - FERTIG.

Bild

Viel Spaß beim Ausprobieren, freue mich über jede Rückmeldung und gerne auch Fragen!
Ich werde den Baustein selbst auch ausprobieren, da kann ich noch über Einstellungen etc. berichten.


lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Hiele
Reactions:
Beiträge: 201
Registriert: Mo Jan 21, 2019 8:15 pm
Wohnort: Stahnsdorf
Hat sich bedankt: 228 Mal
Danksagung erhalten: 148 Mal

#4

Beitrag von Hiele »

Moin Robert,

mal ein großes Lob und Dank von mir! Werde es morgen testen und berichten.
Also schicke ich meine Frau duschen und hock mich an den TWS und schaue was passiert :-)

LG Hiele
"TWS 2600 ID:228, (VPN offen), Reboot erlaubt, DEV"

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#5

Beitrag von Robert_Mini »

Gerne.
Und brav den Code Schritt für Schritt studieren.
Ist ein gutes Beispiel und durchaus als komplexe Logik anzusehen (gilt auch für andere Systeme oder als Perl Plugin).

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#6

Beitrag von Robert_Mini »

@Hiele!
Unbedingt 2 Sachen berücksichtigen:
1) Verzögerungszeit ist in Sec => sollte >600 (=10min) sein
2) Den Defaultwert für $Level_actual auf einen Wert größer dem erwarteten Maximalwert anpassen:
["$Level_Actual","float",50.0],
Ansonsten schaltet die Logik nach dem Erstellen beim Empfang des ersten Messwerts ein, da ein Anstieg von 0 auf 23°C gerechnet wird. Mit einem hohen Startwert wird eine negative Flanke gerechnet und es passiert nichts, weil Output bereits auf 0 steht und damit wird auch nicht ausgeschaltet.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#7

Beitrag von Robert_Mini »

Hallo zusammen!

Kleiner Nachtrag:
Hab gerade noch die Einstellungen des 1-wire Sensors optimiert. Siehe Einstellungen und Grafik unten!

Was ich hier besonders hervorheben möchte, weil es einmal mehr die Stärken des TWS Objektsystems klar macht:
Ich habe 3 Einstellungen beim 1-Wire Gerät:
  1. Speichern des Messwertes alle 5min (300s)
  2. Senden auf KNX alle 5min (300s) und wenn Änderung >1°C => dient für die Visu
  3. Senden auf das TWS interne Objekt alle 600s und wenn dT >0,2°C mit einer Abfragerate von 10sec
Man sieht sehr schön, dass tatsächlich alle 10s ein Temperaturwert intern an die LE gesendet wird (Abkühlversuch :-) ), wenn dT > 0.2 ist (wie eingestellt). Damit kann man voraussichtlich das Licht innerhalb von <30sec einschalten. :dance:

Durch diese Einstellungen kommt diese Fülle an Messwerten am KNX und in der Zeitserie aber nicht an. Dort interessiert mich auch nicht der 0,2°C Temperatursprung, ich sehe aber schön der Verlauf und ob jemand geduscht hat :naughty: .
Und mit dem DokMode werden vorübergehend auch die schnellen Messwerte gespeichert, ohne dass ich irgendwo was Ein-/Umstellen muss!! :clap:

Bild

Bild

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

alexbeer
Reactions:
Beiträge: 394
Registriert: Mi Sep 12, 2018 1:11 am
Wohnort: NRW
Hat sich bedankt: 212 Mal
Danksagung erhalten: 251 Mal

#8

Beitrag von alexbeer »

Danke für die tolle Anleitung und die Erklärung der Zusammenhang. Das ist echt spitze!
Seit 7!!!! Jahren liegt das 1-wire Kabel hinter der Mischerbatterie 🙈 in der Dusche. Ich hatte mir immer vorgenommen, den Temperatur-Sensor später auch Mal anzuschließen. Ich glaube ich nehme diese Logik Mal als Anlass, meine Nachlässigkeit zu korrigieren...
VG Alex
Timberwolf122 (TWS 2500) // Wartungs-VPN: offen // Reboot: jederzeit

Ersteller
Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#9

Beitrag von Robert_Mini »

Ich hab Sensoren bei Badewannenzulauf und Dusche verbaut UND angeschlossen.
Die Logik bin ich am WG nie angegangen, mit der Summe an Möglichkeiten am TWS war das jetzt echt ein Vergnügen!
  • 1-wire je Sensor parametrierbar inkl. für Objekte, Zeitreihe und KNX unterschiedlich!!
  • Perfekte Analyse der Messdaten. Out of the box inkl. Vergangenheit, nicht erst Aufzeichnung starten und warten.
  • Logikeditor mit DokMode, Grafana, etc.
Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

StefanW
Elaborated Networks
Reactions:
Beiträge: 9750
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4867 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#10

Beitrag von StefanW »

Hallo Robert,

was für ein wahnsinns Tutorial! Vielen Dank im Namen des ganzen Forums, das wird sicherlich mal einer der meistgelesenen Beiträge hier werden und ich würde ihn dann gerne auch in den Tutoriumsabschnitt im neuen WIKI übernehmen wollen.
Robert_Mini hat geschrieben: So Dez 01, 2019 10:05 amWas ich hier besonders hervorheben möchte, weil es einmal mehr die Stärken des TWS Objektsystems klar macht: Ich habe 3 Einstellungen beim 1-Wire Gerät:
Freut mich sehr dass Du das herausgehoben hast, weil es ist eine ganz besondere Stärke der 1-Wire Implementierung im Timberwolf Server überhaupt und ein schönes Beispiel, welchen Sinn diese Abstraktionsebene der "Objekte" möglich macht: Totale Flexibilität
  • Jeder Sensor hat mehrere Leistungsmerkmale, die wir Applikationen nennen (z.B. Temperatur in verschiedenen Auflösungen, rel. Luftfeuchte, Abs. Luftfeuchte, Taupunkt).
  • Für jedes dieser Leistungsmerkmale lassen sich Regel anlegen und - wie Du ja schön geschrieben hast - eben auch mehrmals. Also auch durchaus die gleiche Temperatur dreimal.
  • Und für jede Regel eine eigenen zeitlichen Fahrplan (Abfragerate), eigene Statistik, eigene Weiterleitungsbedingungen und oder Weiterleitugnsintervalle und auch noch separate beliebige Verknüpfungen.


Robert_Mini hat geschrieben: So Dez 01, 2019 10:05 amDurch diese Einstellungen kommt diese Fülle an Messwerten am KNX und in der Zeitserie aber nicht an.
Richtig, jeder Messwert, jede Ableitung nur für das Ziel, wo man das auch benötigt. Trotzdem temporär aufzeichenbar umd zu sehen, ob man richtig liegt und dann kann man die Zeitserie auch zwei Tage wieder wegnehmen.

Duese Funktionalität ist, was wir bei der Timberwolf Server Entwicklung als "No Limits" bezeichnet haben. Das darf man nicht allzu wörtlich nehmen, weil Limitierungen gibt es immer und das Budget ist auch nicht unendlich. Aber wir versuchen durch klugen Aufbau und die ein oder andere Anstrengung das Machbare deutlich zu erweitern und den Kunden neue und einfache Möglichkeiten zu geben.

Es freut mich sehr zu sehen, dass es auch genutzt und der Wert erkannt wird.

Bitte weiter so mit so tollen Tutorien, ganz großes Kino :clap: :clap: :clap:

lg

Stefan
Zuletzt geändert von StefanW am So Dez 01, 2019 1:37 pm, insgesamt 1-mal geändert.
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Antworten

Zurück zu „Logikengine & Logik-Editor“