gelöst: PERL WARNING in ReadingsGroup durch valueFormat

Begonnen von Bubbles71, 04 Februar 2021, 17:41:37

Vorheriges Thema - Nächstes Thema

Bubbles71

Hallo,

ich habe seit einigen Wochen einen Haufen an PERL WARNINGs in meinem log, finde aber einfach nicht den Ursprung. Die Warnings werden in ReadingsGroups angezeigt, die Werte von Tempertursensoren oder Thermostate anzeigen. (My Sensors, Zigbee, MAX).
Die PERL WARNINGS sind von der Art immer gleich und haben als Auslöser die Temperatur- oder Feuchtewerte. Die Einheiten ergänze ich aber nur im valueFormat.

Zitat2021.02.04 08:47:44 1: PERL WARNING: Argument "18.2M-BM-0C" isn't numeric in division (/) at (eval 1434854) line 1.
=> keine Ahnung woher M-BM-0C kommt. °C?

2021.02.04 08:47:44 1: PERL WARNING: Argument "47 %" isn't numeric in division (/) at (eval 1434857) line 1.

2021.02.04 08:48:13 1: PERL WARNING: Argument "55 %" isn't numeric in division (/) at (eval 1435008) line 1.

Hat jemand eine Idee, woher die Warnung kommt? Sie tut zwar nicht weh, müllt mir aber mein Log massiv zu.

Vielen Dank,

Roland


Anbei einmal ein Beispiel.

Device ist ein Sensor für Temperatur und Luftfeuchte mit dem Namen MYSENSOR_105.
Definition des Devices:
defmod MYSENSOR_105 MYSENSORS_DEVICE 105
attr MYSENSOR_105 DbLogExclude .*
attr MYSENSOR_105 DbLogInclude temperature1,humidity2,pressure,voltage3
attr MYSENSOR_105 IODev MySensor_LAN_GW
attr MYSENSOR_105 alias Flur
attr MYSENSOR_105 mapReading_current3 3 current
attr MYSENSOR_105 mapReading_forecast 0 forecast
attr MYSENSOR_105 mapReading_humidity2 2 humidity
attr MYSENSOR_105 mapReading_id1 1 id
attr MYSENSOR_105 mapReading_impedance3 3 impedance
attr MYSENSOR_105 mapReading_pressure 0 pressure
attr MYSENSOR_105 mapReading_temperature1 1 temperature
attr MYSENSOR_105 mapReading_voltage3 3 voltage
attr MYSENSOR_105 mode node
attr MYSENSOR_105 room MySensors
attr MYSENSOR_105 stateFormat temperature1 °C | humidity2 % | pressure hPa | Bat: voltage3 mV

setstate MYSENSOR_105 18.2 °C | 43.4 % | 1012.14 hPa | Bat: 2870.00 mV
setstate MYSENSOR_105 2019-07-28 13:41:37 BL_VERSION 1.2
setstate MYSENSOR_105 2019-07-28 13:41:37 FW_BLOCKS 800
setstate MYSENSOR_105 2019-07-28 13:41:37 FW_CRC 33534
setstate MYSENSOR_105 2021-01-24 21:59:30 SKETCH_NAME BME280 Raumsensor OTA
setstate MYSENSOR_105 2021-01-24 21:59:30 SKETCH_VERSION 3
setstate MYSENSOR_105 2021-01-24 22:02:00 bat_wechsel 24-01-2021
setstate MYSENSOR_105 2021-02-04 17:19:48 humidity2 43.4
setstate MYSENSOR_105 2021-01-24 21:57:07 parentId 0
setstate MYSENSOR_105 2021-02-04 17:14:34 pressure 1012.14
setstate MYSENSOR_105 2021-01-24 21:59:30 state received presentation
setstate MYSENSOR_105 2021-02-04 17:19:48 temperature1 18.2
setstate MYSENSOR_105 2021-02-04 16:58:53 voltage3 2870.00


Auszug aus dem log (Verbose 5 und Stacktrace 1):
Zitat2021.02.04 08:47:44 5: Starting notify loop for MYSENSOR_105, 1 event(s), first is temperature1: 18.2
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> ###              start of new Logcycle                       ###
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> number of events received: 1 for device: MYSENSOR_105
2021.02.04 08:47:44 4: DbLog DBLogging -> check Device: MYSENSOR_105 , Event: temperature1: 18.2
2021.02.04 08:47:44 5: DbLog DBLogging -> parsed Event: MYSENSOR_105 , Event: temperature1: 18.2
2021.02.04 08:47:44 5: DbLog DBLogging -> DbLogExclude of "MYSENSOR_105": .*
2021.02.04 08:47:44 5: DbLog DBLogging -> DbLogInclude of "MYSENSOR_105": temperature1,humidity2,pressure,voltage3
2021.02.04 08:47:44 4: DbLog DBLogging -> added event - Timestamp: 2021-02-04 08:47:44, Device: MYSENSOR_105, Type: MYSENSORS_DEVICE, Event: temperature1: 18.2, Reading: temperature1, Value: 18.2, Unit: °C
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> ###         New database processing cycle - synchronous      ###
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> DbLogType is: Current/History
2021.02.04 08:47:44 4: DbLog DBLogging -> AutoCommit mode: ON, Transaction mode: ON
2021.02.04 08:47:44 4: DbLog DBLogging -> Insert mode: Array
2021.02.04 08:47:44 4: DbLog DBLogging -> Primary Key used in history: none
2021.02.04 08:47:44 4: DbLog DBLogging -> Primary Key used in current: none
2021.02.04 08:47:44 4: DbLog DBLogging -> processing event Timestamp: 2021-02-04 08:47:44, Device: MYSENSOR_105, Type: MYSENSORS_DEVICE, Event: temperature1: 18.2, Reading: temperature1, Value: 18.2, Unit: °C
2021.02.04 08:47:44 4: DbLog DBLogging -> 1 of 1 events inserted into table history
2021.02.04 08:47:44 4: DbLog DBLogging -> insert table history committed by autocommit
2021.02.04 08:47:44 4: DbLog DBLogging -> 1 of 1 events updated in table current
2021.02.04 08:47:44 4: DbLog DBLogging -> insert / update table current committed by autocommit
2021.02.04 08:47:44 1: PERL WARNING: Argument "18.2M-BM-0C" isn't numeric in division (/) at (eval 1434854) line 1.
2021.02.04 08:47:44 1: stacktrace:
2021.02.04 08:47:44 1:     main::__ANON__                      called by (eval 1434854) (1)
2021.02.04 08:47:44 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (291)
2021.02.04 08:47:44 1:     main::lookup                        called by ./FHEM/33_readingsGroup.pm (1464)
2021.02.04 08:47:44 1:     main::readingsGroup_Notify          called by fhem.pl (3818)
2021.02.04 08:47:44 1:     main::CallFn                        called by fhem.pl (3735)
2021.02.04 08:47:44 1:     main::DoTrigger                     called by fhem.pl (4820)
2021.02.04 08:47:44 1:     main::readingsEndUpdate             called by ./FHEM/10_MYSENSORS_DEVICE.pm (866)
2021.02.04 08:47:44 1:     MYSENSORS::DEVICE::onSetMessage     called by ./FHEM/00_MYSENSORS.pm (651)
2021.02.04 08:47:44 1:     MYSENSORS::onSetMsg                 called by ./FHEM/00_MYSENSORS.pm (614)
2021.02.04 08:47:44 1:     MYSENSORS::Read                     called by fhem.pl (3818)
2021.02.04 08:47:44 1:     main::CallFn                        called by fhem.pl (759)
2021.02.04 08:47:44 5: Starting notify loop for Heizung_OG_3, 1 event(s), first is MYSENSOR_105.temperature1: <html><div style="font-size:28px;color:rgb(144,176,214);margin-top:5px;">18.2°C</div></html>
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> ###              start of new Logcycle                       ###
2021.02.04 08:47:44 4: DbLog DBLogging -> ################################################################
2021.02.04 08:47:44 4: DbLog DBLogging -> number of events received: 1 for device: Heizung_OG_3
2021.02.04 08:47:44 4: DbLog DBLogging -> check Device: Heizung_OG_3 , Event: MYSENSOR_105.temperature1: <html><div style="font-size:28px;color:rgb(144,176,214);margin-top:5px;">18.2°C</div></html>
2021.02.04 08:47:44 5: DbLog DBLogging -> parsed Event: Heizung_OG_3 , Event: MYSENSOR_105.temperature1: <html><div style="font-size:28px;color:rgb(144,176,214);margin-top:5px;">18.2°C</div></html>
2021.02.04 08:47:44 5: DbLog DBLogging -> DbLogExclude of "Heizung_OG_3": .*
2021.02.04 08:47:44 5: End notify loop for Heizung_OG_3
2021.02.04 08:47:44 5: Cmd: >setreading debug float 18.2<
2021.02.04 08:47:44 5: Starting notify loop for debug, 1 event(s), first is float: 18.2

Definition der ReadingsGroup:
defmod Heizung_OG_3 readingsGroup Thermostat_OG_SZ_Zig:<Schlafzimmer>,temperature@Xiaomi_T_SZ,humidity@Xiaomi_H_SZ,heatsetpoint,valve,batteryPercent\
Thermostat_OG_KZ_Zig:<Kinderzimmer>,temperature@Xiaomi_T_1,humidity@Xiaomi_H_1,heatsetpoint,valve,batteryPercent\
MAX_OG_Kueche:<Küche>,temperature@Xiaomi_T_Kueche_OG,humidity@Xiaomi_H_Kueche_OG,desiredTemperature,valveposition,battery\
MAX_OG_Bad:<Bad>,temperature@Xiaomi_T_Bad,humidity@Xiaomi_H_Bad,desiredTemperature,valveposition,battery\
MAX_OG_Esszimmer:<Esszimmer>,temperature@Xiaomi_T_Esszimmer,humidity@Xiaomi_H_Esszimmer,desiredTemperature,valveposition,battery\
MAX_OG_Flur:<Flur>,temperature1@MYSENSOR_105,humidity2@MYSENSOR_105,desiredTemperature,valveposition,battery\

attr Heizung_OG_3 DbLogExclude .*
attr Heizung_OG_3 alias HEIZUNG OBERGESCHOSS
attr Heizung_OG_3 alwaysTrigger 1
attr Heizung_OG_3 commands { desiredTemperature => "desiredTemperature:slider,15,1,26",\
  heatsetpoint => "heatsetpoint:slider,15,1,26"}
attr Heizung_OG_3 fp_fp_Heizung 148,165,0,Heizung_OG_3,
attr Heizung_OG_3 fp_fp_Obergeschoss 148,140,0,Heizung_OG_3
attr Heizung_OG_3 fp_testfp 191,967,0,Heizung_OG_2,
attr Heizung_OG_3 group 0-Heizungswerte
attr Heizung_OG_3 nonames 1
attr Heizung_OG_3 room Floorplan->OG
attr Heizung_OG_3 valueFormat { valveposition => '%.0f %' , valve => '%.0f %' ,temperature => '%.1f°C', temperature1 => '%.1f°C', humidity => '%.0f %' ,humidity2 => '%.0f %' }
attr Heizung_OG_3 valueIcon {'battery.ok' => 'battery_100' , 'battery.low' => 'bat_25' ,\
'batteryPercent' => 'battery_'.sprintf("%.0f",($VALUE)/10).'0'}
attr Heizung_OG_3 valueStyle { if($READING eq "temperature" && $VALUE gt "25") { 'style="font-size:28px;;color:rgb(140,67,137);;margin-top:5px;;"' }\
elsif($READING eq "temperature" && $VALUE lt "16") { 'style="font-size:28px;;color:rgb(64,102,178);;margin-top:5px;;"' }\
elsif($READING eq "temperature" && $VALUE ge "16" && $VALUE le "25") { 'style="font-size:28px;;color:rgb(144,176,214);;margin-top:0px;;"' }\
\
elsif($READING eq "temperature1" && $VALUE gt "25") { 'style="font-size:28px;;color:rgb(140,67,137);;margin-top:5px;;"' }\
elsif($READING eq "temperature1" && $VALUE lt "16") { 'style="font-size:28px;;color:rgb(64,102,178);;margin-top:5px;;"' }\
elsif($READING eq "temperature1" && $VALUE ge "16" && $VALUE le "25") { 'style="font-size:28px;;color:rgb(144,176,214);;margin-top:5px;;"' }\
\
elsif ($READING eq "valveposition") { 'style="font-size:22px;;color:rgb(144,176,214);;margin-top:5px;;"' }\
elsif ($READING eq "valve") { 'style="font-size:22px;;color:rgb(144,176,214);;margin-top:5px;;"' }\
\
elsif ($READING eq "humidity")  { 'style="font-size:20px;;color:rgb(144,176,214);;margin-top:5px;;"' }\
elsif ($READING eq "humidity2") { 'style="font-size:20px;;color:rgb(144,176,214);;margin-top:5px;;"' }\
}
attr Heizung_OG_3 verbose 5

Bubbles71

*** UPDATE === PROBLEM GELÖST ***
Ich konnte die Ursache der Perl Warning heute finden und wollte die Lösung dokumentieren.

Die Fehlermeldung wird durch das valueFormat ausgelöst.
{ valveposition => "%.0f %%" , valve => "%.0f %%" ,temperature => "%.1f &deg;C", humidity => "%.0f %%" }

Zitat2021.02.12 17:50:46 1: PERL WARNING: Argument "19.1 °C" isn't numeric in division (/) at (eval 4918373) line 1.
2021.02.12 17:50:46 1: PERL WARNING: Argument "25 %" isn't numeric in division (/) at (eval 4918375) line 1.
2021.02.12 17:50:46 1: PERL WARNING: Argument "8 %" isn't numeric in division (/) at (eval 4918379) line 1.

Um die Perl Warnings zu vermeiden, muss man im valueFormat die Einheiten weglassen und diese dann über valueSuffix ergänzen.
Warum? Keine Ahnung, aber so verschwinden die Perl Warnings.

attr valueFormat { valveposition => "%.0f" , valve => "%.0f" ,temperature => "%.1f ", humidity => "%.0f" }
attr valueSuffix { valveposition => " %" , valve => " %" ,temperature => "°C", humidity => " %" }




Vielen Dank,

Roland

Bubbles71

Hallo,

ich habe das obige Thema mal in dieses Thema verschoben. Vielleicht kann mir hier jemand mit den PERL WARNINGs helfen.
Durch die Warnungen habe ich jeden Monat ein Log von mehreren MB.

Vielen Dank,

Roland

frank

die meldungen
Zitatisn't numeric in division (/)
kann nicht durch attr valueFormat kommen, da du dort keine division hast.

aber zb gibt es eine divisio in attr valueIcon für batteryPercent.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Bubbles71

Hallo Frank,

danke, das erklärt eine der Fehlerquellen. Bei Daten wie Temperatur oder Luftfeuchte rechne ich aber nicht in den Definitionen.

Sobald ich das valueFormat lösche, entfallen die Fehlermeldungen.

Wie geht FHEM eigentlich mit valueFormat um? Bisher ging ich davon aus, dass lediglich die Ausgabe angepasst wird, also z.B. ein % Zeichen angehängt wird. Die eigentliche Variable bleibt aber unverändert.
Oder greift das ValueFormat auch, wenn ich z.B. in der 99myUtil per ReadingsVal oder ReadingsNum Werte übernehme?

LG,

Roland

Beta-User

#5
Zitat von: Bubbles71 am 27 August 2021, 11:42:21
Wie geht FHEM eigentlich mit valueFormat um?
Das ist ein readingsGroup-Attribut. Daher ist die Frage vermutlich besser so gestellt: Wie wertet der readingsGroup-Code dann diese Angaben aus bzw. gibt sie an (u.A.) fhem.pl weiter? Ohne das im Modulcode nachgeschaut zu haben, würde ich mal unterstellen, dass das Attribut sich nur innerhalb der readingsGroup auswirkt und daher einfach durch die rG auf nicht-Nummerische Werte zurückgegriffen wird. (Gab es da nicht "Schalter", um ggf. nur den nummerischen Wert aus den betr. Readings für die rG zu berücksichtigen? EDIT, cref sagt:
ZitatThe suffix :d retrieves the first number.
)

Vermutlich würde es helfen, wenn du "stacktrace" (global) aktivierst, dann kann man die Kette der Funktionsaufrufe besser nachvollziehen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frank

die readingsgroup erzeugt ja ggf auch events.
diese events sind dann sicherlich entsprechend valueformat entsprechend formatiert.

eventuell gibt es weitere devices (zb notify, doif), die von diesen readingsgroup events getriggert werden, und die meldungen verursachen.
das würde zumindestens erklären, dass ein gelöschtes valueformat die meldungen verhindert.

hast du eventuell dieses attr eingeschaltet?
ZitatalwaysTrigger
1 -> alwaysTrigger update events. even if not visible.
2 -> trigger events for calculated values.

neben stacktrace, würde ich auch mal im eventmonitor schauen. mit eingeschalteter fhem.log option.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Bubbles71

Hallo,

Euren beiden Tips muss ich mal nachgehen. Mit stacktrace wurde ich nicht wirklich schlauer.

Die Events in der RG könnten der Auslöser sein. In der myUtils habe ich verschiedenen Kalkulationen, welche die Ausgabe anpassen und z.B. Teil Werteabhängige SVG Grafiken erzeugen.

Ggf. muss ich Values doppeln, einmal für die Zahlenmäßige Ausgabe mit valueFormat und einmal für die Berechnungen in den Grafiken.

Das machen ich dann mal nach meinem Urlaub.  ;)

Vielen Dank,

Roland

shamal2008

Hallo zusammen,

da mich die Suchfunktion hierher geführt hat, hänge ich mich an dem Thread an. Ich habe ein ganz ähnliches Problem und Stacktrace hat mich auf die Spur meiner Heizungs-Readingsgroups gebracht.

Ich weiß auch schon, "wo" der Fehler liegt, bekomme ihn allerdings nicht weg. Offenbar reagiert Fhem auf den valuestyle "else" in der RG nicht (mehr - das haben sie sicher bis im Frühjahr, seitdem waren die RGs deaktiviert und ich habe jetzt auf HmIP umgestellt).
Die RG eines Zimmers:
<%sani_heating>,<Mode>,<Wunsch>,<Soll>,<Ist>,<Dev>,<Feuchte>,<Ventil>,<Fenster>,<Batterie>
grp.hz.wz:mode,<sollsetz>,desired-temp,measured-temp,deviation,humidity,<>,<>,battery
hm.hz.ve.wz.1:mode,<>,desired-temp,measured-temp,deviation,<>,valveposition,state@sen.win.fx.links,battery
hm.hz.ve.wz.2:mode,<>,desired-temp,measured-temp,deviation,<>,valveposition,state@sen.win.fx.rechts,battery


Hier mal ein List des Valuestyles - die prinzipiell sehr gut funktionieren:

{if($READING eq "deviation" && $VALUE > 1.5) {'style="color:red"'}
elsif ($READING eq "deviation" && $VALUE <= -1.5) {'style="color:blue"'}
elsif ($READING eq "deviation" && $VALUE >= -1.5 || $VALUE <= 1.5) {'style="color:green"'}
elsif ($READING eq "humidity" && $VALUE >= 45 || $VALUE <= 55) {'style="color:green"'}
elsif ($READING eq "humidity" && $VALUE > 56 ) {'style="color:red"'}
elsif ($READING eq "humidity" && $VALUE < 44 ) {'style="color:blue"'}
else {'style="color:black"'} }


Kann mir bitte irgendwer sagen, das Teil auf das "else" nicht mehr reagiert? - Die Fehlermeldung im Log lautet:

2021.11.01 19:28:21 1:  PERL WARNING: Argument "ok" isn't numeric in numeric le (<=) at (eval 2642727) line 3.
2021.11.01 19:28:22 1:  PERL WARNING: Argument "ok" isn't numeric in numeric le (<=) at (eval 2642742) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "manual" isn't numeric in numeric le (<=) at (eval 2642768) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "ok" isn't numeric in numeric le (<=) at (eval 2642784) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "manual" isn't numeric in numeric le (<=) at (eval 2642787) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "closed" isn't numeric in numeric le (<=) at (eval 2642804) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "ok" isn't numeric in numeric le (<=) at (eval 2642807) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "manual" isn't numeric in numeric le (<=) at (eval 2642810) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "closed" isn't numeric in numeric le (<=) at (eval 2642827) line 3.
2021.11.01 19:28:30 1:  PERL WARNING: Argument "ok" isn't numeric in numeric le (<=) at (eval 2642830) line 3.


Die angemeckerten Werte kommen vom Mode und dem Fensterstatus, sowie der Batterie in der RG.

Danke euch,
lg Shamal
FHEM auf RasPiI 3+, MapleCUL 868+433MhZ, MAX! via CUL, LD686 LED-Controller, GHoma Plugins,, Shelly, ConbeeII + IKEA + Xiaomi, div. Infodienste & Google Assistant via FHEM;

frober

Bist du dir sicher mit der Ursache? Bei stacktrace ist der erste Eintrag im Log interessant.
Poste mal den komplette Abschnitt des Logs.

Das sind keine Lists was du postest, da ist es schwierig, etwas zu erkennen.
Poste ein List oder die RAW-Def. der Devices.
 
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

shamal2008

Hallo frober,

danke, dass du dich dem annimmst.

Ich habe es mittlerweile so gelöst, dass die Werte, die FHEM beanstandet zuerst in der IF Abfrage einzeln abgefragt und schwarzer Schrift versehen werden, dann kommen die Farbattribute. Ist nicht elegant und effizient, aber wenn else nicht funktioniert, habe ich zumindest einen Workaround und keine Fehler mehr.

Es lag definitiv am Valuestyle.

{ if ($READING eq "mode" || $READING eq "battery" || $READING eq "state") {'style="color:black"'}
elsif($READING eq "deviation" && $VALUE > 1.5) {'style="color:red"'}
elsif ($READING eq "deviation" && $VALUE <= -1.5) {'style="color:blue"'}
elsif ($READING eq "deviation" && $VALUE >= -1.5 || $VALUE <= 1.5) {'style="color:green"'}
elsif ($READING eq "humidity" && $VALUE >= 45 || $VALUE <= 55) {'style="color:green"'}
elsif ($READING eq "humidity" && $VALUE > 56 ) {'style="color:red"'}
elsif ($READING eq "humidity" && $VALUE < 44 ) {'style="color:blue"'}
}


FHEM auf RasPiI 3+, MapleCUL 868+433MhZ, MAX! via CUL, LD686 LED-Controller, GHoma Plugins,, Shelly, ConbeeII + IKEA + Xiaomi, div. Infodienste & Google Assistant via FHEM;