Hallo,
ich habe hier eine zigbee Steckdose(NEO NAS-WR01B) mit Strommessungsfunktion. Allerdings werden nur Ampere und Volt angezeigt, Watt und Kwh(Readings power,energy,current,voltage) fehlen. Also dachte ich mir, ich lasse die Werte über ein Notify berechnen. Das funktioniert auch, zumindest wird mir im Eventmonitor ein Wert bei power angezeigt, aber er landet nicht in der Datenbank(logdb), die Werte current, voltage und energy aber schon.%-)
Da der Wert ja im Eventmonitor angezeigt wird, vermute ich da läuft irgendwas bei der Übergabe in die Datenbank schief, nur was?
Ich fummele da jetzt schon einige Zeit rum und komme nicht dahinter warum das nicht funktioniert.
Hier mal die lists, vielleicht fällt ja jemandem was auf.
Das Device:
Internals:
CID zigbee_server
DEF zigbee_server
FUUID 68e6a5ea-f33f-f310-5b5d-65c92dcc21436518
IODev mqtt2_server
LASTInputDev mqtt2_server
MSGCNT 332
NAME zigbee_server
NR 823
STATE on
TYPE MQTT2_DEVICE
eventCount 374
mqtt2_server_CONN mqtt2_server_192.168.1.12_57830
mqtt2_server_MSGCNT 332
mqtt2_server_TIME 2025-10-09 13:15:47
.DT:
DEVICETOPIC zigbee2mqtt/zigbee_server
.attraggr:
.attreour:
current
voltage
power
energy
.attrminint:
Helper:
DBLOG:
action:
logdb:
TIME 1760004702.17541
VALUE on
child_lock:
logdb:
TIME 1760004708.59577
VALUE LOCK
countdown:
logdb:
TIME 1760004708.59577
VALUE 0
current:
logdb:
TIME 1760008547.35525
VALUE 0.26
energy:
logdb:
TIME 1760008547.35525
VALUE 0.3
indicator_mode:
logdb:
TIME 1760004708.59577
VALUE off/on
linkquality:
logdb:
TIME 1760004708.59577
VALUE 140
power:
logdb:
TIME 1760008547.35525
VALUE 0
state:
logdb:
TIME 1760004708.59577
VALUE on
voltage:
logdb:
TIME 1760008547.35525
VALUE 240
READINGS:
2025-10-08 19:57:24 IODev mqtt2_server
2025-10-09 12:13:30 action on
2025-10-08 19:56:58 associatedWith zigbee_massi
2025-10-08 19:58:06 attrTemplateVersion 20220622
2025-10-09 13:15:47 child_lock LOCK
2025-10-09 13:15:47 countdown 0
2025-10-09 13:15:47 current 0.26
2025-10-09 13:15:47 energy 0.300988
2025-10-09 13:15:47 indicator_mode off/on
2025-10-09 13:15:47 linkquality 140
2025-10-09 13:15:47 power 59.28
2025-10-09 13:15:47 state on
2025-10-09 13:15:47 update_installed_version 4099
2025-10-09 13:15:47 update_latest_version 4099
2025-10-09 13:15:47 update_state idle
2025-10-09 13:15:47 voltage 240
Attributes:
DbLogExclude .*
DbLogInclude power,energy,current,voltage
devStateIcon {my $light = FW_makeImage(ReadingsVal($name,'state','off')); my $current = ReadingsVal($name,'current',0); my $pwr = ReadingsVal($name,'power',0); my $energy = ReadingsVal($name,'energy',0); my $voltage = ReadingsVal($name,'voltage',0); qq(<div> <a href="/fhem?cmd.dummy=set $name toggle&XHR=1">$light</a> Aktuell: $current A Spannung: $voltage V Leistung.: $pwr W Energy: $energy kwh<b></b>)}
devicetopic zigbee2mqtt/zigbee_server
disable 0
event-on-update-reading current,voltage,power,energy
genericDeviceType switch
icon message_socket
model zigbee2mqtt_plug_w_energy_measuring
readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT); $ret->{state}=lc($ret->{state}) if defined $ret->{state}; return $ret }
room Geräte->Systeme->MQTT2
setList on:noArg $DEVICETOPIC/set {"state":"ON"}
off:noArg $DEVICETOPIC/set {"state":"OFF"}
toggle:noArg $DEVICETOPIC/set {"state":"TOGGLE"}
setStateList on off toggle
Das notify:
Internals:
.COMMAND {
my $I = ReadingsVal("zigbee_server","current",0);
my $U = ReadingsVal("zigbee_server","voltage",0);
my $PF = 0.95;
# nur rechnen, wenn beides >0
if ($I > 0 && $U > 0) {
my $P = $I * $U * $PF;
fhem("setreading zigbee_server power $P");
DoTrigger("zigbee_server","power:$P");
my $E = ReadingsVal("zigbee_server","energy",0);
my $deltaHours = 1/60;
my $deltaE = $P / 1000 * $deltaHours;
fhem("setreading zigbee_server energy ".($E+$deltaE));
DoTrigger("zigbee_server","energy:".($E+$deltaE));
}
}
DEF zigbee_server:current|voltage {
my $I = ReadingsVal("zigbee_server","current",0);
my $U = ReadingsVal("zigbee_server","voltage",0);
my $PF = 0.95;
# nur rechnen, wenn beides >0
if ($I > 0 && $U > 0) {
my $P = $I * $U * $PF;
fhem("setreading zigbee_server power $P");
DoTrigger("zigbee_server","power:$P");
my $E = ReadingsVal("zigbee_server","energy",0);
my $deltaHours = 1/60;
my $deltaE = $P / 1000 * $deltaHours;
fhem("setreading zigbee_server energy ".($E+$deltaE));
DoTrigger("zigbee_server","energy:".($E+$deltaE));
}
}
FUUID 68e6a36b-f33f-f310-7c96-0f64ed4519f16599
NAME zigbee_server_notify
NR 820
NTFY_ORDER 50-ntest
REGEXP zigbee_server:current|voltage
STATE 2025-10-09 13:15:47
TRIGGERTIME 1760008547.35662
TYPE notify
eventCount 25
.attraggr:
.attrminint:
Helper:
DBLOG:
state:
logdb:
TIME 1759945579.32726
VALUE active
READINGS:
2025-10-09 13:14:33 state active
2025-10-09 13:15:47 triggeredByDev zigbee_server
2025-10-09 13:15:47 triggeredByEvent current: 0.26
Attributes:
DbLogExclude .*
icon logic
room Geräte->Systeme->MQTT2,System->Logik
Und das logdb Device:
Internals:
.FhemMetaInternals 1
COLUMNS field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
CONFIGURATION ./configDB.conf
DEF ./configDB.conf .*:.*
FD 4
FUUID 5d14afb8-f33f-f310-a661-c7e1aa4457eb4558
FVERSION 93_DbLog.pm:v5.11.0-s29401/2024-12-05
MODE asynchronous
MODEL MYSQL
NAME logdb
NR 2
NTFY_ORDER 50-logdb
PID 2789
REGEXP .*:.*
SBP_PID 2869
SBP_STATE running
STATE connected
TYPE DbLog
UTF8 1
dbconn mysql:database=fhem;host=192.168.1.12;port=3306
dbuser fhemuser
eventCount 2122
.attraggr:
.attrminint:
.fhem:
HELPER:
COLSET 1
DEVICECOL 64
EVENTCOL 512
OLDSTATE connected
PACKAGE main
READINGCOL 64
TC current
TH history
TYPECOL 64
UNITCOL 32
VALUECOL 128
VERSION 5.11.0
OLDREADINGS:
READINGS:
2025-10-09 13:25:15 CacheOverflowLastNum 0
2021-03-19 13:18:27 CacheOverflowLastState normal
2025-10-09 13:25:21 CacheUsage 8
2025-10-09 13:25:15 NextSync 2025-10-09 13:25:45 or when CacheUsage 500 is reached
2025-10-09 13:25:16 state connected
Attributes:
DbLogExclude .*
DbLogSelectionMode Exclude/Include
DbLogType Current/History
alias logdb
asyncMode 1
commitMode basic_ta:off
group Logging
icon audio_playlist
room System->Ausgabe->Logfiles
useCharfilter 1
verbose 0
Auszug aus dem Eventmonitor:
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server energy: 0.302964
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server energy:0.302964
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server power: 59.28
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server power:59.28
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server energy: 0.303952
2025-10-09 13:11:50.659 MQTT2_DEVICE zigbee_server energy:0.303952
gm
Ist jetzt erstmal nichts zum Log, sondern zum Grundproblem:
Was wird dir denn im Zigbee2MQTT-Webfrontend unter "Exposes" angezeigt? Ich habe selbst einige NAS-WR01Bs und die liefern problemlos die entsprechenden Werte. Irgendwas läuft da also schief.
Falls im Z2M-Webfrontend nichts angezeigt wird, mal versucht das Device zu removen und neu hinzuzufügen? Vielleicht ist bei der discovery etwas schiefgelaufen.
Falls die Werte unter "Exposes" angezeigt werden, was sagt der MQTT-Traffic bzw. das Log von Z2M? Werden dort die Werte übermittelt? Deine readingList dürfte, soweit ich erkennen kann, ok sein.
FWIW, ich nutze:$DEVICETOPIC:.* { json2nameValue(lc($EVENT)) }
$DEVICETOPIC/availability:.* { availability=>(json2nameValue($EVENT))->{state} }
dürfte hier aber egal sein, weil du ja voltage und current bekommst.
Natürlich zum Debuggen das notify deaktivieren, damit das nichts überschreibt ...
Und wenn man den Wert wirklich selbst berechnen möchte/muss, bietet sich doch eher ein userReading anstatt eines notify an?
Eigentlich liefert die Steckdose aber auch die Werte selbst.
https://www.zigbee2mqtt.io/devices/NAS-WR01B.html
ZitatPower (numeric)
Instantaneous measured power. Value can be found in the published state on the power property. It's not possible to read (/get) or write (/set) this value. The unit of this value is W.
...
Energy (numeric)
Sum of consumed energy. Value can be found in the published state on the energy property. It's not possible to read (/get) or write (/set) this value. The unit of this value is kWh.