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
Probiere mal mit Semikolon statt Komma hinter sleep.
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.
Semikolon solltest du immer im DEF-Editor eingeben, in der Kommandozeile muss du Semikolons doppelt. Du kannst statt sleep auch das Attribut wait nutzen.
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.
Wenn du das Attribut do always nicht gesetzt hast, dann wird es auch nicht funktionieren.
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
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.
DANKE! Das war der Fehler
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 ;)