FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: The Grue am 22 März 2018, 15:24:53

Titel: Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 22 März 2018, 15:24:53
Servus zusammen,

Für meinen Lüfter in der Küche wollte ich folgendes:


Wenn ich die Doku richtig verstanden habe, kann DEWPOINTs FAN Funktion lüften, solange der Taupunkt drinnen größer als draußen ist (Punkt 2). Ich hab' das mal versucht, klappt aber nicht, weil selbst im Winter bei einem Taupunkt weit unter 0 der Taupunkt drinnen niemals so klein werden kann. THRESHOLD kann natürlich Punkt 1, aber nicht Punkt 2. Punkt 3 bilde ich mir halt ein ;)


Als Anfänger habe ich mir jetzt folgendes aus den Fingern gesaugt und würde mich über konstruktive Kritik sehr freuen:
# Lüftersteuerung in der Küche:
# - An alle 2h für 10min
# - An wenn Luftfeuchtigkeit > 50% und der Taupunkt draußen 10C größer als drinnen ist.
define Kueche.Hygrostat THRESHOLD Kueche.TemperatureHumidity:humidity:5:50
attr Kueche.Hygrostat state_cmd1_gt on
attr Kueche.Hygrostat state_cmd2_lt off
attr Kueche.Hygrostat state_format _sc

define Kueche.Taupunktdifferenz DOIF
attr Kueche.Taupunktdifferenz state {([Kueche.TemperatureHumidity:dewpoint] - [Wetter:dewpoint])}

define Kueche.LuefterByTime dummy
attr Kueche.LuefterByTime eventMap on off
attr Kueche.LuefterByTime setList on off
attr Kueche.LuefterByTime useSetExtensions 1

define Kueche.LuefterByTime.Aktivieren at +*02:00:00 set Kueche.LuefterByTime on-for-timer 600

define Kueche.Taupunktdifferenz.Schwellwert THRESHOLD Kueche.Taupunktdifferenz:state:2:10
attr Kueche.Taupunktdifferenz.Schwellwert state_cmd1_gt on
attr Kueche.Taupunktdifferenz.Schwellwert state_cmd2_lt off
attr Kueche.Taupunktdifferenz.Schwellwert state_format _sc

define Kueche.Luefter.Logik DOIF ([Kueche.LuefterByTime:"on"] or ([Kueche.Hygrostat:"on"] and [Kueche.Taupunktdifferenz.Schwellwert:"on"]))  (set Kueche.Luefter.Schalter on) DOELSE (set Kueche.Luefter.Schalter off)


Danke für Eure Mühe :)
Markus
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 22 März 2018, 17:15:54
Hmmm, das Einschalten via [Kueche.LuefterByTime:"on"] scheint nicht zu funktionieren :( Da hab' ich wohl noch einen groben Denkfehler.

Kann es sein, daß im Falle von  [Kueche.LuefterByTime:"on"]  das set ... on ausgeführt wird, gleich gefolgt von einem set ... off?
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: CoolTux am 22 März 2018, 17:43:21

define Kueche.Luefter.Logik DOIF ([Kueche.LuefterByTime:"on"] or ([Kueche.Hygrostat:"on"] and [Kueche.Taupunktdifferenz.Schwellwert:"on"]))  (set Kueche.Luefter.Schalter on) DOELSE (set Kueche.Luefter.Schalter off)


Das kann auch nichts werden. Ein and auf ein weiteres Event geht nicht. Es können nicht zur selben Zeit zwei Events kommen zur Auswertung.
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 22 März 2018, 17:45:01
Ach mist, ich dachte allmählich hätte ich das verstanden :(

Wie geht es denn nun richtig? Ich dachte, ich vergleiche Zustände, nicht Events...
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: CoolTux am 22 März 2018, 17:47:23
Nee du triggerst auf Events. Nach dem Ende die Abfrage musst umschreiben auf Zustand und wenn du es nicht brauchst als Trigger dann mit ? davor als nur Abfrage
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: Aldeyn am 22 März 2018, 18:06:48
Ich bin selbst noch absoluter Anfänger, aber vielleicht helfen die DOIF_Readings weiter?
https://fhem.de/commandref_DE.html#DOIF_Readings
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 22 März 2018, 18:39:11
Servus CoolTux,

Zitat von: CoolTux am 22 März 2018, 17:47:23
Nach dem Ende die Abfrage musst umschreiben auf Zustand

Ich bin Dir ja echt dankbar, daß Du mir helfen willst - aber mit Sätzen die von Yoda kommen könnten tu' ich mich echt schwer :p

Ernsthaft, ich hab' versucht schlau daraus zu werden, mit der DOIF-Doku daneben... Leider kein Erfolg ;(

cu
Markus
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: CoolTux am 22 März 2018, 19:00:14
Sorry, ich war unterwegs.


define Kueche.Luefter.Logik DOIF ([Kueche.LuefterByTime:"on"] or ([Kueche.Hygrostat:"on"] and [Kueche.Taupunktdifferenz.Schwellwert:"on"]))  (set Kueche.Luefter.Schalter on) DOELSE (set Kueche.Luefter.Schalter off)


Ok ich sehe gerade. Du hast die Bedingungen nach dem or verknüpft.
Also entweder ein [Evnt Kueche.LuefterByTime:"on"] oder aber ein Event [Kueche.Hygrostat:"on"]  UND [Kueche.Taupunktdifferenz.Schwellwert]
Willst Du es wirklich so haben?

Deiner Beschreibung entnehme ich das du eigentlich [Kueche.Taupunktdifferenz.Schwellwert] nur abfragen willst. Du willst nicht wirklich auf die Differenz reagieren. Also


define Kueche.Luefter.Logik DOIF ( [Kueche.LuefterByTime:"on"] or ([Kueche.Hygrostat:"on"] and [Kueche.Taupunktdifferenz.Schwellwert] eq "on") )  (set Kueche.Luefter.Schalter on) DOELSE (set Kueche.Luefter.Schalter off)



Bei Fragen. Fragen
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 22 März 2018, 19:06:07
Servus CoolTux,

ja, danke! Jetzt verstehen wir uns :)  Kann ich heute leider nicht mehr ausprobieren, aber morgen hoffentlich.

Vielleicht könntest Du mir noch was helfen: ich weiss, irgendwo in der FHEM-Doku war der Unterschied zwischen "auf Event reagieren" und "status abfragen" definiert, aber ich hab's beim besten Willen nicht mehr gefunden. Ich seh's ja jetzt in Deinem Beispiel, aber weisst du aus dem Stegreif wo das in der Doku steht?


Schönen Abend,
Markus
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: CoolTux am 22 März 2018, 19:11:15
http://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

http://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events


Bitte schön


Grüße
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: The Grue am 23 März 2018, 12:40:32
Inzwischen hab' ich auf folgendes umgestellt und das scheint zu funktionieren:

define Kueche.Luefter.Logik DOIF (([Kueche.LuefterByTime] eq "on" ) or (([Kueche.Hygrostat] eq "on") and ([Kueche.Taupunktdifferenz.Schwellwert] eq "on")) )  (set Kueche.Luefter.Schalter on) DOELSE (set Kueche.Luefter.Schalter off)   

Es werden also gar keine Events mehr abgefragt, sondern nur noch Statusübergänge (?)

Ich würde ja gerne was lernen, drum versuche ich mal zu erklären wie ich das verstehe - bitte korrigiert mich!

- Solange sich kein Zustand ändert tut sich nichts.
- Bei einem Zustandsübergang von [Kueche.LuefterByTime]  nach "on" wird das DOIF aufgerufen und cmd_1 (set...on) gestartet.
- Bei einem Zustandsübergang von [Kueche.LuefterByTime]  nach "off" (bzw. "weg von on") wird cmd_2 ausgeführt (set..off)

Der Teil war einfach ;)

- Bei einem Zustandsübergang von [Kueche.Hygrostat] nach "on" wird [Kueche.Taupunktdifferenz.Schwellwert] auf "on" verglichen und bei Übereinstimmung cmd_1 ausgeführt
- ... und umgekehrt!
- Wenn  [Kueche.Hygrostat] "off" ist und einer der beiden anderen "off" geht der Lüfter aus.

Der zweite Teil funktioniert nur mit Statusübergängen und dem Vergleich auf den Status, weil bei einem Event das jeweils andere Event nicht gleichzeitig auftritt.

Was ich noch nicht verstehe:
Der erste Teil funktioniert auch nur mit Vergleich des Status. Wenn ich die Event-Syntax verwende, dann geht der Lüfter zwar an, aber er bleibt nicht die definierte Zeit lang an sondern geht relativ bald wieder aus.

Warum?
Titel: Antw:Bitte um review: meine erste etwas komplexere Steuerung
Beitrag von: Damian am 23 März 2018, 13:12:07
Zitat von: The Grue am 23 März 2018, 12:40:32

Was ich noch nicht verstehe:
Der erste Teil funktioniert auch nur mit Vergleich des Status. Wenn ich die Event-Syntax verwende, dann geht der Lüfter zwar an, aber er bleibt nicht die definierte Zeit lang an sondern geht relativ bald wieder aus.

Warum?

Bei:

([Kueche.LuefterByTime:"^on$"]) (set...) DOELSE (set...)

wird der Ausdruck ausgewertet, wenn irgend ein Event vom Device Kueche.LuefterByTime kommt. Bei "on" wird der erste Teil ausgeführt, bei jedem anderen Event von Kueche.LuefterByTime wird der DOELSE-Fall ausgeführt.

bei:
(["^Kueche.LuefterByTime$:^on$"]) (set...) DOELSE (set...)

wird dagegen der Ausdruck nur ausgewertet, wenn das Event "Kueche.LuefterByTime: on", hier kann also DOELSE eigentlich nie vorkommen, denn z. B. bei "Kueche.LuefterByTime: off" wird der Ausdruck erst gar nicht ausgewertet.