Moin,
ich lasse mir meine Heizungsventile in FHEM anzeigen und habe dazu folgendes state format erstellt
Valve: <span style='color:{(ReadingsNum("$name",'state',0)>="50" ? "red":"orange")}'>[$name:state]</span><br/>
Batt: <span style='color:{(ReadingsNum("$name",'Batt',0) >= "25" ? "green":"red")}'>[$name:Batt] %</span>
Nun habe ich seit kurzem folgende Meldung im Log
2023.11.07 02:12:01.492 1: PERL WARNING: Argument "65 %" isn't numeric in numeric lt (<) at (eval 2914174) line 1.
Nur leider verstehe ich absolut nicht, warum dort das % Zeichen ist.
Das reading was ich benutze ist eine reine Zahl.
Anbei ein gekürztes list vom device.
Bin für alle Tipps dankbar.
Internals:
DEF c2ba5a87 20
FUUID 6001d8e9-f33f-d66d-ba89-d386c53ab1df96d1
FVERSION 10_ZWave.pm:0.276870/2023-06-18
IODev ZWDongle
LASTInputDev ZWDongle
MSGCNT 269
NAME HKV_Thermostat_Wohnzimmer
NR 1315
STATE Valve: <span style='color:orange'>dim 0</span><br/>
Batt: <span style='color:green'>65</span>
TYPE ZWave
ZWDongle_MSGCNT 269
ZWDongle_RAWMSG 0004001406310501420b03d000
ZWDongle_TIME 2023-11-07 17:00:16
ZWaveSubDevice no
cmdsPending 0
eventCount 486
homeId c2ba5a87
isWakeUp
lastMsgSent 1699373141.54977
nodeIdHex 14
webCmd desired-temp
Helper:
DBLOG:
battery:
logdb:
TIME 1699319521.50074
VALUE 65
batteryPercent:
logdb:
TIME 1699319521.50074
VALUE 65
batteryState:
logdb:
TIME 1699319521.50074
VALUE ok
state:
logdb:
TIME 1699373141.55343
VALUE dim 0
temperature:
logdb:
TIME 1699372816.53519
VALUE 28.19
READINGS:
2023-10-28 16:42:59 Batt 80
2023-11-04 19:46:43 IODev ZWDongle
2023-10-02 12:14:28 SEND_DATA failed:00
2021-12-14 06:21:22 UNKNOWN multilevel type 00 fl: 42 arg: 0a57
2021-07-03 00:48:34 UNPARSED SENSOR_MULTILEVEL 06310101420cbe
2023-10-28 14:44:06 alarm PowerManagement: Event cleared: Previous Events cleared
2021-01-15 19:22:48 assocGroup_1 Max 1 Nodes ZWDongle
2021-01-17 08:04:12 assocGroups 1
2022-07-23 15:08:16 attrTemplateVersion Eurotronic_Spirit_20201101
2023-11-07 02:12:01 battery 65 %
2023-11-07 02:12:01 batteryPercent 65
2023-11-07 02:12:01 batteryState ok
2022-07-23 15:08:19 configBacklight BacklightEnabled
2022-07-23 15:08:20 configBatteryReport SendOnceADay
2022-07-23 15:08:21 configLCDInvert UpsideDown
2022-07-23 15:08:22 configLCDTimeout 0
2022-07-23 15:08:23 configMeasuredTemperatureOffset 0
2022-07-23 15:08:24 configOpenWindowDetection Disabled
2022-07-23 15:08:25 configTemperatureReportThreshold 1
2022-07-23 15:08:26 configValveOpeningPercentageReport 1
2021-02-02 19:48:27 fwMd fwMdManId: 0148, fwMdFwId_0: 0301, fwMdChkSum_0: 7f13, fwMdUpgradeable: ff, fwMdNrTarg: 01, fwMdFrqSize: 0028, fwMdFwId_1: 0002
2021-02-02 19:39:53 model EUROtronic EUR_SPIRITZ Wall Radiator Thermostat
2021-02-02 19:39:53 modelConfig eurotronic/eur_spiritz.xml
2021-02-02 19:39:53 modelId 0148-0003-0001
2021-04-14 18:28:10 neighborList ZWDongle HKV_Thermostat_FB_Bad HKV_Schlafzimmer HKV_Diele_Kind Thermostat_Kinderzimmer
2021-04-14 18:27:27 neighborUpdate done
2021-01-17 08:00:47 powerlvl current 0 remain 0
2021-01-17 08:01:24 powerlvlTest node 0 status 0 frameAck 0
2023-02-21 05:43:03 reportedState dim 99
2023-11-07 17:05:43 routeInfo timeToCb:1.26 repeaters:0 rssi0:-55 dBm ackCh:1 lastCh:1 scheme:LastWorkingRoute rep:at 100kbps routeTries:4 lastFailed:
2022-02-04 13:59:01 setpointTemp 22.0 C heating
2023-11-07 17:05:41 state dim 0
2023-11-07 17:00:16 temperature 28.19 C
2023-10-23 18:23:05 thermostatMode fullPower
2021-02-08 16:14:34 time 28.04 seconds
2023-11-07 17:05:43 timeToAck 2.065
2023-11-07 17:05:43 transmit OK
2021-02-02 19:55:15 version Lib 3 Prot 4.61 App 0.16 HW 49 FWCounter 1 FW 0.2
2021-01-17 08:04:04 versionClass_115 1
2021-01-17 08:04:05 versionClass_117 1
2021-01-17 08:04:03 versionClass_122 3
2021-02-07 08:02:59 zwavePlusInfo version:01 role:SleepingListeningSlave node:Z-Wave+IpGateway installerIcon:1200 userIcon:1200
Attributes:
IODev ZWDongle
alias Heizkreisverteiler Wohnzimmer
sortby 1
stateFormat Valve: <span style='color:{(ReadingsNum("$name",'state','')>=50 ? "red":"orange")}'>[$name:state]</span><br/>
Batt: <span style='color:{(ReadingsNum("$name",'batteryPercent','') >= "25" ? "green":"red")}'>[$name:batteryPercent]</span>
userattr Heating_Wz Heating_Wz_map structexclude
verbose 2
webCmd dim
Hi,
vermutlich wird das "battery" Reading an anderer Stelle verwendet, was die Warnung verursacht. Mit stacktrace an bekommst du vielleicht genauere Infos, wer die Meldung verursacht.
Kleiner Hinweis (wird allerdings hier nicht wirklich stören, nur der Form halber): Bei ReadingsNum sollte der "default" Wert numerisch sein und die Vergleiche sollten auch mit numerischen Werten durchgeführt werden (also 0 statt '' bzw. 25, statt "25")
Grüße,
Oli
Danke für den kleinen Hinweis. Habe es sofort geändert.
Zitatvermutlich wird das "battery" Reading an anderer Stelle verwendet
Müsste das dann nicht unten im Device unter Probably associated with angezeigt werden?
Dort habe ich nur einen PID-Regler, das FileLog und ein notify.
DEF vom PID
EIB_0600:temperatur HKV_Thermostat_Wohnzimmer:dim
DEF vom notify
*02:12:00 get HKV_Thermostat_Wohnzimmer battery
Daran kann es also nicht liegen denke ich
Ich denke ich habe den Fehler gefunden.
Der Fehler liegt an einer Readingsgroup die mir die Batteriezustände anzeigt.
ZE.Batterie readingsGroup .*:[Bb]atteryState, .*:[Bb]attery
Danke noch einmal für deine Hilfe
Und Du könntest auch Deine Ergebnisse aus ReadingsNum() mit Zahlen vergleichen anstatt mit Strings.
Also ReadingsNum(...) >= 50 anstatt >= "50"
Und von den überflüssigen Klammern in Deinem Konstrukt will ich gar nicht erst anfangen zu reden.
Hat alles nix mit Deiner perl warning zu tun, ist aber halt einfach schlechter Programmierstil.
ZitatUnd Du könntest auch Deine Ergebnisse aus ReadingsNum() mit Zahlen vergleichen anstatt mit Strings.
Habe ich beherzigt und sofort geändert.
Valve: <span style='color:{(ReadingsNum("$name",'state','0')>= 50 ? "red":"orange")}'>[$name:state]</span><br/>
Batt: <span style='color:{(ReadingsNum("$name",'batteryPercent','0') >= 25 ? "green":"red")}'>[$name:batteryPercent]</span>
ZitatUnd von den überflüssigen Klammern in Deinem Konstrukt will ich gar nicht erst anfangen zu reden.
Dabei benötige ich etwas Hilfe.
Denn
Zitatist aber halt einfach schlechter Programmierstil.
Programmierstil würde ich das, was ich mache, nicht nennen.
Eher erste Gehversuche.
Benutze FHEM schon seit ein paar Jahren und versuche so viel wie möglich ohne Fragen hin zu bekommen, aber Perl ist nicht mein Freund. Hatte vor 30 Jahren mal mit QBasic zu tun und mir fallen ein paar Parallelen auf, aber das wars.
Bin also für jeden Denkanstoss dankbar und auch gewillt mich dies bezüglich weiter zu bilden.
Mit freundlichen Grüßen
Zitat von: Shadow3561 am 07 November 2023, 18:53:32ZitatUnd von den überflüssigen Klammern in Deinem Konstrukt will ich gar nicht erst anfangen zu reden
Dabei benötige ich etwas Hilfe.
Ok...
{(ReadingsNum("$name",'state','0')>= 50 ? "red":"orange")}die rot markierten Klammern und Anführungzeichen sind überflüssig.
Und 0 statt '0' ;)
Sorry,
aber so klappt es leider nicht.
Valve: <span style='color:{ReadingsNum($name,'state',0)>= 50 ? "red":"orange"}'>[$name:state]</span><br/>Batt: <span style='color:{ReadingsNum($name,'batteryPercent',0) >= 25 ? "green":"red"}'>[$name:batteryPercent]</span>
Zitat von: Shadow3561 am 07 November 2023, 20:13:31Sorry,
aber so klappt es leider nicht.
Ok, sorry. Dann bau die Klammern halt wieder ein. Scheint hier ein (fhem-spezifischer) Sonderfall zu sein, dass man das Ganze in Klammern setzen muss, damit das > aus dem Vergleich nicht als html Tag verwurstet wird.
Der Hinweis mit 0 statt '0' ist aber korrekt :) Denn bei ReadingsNum() sollte man einen numerischen Wert als default angeben, keinen alphanumerischen.
Valve: <span style='color:{(ReadingsNum("$name",'state',0)>= 50) ? "red":"orange"}'>[$name:state]</span><br/>Batt: <span style='color:{(ReadingsNum("$name",'batteryPercent',0) >= 25) ? "green":"red"}'>[$name:batteryPercent]</span>
In deinem Fall braucht man die runden Klammern (dazu hab ich keine Erklärung) und die Anführungszeichen um $name (das sieht man in der eval-Meldung nach der PERL WARNING: Argument "65 %" isn't numeric in... das $name nicht evaluiert wird ohne die Anführungszeichen).
Wenn man alles in Perl schreibt (und nicht mischt), denk ich wird man die Klammer und die Quotes um $name weglassen können, das hab ich jetzt aber nicht ausprobiert.
Upps, das ist ja bis auf die Quotes um den Wert der verglichen wird, genau das gleiche gezeigte stateFormat wie im ersten Beitrag ::)
Bei mir klappt beides (mit und ohne Quotes um den zu vergleichenden Wert) mit 65 %, ohne Meldung im Log.
Die Warning kam ja auch aus der Readingsgroup ;) Also eigentlich hat's von Anfang an funktioniert... Ich persönlich packe so einen Kram immer komplett in Perl Code, anders sollte es laut commandref eigentlich auch nicht funktionieren ;-)