Mit notify Watt berechnen lassen, kein Wert in logdb

Begonnen von grossmaggul, 09 Oktober 2025, 13:30:39

Vorheriges Thema - Nächstes Thema

grossmaggul

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
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

passibe

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 ...

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!