Hallo,
habe mir einen Xiaomi Mi Home Bewegungsmelder zugelegt und über zigbee2mqtt in meine FHEM Landschaft eingebunden.
Nun wollte ich meine IKEA Lampe im Flur damit steuern. Allerdings läuft das nicht wie erhofft.
Hatte mir folgendes DOIF angelegt:
([0x00158d0002b47d71:"^occupancy:.true$"]) (set 0x000b57fffe49654f brightness 255) DOELSE (set 0x000b57fffe49654f OFF)
Funktionierte erst mal ganz gut. Allerdings kam es zu sehr vielen Events. Ein setzen von event-on-change reading am BM sorgte dafür das es nicht mehr ging.
Also ein Versuch mit folgendem DOIF (Mal mit, mal ohne change-on-reading)
([0x00158d0002b47d71:"motion"] and [0x000b57fffe49654f:"OFF"]) (set 0x000b57fffe49654f brightness 255)
DOELSEIF ([0x00158d0002b47d71:"no_motion"] and [0x000b57fffe49654f:"ON"]) (set 0x000b57fffe49654f OFF)
Der funktioniert nun gar nicht.
Jetzt steh ich da und kann mir nicht erklären was ich falsch mache. Jemand ne Idee?
Hier die Gerätedefinition:
defmod 0x00158d0002b47d71 XiaomiMQTTDevice RTCGQ11LM 0x00158d0002b47d71
attr 0x00158d0002b47d71 IODev MQTT
attr 0x00158d0002b47d71 alias Bewegungssensor Flur EG
attr 0x00158d0002b47d71 devStateIcon motion:motion_detector@red off:motion_detector@green no_motion:motion_detector@green
attr 0x00158d0002b47d71 room Flur EG
attr 0x00158d0002b47d71 stateFormat state
defmod 0x000b57fffe49654f XiaomiMQTTDevice LED1623G12 0x000b57fffe49654f
attr 0x000b57fffe49654f IODev MQTT
attr 0x000b57fffe49654f alias Licht Flur EG
attr 0x000b57fffe49654f room Flur EG
attr 0x000b57fffe49654f webCmd on:off:brightness
attr 0x000b57fffe49654f widgetOverride brightness:slider,0,1,255
ZitatEin setzen von event-on-change reading am BM sorgte dafür das es nicht mehr ging.
Was genau hast Du getan?
Dir ist klar was Du damit tust? -> [0x00158d0002b47d71:"motion"] and [0x000b57fffe49654f:"OFF"]
Zwei Events können zur gleichen Zeit nicht war werden, zwei Zustände schon ... :o
Hinweis zur Doku (https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events)
Gruß Otto
Danke Otto für den Hinweis.
Das Thema DOIF mit einer AND Verknüpfung hat mich zuletzt auch Nerven gekostet (bei einem ähnlichen Problem mit Dämmerungssensor) bis mir langsam dämmerte, dass es nicht um Zustände sondern Ereignisse geht.
Muss mich wohl noch mal mit meiner kruden Umgehungslösung beschäftigen.
Zitat von: Otto123 am 12 Dezember 2018, 22:38:14
Was genau hast Du getan?
Einfach bei Bewegungsmelder ein event-on-change-reading hinzugefügt mit .*
Danach ging die Lampe nur aus. Aber nicht mehr an.
Zitat von: Otto123 am 12 Dezember 2018, 22:38:14
Dir ist klar was Du damit tust? -> [0x00158d0002b47d71:"motion"] and [0x000b57fffe49654f:"OFF"]
Zwei Events können zur gleichen Zeit nicht war werden, zwei Zustände schon ... :o
Hinweis zur Doku (https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events)
Okay habs verstanden. Was kann ich tun um den Status der Lampe mit in die IF Anweisung zu bekommen?
Hi,
Mein erster Tipp wäre mal, deinen Devices vernünftige Namen zu geben (https://fhem.de/commandref.html#rename).
Wenn das erledigt ist, dann musst du nochmal Syntax von DOIF (die zugegebenermassen sehr komplex ist) lesen. Du fragst Events ab... Es ist ziemlich unwahrscheinlich, dass beide Events (Bewegung erkannt und Lampe geht auf OFF) zum gleichen Zeitpunkt eintreten. Was du willst ist. Wenn Event "motion" und Zustand der Lampe "OFF", dann soll etwas passieren...
nur mal in den Raum geworfen:
[0x00158d0002b47d71:"motion"] and [?0x000b57fffe49654f] eq "OFF"]
Grüße,
Oli
Zitat von: KernSani am 12 Dezember 2018, 23:16:39
Hi,
Mein erster Tipp wäre mal, deinen Devices vernünftige Namen zu geben (https://fhem.de/commandref.html#rename).
Wenn das erledigt ist, dann musst du nochmal Syntax von DOIF (die zugegebenermassen sehr komplex ist) lesen. Du fragst Events ab... Es ist ziemlich unwahrscheinlich, dass beide Events (Bewegung erkannt und Lampe geht auf OFF) zum gleichen Zeitpunkt eintreten. Was du willst ist. Wenn Event "motion" und Zustand der Lampe "OFF", dann soll etwas passieren...
nur mal in den Raum geworfen:
[0x00158d0002b47d71:"motion"] and [?0x000b57fffe49654f] eq "OFF"]
Grüße,
Oli
Okay, das hab ich verstanden. Aber das genau das funktioniert halt nicht.
Sobald ich eine and verknüpfung hinzufüge, geht die Lampe nur aus und nicht mehr an.
Zitat von: dogas am 12 Dezember 2018, 23:03:26
Einfach bei Bewegungsmelder ein event-on-change-reading hinzugefügt mit .*
Danach ging die Lampe nur aus. Aber nicht mehr an.
Ich kenne Deinen BM nicht, was genau macht und liefert der?
Nur motion wenn sich was bewegt? (Scheint so)
Was macht er wenn sich nichts bewegt? Liefert er dann sowas wie nomotion?
Ansonsten hat KernSani schon einen Ansatz geliefert :D
Ich denke übrigens KernSani seine Aussage "... ziemlich unwahrscheinlich..." ist nicht richtig, obwohl ich auch immer sehr vorsichtig mit meiner Argumentation bin. Ich glaube wir hatten das sogar schon mal erörtert: Es ist in FHEM vielmehr unmöglich, dass zwei Events zur gleichen Zeit eintreffen. ;D
Edit: Du hast wirklich den Vorschlag von KernSani probiert? Das ist eine andere Verknüpfung als Deine!!!
Gruß Otto
Habe KernSani's Vorschlag verwendet und angepasst. Funzt soweit. Allerdings schießt der BW noch immer übel viele Events bei Bewegung ab. Bei keiner Bewegung nach einer Minute feuert er ein no_motion Event. Habe aber jetzt einfach die occupancy genommen und noch eine Abfrage auf die Helligkeit mit Lux gemacht, damit das Licht nicht immer an geht.
Hab mal die Zustände angehangen.(https://uploads.tapatalk-cdn.com/20181213/dc633440b39a37e984be830783390d38.jpg)
Es stellt sich mir nur noch die Frage wie ich die Eventhäufigkeit mindern kann, und das DOIF auch weiter funzt.
Gesendet von meinem LEX720 mit Tapatalk
Moin,
ich würde einfach beim Bewegungsmelder ein attr event-on-change-reading .* hinzufügen.
Mach das mal bitte, schau dir die Events im Eventmonitor an und hänge mal bitte die Ausgabe von list 0x00158d0002b47d71
hier an. Aber bitte nicht als Link bei Tapatalk sondern in Codetags.
Gruß Otto
Scheint jetzt zu funktionierten. Danke für die Hilfe. :)
Leider scheint es doch nicht zu funktionieren.
Gestern Abend war noch alles ok, heute Morgen keine Funktion.
In der Log aber auch keinerlei Einträge. :(
Moin,
https://tty1.net/smart-questions_de.html#beprecise
Also es scheint wirklich an dem event-on-change-reading zu liegen.
Wenn ich das am BW setze funktioniert die Schaltung nur sporadisch, oder garnicht.
Erklären kann ich es mir nicht wirklich.
Anbei die Definitionen.
defmod sensor_motion_Flur_EG XiaomiMQTTDevice RTCGQ11LM 0x00158d0002b47d71
attr sensor_motion_Flur_EG IODev MQTT
attr sensor_motion_Flur_EG alias Bewegungssensor Flur EG
attr sensor_motion_Flur_EG devStateIcon motion:motion_detector@red off:motion_detector@green no_motion:motion_detector@green
attr sensor_motion_Flur_EG icon people_sensor
attr sensor_motion_Flur_EG room EG,Flur EG
attr sensor_motion_Flur_EG stateFormat state
defmod bulb_licht_flur_eg XiaomiMQTTDevice LED1623G12 0x000b57fffe49654f
attr bulb_licht_flur_eg IODev MQTT
attr bulb_licht_flur_eg alias Licht Flur EG
attr bulb_licht_flur_eg icon light_led
attr bulb_licht_flur_eg room EG,Flur EG
attr bulb_licht_flur_eg webCmd on:off:brightness
attr bulb_licht_flur_eg widgetOverride brightness:slider,0,1,255
defmod doif_licht_flur_eg DOIF ([sensor_motion_Flur_EG:"^occupancy:.true$"] and [?bulb_licht_flur_eg] eq "OFF" and [?sensor_motion_Flur_EG:lux] < 30)\
(set bulb_licht_flur_eg brightness 255) \
DOELSEIF ([sensor_motion_Flur_EG:"^occupancy:.false$"] and [?bulb_licht_flur_eg] eq "ON") \
(set bulb_licht_flur_eg OFF)
attr doif_licht_flur_eg alias Licht bei Bewegung Flur EG
attr doif_licht_flur_eg room X_Logik
Was mir aufgefallen ist, ist das der STATE der Lampe mal off und mal OFF bzw. ON/on ist. Also mal groß und mal klein geschrieben.
Wird bei einem DOIF case sensitive abgefragt?
Es wird immer Case Sensitive abgefragt! :o
Wie gesagt ein list würde auch helfen ... da würde man das sehen.
Aber wenn es so ist wie Du sagst, musst Du die Werte wandeln.
Gruß Otto
Wie mache ich das umwandeln am besten?
Im Eventmonitor kann ich sehen, dass es mal groß und mal klein geschrieben ist.
2018-12-14 22:34:14 XiaomiMQTTDevice bulb_licht_flur_eg off
2018-12-14 22:34:14 XiaomiMQTTDevice bulb_licht_flur_eg transmission-state: incoming publish received
2018-12-14 22:34:14 XiaomiMQTTDevice bulb_licht_flur_eg off
2018-12-14 22:34:15 XiaomiMQTTDevice bulb_licht_flur_eg transmission-state: incoming publish received
2018-12-14 22:34:15 XiaomiMQTTDevice bulb_licht_flur_eg OFF
Internals:
DEF LED1623G12 0x000b57fffe49654f
FRIENDLYNAME
IODev MQTT
MODEL LED1623G12
NAME bulb_licht_flur_eg
NOTIFYDEV LED1623G12 0x000b57fffe49654f
NR 141
SID 0x000b57fffe49654f
STATE OFF
TYPE XiaomiMQTTDevice
READINGS:
2018-12-12 20:32:50 brightness 254
2018-12-14 22:22:22 state OFF
2018-12-14 22:22:22 transmission-state incoming publish received
message_ids:
subscribe:
zigbee2mqtt/0x000b57fffe49654f
xiaomi/0x000b57fffe49654f/#
subscribeExpr:
^zigbee2mqtt\/0x000b57fffe49654f$
^xiaomi\/0x000b57fffe49654f.*$
subscribeQos:
xiaomi/0x000b57fffe49654f/# 0
zigbee2mqtt/0x000b57fffe49654f 0
Attributes:
IODev MQTT
alias Licht Flur EG
icon light_led
room EG,Flur EG
webCmd on:off:brightness
widgetOverride brightness:slider,0,1,255
Gut irgendwie hast Du mich verloren.
Es gibt sowas wie ucase uc() https://perldoc.perl.org/functions/uc.html
Kannst Du im erzeugenden Device vielleicht einfach mit userReadings machen. Nicht getestet!
attr bulb_licht_flur_eg userReadings uState {uc(ReadingsVal($name,"state",""))}