FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: beddo am 20 Oktober 2017, 11:37:13

Titel: [gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: beddo am 20 Oktober 2017, 11:37:13
Liebe Community,

ich bin im Thema FHEM neu und habe keine Programmiererfahrung. Also vermutlich ein triviales Thema für die codingcracks, aber ich bin am verzweifeln.

Folgende Ausgangssituation:
Ich habe eine zentrale Lüftungsanlage. Da einer meiner Nachbarn ab und an in seinem Holzofen übelriechende Substanzen verbrennt möchte ich die Lüftungsanlage gerne bei Erkennung von Gestank ausschalten.
Schritt 1: Lüftungsanlage an eine FB dect angeschlossen.
Schritt 2: Luftgütesensor (Rehau Co20) in Zuleitung der Lüftungsanlage eingebaut und an FHEM auf PI angeschlossen um die Werte zu überwachen. Prüfintervall alle 60 Sekunden. Die Genauigkeit reicht aus und das "Geruchsproblem" wird auch zuverlässig erkannt
Schritt 3: Ausschalten der FBdect bei Erkennung von schlechter Außenluft über DOIF
define aircheck DOIF ([co20:voc] > 1500 )( set FBDECT_1 off )

_______ Soweit bin ich klar gekommen
Nun wollte ich die Lüftungsanlage wieder automatisiert einschalten, jedoch ist die schlechte Luft noch in der Anlage drin und die Werte am Sensor werden nicht besser.

Lösungsidee:
Ich schalte die FBDECT bei Erkennung von schlechter Luft aus, nach 30 Minuten schalte ich die FBDECT wieder ein und nach weiteren 30 Sekunden soll die Prüfschleife nach schlechter Luft wieder laufen. Somit würde die Anlage eine Minute laufen und erst dann wieder Prüfen, das sollte reichen um zum Sensor wieder Außenluft zu führen.
Habs mit attr wait  und mit cmdpause versucht, aber bis auf ausschalten passiert nichts.

define aircheck DOIF ([co20:voc] > 1500 )( set FBDECT_1 off ) und warte mit der erneuten Prüfung 1830 Sekunden
Nach 1800 Sekunden set FBDECT_1 on

Könnte mir das jemand in einen FHEM kompatiblen Code übersetzen. Ich bin echt zu doof.
Darauf kann ich dann für weitere Experimente aufbauen

Schonmal Danke

Grüße Beddo













Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: Damian am 20 Oktober 2017, 15:36:25
define aircheck DOIF ([co20:voc] > 1500 )(set FBDECT_1 off)(set FBDECT_1 on)()

attr aircheck wait 1800,60,30
attr aircheck do always


Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: Frank_Huber am 20 Oktober 2017, 15:38:53
warum nicht einfach mal das Ordnungsamt heranziehen?

Wen es schon übel riecht ist es bestimmt nicht gerade die gesündeste Luft...
Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: beddo am 20 Oktober 2017, 16:24:02
Zitat von: Damian am 20 Oktober 2017, 15:36:25
define aircheck DOIF ([co20:voc] > 1500 )(set FBDECT_1 off)(set FBDECT_1 on)()

attr aircheck 1800,60,30
attr aircheck do always


Danke werd ich am WE gleich mal testen. Dann wirds ja wieder kälter.
Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: Frank_Huber am 20 Oktober 2017, 16:46:25
attr aircheck wait 1800,60,30 sollte es sein

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: Damian am 20 Oktober 2017, 17:08:07
Zitat von: Frank_Huber am 20 Oktober 2017, 16:46:25
attr aircheck wait 1800,60,30 sollte es sein

Gesendet von meinem S3_32 mit Tapatalk

ja, ich habe es angepasst, bevor der nächste fragt ;)
Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: beddo am 20 Oktober 2017, 20:19:12
Habs mal getestet, ist aber nicht der gewünschte Effekt,
Nun wartet FBDect nach erkennen der schlechten Luft ja  erstmal 1800Sek bis sie ausgeht.

Das ausschalten(set FBDECT_1 off) soll sofort nach eintreten der Bedingung (co20:voc] > 1500 ) passieren. Dann die 1800 Sek Wartezeit bis die FBDect  wieder an geht (set FBDECT_1 on). Die Anlage soll dann wieder 30 Sekunden laufen und dann erst soll eine neu Prüfung erfolgen ob die Bedingung (co20:voc] > 1500 ) zutrifft. Falls ja, dann wieder FBdect ausschalten, falls nein laufen lassen.

Oder blick ichs einfach nicht
Titel: Antw:[gelöst] Doif Prüfung mit 2 Zeitschleifen
Beitrag von: Damian am 20 Oktober 2017, 20:42:08
ok, dann:

define aircheck DOIF ([co20:voc] > 1500 )(set FBDECT_1 off)(set FBDECT_1 on)()

attr aircheck wait 0,1800,30
attr aircheck do always


Die Logik ist ganz einfach: Die Verzögerungszeiten beziehen sich auf das jeweilige Kommando in der angegebenen Reihenfolge. () am Ende bedeutet nichts tun, es ist jedoch erforderlich um die letzten 30 Sekunden nicht auf die DOIF-Bedingung zu reagieren.

Edit: Anweisung noch mal geändert