Diskrete Werte für Kippfenster (winmatic) oder Rollos

Begonnen von Per, 14 September 2015, 10:08:48

Vorheriges Thema - Nächstes Thema

Per

Die Winmatic liefert neben den (Text-)Status "locked" auch diskrete Werte für den Öffnungszustand (80,5) zurück. Da ich nicht für jeden der 201 Zustände ein Image für den Floorplan generieren wollte, habe ich mir 11 Stück für die Werte "0", "10"..."90" und "100" ("winmatic.show.0", ...) erstellt. Zusätzlich "open" und "locked".
Jetzt liefert die Winmatic aber nicht alle 201 Werte nacheinander, sondern willkürliche Zwischenstände. Daraus berechne ich das jeweils zugehörige Image.
Dazu habe ich einen Dummy (winmatic.show) erstellt, welcher die Aufgabe hat, diesen Status im Floorplan darzustellen (und auf das manuelle Betätigen dort zu reagieren). Die Daten für den Dummy werden durch folgendes Notify erzeugt:
define winmatic.set notify winmatic
IF ([winmatic:state:d] eq "")
(set winmatic.show $EVENT)
ELSE
(winmatic.show {(int(Value("winmatic")/10)*10)})

Der Umweg über Value ist notwendig, da der ELSE-Zweig auch bei TRUE geparset wird, aber dann ein Bareword enthält. Value hingegen würde erst zur Laufzeit einen Fehler erzeugen, wird da aber nicht ausgeführt.

Interessant wäre, das in die HMConfig.pm zu implementieren (als Extra State z.B. state10), aber dazu kann ich viel zu wenig Perl.

justme1968

das geht auch direkt im winmatic device über stateFormat. ohne umweg über einen dummy und notify.

bei den rolläden findest du beispiele wie sich der pct stand auf 10 abbilden lässt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Per

Ich habe mit stateformat weder den vollen 10er noch die Auswertung der Texte gefunden. Das Einzige in der Nähe war die Lösung vom Hexenmeister.

Per

#3
Zitat von: Per am 14 September 2015, 19:20:45Das Einzige in der Nähe war die Lösung vom Hexenmeister.
Die ich letztendlich auch genommen habe. Wenn auch ein wenig erweitert:

attr .*.Window.cul.Win eventMap /level lock ignore 100 :zu/level 100 ignore 100:kipp/
attr .*.Window.cul.Win webCmd zu:kipp
attr .*.Window.cul.Win devStateIcon open:Window.nr.open:zu .*zu:Window.nr.0:kipp off:Window.nr.locked:kipp locked:Window.nr.locked:kipp .*kipp:Window.nr.locked.0:zu 0:Window.nr.0:zu 1\d\.*:Window.nr.10:zu [...] 9\d\.*:Window.nr.90:zu 100:Window.nr.100:zu

Das .nr. kommt von Norden - Rechts und dient dazu, verschiedene Richtungen zu berücksichtigen.
Die alte Lösung mit Dummy und Notify in beide Richtungen hat zwar auch funktioniert, war aber nur ein (für mich notwendiger) Zwischenschritt beim Verstehen von FHEM. So wie jetzt ist es doch deutlich weniger Last und Aufwand.

Kleiner Schönheitsfehler: die 100%- bzw. Lock-Level-Events werden nach dem zu- bzw. kipp-Befehl nochmal angezeigt. Dafür wollte ich aber keinen extra Watchdog einsetzen.

Kehemann

Hallo,

man kann aber auch über eine einfache RegEx in der devStatIcon die diskreten Werte für den Kippzustand des Fensters in ein Logo wandeln.
Ob das Fenster zu 10 oder 90% gekippt ist, wäre mir für das Symbol egal. Daher habe ich in der devStatIcon folgende Zustände:

  • Kippstellung, d.h. state = 1.0 bis 99.9 => Symbol gekipptes Fenster rot
  • Drehstellung, d.h. state = 0 => Symbol aufgedrehtes Fenster rot
  • Verschlossen, d.h. state = locked => Symbol geschlossenes Fenster grün
devStatIcon für den channel01 des Winmatic-Device:
^([1-9]*\.?[0-9]|[1-9][0-9])$:fts_window_1w_tilt@red 0:fts_window_1w_open@red locked:fts_window_1w

Für Rolläden sieht die devStatIcon etwas anders, aber im Prinzip gleich aus
off:shutter_open on:shutter_closed 0\d.*:shutter_open 1\d.*:shutter_1 2\d.*:shutter_2 3\d.*:shutter_3 4\d.*:shutter_4 5\d.*:shutter_halfopen 6\d.*:shutter_6 7\d.*:shutter_7 8\d.*:shutter_8 9\d.*:shutter_closed

Grüße
Kehemann