Liebe fhem-Freunde,
habe alle Roll-Laden im Haus automatisiert, noch verschiedene FS20-Lösungen auf Contronic's Homeputer und nun Schritt für Schritt Implementierung von HM-LC-Bl1PBU-FM in fhem (Raspi3). Zwei laufen eigentlich problemlos, aber ich möchte mit den FS20-Fernbedienungen noch eleganter steuern.
Dazu brauche ich den aktuellen Zustand des Motors. Der ist im Reading "motor" zu lesen, zeigt sich dort mit verschiedenen Zuständen, welche einen Doppelpunkt im Wert enthalten, z.B. "stop:up", "stop:50" oder "down:50". Ich will in einem DOIF nur auswerten, ob der Motor läuft, also nicht in einem der Stopzustände ist. Leider gelingt das auch nach vielen Versuchen mit der Syntax nicht. Bei anderen Readings ohne Doppelpunkt hat es keine Probleme.
Vielleicht kann jemand helfen?
Danke,
Hifi-Ear
Was hast du den probiert?
Dies z.B., 'led red' ist nur zum Test. Ersteres, Auswertung von pct funktioniert, alle anderen keine Reaktion, außer einem Syntaxfehler. Letzte Beispielzeile verdeutlicht das eigentliche Ziel, dann aber mit Fernbedienungsbefehlen verküpft, um den Roll-Laden anzuhalten (nicht die Test-LED zu schalten).
define run4 DOIF ([GF_Blind4:pct] eq "100") (set Info12 led red) DOELSE (set Info12 led off)
define run4 DOIF ([GF_Blind4:motor] eq "stop:up") (set Info12 led red) DOELSE (set Info12 led off)
define run4 DOIF ([GF_Blind4:motor:stop] eq "up") (set Info12 led red) DOELSE (set Info12 led off) -> syntax fault
define run4 DOIF ([GF_Blind4:motor] ne "stop*") (set Info12 led red) DOELSE (set Info12 led off)
Du solltest dich mehr mit doif befassen und es auch dort im Forum vorbringen.
Eq ist Ein Vergleich auf diesen String
=~ ist eher das was du suchst, wortfetzen. Es sollen auch regexp funktionieren, im commandref ist jedoch leider kein Beispiel. Die Syntax ist nicht identisch zu regexp.
Offensichtlich wird der : interpretiert und daher scheitert der Vergleich.
Vielen Dank, Martin, für die Richtungsweisung. Mich hatte irritiert, dass es mit dem 'pct'-Reading funktionierte und habe deshalb die letzte Zeile mit dem Stern nur als unformelle Zielrichtung aufgeführt.
Habe mich wirklich mit DOIF befasst und möchte nur kurz die generelle Lösung zeigen, die ich dann auf meinen Einsatz anpasse:
define run4 DOIF ([GF_Blind4:"stop.*"]) (set Info12 led red) DOELSE (set Info12 led off)
'motor' kommt darin nicht vor. Es werden alle Readings auf stop* geprüft und dabei wird das stop* des Motors erwischt. Das funktioniert einwandfrei.
Gruß,
Hifi-Ear