FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Pi_01 am 15 Dezember 2020, 12:55:50

Titel: [gelöst] doif - Statusabfrage möglich?
Beitrag von: Pi_01 am 15 Dezember 2020, 12:55:50
Hallo!
Mich beschäftigt ein neues Problem:

Ich habe zwei Taster, die zwei verschiedene GPIOs ansteuern.

Wird der Taster 1 gedrückt, geht der Rollo rauf, wird der Taster 2 gedrückt, geht der Rollo runter.

Das ganze funktioniert mit zwei doif-Befehle:

defmod doif_open DOIF ([GPIO16] eq "on") (set myShelly1 open)
defmod doif_closed DOIF ([GPIO20] eq "on") (set myShelly1 closed)


Wie gesagt, drücke ich Taster 2, geht der Rollo runter.

Ist es möglich, den Rollo während der Fahrt nach unten stoppen zu lassen, wenn ich den Taster 2 ein weiteres Mal drücke?

Irgendwie müsste ich beim zweiten Tastendruck den Status abfragen können, und wenn mir der Status sagt "der Rollo bewegt sich gerade nach unten", folgt nicht der Befehl "set myShelly1 closed", sondern "set myShelly1 stopped".

Ich weiß jedoch nicht, ob man so eine Anforderung in eine doif einbauen kann.

Wer weiß mehr?
Titel: Antw:doif - Statusabfrage möglich?
Beitrag von: tklein am 15 Dezember 2020, 13:05:29
was hälst du von einem dritten doif mit und verknüpfung für ([GPIO20] eq "on") und position deines shellies nicht closed ist. alternativ kannst du ja noch pct auf != 0 abfragen.

vielleicht klappt das ja
Titel: Antw:doif - Statusabfrage möglich?
Beitrag von: Frank_Huber am 15 Dezember 2020, 13:24:33
Hier als Beispiel eines meiner Rollo DOIFs.
Ich steuere das Rollo Modul an, musst Dir die Readings an den Shelly anpassen.

defmod Rollo_Bad_EG DOIF ([GPIO_IN_06:"^on$"] and [?Rollo2_Bad_EG] ne "drive-up") (set Rollo2_Bad_EG open)\
DOELSEIF ([GPIO_IN_07:"^on$"] and [?Rollo2_Bad_EG] ne "drive-down") (set Rollo2_Bad_EG closed)\
DOELSEIF (([GPIO_IN_06:"^on$"] or [GPIO_IN_07:"^on$"]) and [?Rollo2_Bad_EG] =~ "drive-down|drive-up") (set Rollo2_Bad_EG stop)\
attr Rollo_Bad_EG checkReadingEvent 1
attr Rollo_Bad_EG cmdpause 2:2:2
attr Rollo_Bad_EG do always
Titel: Antw:doif - Statusabfrage möglich?
Beitrag von: Pi_01 am 15 Dezember 2020, 18:00:11
Danke Frank, leider funktioniert das stoppen immer noch nicht

Ich habe zunächst meinen vorherigen Code mit dem Status erweitert:

alt:
defmod doif_open DOIF ([GPIO16] eq "on") (set myShelly1 open)

neu:
defmod doif_open DOIF ([GPIO16] eq "on" and [myShelly1] ne "moving_down|moving_up") (set myShelly1 open)

Beide Codes funktionieren, beim betätigen des Tasters wird der Rollo geöffnet.

Anschließend wurde der Code um DOELSEIF ergänzt:
defmod doif_open DOIF ([GPIO16] eq "on" and [myShelly1] ne "moving_down|moving_up") (set myShelly1 open) DOELSEIF ([GPIO16] eq "on" and [myShelly1] eq "moving_down|moving_up") (set myShelly1 stop)

Beim nochmaligen bestätigen des Tasters wird der Rollo leider nicht gestoppt. Warum?

Wenn ich in der FHEM-Befehlszeile "set myShelly1 stop" eingebe, wird der Rollo gestoppt. Der Befehl passt also.
Titel: Antw:doif - Statusabfrage möglich?
Beitrag von: Pi_01 am 15 Dezember 2020, 19:53:32
Ich habe jetzt eine andere Herangehensweise gewählt, mit der es funktioniert:

defmod doif_open DOIF ([GPIO16] eq "on" and [myShelly1] eq "stopped") (set myShelly1 open) DOELSEIF ([GPIO16] eq "on") (set myShelly1 stop)


Nachtrag:
nach weiteren Tests habe ich herausgefunden, dass der Code nur funktioniert, wenn das Attribut cmdpause gesetzt ist. Warum, ist mir ein Rätsel.