[Gelöst] DOIF setreading erzeugt kein Event

Begonnen von tobelix, 07 Februar 2023, 16:45:05

Vorheriges Thema - Nächstes Thema

tobelix

Hallo zusammen,

ich will beim Device für meine Wallbox die geladene Energiemenge pro Ladevorgang in einem Log abspeichern.
Dazu habe ich ein DOIF definiert, das auslöst sobald das Auto abgesteckt wird und die geladene Energiemenge dann in ein Reading schreibt. Ich habe der Doku und anderen Forenbeiträgen entnommen, dass setreading standardmäßig kein Event auslöst, aber mit der Workaround "sleep 0.1" sollte es dies tun. Funktioniert aber leider bei mir nicht und ich finde den Fehler nicht. Das DOIF löst aus, das Reading im Wallbox Device wird aktualisiert, aber es wird kein Event generiert, das ein Logging triggern würde.
Könnt ihr mal bitte drauf schauen und mich auf die Lösung stupsen?


define log_ladevorgang DOIF ([wallbox:chgStat] <= 3 ) (sleep 0.1, setreading wallbox letzterLadevorgang [wallbox:energyC])
#   CFGFN     
#   DEF        ([wallbox:chgStat] <= 3 ) (sleep 0.1, setreading wallbox letzterLadevorgang [wallbox:energyC])
#   FUUID      63e270f4-f33f-da52-3e25-7eb827ae5213efb9
#   MODEL      FHEM
#   NAME       log_ladevorgang
#   NOTIFYDEV  global,wallbox
#   NR         216176
#   NTFY_ORDER 50-log_ladevorgang
#   STATE      cmd_1
#   TYPE       DOIF
#   VERSION    26938 2023-01-01 18:13:32
#   eventCount 2
#   READINGS:
#     2023-02-07 16:41:02   Device          wallbox
#     2023-02-07 16:41:02   cmd             1
#     2023-02-07 16:41:02   cmd_event       wallbox
#     2023-02-07 16:41:02   cmd_nr          1
#     2023-02-07 16:41:02   e_wallbox_chgStat 3
#     2023-02-07 16:40:36   mode            enabled
#     2023-02-07 16:41:02   state           cmd_1
#   Regex:
#     accu:
#     collect:
#     cond:
#       wallbox:
#         0:
#           chgStat    ^wallbox$:^chgStat:
#   attr:
#     cmdState:
#     wait:
#     waitdel:
#   condition:
#     0          ::ReadingValDoIf($hash,'wallbox','chgStat') <= 3
#   do:
#     0:
#       0          sleep 0.1, setreading wallbox letzterLadevorgang [wallbox:energyC]
#     1:
#   helper:
#     NOTIFYDEV  global,wallbox
#     event      chgStat: 3
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     timerdev   wallbox
#     timerevent chgStat: 3
#     triggerDev wallbox
#     DOIF_eventa:
#       cmd_nr: 1
#       cmd: 1
#       cmd_event: wallbox
#       cmd_1
#     DOIF_eventas:
#       cmd_nr: 1
#       cmd: 1
#       cmd_event: wallbox
#       state: cmd_1
#     timerevents:
#       chgStat: 3
#     timereventsState:
#       chgStat: 3
#     triggerEvents:
#       chgStat: 3
#     triggerEventsState:
#       chgStat: 3
#   internals:
#   readings:
#     all         wallbox:chgStat
#   trigger:
#   uiState:
#   uiTable:
#
setstate log_ladevorgang cmd_1
setstate log_ladevorgang 2023-02-07 16:41:02 Device wallbox
setstate log_ladevorgang 2023-02-07 16:41:02 cmd 1
setstate log_ladevorgang 2023-02-07 16:41:02 cmd_event wallbox
setstate log_ladevorgang 2023-02-07 16:41:02 cmd_nr 1
setstate log_ladevorgang 2023-02-07 16:41:02 e_wallbox_chgStat 3
setstate log_ladevorgang 2023-02-07 16:40:36 mode enabled
setstate log_ladevorgang 2023-02-07 16:41:02 state cmd_1



define wallbox JsonMod http://192.168.173.207/json
attr wallbox DbLogInclude letzterLadevorgang
attr wallbox event-on-update-reading chgStat,currLim,energyC,power
attr wallbox readingList single(jsonPath('box[0].chgStat'), 'chgStat', 'error');;\
single(jsonPath('box[0].power'), 'power', 'error');;\
single(jsonPath('box[0].energyC'), 'energyC', 'error');;\
single(jsonPath('box[0].currLim'), 'currLim', 'error');;
attr wallbox room Home
#   API_LAST_MSG 200
#   API_LAST_RES 1675782000.11208
#   CFGFN     
#   DEF        http://192.168.173.207/json
#   FUUID      63d5388e-f33f-da52-bac7-19f6c1b7c0a74b1a
#   NAME       wallbox
#   NEXT       2023-02-07 17:00:00
#   NR         393
#   SOURCE     http://192.168.173.207/json (200)
#   STATE      ???
#   SVN        24783 2021-07-21 22:37:12 UTC
#   TYPE       JsonMod
#   eventCount 248
#   CONFIG:
#     IN_REQUEST 0
#     SOURCE     http://192.168.173.207/json
#     SECRET:
#   OLDREADINGS:
#   READINGS:
#     2023-02-07 16:41:02   chgStat         3
#     2023-02-07 16:00:00   currLim         160
#     2023-02-07 16:00:00   energyC         6.137
#     2023-02-07 16:41:02   letzterLadevorgang 6.137
#     2023-02-07 16:00:00   power           3650
#
setstate wallbox 2023-02-07 16:00:00 .computedReadings chgStat,currLim,energyC,power
setstate wallbox 2023-02-07 16:41:02 chgStat 3
setstate wallbox 2023-02-07 16:00:00 currLim 160
setstate wallbox 2023-02-07 16:00:00 energyC 6.137
setstate wallbox 2023-02-07 16:41:02 letzterLadevorgang 6.137
setstate wallbox 2023-02-07 16:00:00 power 3650


Damian

Probiere mal mit Semikolon statt Komma hinter sleep.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobelix

Das hatte ich zuerst. Hatte das komplette device zwischenzeitlich komplett gelöscht und neu angelegt. Dabei hat er mit Semikolon dann gemeckert es würde eine rechte Klammer fehlen. Soweit ich zählen konnte, ha5 aber keine gefehlt. Genau derselbe define Befehl mit Komma statt Semikolon ging ohne Fehlermeldung durch.

Damian

Semikolon solltest du immer im DEF-Editor eingeben, in der Kommandozeile muss du Semikolons doppelt. Du kannst statt sleep auch das Attribut wait nutzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobelix

Ahja, verstanden. Hatte es ursprünglich auch im DEF Editor gemacht, deshalb gab es da keine Probleme.
Habs jetzt wieder zu Semikolon geändert. Immernoch kein Event.
Hier mal der Auschnitt vom Event Monitor:
2023-02-07 19:37:30 DOIF log_ladevorgang cmd_nr: 1
2023-02-07 19:37:30 DOIF log_ladevorgang cmd: 1
2023-02-07 19:37:30 DOIF log_ladevorgang cmd_event: wallbox
2023-02-07 19:37:30 DOIF log_ladevorgang cmd_1
2023-02-07 19:37:30 JsonMod wallbox chgStat: 2


Ich triggere das DOIF zum Testen über setreading wallbox chgStat 3 in der Command Line.

Damian

Wenn du das Attribut do always nicht gesetzt hast, dann wird es auch nicht funktionieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobelix

Hab ich jetzt gesetzt, das ändert aber nichts am Problem. Der chgStat setzt sich zwischendurch auch immer wieder zurück wenn ein Update von der Wall Box kommt

jhohmann

#7
Auszug aus der command-ref
Zitatevent-on-update-reading
Wenn nicht gesetzt, erzeugt jede Veränderung eines Readings ein Ereignis, welches z.B. von notify oder FileLog berücksichtigt wird. Wenn gesetzt erzeugen nur Aktualisierungen der eingetragenen Readings ein Ereignis.
event-on-change-reading
Lösch das mal bei der wallbox.
Oder nimm das neue Reading hier mit auf.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

tobelix


Damian

Zitat von: tobelix am 08 Februar 2023, 09:10:20
DANKE! Das war der Fehler

Tja, das hättest du auch schon ohne DOIF testen können ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF