Synthaxproblem bei Bewegungsmelder mit Sensor und HueDevice

Begonnen von heinzelrumpel, 01 Mai 2017, 18:39:02

Vorheriges Thema - Nächstes Thema

heinzelrumpel

Hallo,

möchte das Schalten einer Hue-Lampe abhängig machen, ob  ein Sensor eine Bewegung meldet und ob 2 weitere Devices einen Lichtwert von unter 4 Lux melden.

Hier mal die listings der betreffenden Devices


Internals:
   DEF        9  IODev=HueBridge
   ID         9
   INTERVAL
   IODev      HueBridge
   NAME       HUEDevice9
   NR         30
   STATE      aus
   TYPE       HUEDevice
   desired    0
   manufacturername Philips
   modelid    LCT001
   name       wz_bunt3
   swversion  5.23.1.13452
   type       Extended color light
   uniqueid   00:17:88:01:00:f8:56:d4-0b
   Readings:
     2017-04-27 22:41:12   alert           none
     2017-04-27 22:41:12   bri             254
     2017-05-01 15:53:46   colormode       ct
     2017-05-01 15:54:14   ct              158 (6329K)
     2017-04-27 22:41:12   effect          none
     2017-05-01 15:54:14   hue             34457
     2017-05-01 15:53:49   onoff           0
     2017-05-01 15:53:49   pct             0
     2017-05-01 18:05:17   reachable       1
     2017-05-01 15:54:14   rgb             eaedff
     2017-05-01 15:54:14   sat             224
     2017-05-01 18:29:17   state           off
     2017-05-01 15:54:14   xy              0.3177,0.3277
   Helper:
     alert      none
     bri        254
     colormode  ct
     ct         158
     devtype
     effect     none
     hue        34457
     on         0
     pct        0
     reachable  1
     rgb        eaedff
     sat        224
     update_timeout -1
     xy         0.3177,0.3277
Attributes:
   IODev      HueBridge
   alias      Wohnzimmer Bogenlampe
   color-icons 2
   devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
   eventMap   on:an off:aus
   group      Wohnzimmerlampen
   icon       light_floor_lamp
   model      LCT001
   room       Wohnzimmer
   subType    extcolordimmer
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 room_map structexclude
   webCmd     rgb:rgb ff0000:rgb DEFF26:rgb 0000ff:ct 490:ct 380:ct 270:ct 160:toggle:an:aus



Internals:
   DEF        d629b337 8
   IODev      ZWDongle_0
   LASTInputDev ZWDongle_0
   MSGCNT     201
   NAME       fl_Sensor
   NR         55
   STATE      Temperatur: 21.5 C, Helligkeit: 3 %, Zustand: on
   TYPE       ZWave
   ZWDongle_0_MSGCNT 201
   ZWDongle_0_RAWMSG 00040008198f010403800364043003ff0c053105030103063105012200d7
   ZWDongle_0_TIME 2017-05-01 18:21:57
   ZWaveSubDevice no
   homeId     d629b337
   isWakeUp   1
   lastMsgSent 1493653042.58855
   nodeIdHex  08
   Readings:
     2016-02-18 18:59:35   CMD             ZW_APPLICATION_UPDATE
     2016-03-23 19:37:20   CO2             ff
     2016-03-23 20:29:28   UNPARSED        ZWAVE 05012200cd
     2016-02-21 09:59:37   alarm           HomeSecurity: Motion Detection, Unknown Location, arg 00
     2017-05-01 18:21:57   battery         100 %
     2016-02-18 18:54:52   configAutoReportTemperatureTime 12
     2016-02-21 21:37:09   config_0        0
     2017-05-01 16:32:35   doorWindow      on
     2017-05-01 18:21:57   luminance       3 %
     2016-02-18 12:41:10   model           Philio Technology Corporation PST02-A 4 in 1 Multi-Sensor
     2016-02-18 12:41:10   modelConfig     philio/pst02.xml
     2016-02-18 12:41:10   modelId         013c-0002-000c
     2017-05-01 18:21:57   motion          on
     2016-03-23 20:16:35   state           TRANSMIT_NO_ACK
     2017-05-01 18:21:57   temperature     21.5 C
     2017-05-01 17:37:22   timeToAck       0.069
     2017-05-01 17:37:22   transmit        OK
     2017-05-01 18:21:57   tuerStatus      Zu
     2017-05-01 17:37:20   wakeup          notification
     2016-02-18 18:54:52   wakeupReport    interval 86400 target 255
Attributes:
   IODev      ZWDongle_0
   alias      fl_Sensor
   classes    ZWAVEPLUS_INFO BATTERY ALARM ASSOCIATION CONFIGURATION MANUFACTURER_SPECIFIC VERSION SENSOR_BINARY SENSOR_MULTILEVEL WAKE_UP ASSOCIATION_GRP_INFO POWERLEVEL DEVICE_RESET_LOCALLY MULTI_CMD SECURITY FIRMWARE_UPDATE_MD MARK BASIC
   devStateIcon .*Zu:fts_door@green .*Auf:fts_door_open@red
   eventMap   00:Zu ff:Auf
   group      Flur
   room       Flur
   stateFormat Temperatur: temperature, Helligkeit: luminance, Zustand: doorWindow
   userReadings tuerStatus {ReadingsVal("fl_Sensor","alarm","") =~/Door is open/ ? "Auf" : "Zu"}



Internals:
   DEF        d629b337 4
   IODev      ZWDongle_0
   LASTInputDev ZWDongle_0
   MSGCNT     3345
   NAME       wz_Sensor
   NR         42
   STATE      Temperatur: 22.7 C, Helligkeit: 93 Lux
   TYPE       ZWave
   ZWDongle_0_MSGCNT 3345
   ZWDongle_0_RAWMSG 00040004063105030a005d
   ZWDongle_0_TIME 2017-05-01 18:33:18
   ZWaveSubDevice no
   homeId     d629b337
   isWakeUp   1
   lastMsgSent 1493656220.38243
   nodeIdHex  04
   Readings:
     2016-02-23 11:48:28   CMD             ZW_APPLICATION_UPDATE
     2016-03-23 20:42:07   UNPARSED        SENSOR_BINARY 033013ff
     2017-05-01 17:37:34   alarm_type_00   level 255 node 4 seconds 0
     2016-01-28 12:13:00   assocGroups     3
     2016-03-21 18:34:48   basicReport     10
     2017-05-01 18:28:23   basicSet        0
     2017-04-26 20:38:57   battery         100 %
     2016-03-13 02:40:15   generalPurpose  256
     2017-05-01 18:33:18   luminance       93 Lux
     2016-01-28 10:12:44   model           FIBARO System FGMS001 Motion Sensor
     2016-01-28 10:12:44   modelConfig     fibaro/fgms.xml
     2016-01-28 10:12:44   modelId         010f-0800-1001
     2017-05-01 18:28:23   reportedState   closed
     2017-05-01 18:28:23   state           closed
     2017-05-01 01:53:56   temperature     22.7 C
     2017-05-01 18:30:20   timeToAck       0.028
     2017-05-01 18:30:20   transmit        OK
     2017-05-01 18:30:18   wakeup          notification
     2016-01-28 12:13:02   wakeupReport    interval 7200 target 255
Attributes:
   IODev      ZWDongle_0
   alias      wz_Sensor
   classes    SENSOR_BINARY WAKE_UP ASSOCIATION BATTERY MULTI_CMD CRC_16_ENCAP MANUFACTURER_SPECIFIC VERSION CONFIGURATION MULTI_CHANNEL_ASSOCIATION SENSOR_MULTILEVEL SENSOR_ALARM BASIC
   room       Wohnzimmer
   stateFormat Temperatur: temperature, Helligkeit: luminance


Beim stöbern im Forum hab ich mir ein paar Codeschnipsel gesucht, die aber in FHEM eine Fehlermeldung liefern.Da ich des Programmieren nicht mächtig bin, stehe ich da etwas auf dem Schlauch.


define flur_Bewegung_Li_an notify fl_Sensor:motion:.* { if (ReadingsVal("HUEDevice9","state","basicSet",on) eq "off") && (ReadingsVal("fl_Sensor","luminance",0)<4) && (ReadingsVal(wz_Sensor,"luminance",0)<4 ) { fhem ("set HUEDevice9 on-for-timer 60") }}


Dies liefert mir


Too many arguments for main::ReadingsVal at (eval 9213) line 1, near "on) "
syntax error at (eval 9213) line 1, near ") &&"
syntax error at (eval 9213) line 1, near "}}"


Kann mir jemand helfen, ohne dass ich jetzt einen Perlkurs machen muss  ;)

Ciao, Heinzelrumpel

rudolfkoenig

1. Was sollte deiner Ansicht nach ReadingsVal("HUEDevice9","state","basicSet",on) zurueckliefern?
2. Es heisst nicht if (a<b) && (c<d) {...} sondern if(a<b && c<d) {...}


Zitatohne dass ich jetzt einen Perlkurs machen muss
Frei nach dem Motto: wieso soll ich was tun, es gibt doch genug Verrueckte, die das fuer mich erledigen werden.

heinzelrumpel

Das Problem ist einfach, ich checks nicht, auch nach lesen verschiedener Threads :-[ Es geht mir nicht darum, dass jemand meine Arbeit macht. Anhand deines Hinweises hab ich es mal angepasst. Jetzt kommt keine Fehlermeldung mehr

define flur_Bewegung_Li_an notify fl_Sensor:motion:.* ( if (ReadingsVal("HUEDevice9","onoff") eq "0" && ReadingsVal("fl_Sensor","luminance")<4 && ReadingsVal(wz_Sensor,"luminance")<4)  { fhem ("set HUEDevice9 on-for-timer 60") }


Danke, die richtige Syntax scheint der Schlüssel zu sein  ;)

heinzelrumpel

#3
Also ich komme immer noch nicht zum Erfolg. Hab im Forum noch etwas recherchiert und einen Beitrag gefunden, indem meine gewünschte Lösung mit einem DOIF erreicht wurde.

Der Artikel ist hier zu finden: https://forum.fhem.de/index.php/topic,68749.msg602299.html#msg602299


define wz_Bew DOIF ([wz_Sensor:"state:.open"]) (set HUEDevice7 on)
attr wz_Bew do resetwait
attr wz_Bew room Wohnzimmer
attr wz_Bew wait 0,180


Zum einfachen Testen habe ich einen anderen Sensor (wz_Sensor) im Wohnzimmer genommen, der eine HUE Lampe (HUEDevice7) anschalten soll.

Ich veerstehe den DOIF-Befehl so.
1. Wenn der wz_Sensor im Reading "state" auf "open" wechselt, dann schalte HUEDevice7 an. Es tut sich aber nichts. Im Eventmonitor steht:


2017-05-04 18:43:09 ZWave wz_Sensor open
2017-05-04 18:43:09 ZWave wz_Sensor reportedState: open
2017-05-04 18:43:09 ZWave wz_Sensor basicSet: 255
2017-05-04 18:43:20 ZWave wz_Sensor wakeup: notification


Was mache ich nur falsch bzw. wo liegt mein Denkfehler.


Internals:
   CFGFN
   DEF        ([wz_Sensor:"state:open"]) (set HUEDevice7 on)
   NAME       wz_Bew
   NR         655
   NTFY_ORDER 50-wz_Bew
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-05-04 18:41:23   Device          wz_Sensor
     2017-05-04 18:34:14   cmd             0
     2017-05-04 18:41:23   e_wz_Sensor_events luminance: 195 Lux
     2017-05-04 18:34:14   state           initialized
   Condition:
     0          EventDoIf('wz_Sensor',$hash,'state:open',1)
   Devices:
     0           wz_Sensor
     all         wz_Sensor
   Do:
     0:
       0          set HUEDevice7 on
     1:
   Helper:
     event      luminance: 195 Lux
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev wz_Sensor
     triggerEvents:
       luminance: 195 Lux
     triggerEventsState:
       luminance: 195 Lux
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
     State:
   Trigger:
     all         wz_Sensor
Attributes:
   do         resetwait
   room       Wohnzimmer
   wait       0,180



Damian

Zitat von: heinzelrumpel am 04 Mai 2017, 18:42:27
Also ich komme immer noch nicht zum Erfolg. Hab im Forum noch etwas recherchiert und einen Beitrag gefunden, indem meine gewünschte Lösung mit einem DOIF erreicht wurde.

Der Artikel ist hier zu finden: https://forum.fhem.de/index.php/topic,68749.msg602299.html#msg602299


define wz_Bew DOIF ([wz_Sensor:"state:.open"]) (set HUEDevice7 on)
attr wz_Bew do resetwait
attr wz_Bew room Wohnzimmer
attr wz_Bew wait 0,180


Zum einfachen Testen habe ich einen anderen Sensor (wz_Sensor) im Wohnzimmer genommen, der eine HUE Lampe (HUEDevice7) anschalten soll.

Ich veerstehe den DOIF-Befehl so.
1. Wenn der wz_Sensor im Reading "state" auf "open" wechselt, dann schalte HUEDevice7 an. Es tut sich aber nichts. Im Eventmonitor steht:


2017-05-04 18:43:09 ZWave wz_Sensor open
2017-05-04 18:43:09 ZWave wz_Sensor reportedState: open
2017-05-04 18:43:09 ZWave wz_Sensor basicSet: 255
2017-05-04 18:43:20 ZWave wz_Sensor wakeup: notification


Was mache ich nur falsch bzw. wo liegt mein Denkfehler.

Siehst du im Event irgendwo das Wort state? Ich nicht, daher musst du den richtigen Match-String angeben z. B.

[wz_Sensor:"open"] würde schon ausreichen oder

[wz_Sensor:"^open$"] um es genauer einzuschränken oder

["^wz_Sensor$:^open$"] mit der Regex für das Device

oder oder oder ...


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heinzelrumpel

Danke. Ist es richtig, dass man nur mit den Readings arbeiten kann, die auch im EventMonitor erscheinen? Ich ging nämlich davon aus, dass alle Readings unter den Device Details herhalten können. Daher bin ich auch auf state gekommen, denn dieser Wert verändert sich, wenn eine Bewegung erkannt wird.

Jetzt habe ich das ganze mal versucht zu verknüpfen, aber wie sollte es anders sein, klappt nicht


define fl_Bew DOIF ([fl_Sensor:"^motion:.on$"] and [HUEDevice9:"^aus$"]) (set HUEDevice9 on-for-timer 60)


Lass ich den Part nach "and" weg, funktioniert das Schalten von HUEDevice9. Im Log des fl_Sensor steht


2017-05-04 21:07:23 HUEDevice HUEDevice9 aus



nternals:
   DEF        9  IODev=HueBridge
   ID         9
   INTERVAL
   IODev      HueBridge
   NAME       HUEDevice9
   NR         30
   STATE      an
   TYPE       HUEDevice
   desired    0
   manufacturername Philips
   modelid    LCT001
   name       wz_bunt3
   swversion  5.23.1.13452
   type       Extended color light
   uniqueid   00:17:88:01:00:f8:56:d4-0b
   Readings:
     2017-05-01 19:59:19   alert           none
     2017-05-04 20:35:59   bri             254
     2017-05-04 20:18:23   colormode       ct
     2017-05-04 20:18:23   ct              153 (6535K)
     2017-05-01 19:59:19   effect          none
     2017-05-04 20:18:23   hue             34515
     2017-05-04 21:13:23   onoff           1
     2017-05-04 21:13:23   pct             100
     2017-05-04 20:03:23   reachable       1
     2017-05-04 20:18:23   rgb             e5eaff
     2017-05-04 20:18:23   sat             236
     2017-05-04 21:24:23   state           on
     2017-05-04 20:18:23   xy              0.3138,0.3238


Anders gefragt: Wie kann ich denn auf eins dieser hier aufgeführten Readings zugreifen bzw. dieses abfragen?

Thorsten Pferdekaemper

Zitat von: heinzelrumpel am 01 Mai 2017, 19:13:34
Das Problem ist einfach, ich checks nicht, auch nach lesen verschiedener Threads
Dein Problem ist wahrscheinlich, dass Du zu schnell aufgibst und Dir zu früh eine komplett andere Herangehensweise suchst. Einfach mal dranbleiben...


define flur_Bewegung_Li_an notify fl_Sensor:motion:.* { if (ReadingsVal("HUEDevice9","state","on") ne "on" && ReadingsNum("fl_Sensor","luminance",42)<4 && ReadingsNum("wz_Sensor","luminance",42)<4)  { fhem ("set HUEDevice9 on-for-timer 60") }


...und wenn das nicht geht, dann herausfinden, warum das so ist.

Gruß,
    Thorsten

FUIP

Damian

[fl_Sensor:"^motion:.on$"] and [HUEDevice9:"^aus$"]

wie soll das funktionieren. Es sind zwei Ereignistrigger und keine Zustandsabfragen, diese können niemals zum gleichen Zeitpunkt wahr sein.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heinzelrumpel

Zitat von: Thorsten Pferdekaemper am 04 Mai 2017, 23:15:10
Dein Problem ist wahrscheinlich, dass Du zu schnell aufgibst und Dir zu früh eine komplett andere Herangehensweise suchst. Einfach mal dranbleiben...


define flur_Bewegung_Li_an notify fl_Sensor:motion:.* { if (ReadingsVal("HUEDevice9","state","on") ne "on" && ReadingsNum("fl_Sensor","luminance",42)<4 && ReadingsNum("wz_Sensor","luminance",42)<4)  { fhem ("set HUEDevice9 on-for-timer 60") }


...und wenn das nicht geht, dann herausfinden, warum das so ist.

Gruß,
    Thorsten

Besten Dank. Schaltung funktioniert soweit. Einziges Problem ist noch, dass teilweise HUEDevice9 trotzdem durch das notify eingeschaltet wird, obwohl es schon an ist. Das führt wegen des on-for-timer natürlich dazu, dass das Licht nach 60 Sekunden aus geht. Aber das finde ich bestimmt noch irgendwie raus

Thorsten Pferdekaemper

Das ist seltsam, da die Bedingung

ReadingsVal("HUEDevice9","state","on") ne "on"

dafür sorgen sollte, dass das nicht passiert.
...außer manchmal bekommt FHEM das nicht mit.
Gruß,
   Thorsten
FUIP

justme1968

um zu testen ob die lampe an ist ist es bei hue lampen besser das onoff reading zu verwenden. je nach dim status oder erreichbarkeit kann state auch unerwartetes enthalten.

ansonsten bietet sich hier auch an mit FILTER zu arbeiten: set HUEDevice9:FILTER=onoff=0 on-for-timer 60
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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