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
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.
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 ;)
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 (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
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 (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 ...
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?
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
[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.
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
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
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