[gelöst] Attribut userReadings wirft Fehler im logfile

Begonnen von Gisbert, 16 Juli 2024, 08:47:20

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Damian,

in einem DOIF habe ich ein userReading definiert, um dieses dann per stateFormat anzeigen zu lassen. Ich bekomme folgenden Fehler im logfile:
2024.07.16 04:01:27.480 1:  PERL WARNING: Argument "" isn't numeric in numeric eq (==) at (eval 25106297) line 11.
2024.07.16 04:01:27.480 3:  eval: {
if (ReadingsVal($name,'cmd_nr','') == 1) {"no Battery"}
elsif (ReadingsVal($name,'cmd_nr','') == 2) {"BattV Modus"}
elsif (ReadingsVal($name,"mode",'') eq "disabled") {"disabled"}
elsif (ReadingsVal($name,'cmd_nr','') == 3) {"max Battery Charge: 40 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 4) {"max Battery Charge: 30 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 5) {"max Battery Charge: 20 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 6) {"max Battery Charge: 10 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 7) {"max Battery Charge: 40 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 8) {"max Battery Charge: 80 A"}
elsif (ReadingsVal($name,'cmd_nr','') == 9) {"Battery float 55V"}}

Das DOIF raw-Format sieht so aus:
defmod Deye_Batt DOIF ([?{sunset_abs()}-{sunrise_abs()}] and [Deye_Inverter:battery_voltage] < 50) (set Deye_Inverter noBatt 1) \
DOELSEIF ([{sunrise_abs(900)}] and [?Deye_Inverter:Batt] eq "Battery is OFF!") (set Deye_Inverter BattV 1) \
DOELSEIF (90 > [JK_BMS:capacity_remaining] >= 80) (set Deye_Inverter:FILTER=MaxBattCharge!=40 MaxBattCharge 40) \
DOELSEIF (95 > [JK_BMS:capacity_remaining] >= 90) (set Deye_Inverter:FILTER=MaxBattCharge!=30 MaxBattCharge 30) \
DOELSEIF (98 > [JK_BMS:capacity_remaining] >= 95) (set Deye_Inverter:FILTER=MaxBattCharge!=20 MaxBattCharge 20) \
DOELSEIF (100 > [JK_BMS:capacity_remaining] >= 98) (set Deye_Inverter:FILTER=MaxBattCharge!=10 MaxBattCharge 10) \
DOELSEIF ([JK_BMS:capacity_remaining] < 80 and [?04:00-10:59]) (set Deye_Inverter:FILTER=MaxBattCharge!=40 MaxBattCharge 40) (set Deye_Inverter:FILTER=battery_float!=55.8 battery_float 55.8) \
DOELSEIF ([JK_BMS:capacity_remaining] < 80 and [?11:00-23:59]) (set Deye_Inverter:FILTER=MaxBattCharge!=80 MaxBattCharge 80) (set Deye_Inverter:FILTER=battery_float!=55.8 battery_float 55.8)\
DOELSEIF ([JK_BMS:total_voltage] >= 55.9 or [JK_BMS:capacity_remaining] == 100) (set Deye_Inverter:FILTER=battery_float!=55.4 battery_float 55.4) (set Deye_Inverter:FILTER=battery_float!=55 battery_float 55)
attr Deye_Batt alias Deye Battery
attr Deye_Batt group DOIF
attr Deye_Batt icon measure_battery_100
attr Deye_Batt room DEYE
attr Deye_Batt stateFormat _status
attr Deye_Batt userReadings _status {\
if (ReadingsVal($name,'cmd_nr','') == 1) {"no Battery"} \
elsif (ReadingsVal($name,'cmd_nr','') == 2) {"BattV Modus"} \
elsif (ReadingsVal($name,"mode",'') eq "disabled") {"disabled"} \
elsif (ReadingsVal($name,'cmd_nr','') == 3) {"max Battery Charge: 40 A"} \
elsif (ReadingsVal($name,'cmd_nr','') == 4) {"max Battery Charge: 30 A"} \
elsif (ReadingsVal($name,'cmd_nr','') == 5) {"max Battery Charge: 20 A"} \
elsif (ReadingsVal($name,'cmd_nr','') == 6) {"max Battery Charge: 10 A"} \
elsif (ReadingsVal($name,'cmd_nr','') == 7) {"max Battery Charge: 40 A"} \
elsif (ReadingsVal($name,'cmd_nr','') == 8) {"max Battery Charge: 80 A"}\
elsif (ReadingsVal($name,'cmd_nr','') == 9) {"Battery float 55V"}}
attr Deye_Batt wait 0:0:0:0:0:0:0,10:0,10:1800,900

Ich dachte, dass man eq benutzen sollte, wenn man Strings vergleichen will. Anscheinend funktioniert das nicht in einem userReading.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Damian

wenn es cmd_nr nicht gibt, dann belegst du es mit '', das ist aber keine Zahl, deswegen eine Warnung beim == Vergleich mit Zahlen. Du kannst es mit 0 vorbelegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gisbert

Zitat von: Damian am 16 Juli 2024, 09:45:40wenn es cmd_nr nicht gibt, dann belegst du es mit '', das ist aber keine Zahl, deswegen eine Warnung beim == Vergleich mit Zahlen. Du kannst es mit 0 vorbelegen.

Gelöst!

Vielen Dank
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome