FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Thyrador am 08 Oktober 2019, 11:13:22

Titel: DOIF - state-Bedingung mit stateFormat
Beitrag von: Thyrador am 08 Oktober 2019, 11:13:22
Moin Leute, ich hab da mal ne Frage, zur besseren Verständlichkeit.

Kurze Vorgeschichte: da weder die Hue-App, noch Hue-Labs in der Lage ist, mit mehr als 2 Bewegungsmeldern vernünftig umzugehen, dachte ich mir, ich bastel mir eine Lösung, die Funktioniert, hier in FHEM nach.
Gesagt getan, läuft soweit auch super.

Jetzt habe ich aber folgendes Problem:
Zur besseren Übersicht, habe ich mir für jeden Bewegungsmelder per stateFormat den Wert auf state | battery gesetzt, um sowohl den Status, als auch das Batterielevel im Auge zu behalten.

Wenn ich in meiner DOIF-Abfrage aber nun darauf warte, dass sich beim state der Wert ändert und auf selbigen triggere, passiert dann leider nichts, was mich zu der Vermutung führt, dass das stateFormat übergeben wird, statt dem reinen state.

Meine DOIF-Abfrage sieht dann aktuell so aus:
([FL.MotionSensor1] eq "motion" or [FL.MotionSensor2] eq "motion" or [...] )  {Hallway_Lights_on()} DOELSEIF ([FL.MotionSensor1] eq "nomotion" and [FL.MotionSensor2] eq "nomotion" and [...]) {Hallway_Lights_off()}

Setze ich kein stateFormat, funktioniert das problemlos. Anbei das list für einen der 4 Bewegungssensoren (sind alle vom selben Typ, von daher sind die Werte so ziemlich identisch).
Internals:
   DEF        sensor 12 25 IODev=HUEBridge
   FUUID      5d88e600-f33f-f2a1-2434-1322ca309f677bf2
   FVERSION   31_HUEDevice.pm:0.201220/2019-09-07
   ID         S12
   INTERVAL   25
   IODev      HUEBridge
   NAME       FL.MotionSensor1
   NR         178
   STATE      nomotion
   TYPE       HUEDevice
   lastupdated 2019-10-08 04:49:43
   lastupdated_local 2019-10-08 06:49:43
   manufacturername Philips
   modelid    SML001
   name       Flur Sensor 1
   on         1
   reachable  1
   sensitivity 2
   sensitivitymax 2
   swversion  6.1.1.27575
   type       ZLLPresence
   uniqueid   00:17:88:01:04:b5:df:ae-02-0406
   READINGS:
     2019-10-08 06:49:43   battery         100
     2019-10-08 06:49:43   reachable       1
     2019-10-08 06:49:43   state           nomotion
   helper:
     devtype    S
     reachable  0
     update_timeout 1
     configList:
     setList:
Attributes:
   IODev      HUEBridge
   group      Bewegungssensoren
   room       Flur


Nun zur Frage: wie kann ich, auch mit gesetztem stateFormat den reinen Wert des Readings state (motion oder nomotion) auslesen, damit bei einer Bewegung ganz normal getriggert wird, wenn ich nur auf motion oder nomotion reagieren will?

Vielen Dank im Voraus :)
Titel: Antw:DOIF - state-Bedingung mit stateFormat
Beitrag von: Otto123 am 08 Oktober 2019, 11:16:45
Hi,

[devicenam:state]

Auszug aus der Doku:
ZitatStatus werden mit [<devicename>], Readings mit [<devicename>:<readingname>], Internals mit [<devicename>:&<internal>] angegeben.
Ich "liebe" den Begriff Status, der wird glaube ich gern verwendet um den User zu verunsichern.  ;D
Meistens ist damit (das Internal) STATE gemeint.

Gruß Otto
Titel: Antw:DOIF - state-Bedingung mit stateFormat
Beitrag von: Thyrador am 08 Oktober 2019, 11:20:01
Hui, das ging ja schnell. Vielen Dank :)

Ich war mir nicht sicher, ob das so etwas bringen würde, weil ich dachte, dass da der selbe Wert zurückgegeben wird (als Standard), wenn ich state nicht angebe.

Nur zum reinen Verständnis: das passiert in diesem Falle nicht? Sondern es wird nur das reine Reading ausgegeben und stateFormat völlig außen vor gelassen?
Titel: Antw:DOIF - state-Bedingung mit stateFormat
Beitrag von: Otto123 am 08 Oktober 2019, 11:23:00
ja.

Der Standard (default) ist quasi so zu verstehen:
[device] = [device:&STATE]

und STATE ensteht quasi per default so:
attr device stateFormat state

Gruß Otto
Titel: Antw:DOIF - state-Bedingung mit stateFormat
Beitrag von: Thyrador am 08 Oktober 2019, 11:25:30
Super. Dann habe ich da wohl mal etwas falsch verstanden gehabt :D

Hab es auch gerade getestet. Bin zwar nicht Zuhause, aber hab über die Oberfläche das state-Reading einfach mal geändert (mit aktiviertem stateFormat) und siehe da, es triggert und schaltet die Lampen ein (zumindest laut Frontend) :)

Ich bedanke mich für die schnelle Hilfe ;D