@Robert_Mini
Danke für dein Interesse und die Mithilfe bei einer Custom-Logik.
Ich könnte zwar die Logik in einer Steuerung schreiben, aber für eine Custom-Logik im TW kenn ich mich noch viel zu wenig aus.
Ich habe bei mir folgenden Aufbau im Bad:
-) Hauptlicht, welches über einen Decken-PM geschaltet wird
-) Licht in der Dusche, welches rein nur mit der Temperatur gesteuert wird und auch am Tag angehen soll
-) Keinen Taster im Bad (Reserve-Dose aber vorhanden)
Aber es soll ja ein Baustein werden, der für mehrere Anwendungsfälle gleich passt.
Hier kann dann jeder selber entscheiden, ob 1 Levelanstieg reicht oder mehrere davon erkannt werden müssen.
Damit er dann noch schön universal ist, würde ich folgende Signale vorschlagen.
Zusammenfassung der Logik:
Eingänge:
-)
Enable (BOOL bzw. Schwellwert)
Freigabe-Signal zum Aktivieren der Logik
z.B. vom PM oder als Schwellwertschalter von der Temperatur
Von diesen Enable-Signalen dann flexibel mehrere aktivierbar (VAR) und diese intern als UND zusammengeschaltet.
-)
Level_Actual
Aktueller Level, auf welchen abgefragt werden soll
z.B. die Temperatur des Wasserzulaufs der Dusche
z.B. 35°C
-)
LevelRise_Number
Anzahl der benötigten direkt hintereinander erforderlichen Level-Anstiege für die Erkennung eines sichern Anstiegs
z.B. 2
-)
LevelRise_Value
Minimaler Wert des Level-Anstiegs, damit ein Anstieg gezählt wird
z.B. der notwendige Temperaturhub der Wasserzuleitung innerhalb einer Zeiteinheit
z.B. 0,1°C
-)
LevelRise_Time
Zeitinvervall bei dem geprüft wird, ob ein Levelanstieg stattfindet
z.B. Abfrageintervall der Wasserzuleitung
z.B. 1s
-)
LevelFall_Number
Anzahl der benötigten direkt hintereinander erforderlichen Level-Abfälle für die Erkennung eines sichern Abfalls
z.B. 2
-)
LevelFall_Value
Minimaler Wert des Level-Abfalls, damit ein Abfall gezählt wird
z.B. der notwendige Temperaturabfall der Wasserzuleitung innerhalb einer Zeiteinheit
z.B. 0,1°C
-)
LevelFall_Time
Zeitinvervall bei dem geprüft wird, ob ein Levelabfall stattfindet
z.B. Abfrageintervall der Wasserzuleitung
z.B. 1s
Ausgänge:
-)
Output (BOOL)
Ausgang der Logik
z.B. Licht in der Dusche
Interne Merker:
-)
Level_Old
Alter Wert des aktuellen Levels, der bei jeder Abfrage gespeichert wird und bei der nächsten Abfrage verglichen wird.
-)
LevelCounter_Rise
Interner Zähler, wie oft eine Level-Änderung beim Anstieg erkannt wurde
-)
LevelCounter_Fall
Interner Zähler, wie oft eine Level-Änderung beim Abfall erkannt wurde
-) Etwaige andere notwendige Merker für die Logik
Anhand oben geschriebener Beispielwerte, wäre das folgender Ablauf:
Logik-Ablauf:
Grund-Bedingung: Enable auf 1
Bei Enable = 0 werden alle internen Zähler auf 0 und der Ausgang rückgesetzt.
1. Es wird jede 1 Sekunde (LevelRise_Time) der aktuelle Level (Level_Actual) mit dem vorherigen Level (von vor 1s in internem Merker) überprüft.
2. Ist die Differenz der beiden Level größer als 0,1°C (LevelRise_Value) und positiv (Level_Actual > Level_Old), so wird intern ein Zähler (LevelCounter_Rise) erhöht.
3. Speicherung des aktuellen Levels in einem internem Merker (Level_Old) , dies ist dann der alte Wert vor 1 Sekunde.
4. Abfrage ob der interne Zähler größer gleich der benötigten Level-Änderungen von 2 ist (LevelRise_No).
5. Setzen des Ausgangs, anhand der vorhergehenden Abfrage der Zählerwerte
6. Die Punkte 1 bis 5 wiederholen, nur dieses Mal mit den Werten für den Levelabfall.
Bei erfolgreicher Abfrage, den Ausgang dann rücksetzen statt setzen
Zusatz:
-) Das Abfrage-Intervall des Sensors (z.B. per 1-Wire) muss bei der Logik-Einstellung, dass mehrere Anstiege notwendig sind, natürlich schneller sein als die Abfragezeit der Logik, sonst würde diese nie einschalten.
Was haltet ihr davon?