Neue Insider Version V 4.5 IP 4 verfügbar

Ein Dutzend Neuheiten, viele Verbesserungen und einige Bugfixes

Profilexport- und Import für HTTP-/REST-API; Visualisierung von Logik-Zellen (!); Erweitertes System-Monitoring; Admin-UI mit nun sechs Sprachen, VISU Client mit zwölf Sprachen; Aufzeichnung und Anzeige von Status-Logs (z.B. Diagnosetexte von KNX-Spannungsversorgungen und KNX-Aktoren); Vielfache Verbesserungen des VISU Editors uvm.

Alle Informationen hier: https://elabnet.atlassian.net/wiki/x/AY ... JwIjoiYyJ9

[Erfahrungsbericht] [V4.5 IP3] Schritt für Schritt Umsetzung einer (Dusch)-Lüftersteuerunjg

Hier bitte Eure Diskussionen und Feature Requests zu neuen Logikmodulen und Funktionen des Logik-Editors

Ersteller
Franky
Reactions:
Beiträge: 56
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 19 Mal
Danksagung erhalten: 16 Mal

[V4.5 IP3] Schritt für Schritt Umsetzung einer (Dusch)-Lüftersteuerunjg

#1

Beitrag von Franky »

Hallo Robert,
hallo alle ;-)
Robert_Mini hat geschrieben: So Mär 09, 2025 8:17 pm [...] Das Zerlegen einer Logikaufgabe in Einzelschritte und Module ist leider schwer zu erklären. [...]

Ich kann hier nur wieder mal anbieten, bei einer konkreten Aufgabe zu unterstützen und das gemeinsam Schritt für Schritt umzusetzen => Ergebnis ist dann ein weiteres Tutorial.
[...]
Als erste größere Automatisierung würde ich gerne eine Lüftersteuerung umsetzen. Natürlich direkt als statemachine :D
@Robert_Mini: ohne, dass Du dich jetzt verpflichtet fühlen musst :whistle:

Ich schreibe jetzt die Anforderungen mal auf und das gemeinsam erarbeitete Ergebnis wird natürlich öffentlich nutzbar hier im Forum sein und bleiben.

Die Aufgabe:
  • Es geht um eine Duscherkennung und Badlüftersteuerung.
  • Das finde ich nicht ganz trivial, da bspw. ein einfaches "es ist feucht", bspw. weil es draußen "sehr feucht" ist und drinnen die Heizung mal nicht laufen sollte und das Fenster vielleicht auch noch offen steht, nicht zum Start des Lüfters führen soll.
  • Auf eine Rampenerkennung / Änderungsstärke innerhalb eines Zeitintervall kann, muss es aber auch nicht hinauslaufen.
  • Eventuell sinnvoll: Die Feuchtigkeit kurz vor dem Duschevent an der Tür könnte aber (mit zusätzlichem Puffer) als Referenz gespeichert werden, um eine Zielfeuchtigkeit fürs Ausschalten zu gewinnen.
  • Einfach so lange zu lüften, bis es nicht "wesentlich" trockener wird, ist als alleiniges Kriterium nicht zielführend, da wenn man "lange" duscht, stellt sich nunmal irgendwann ein Wert nahe 98% Luftfeuchtigkeit, egal wieviel Feuchte abgeführt und neu eingebracht wird.
Zusätzliche Anforderungen/Hinweise:
  • manueller Lüfterstart über Taster (Duftabzug Klo :lol:)
Sensoren & Steuerung: Folgende Werte stehen zur Verfügung:
  1. Temperatur, Feuchte, Taupunkt, jeweils
    • direkt an der Dusche
    • an der anderen Zimmerecke (Tür)
    • draußen
  2. Taster (soll Mindestlaufzeit 15 Minuten auslösen, gesteuert über den Zustandsautomaten)
  3. Maximallaufzeit von 2 Stunden, um im Zustandsfehlerfall auszuschalten. Am liebsten Treppenlicht durch Aktor. Geht aber nicht, da Schwellewertschalter und Treppenlicht sich am Aktor ausschließen. Wird dann halt ein Event von außen für den Automaten "Lüfter extern ausgeschaltet". Schwellwertschalter verwende ich, da ich den Lüfter über einen Jalousieaktor (%-Position Abluftschieber im Lüfterrohr) ein- und ausschalte.
Was mir schon aufgefallen ist: Der Lüfter ist schwächer als die Dusche :roll:: Nach einer gewissen Zeit ist es an der Tür (andere Zimmerecke) genau so feucht, wie kurz vor der Dusche. Dieser Vergleich ist aber ein prima Einschaltkriterium. Zu Duschbeginn ist eine absolute Differenz der rel. Luftfeuchtigkeit von 15 Prozentpunkten ein guter Indikator zum Erkennen "da duscht jemand".

Ich habe zunächst eine für mich entscheidende Frage, ob ich das Konzept richtig verstanden habe:
  • Es ist feucht, der Lüfter an und der Automat wartet auf den Timeoutablauf (siehe Punkt 3.) seines Zustandsüberganges.
  • Jetzt kommt ein Ereignis (neuer Feuchtigkeitsmesswert bspw.) rein:
Muss ich jetzt erstmal in einen neuen Zustand "Wert jetzt auswerten" wechseln, da ich ja für beides ("Timeoutabauf prüfen" und "Ergebnis der Wertauswertung prüfen" den ersten Parameter ("Bedingung") einer Zeile von der "Zustandübergangstabelle" der "TWS Statemachine" verwenden muss?

Wenn Du / ihr mir das als erstes beantworten könntet? Weil wenn das nicht so ist, habe ich das Konzept der statemachine vom TWS noch nicht verstanden.

LG

Franky
Zuletzt geändert von Robert_Mini am Sa Mär 15, 2025 9:05 am, insgesamt 6-mal geändert.
Timberwolf 3500L ID:1642; Support-VPN für ElabNET nach Rücksprache

blaubaerli
Reactions:
Beiträge: 2623
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 985 Mal
Danksagung erhalten: 768 Mal

#2

Beitrag von blaubaerli »

Hallo Franky,

bitte beachte die Forenregeln und füge die Versionsangabe bei.

Danke. :handgestures-salute:
Beste Grüße
Jens
wiregate1250 & timberwolf168 (2600er), VPN offen, Reboot nach Vereinbarung
Bitte WIKI lesen.

Robert_Mini
Reactions:
Beiträge: 3887
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1254 Mal
Danksagung erhalten: 2183 Mal

#3

Beitrag von Robert_Mini »

Nur mal kurz zur Diskussion:
Du hast 2 Fühler, damit wäre die Differenz ein Kriterium.

Alternativ (so mache ich das für die Erkennung der Rückspülung der Entkalkungsanlage):
- Feuchte über einen Tiefpass über einige Stunden gemittelt (das sollte für den Trend über den Tag oder Jahreszeit reichen
- Vergleich der aktuellen Feuchte gegen den geglätteten Wert => Trigger bei überschreiten um x.

Rampe (=die 1. Ableitung) wäre natürlich super, ist aber aus meiner Erfahrung oft auch zu sensibel auf kleine Schwankungen.

Eine Absicherung nach 2 Stunden und manueller Trigger ist sicher kein Problem.

Ich würde aber hier nicht auf einen Zustandsautomaten gehen, außer zur Übung und weil er die Absicherung gleich mit abdeckt => bin flexibel.

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

Ersteller
Franky
Reactions:
Beiträge: 56
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 19 Mal
Danksagung erhalten: 16 Mal

#4

Beitrag von Franky »

Robert_Mini hat geschrieben: Mo Mär 10, 2025 5:01 pm
Ich würde aber hier nicht auf einen Zustandsautomaten gehen, außer zur Übung und weil er die Absicherung gleich mit abdeckt => bin flexibel.

Ja, ich hatte mir das so vorgestellt, dass ich eine aktuell umzusetzende Aufgabenstellung nehme, um mich in die statemachine einzuarbeiten.

Nur ich glaube/hoffe, dass ich ihn immer noch nicht verstanden habe. Mein aktuelles Verständnis ist, dass man mit true / false nur in zwei Richtungen (nur zwei Folgezustände) wechseln kann. Ist das so? Muss mir das ganze noch mal durchlesen, vielleicht fällt dann der Groschen noch.

LG

Franky
Zuletzt geändert von Franky am Mo Mär 10, 2025 9:01 pm, insgesamt 1-mal geändert.
Timberwolf 3500L ID:1642; Support-VPN für ElabNET nach Rücksprache

jhaeberle
Reactions:
Beiträge: 154
Registriert: Do Aug 24, 2023 11:07 am
Wohnort: Raum Augsburg
Hat sich bedankt: 67 Mal
Danksagung erhalten: 33 Mal

#5

Beitrag von jhaeberle »

Hallo!

Au fein! Darf ich mich hier einklinken? Ganz davon abgesehen, dass so eine feuchtigkeitsbasierte Lüftersteuerung für mich auch zwei Mal auf dem Programm steht, einmal für Bäder und einmal für eine Waschküche (wobei es zumindest hier cool wäre, wenn auch die Aussenfeuchte eingehen könnte -> nur lüften, wenn es innen feuchter ist als draussen), habe ich ein vergleichbares Problem mit einer VOC-basierten Toilettenlüftung. Die VOC-Belastung geht auch unabhängig von der Klonutzung, bspw. durch's Kochen oder durch's "Odeln" der umliegenden Bauern, hoch und wieder runter. Einen Hystereseschalter habe ich schon probiert, das ergibt leider keine wirklich guten Ergebnisse. Aber in einer Zeitserie sieht man, dass man gerne hätte, dass der Lüfter "Peaks" weglüftet. Ich habe Experimente mit dem Tiefpassfilter gemacht und mit einem Zeitraum von einer Stunde kommt man gut hin. Für die Dusche resp. Badewanne habe ich das leider noch nicht, könnte mir aber vorstellen, dass das so ähnlich ist.

Ein Inhibit-Eingang sollte noch sein, damit man das Lüften bspw. nachts abschalten kann. Wir haben hier bspw. einen Lüfter, dessen Kanal leider auf dem Weg zum Dach an einem Schlafzimmer vorbei führt…

Ich bin jedenfalls auch grad dran, so eine Logik zu bauen, weiss aber auch, dass das für ein Erstlingswerk ein bisserl heavy ist… wenn's euch passt würde ich hier gerne mitmischen…

Wie funktioniert das mit dem Tiefpassfilter und dessen Mittelung? Wo nimmt der die Werte des Zeitraums her? Funktioniert der erst nach Ablauf des Mittlungsintervals wirklich richtig???

Gruß
Jochen
Zuletzt geändert von jhaeberle am Mo Mär 10, 2025 9:24 pm, insgesamt 1-mal geändert.
TWS 3500XL, ID: 1409 (VPN offen, Reboot nach Rücksprache)

Ersteller
Franky
Reactions:
Beiträge: 56
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 19 Mal
Danksagung erhalten: 16 Mal

#6

Beitrag von Franky »

jhaeberle hat geschrieben: Mo Mär 10, 2025 9:22 pm Hallo!

Au fein! Darf ich mich hier einklinken?
Hallo Jochen,

von meiner Seite liebend gerne. Ich ziehe auch mein Wunsch auch zurück, dass es statemachine sein "muss". Ich sollte erst noch etwas Übung mit den custom logiken im Allgemeinen bekommen. Ich bin offen, mich auf das Konstrukt einzulassen, auch wenn ich aus der klassischen Programmierung komme und mir der Einstieg grade etwas schwer fällt :roll: . Aber ein bisschen Gehirnakkrobatik ist im Alter ja ganz gut :lol:

Nur bitte kurz eine Antwort von den Profis: Stimmt es, dass man mit statemachine eher Sequenzen abbildet und nicht x beliebige Zielzustännde (sondern nur zwei) aus einem Zustand heraus ansteuern kann? Zustand next_1 mit "Bedingung" (1.Paramater)=true/false und Zustand next_2 entsprechend mit false/true?


Gruß

Franky
Timberwolf 3500L ID:1642; Support-VPN für ElabNET nach Rücksprache

jhaeberle
Reactions:
Beiträge: 154
Registriert: Do Aug 24, 2023 11:07 am
Wohnort: Raum Augsburg
Hat sich bedankt: 67 Mal
Danksagung erhalten: 33 Mal

#7

Beitrag von jhaeberle »

Hast du schon mal versucht, den Lüfter mit einem Hysterese-Schalter zu steuern? Ist es bei der Luftfeuchtigkeit nicht so, dass man den Wert gerne in einem Bereich haben möchte? Eine obere Grenze, ab der gelüftet werden soll, bis ein darunter liegender Zielwert erreicht ist sollte doch ganz gut passen, oder?
Luxus wäre die Einbindung eines Aussenwertes, damit man nicht versucht zu lüften, wenn es aussen feuchter ist als drin…

Da unterscheidet sich mein VOC-basierter Ansatz leider vom Luftfeuchtelüften…
TWS 3500XL, ID: 1409 (VPN offen, Reboot nach Rücksprache)

jhaeberle
Reactions:
Beiträge: 154
Registriert: Do Aug 24, 2023 11:07 am
Wohnort: Raum Augsburg
Hat sich bedankt: 67 Mal
Danksagung erhalten: 33 Mal

#8

Beitrag von jhaeberle »

Robert_Mini hat geschrieben: Mo Mär 10, 2025 5:01 pm - Feuchte über einen Tiefpass über einige Stunden gemittelt (das sollte für den Trend über den Tag oder Jahreszeit reichen
Du hast natürlich völlig recht. Ein Tiefpass gemittelt über 3 oder sechs Stunden ist viel träger als einer über eine Stunde. Der rennt doch recht schnell nach. Aber man muss das erst mal eine ganze Weile laufen lassen. Die großen Intervalle scheinen gern mal mit etwas merkwürdigen Werten zu starten, pendeln sich dann aber ein. Wahrscheinlich nach ein, vielleicht zwei Mittlungszeiträumen?

Ist denn ein Tiefpassfilter vielleicht eine state-machine in Frankys Sinne?

Gruß
Jochen
TWS 3500XL, ID: 1409 (VPN offen, Reboot nach Rücksprache)

Robert_Mini
Reactions:
Beiträge: 3887
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1254 Mal
Danksagung erhalten: 2183 Mal

#9

Beitrag von Robert_Mini »

Tiefpass hat mit StateMachine mal nichts zu tun.
Für die States braucht man Bedingungen, mit denen von einem State zum nächsten gewechselt wird. Eine Bedingung davon ist dann eben $I_Feuchte > $Feuchte_gemittelt

Ich fasse mal zusammen, vielleicht kann einer von euch das gleich Schritt für Schritt umsetzen.

Es gibt einen folgende Eingänge:
- $I_Feuchte, Typ float
- $I_Trigger, Typ bool, für den manuellen Start
- $Feuchte_Delta_Max und $Feuchte_Delta_Min, beide Typ float
- $Laufzeit_Max und $Laufzeit_Manuell, beide Typ float

Es gibt einen Ausgang: $O_Luefter, Typ bool

Damit sollte man schon mal einen schöne Zelle bekommen (passende Beschriftungen wählen!) und die Logik speichern können. Es braucht mal nur die Leveldefinition, Input und Output.

Da kann man abgucken:
viewtopic.php?t=4128

Ergebnis hier als Code teilen :-), dann geht es weiter.

lg
Robert
Zuletzt geändert von Robert_Mini am Di Mär 11, 2025 11:53 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Franky
Reactions:
Beiträge: 56
Registriert: Di Dez 24, 2024 1:24 pm
Hat sich bedankt: 19 Mal
Danksagung erhalten: 16 Mal

#10

Beitrag von Franky »

Robert,

vielen Dank für den Anstubser,

Ich fürchte, ich habe das Verhalten für $Feuchte_Delta_Max und $Feuchte_Delta_Min (Inputs oder?) nicht ganz geblickt. Ich habe "$Feuchte_Delta_Max" als Schwellwert für "es ist plötzlich feucht geworden" interpretiert. Das passt ja, aber meine Interpretation von "$Feuchte_Delta_Min" ist "es wird nicht trockener". Das kann man aber ja nicht erkennen, wenn man nicht weiß, ob man auf Dem Weg des Trocknens ist. Obwohl, das lässt sich ja doch ermitteln. wenn man einen Mindestwert (%?) vom Max der letzten n Minuten entfernt ist, fängt man an zu beobachten, ob es nach wie vor trockener wird. Hoffe ich bin hier nicht auf dem Holzweg :lol:

LG

Franky

Code: Alles auswählen

{
    "Level":[
    // Eingänge
	["$I_Feuchte","float",0],
 	["$I_Trigger","bool",false],
	["$I_Feuchte_Delta_Max","float",15.0],
	["$I_Feuchte_Delta_Min","float",5.0],
	["$I_Laufzeit_Max","float",120.0],
	["$I_Laufzeit_Manuell","float",5.0],
	// Verarbeitung
	["$Feuchte_gemittelt","float",0.0],
	
    // Ausgänge
	["$O_LuefterEA","float",0.0]
	
    ],
    "Module":[
	
	
	// VORLAGE
	  //["Polynomial", "$Var_x", "$OutputFloat",["$A0", "$A1"]],	
	  //["Ratio","$Zaehler","$OutputFloat","$Nenner"],
	  //["Limiter","$Input1","$OutputFloat","$InputInnerhalb",["$Untergrenze", "$Obergrenze"]],
	  //["Comparator", "$Input1", "$OutputBool", "$Vergleichswert"],
	  //["Comparator" , "$Input1" , "$OutputBool" , ["$UntereSchwelle","$ObereSchwelle"]]
	  //["Multiplexer",["$Input1","$Input2"],"$OutputFloat","$SelectInput"],			
	  //["Or" , ["$Input1","$Input2"], "$OutputBool"],
	  //["And" , ["$Input1","$Input2"], "$OutputBool"],
	  //["Monoflop","$Trigger","$Reset","$TimerStatus","$Dauer",1],  
	  //["Latch","$Input1","$Output","$Trigger",0],     // Übernimmt den Wert von $Input1 auf $Output, wenn Trigger = 0, Option 0/1/2/3 = wenn true/pos. Flanke/neg. Flanke/jede Flanke
	  //["Clocksignal","$Enable","$Takt","$Periode"],   // Zyklischer Trigger, $Takt wechselt jeweils nach Ablauf von $Periode zwischen TRUE/FALSE
	  //["HobbsMeter","$Status","$Time","$Reset"],      // Zaehlt bei $Status = TRUE die Zeit in [h]
	  //["Stopwatch","$Status", "$Time"],               // Stoppt die Zeit in [s] ab $Status = TRUE, bei $Status = FALSE wird auf 0 zurückgesetzt
	  //["CalcFormula",["$Day1Case","$Day2Case","$Day3Case","$Day4Case","$DayEquals"], "$Case", "$Formula3"],
	  //["Cron","$KonstTrue","$Reset",0,"$CronString"],
	  //["Wakeup","$Utime_start","$Status"],
	  //["BinaryMultiplexer",["$In_D","$In_E","$In_F"],"$Output"],
	  //["Lowpass","$In_val","$Out_val","$Time_const"]
	  //["Triggered", "$InputVar", "$Touched" ],        // Touched = TRUE, wenn der Eingang $InputVar die Logik getriggert hat
	  //["SendExplicit","$Send","$OutputVar",0],        // Sendet Ausgang $OutputVar, abhängig von $Send 0/1/2/3 (Paramter analog Latch), ACHTUNG "x" am Output setzen!
	  //["Interpolation","$In", "$Out", [ [x1,y1] , [x2,y2] , ... , [xn,yn ] ] ]  **/
    ],
    "Input":[
        ["Feuchte Messwert","Aktuelle relative Luftfeuchtigkeit, DPT9","$I_Feuchte","c"],
        ["Trigger manuell","mit TRUE wird Lüfter manuell gestartet","$I_Trigger","c"],
        ["Vergleichswert für Lüfter an","Mindest Feuchteanstieg für Lüfterstart (abs. rel. Feuchtigkeits-differenz)","$I_Feuchte_Delta_Max","c"],
        ["Vergleichswert für Lüfter aus","Mindest Feuchteabfall für Lüfterstop (abs. rel. Feuchtigkeits-differenz)","$I_Feuchte_Delta_Min","c"],
        ["Lüfterlaufzeit max.","maximale Laufzeit (Sicherheitsaus in Minuten)","$I_Laufzeit_Max","c"],
        ["Lüfterlaufzeit man.","Laufzeit für manuelles Lüften (Minuten)","$I_Laufzeit_Manuell","c"]
    ],
    "Output":[
        ["Schalten E/A","Lüfter schalten (Ein/Aus) DPT1","$O_LuefterEA","c"]
    ]
}
Zuletzt geändert von Robert_Mini am Mi Mär 12, 2025 9:24 pm, insgesamt 1-mal geändert.
Timberwolf 3500L ID:1642; Support-VPN für ElabNET nach Rücksprache
Antworten

Zurück zu „Feature Requests & Diskussionen Timberwolf Logik (Module & Editor)“