[gelöst] Frage zu ReadingsVal, "eq" und "ne"

Begonnen von Rheingold, 15 März 2017, 11:59:20

Vorheriges Thema - Nächstes Thema

Rheingold

Hi,

Kurzfassung: warum springt folgender Code immer in das "else"?
Schalter1_links:off { if (ReadingsVal("Rolladen","parsestate","") ne "up") { fhem("set Rolladen up") } else { fhem("set Rolladen stop") } }


Längere Fassung:
Ich versuche gerade einen Taster zu belegen um meinen Rolladen zu steuern. Eigentlich ganz einfach:
- Drückt man die obere Taste, soll er hoch fahren
- Drückt man die untere Taste soll er runter fahren
- Bewegt er sich und drückt man eine der Tasten, soll er anhalten.

Die ersten Zwei Anforderungen sind trivial, doch gerade die letzte bereitet mir Kopfzerbrechen.

In den Readings hat der Rolladen zum einen "state" und auch "parsestate". Letzteres sagt im Grunde etwas über die aktuelle Bewegungsrichtung aus.

Stati für "state":
Zitatopen
10
...
80
90
down
closed

Stati für "parsestate":
Zitatoff
up
stop
down
closed

Mein Ansatz war per ReadingsVal auf den parsestate zu schauen ob/wohin der Rolladen sich bewegt und entsprechend den Befehl zu senden. Doch landet dieser Code lediglich immer im "else"
Schalter1_links:off { if (ReadingsVal("Rolladen","parsestate","") ne "up") { fhem("set Rolladen up") } else { fhem("set Rolladen stop") } }

Interessanterweise funktioniert eine Abwandlung des Codes besser... wenn auch noch nicht richtig. Beispielsweise wenn der Rolladen "closed" ist, muss man zwei mal drücken. Das erste mal geht er in "stop" und anschließend in "up".
Schalter1_links:off { if (ReadingsVal("Rolladen","parsestate","") eq "stop") { fhem("set Rolladen up") } else { fhem("set Rolladen stop") } }

Von der Logik her bilde ich mir ein, dass mein erster Ansatz eindeutiger ist, doch scheinen FHEM und ich nicht auf der gleichen Wellenlänge zu schwingen. Wer kann mir helfen? ;)
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Ellert

Entscheidend für die Funktion ist der Wert von parsestate wenn das notify auslöst. Hat parsestate dann den von Dir erwarteten Wert?

Otto123

Was bekommst Du zurück wenn Du das {ReadingsVal("Rolladen","parsestate","")} in die Kommandozeile eingibst?.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frank_Huber

warum eigentlich immer raus in Perl? gerade beim Befehl am Ende erscheint mir das seltsam.
Oder hat das einen besonderen Grund? sieht man irgendwie recht oft.
Man kann doch readings auch direkt abfragen und Befehle absetzen.

Otto123

#4
Zitat von: Frank_Huber am 15 März 2017, 12:22:15
warum eigentlich immer raus in Perl? gerade beim Befehl am Ende erscheint mir das seltsam.
Oder hat das einen besonderen Grund? sieht man irgendwie recht oft.
Man kann doch readings auch direkt abfragen und Befehle absetzen.
if und else ist nun mal Perl. Da musst Du am Ende wieder "rein" zu FHEM.
Alternativ IF und ELSE bei dem notify sicher einfacher, da bleibt man durchgängig in FHEM.
-> https://fhem.de/commandref_DE.html#IF
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Zitat von: Frank_Huber am 15 März 2017, 12:22:15
warum eigentlich immer raus in Perl? gerade beim Befehl am Ende erscheint mir das seltsam.
Oder hat das einen besonderen Grund? sieht man irgendwie recht oft.
Man kann doch readings auch direkt abfragen und Befehle absetzen.

Du fragst aber nicht einfach ein Reading ab sondern hast eine Bedingung die Du abfragst. Bedingungen gehen ohne Perl nur mit dem FHEM Befehl IF oder mit dem Modul DOIF.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Rheingold

#6
Zitat von: Otto123 am 15 März 2017, 12:16:23
Was bekommst Du zurück wenn Du das {ReadingsVal("Rolladen","parsestate","")} in die Kommandozeile eingibst?.

Gruß Otto
Es liefert "Off"... Warum auch immer  :o


Edit: scheint wohl eine Statusmeldung zu sein, wenn der Rolladen ganz hoch gefahren ist. Aber es erklärt mir immer noch nicht, warum mein "ne" nicht funktioniert....


Edit 2: das parsestate zeigt "on", wenn der Rolladen nicht offen ist und "off" wenn er gänzlich geöffnet ist. Allerdings gibt die o.g. Abfrage nie "up" oder "down" zurück. Merkwürdigerweise sehe ich es in FHEM so, während der Rolladen sich bewegt. Lade ich aber die Seite neu, taucht dort auch nur noch "on" bzw. "off" auf.
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Frank_Huber

Zitat von: CoolTux am 15 März 2017, 12:28:12
Du fragst aber nicht einfach ein Reading ab sondern hast eine Bedingung die Du abfragst. Bedingungen gehen ohne Perl nur mit dem FHEM Befehl IF oder mit dem Modul DOIF.
Ah, daher weht der Wind. und deshalb dann auch der Befehl von Perl zurück ins fhem.
wäre hier der DOIF nicht der einfachere Weg?

CoolTux

Zitat von: Frank_Huber am 15 März 2017, 12:49:00
Ah, daher weht der Wind. und deshalb dann auch der Befehl von Perl zurück ins fhem.
wäre hier der DOIF nicht der einfachere Weg?

Ansichtssache würde ich sagen. Ich verwende zwar auch DOIF aber in sehr sehr geringen Mengen. Für mich ist ein Watchdog oder Notify aussagekräftiger.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Zitat von: CoolTux am 15 März 2017, 12:59:36
Ansichtssache würde ich sagen. Ich verwende zwar auch DOIF aber in sehr sehr geringen Mengen. Für mich ist ein Watchdog oder Notify aussagekräftiger.
Jetzt hab ich gradmal gelernt mit DOIF umzugehen kommst Du mit Watchdog daher. *lach*
grad mal die Commandref gelesen, sehr interessantes Modul! kann ich bestimmt bischen was umbauen. ;)

CoolTux

Zitat von: Frank_Huber am 15 März 2017, 13:18:00
Jetzt hab ich gradmal gelernt mit DOIF umzugehen kommst Du mit Watchdog daher. *lach*
grad mal die Commandref gelesen, sehr interessantes Modul! kann ich bestimmt bischen was umbauen. ;)

DOIF macht im Grunde das selbe wie Notify at und Watchdog. Einfach das nehmen womit man besser klar kommt.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

Zitat von: CoolTux am 15 März 2017, 13:31:36
DOIF macht im Grunde das selbe wie Notify at und Watchdog. Einfach das nehmen womit man besser klar kommt.
Watchdog schaut doch etwas anderst aus mit seinen zwei Bedingungen und der Zeit dazwischen. Muss ich mir auf jeden Fall in ner ruhigen Minute mal anschauen.
momentan läuft alles was ich brauche per DOIF und at. FHEM kann so viel..... denk ich hab da noch einiges was ich mit der Zeit lernen / optimieren kann. ;)

Otto123

@Reingold BTW "Off" wäre  ne "off"  ;) Dann ist Dein parsestate offenbar nur ein transienter Wert, müsste ja aber trotzdem funktionieren, während er sich bewegt.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Rheingold

@Otto: das ist ja das was mich verwundert... "off" != "up" aber dennoch bewegt sich nichts. Die Abfrage springt immer in das Else rein.
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Frank_Huber

findest im Event-Monitor eventuell den richtigen Status?
weil da hast doch alle Events die in fhem ankommen drin stehen...