if Abfrage durch DOIF ersetzen

Begonnen von Supertux, 02 Oktober 2017, 10:38:31

Vorheriges Thema - Nächstes Thema

Supertux

Hallo zusammen
Habe zu Testzwecke einen MCP23017 an meinem Raspberry am laufen.
Als Device hat dieser den Namen mcp_eingabe.
Außerdem bewirken zwei Taster am Port A2 und A3 ein Ereignis zwischen on und off.
Das Modul Rollo soll mit diesen beiden Tastern angesprochen werden. Stoppen des Rollos bei drücken des entgegengesetzten Tasters
Folgender Code für Rollo Ab:
mcp_eingang:PortA3:.on { if ( ReadingsVal("Rollo","state","") eq "drive-up") {fhem("set Rollo stop")} else {fhem("set Rollo closed")}}

Folgender Code für Rollo Auf:
mcp_eingang:PortA2:.on { if ( ReadingsVal("Rollo","state","") eq "drive-down") {fhem("set Rollo stop")} else {fhem("set Rollo open")}}

Wollte dies eleganter lösen mit einem DOIF. Doch trotz lesen der Commandref habe ich so meine Probleme mit der Umsetzung (Wahrscheinlich habe ich noch ein Fehler beim auslesen von states und ReadingsVal im DOIF)
Kann mir da jemand einen Denkanstoß geben.

Dankeschön

Amenophis86

Naja, ob es eleganter mit DOIF ist, ist eine Geschmacksfrage, aber da du es lernen willst helfen wir gerne. Jedoch solltest du mal posten was du bisher hast und was die Fehler Ausgabe (Log) ist. Sonst läuft es darauf hinaus, dass dir jemand einen fertigen Code schreibet und das bringt ja dann auch nix.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Supertux

Hallo
Folgenden Ansatz hatte ich mir überlegt:
([mcp_eingang:PortA3] eq "on" and [Rollo] eq "drive-up") (set Rollo stop) DOELSEIF (set Rollo closed)

PortA3 wäre der Taster zum schließen des Rollos
Jedoch wird das DOIF bei einem "stehendem" Rollladen nicht aktiv, weil die Bedingung "drive-up" nicht erfüllt ist und so das DOIF abricht.

Meine Überlegung für die gesamte Steuerung:
- Zwei DOIFś
- Der Trigger ist der Eingang PortA2 (hoch) oder PortA3 (runter)
- das DOIF sollte jeweils überprüfen ob der Rollladen fährt. Wenn nicht soll es in die Richtung des dafür vorgesehenen Taster fahren
- Fährt der Rolladen soll es diesen stoppen

Mit dem Code aus dem Anfangspost läuft es und ich würde das auch so umsetzen. Mir gehts ums lernen und verstehen ;-)

Gruß

Amenophis86

Wenn du "DOELSEIF" schreibst, dann musst du auch eine Bedingung setzen, sonst heißt es einfach nur DOELSE. (Dann dürfte es auch bei stehendem Rollladen aktiv werden ;) )
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Supertux

Hallo
Danke für den Hinweis mit DOELSEIF ;)
Folgender Code funktioniert:

([mcp_eingang:PortA3] eq "on" and [Rollo] eq "drive-up") (set Rollo stop)
DOELSEIF ([mcp_eingang:PortA3] eq "on") (set Rollo closed)


ein
attr test_mcp_auf do always

Hatte dann zum gewünschten Erfolg erzielt.
Wobei ich jetzt den Eingangsstehenden Code verständlicher/leichter finde.

Danke nochmals  8)

Amenophis86

Du wirst aber noch das Problem haben, dass er auch auf [Rollo] eq "drive-up" hören wird. Das heißt, wenn dein Rollo diesen Zustand einnimmt un der Schalter noch auf on steht, dann wird die Bedigung auch wahr. Daher solltest du mit  [?Rollo] eq "drive-up" arbeiten. Das heißt es wird nur geschaut, ob die Bedingung wahr ist, sie triggert aber selbst nicht das DOIF.

Und dann müsste es eigentlich auch gehen, wenn du DOELSEIF ([mcp_eingang:PortA3] eq "on") (set Rollo closed) durch DOELSE (set Rollo closed) ersetzt. Da bin ich mir aber gerade nicht 100% sicher, müsstest du mal testen.

Was man leichter findet muss jeder selbst entscheiden, der eine mag DOIF, der andere notify etc. Reine Geschmackssache :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Pfriemler

Zitat von: Amenophis86 am 02 Oktober 2017, 14:33:42
Und dann müsste es eigentlich auch gehen, wenn du DOELSEIF ([mcp_eingang:PortA3] eq "on") (set Rollo closed) durch DOELSE (set Rollo closed) ersetzt. Da bin ich mir aber gerade nicht 100% sicher, müsstest du mal testen.
Nö. Das Triggerdevice ist mcp_eingang:PortA3 - DOELSE würde auch greifen, wenn es z.B. "off" wird.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Amenophis86

Stimmt, hatte vergessen, dass es nur bei on triggern soll :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...