FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Shadow3561 am 07 November 2023, 17:26:24

Titel: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: Shadow3561 am 07 November 2023, 17:26:24
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
Titel: Aw: Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: KernSani am 07 November 2023, 17:43:40
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
Titel: Aw: Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: Shadow3561 am 07 November 2023, 18:09:29
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


Titel: Aw: Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: Shadow3561 am 07 November 2023, 18:17:33
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
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: betateilchen am 07 November 2023, 18:27:20
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.
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: Shadow3561 am 07 November 2023, 18:53:32
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
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: betateilchen am 07 November 2023, 19:18:42
Zitat von: Shadow3561 am 07 November 2023, 18:53:32
ZitatUnd 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.
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: KernSani am 07 November 2023, 20:02:22
Und 0 statt '0'  ;)
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: Shadow3561 am 07 November 2023, 20:13:31
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>
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: betateilchen am 07 November 2023, 20:48:10
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.
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: TomLee am 07 November 2023, 20:54:49
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.
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: TomLee am 07 November 2023, 21:14:04
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.
Titel: Aw: !!gelöst!! Problem mit wettabhängigem, farbigem Stateformat
Beitrag von: KernSani am 07 November 2023, 21:41:48
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 ;-)