[gelöst] Keine Ereignisse durch json2nameValue ausgelöst? DOIF-Problem?

Begonnen von andies, 10 November 2023, 20:49:59

Vorheriges Thema - Nächstes Thema

andies

Ich habe ein Problem mit einem Klingelsensor, der eine Klingel auslösen soll. Der Sensor ist folgendes Gerät
Internals:
   CID        DVES_C83350
   DEF        DVES_C83350
   FUUID      61c4abd5-f33f-1115-6d1b-1610ab1fee994ddf
   FVERSION   10_MQTT2_DEVICE.pm:0.279350/2023-09-05
   IODev      Mosquitto
   LASTInputDev Mosquitto
   MSGCNT     2346
   Mosquitto_CONN Mosquitto_192.168.2.81_54737
   Mosquitto_MSGCNT 2346
   Mosquitto_TIME 2023-11-10 20:37:10
   NAME       Klingelsensor
   NR         412
   STATE       
   TYPE       MQTT2_DEVICE
   eventCount 2337
   JSONMAP:
     Channel_0  0
     Channel_1  0
     Channel_2  0
     Channel_3  0
     Channel_4  0
     Channel_5  0
     Color      0
     Dimmer     0
     HSBColor   0
     POWER1     0
     POWER2     0
     POWER3     0
     POWER4     0
   READINGS:
     2023-09-21 15:17:16   BASE            18
     2023-11-02 19:37:04   BootCount       405
     2023-11-10 12:33:52   Button1_Action  CLEAR
     2023-09-21 15:17:16   DeviceName      Klingelsensor
     2023-09-21 15:17:16   Emulation       0
     2023-09-21 15:17:16   FLAG            0
     2023-11-02 19:37:04   FallbackTopic   cmnd/DVES_C83350_fb/
     2023-09-21 15:17:16   FriendlyName1   Klingeltaster
     2023-09-21 15:17:16   FriendlyName2  
     2023-09-21 15:17:16   FriendlyName3  
     2023-09-21 15:17:16   FriendlyName4  
     2023-09-21 15:17:16   FriendlyName5  
     2023-09-21 15:17:16   FriendlyName6  
     2023-09-21 15:17:16   FriendlyName7  
     2023-09-21 15:17:16   FriendlyName8  
     2023-09-21 15:17:16   GPIO_1          1
     2023-09-21 15:17:16   GPIO_10         1
     2023-09-21 15:17:16   GPIO_11         1
     2023-09-21 15:17:16   GPIO_12         1
     2023-09-21 15:17:16   GPIO_13         1
     2023-09-21 15:17:16   GPIO_14         1
     2023-09-21 15:17:16   GPIO_2          1
     2023-09-21 15:17:16   GPIO_3          1
     2023-09-21 15:17:16   GPIO_4          1
     2023-09-21 15:17:16   GPIO_5          1
     2023-09-21 15:17:16   GPIO_6          1
     2023-09-21 15:17:16   GPIO_7          1
     2023-09-21 15:17:16   GPIO_8          1
     2023-09-21 15:17:16   GPIO_9          1
     2023-11-02 19:37:04   GroupTopic      cmnd/tasmotas/
     2023-11-10 20:37:10   Heap            25
     2023-11-02 19:37:04   Hostname        tasmota-C83350-4944
     2023-11-02 09:17:58   IODev           Mosquitto
     2023-11-02 19:37:04   IPAddress       192.168.2.81
     2023-11-08 07:30:03   LWT             Online
     2023-11-10 20:37:10   LoadAvg         19
     2023-11-02 19:37:04   Module          Sonoff Basic
     2023-11-10 20:37:10   MqttCount       9
     2023-09-21 15:17:16   NAME            Generic
     2023-11-02 19:37:04   RestartReason   Hardware Watchdog
     2023-08-13 10:07:34   SaveData        on
     2023-09-21 15:17:16   SetOption128    on
     2023-08-13 10:07:33   SetOption26     on
     2023-09-21 15:17:16   SetOption3      on
     2023-11-10 20:37:10   Sleep           50
     2023-11-10 20:37:10   SleepMode       Dynamic
     2023-08-13 10:07:33   StateText1      off
     2023-08-13 10:07:33   StateText2      on
     2023-08-13 10:07:33   StateText3      toggle
     2023-08-13 10:07:33   StateText4      hold
     2023-11-10 20:37:10   Time            2023-11-10T20:37:10
     2023-11-10 20:37:10   Uptime          8T09:11:26
     2023-11-10 20:37:10   UptimeSec       724286
     2023-11-02 19:37:04   Version         13.0.0.4(tasmota)
     2023-09-21 15:17:16   WebPassword     ****
     2023-11-02 19:37:04   WebServerMode   Admin
     2023-11-10 20:37:10   Wifi_AP         1
     2023-11-10 20:37:10   Wifi_BSSId      E6:63:DA:BA:8C:0C
     2023-11-10 20:37:10   Wifi_Channel    1
     2023-11-10 20:37:10   Wifi_Downtime   0T00:00:23
     2023-11-10 20:37:10   Wifi_LinkCount  5
     2023-11-10 20:37:10   Wifi_Mode       11n
     2023-11-10 20:37:10   Wifi_RSSI       76
     2023-11-10 20:37:10   Wifi_SSId       WLAN-120954
     2023-11-10 20:37:10   Wifi_Signal     -62
     2023-08-13 10:07:33   attrTemplateVersion 20210523
     2023-11-02 19:37:04   state           off
     2023-10-25 08:16:36   subscriptions   cmnd/DVES_C83350_fb/# cmnd/tasmota_C83350/# cmnd/tasmotas/#
Attributes:
   autocreate 0
   event-min-interval Button1_Action:3
   group      intern
   jsonMap    POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
   model      tasmota_basic_state_power1
   readingList tele/tasmota_C83350/LWT:.* LWT
  tele/tasmota_C83350/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_C83350/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_C83350/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }
  tele/tasmota_C83350/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }
  stat/tasmota_C83350/POWER1:.* state
  stat/tasmota_C83350/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       Abwesenheit
   setList    off:noArg    cmnd/tasmota_C83350/POWER1 0
  on:noArg     cmnd/tasmota_C83350/POWER1 1
  toggle:noArg cmnd/tasmota_C83350/POWER1 2
  setOtaUrl:textField cmnd/tasmota_C83350/OtaUrl $EVTPART1
  upgrade:noArg   cmnd/tasmota_C83350/upgrade 1
   setStateList on off toggle
   stateFormat  
   verbose    1
   webCmd      

und ich möchte, dass bei Auslösung (also wenn das Reading Button1_Action auf SINGLE gesetzt wird) ein Klingelschalter die Klingel auslöst. Das entsprechende DOIF lautet dann
Internals:
   DEF        (([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "normal"))  (set Klingel on-for-timer 2,set TelegramBot message @012345678 🛎) DOELSEIF (([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "absence")) (set TelegramBot message @012345678 🛎)
   FUUID      64d8c65e-f33f-1115-0555-6effb779c025df09
   FVERSION   98_DOIF.pm:0.277400/2023-07-10
   MODEL      FHEM
   NAME       KlingelAusloesen
   NOTIFYDEV  Klingelsensor,Profil,global
   NR         509
   NTFY_ORDER 50-KlingelAusloesen
   STATE      cmd_1
   TYPE       DOIF
   VERSION    27740 2023-07-10 09:31:11
   READINGS:
     2023-11-10 12:33:51   Device          Klingelsensor
     2023-10-04 12:06:32   cmd             1
     2023-10-04 12:06:32   cmd_event       Klingelsensor
     2023-10-04 12:06:32   cmd_nr          1
     2023-11-10 12:33:51   e_Klingelsensor_Button1_Action SINGLE
     2023-10-29 15:15:42   e_Profil_housemode normal
     2023-09-02 15:45:22   mode            enabled
     2023-10-04 12:06:32   state           cmd_1
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       Klingelsensor:
         0:
           Button1_Action ^Klingelsensor$:^Button1_Action:
         1:
           Button1_Action ^Klingelsensor$:^Button1_Action:
       Profil:
         0:
           housemode  ^Profil$:^housemode:
         1:
           housemode  ^Profil$:^housemode:
   attr:
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'Klingelsensor','Button1_Action') eq "SINGLE") and (::ReadingValDoIf($hash,'Profil','housemode') eq "normal")
     1          (::ReadingValDoIf($hash,'Klingelsensor','Button1_Action') eq "SINGLE") and (::ReadingValDoIf($hash,'Profil','housemode') eq "absence")
   do:
     0:
       0          set Klingel on-for-timer 2,set TelegramBot message @012345678 🛎
     1:
       0          set TelegramBot message @012345678 🛎
     2:
   helper:
     NOTIFYDEV  Klingelsensor,Profil,global
     event      Button1_Action: SINGLE
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Klingelsensor
     timerevent Button1_Action: SINGLE
     triggerDev Klingelsensor
     timerevents:
       Button1_Action: SINGLE
     timereventsState:
       Button1_Action: SINGLE
     triggerEvents:
       Button1_Action: SINGLE
     triggerEventsState:
       Button1_Action: SINGLE
   internals:
   perlblock:
   readings:
     all         Klingelsensor:Button1_Action Profil:housemode
   trigger:
   uiState:
   uiTable:
Attributes:
   comment    https://forum.fhem.de/index.php?topic=134595.msg1284115
   group      Schalter
   room       Abwesenheit

Und das geht aber leider nicht. Verbose 5 ergibt folgende Events in der Situation, in der tatsächlich der Klingelsensor eine SINGLE-Action erhält:
2023.11.10 12:32:10 4: MQTT2_DEVICE_Parse: Klingelsensor tele/tasmota_C83350/STATE => { json2nameValue($EVENT,'',$JSONMAP) }
2023.11.10 12:33:51 4: MQTT2_DEVICE_Parse: Klingelsensor stat/tasmota_C83350/RESULT => { json2nameValue($EVENT,'',$JSONMAP) }
2023.11.10 12:33:52 4: MQTT2_DEVICE_Parse: Klingelsensor stat/tasmota_C83350/RESULT => { json2nameValue($EVENT,'',$JSONMAP) }
Das heißt, die RESULTS werden von der json2nameValue nicht als "echtes" FHEM-Ereignis übersetzt. Zwar werden die Readings entsprechend gesetzt, es heißt ja
     2023-11-10 12:33:52   Button1_Action  CLEAR
aber es gibt kein Ereignis in FHEM, das ein DOIF entgegennehmen könnte. Das DOIF reagiert einfach gar nicht.

Wie kann ich bewerkstelligen, dass DOIF den ausgelösten Klingelsensor erkennt? Wie erreiche ich, dass der Klingelsensor ein echtes FHEM-Ereignis produziert?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

TomLee

Denke das ist mehr eine Frage zu DOIF wie zu MQTT.

Ist es nicht so, ich weiß es nicht, das du mit der DOIF-Syntax die du verwendest zwei Events gleichzeitig abfrägst und das einfach nicht vorkommen kann ?

Zitat([Klingelsensor:Button1_Action] eq "SINGLE") and ([Profil:housemode] eq "normal")

Vermute dem Profil:housemode muss man ein ? davorstellen das es nur eine Abfrage des Status ist und nicht auf ein Event getriggert wird ?


andies

Hmm, das weiß ich jetzt nicht. Ich habe aber andere DOIFs, bei denen das kein Problem darstellt. Daher würde ich jetzt mal als Antwort auf Nein tippen. Das hier zB
defmod GarageOffenDOIF2 DOIF (([Garage:Tor] eq "ON") and ([BresserTemeo_1:temperature]<7) ) (set TelegramBot _msg @0123456 Garage seit 10 Minuten <b>offen</b> und außen [BresserTemeo_1:temperature]°C)
reagiert nur, wenn die Temperatur entsprechend niedrig ist. Und das ist eine vergleichbare logische Struktur.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

TomLee

Mag sein, ich würde das Problem aber trotzdem an der DOIF Syntax suchen, wie an dem nicht vermuteten Event.

Ein Event zu Button1_Action gibts, das sieht man ja in dem List von Klingelsensor und wenn du im Eventmonitor nachschaust wirst das auch sehen, verbose hoch stellen und das Event im LogFile zu erwarten ist der falsche Ansatz.

Otto123

Das was Du Dir als Events anschaust ist nicht der Eventmonitor sondern ein Logfile!

Ich meine das DOIF hat ausgelöst
Zitat2023-11-10 12:33:51   e_Klingelsensor_Button1_Action SINGLE
     2023-10-29 15:15:42   e_Profil_housemode normal
     2023-09-02 15:45:22   mode            enabled
     2023-10-04 12:06:32   state           cmd_1

Aber kann sein, Du brauchst do always, damit es wiederholt auslöst :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andies

Vielen Dank für Eure Tipps, gehen ja in beide Richtungen. Also schaue ich mal beim DOIF und wenn ich "do always" lese, dann erinnere ich mich, dass das meine ewige Schwachstelle war...

Vielleicht sollte man das "do always" zum default machen.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Jetzt hat es lustigerweie gerade geklingelt. Die Sache geht. Es war, wie immer, do always. Danke nochmal!
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann