FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dogas am 12 Dezember 2018, 22:06:35

Titel: Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 12 Dezember 2018, 22:06:35
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


Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 12 Dezember 2018, 22:38:14
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
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: RalfRog am 12 Dezember 2018, 22:59:37
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.
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 12 Dezember 2018, 23:03:26
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.
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 12 Dezember 2018, 23:04:46
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?
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag 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
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 12 Dezember 2018, 23:24:05
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.
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 12 Dezember 2018, 23:27:34
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
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 13 Dezember 2018, 06:36:44
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

Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 13 Dezember 2018, 09:12:58
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 0x00158d0002b47d71hier an. Aber bitte nicht als Link bei Tapatalk sondern in Codetags.

Gruß Otto
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 13 Dezember 2018, 20:55:12
Scheint jetzt zu funktionierten. Danke für die Hilfe.  :)
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 14 Dezember 2018, 08:15:46
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.  :(
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 14 Dezember 2018, 08:52:59
Moin,
https://tty1.net/smart-questions_de.html#beprecise
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 14 Dezember 2018, 22:24:35
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?
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 14 Dezember 2018, 22:30:37
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
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: dogas am 14 Dezember 2018, 22:32:56
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
Titel: Antw:Simple Lampensteuerung mit Bewegungsmelder
Beitrag von: Otto123 am 14 Dezember 2018, 22:37:59
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",""))}