Logfile voller Perl-Warnungen

Begonnen von speedschmidt, 13 Mai 2016, 20:45:47

Vorheriges Thema - Nächstes Thema

speedschmidt

Servus,

ich würde sagen seit dem letzten Update um den Anfang Mai füllt sich mein Logfile mit folgenden Meldungen:


2016.05.10 13:09:33 1: PERL WARNING: Argument "23.10 °C °C" isn't numeric in numeric gt (>) at (eval 244373) line 1.
2016.05.10 13:09:33 1: PERL WARNING: Argument "11581.44 lux" isn't numeric in numeric gt (>) at (eval 244373) line 1.
2016.05.10 13:09:55 1: PERL WARNING: Argument "21.50 °C" isn't numeric in numeric gt (>) at (eval 244374) line 1.
2016.05.10 13:09:55 1: PERL WARNING: Argument "23.10 °C °C" isn't numeric in numeric gt (>) at (eval 244374) line 1.
2016.05.10 13:09:55 1: PERL WARNING: Argument "11581.44 lux" isn't numeric in numeric gt (>) at (eval 244374) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "21.40 °C" isn't numeric in numeric gt (>) at (eval 244375) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "25.60 °C" isn't numeric in numeric gt (>) at (eval 244375) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "11704.32 lux" isn't numeric in numeric gt (>) at (eval 244375) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "21.40 °C" isn't numeric in numeric gt (>) at (eval 244376) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "23.10 °C °C" isn't numeric in numeric gt (>) at (eval 244376) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "11581.44 lux" isn't numeric in numeric gt (>) at (eval 244376) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "21.40 °C" isn't numeric in numeric gt (>) at (eval 244377) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "25.60 °C" isn't numeric in numeric gt (>) at (eval 244377) line 1.
2016.05.10 13:10:08 1: PERL WARNING: Argument "11919.36 lux" isn't numeric in numeric gt (>) at (eval 244377) line 1.


Könnt ihr mir bitte helfen, dies zu interpretieren und evtl. eine Lösung - sprich Abschaffung zu erzeugen. Liegt das evtl. am Punkt statt am Komma??

Danke schon mal im voraus

Schmitti

Frank Hell

"°C" und "lux" sind logischerweise nicht numerisch.

BTW: Falsches (Unter-)Forum, oder?

Puschel74

Zitat von: Frank Hell am 13 Mai 2016, 21:09:37
BTW: Falsches (Unter-)Forum, oder?
Und auch falscher "Webshop" - Perl != Pearl

Vermutlich wird irgendwo mit RadingsVal anstelle von ReadingsNum gearbeitet.
Aber das wurde bereits des öfteren (aber wohl noch nicht oft genug) im Forum behandelt.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

speedschmidt

High zusammen,

an "pearl" kann jeder meinen Ausbildungstand zum Thema ablesen - ist doch ganz praktisch, oder?

Aber mal im Ernst: Die readings kommen via KNXD und upgedatetem 10_knx.pm rein und dort müssen/können per define die Datenpunkttypen angegeben werden. Und da ich es richtig machen wollte habe ich halt dpt9.004 (lux) statt dpt9 (sehr unspezifisch und ohne Einheit) angegeben. Ich frage die Werte (wohl diese um die es hier geht, muss ich nochmal genau prüfen) per DOIF ab:


define BeschattungSZ DOIF ([08:00-14:00] and [SZHeizen] eq "off" and [Aussentemperatur] > 15 and [SZIstTemperatur] > 24 and [AussenhelligkeitOst] > 23000) (set SZSonnenschutz on) DOELSE (set SZSonnenschutz off)


Sollte ich hier etwas anpassen? Die DOIFs funktionieren einwandfrei. Da es mit einem Update der 10_knx.pm zu tun hat, dachte ich schon, dass das hier reinpasst?

Schmitti

igami

Steht im reading dann auch lux oder nur im STATE? Du kannst bei DOIF auf numerische Ausdrücke Filtern, ist dann vergleichbar zu ReadingsNum, nur dass man in der Syntax von DOIF bleibt.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Andi291

Servus!

Bei Verwendung des Modul KNX steht lux nur im state, nicht im Reading. Beim Modul EIB ist dem nicht so...

Grüße, Andi

speedschmidt

Servus Andi,

wenn nur numerische Werte im Reading auftauchen (sollten), weshalb bekomme ich dann diese Fehlermedungen? Die entsprechenden Devices haben keine weiteren Attribute (z.Bsp. Stateformat etc., lediglich room ist als Attrribut enthalten). Kann hier am iPad leider kein Auszug der fhem.cfg liefern.

Welche module - ausser DOIF - können diese Fehlermeldungen noch erzeugen?

Schmitti

speedschmidt

Servus nochmal,

ich versuche jetzt mal:

...[Aussentemperatur] > 15.0......
und
...[Aussentempertaur] > 15.0 ºC....

melde mich wenn ich Ergebnisse habe.

Schmitti

speedschmidt

Servus Andi,

auf list Aussentemperatur bekomme ich u.a. im Reading:

2016-05-15 14:10:38   getG1           7.60 °C

Mit "°C" nicht nur numerisch oder verstehe/interpretiere ich etwas falsch?

Ich teste nochmal mit ReadingsNum.

Schmitti

Andi291

Abend!

Du hast teilweise recht. Im Log steht state, und state enthält auch die Einheit.

Spiel mal damit rum:
define Notify_licht_kueche_tisch_off notify licht_kueche_tisch:dimmwert-set:.0.* {fhem ("set licht_kueche_tisch off g2") if (not(ReadingsVal("licht_kueche_tisch", "status-get", "") =~ m/off/))}


Grüße, Andi

speedschmidt

Servus,

igami's Vorschlag folgend habe ich

...[Aussentemperatur] > 15 ....

in

...[Aussentemperatur:d] > 15 ....

geändert und das Logfile hat sich beruhigt. Natürlich auch bei den anderen "analogen" Abfragen die eine Einheit enthalten.

Ich verstehe das so (klärt mich bitte auf wenn ich falsch liege):
Früher bei EIB (10_EIB.pm) war im Reading nur der numerische Wert und per Attr stateFormat wurde die Einheit hinzugefügt. Jetzt bei KNX (10_KNX.pm) ist per dpt-Zuweisung im define die Einheit Bestandteil  des Readings und ich erhalte diese Fehlermeldung. Unklar ist mir weshalb ich nun den numerischen Teil herausfiltern muss und früher nicht??

Vielleicht hilft euch dies hier noch:

Internals:
   DEF        ([08:00-13:00] and [OGBadHeizen] eq "off" and [Aussentemperatur:d] > 15 and [OGBadIstTemperatur:d] > 24 and [Aussenhelligkeit:d] > 23000) (set OGBadSonnenschutz on) DOELSE (set OGBadSonnenschutz off)
   NAME       BeschattungOGBad
   NR         678
   NTFY_ORDER 50-BeschattungOGBad
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-05-15 21:41:48   Device          Aussenhelligkeit
     2016-05-15 15:23:22   cmd             2
     2016-05-15 15:23:22   cmd_event       Aussentemperatur
     2016-05-15 15:23:22   cmd_nr          2
     2016-05-15 21:41:48   e_Aussenhelligkeit_d 0
     2016-05-15 21:41:46   e_Aussentemperatur_d 0
     2016-05-15 21:34:49   e_OGBadHeizen_STATE on
     2016-05-15 21:39:49   e_OGBadIstTemperatur_d 0
     2016-05-15 15:23:22   state           cmd_2
     2016-05-15 15:42:17   timer_1_c1      16.05.2016 08:00:00
     2016-05-15 15:42:17   timer_2_c1      16.05.2016 13:00:00
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf($hash,'OGBadHeizen','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off" and ReadingValDoIf($hash,'Aussentemperatur','d','','',AttrVal($hash->{NAME},'notexist',undef)) > 15 and ReadingValDoIf($hash,'OGBadIstTemperatur','d','','',AttrVal($hash->{NAME},'notexist',undef)) > 24 and ReadingValDoIf($hash,'Aussenhelligkeit','d','','',AttrVal($hash->{NAME},'notexist',undef)) > 23000
   Days:
   Devices:
     0           OGBadHeizen Aussentemperatur OGBadIstTemperatur Aussenhelligkeit
     all         OGBadHeizen Aussentemperatur OGBadIstTemperatur Aussenhelligkeit
   Do:
     0:
       0          set OGBadSonnenschutz on
     1:
       0          set OGBadSonnenschutz off
   Helper:
     event      getG1: 1.00 lux,last-sender: 1/3/10,1.00 lux
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Aussenhelligkeit
     timerevent getG1: 1.00 lux,last-sender: 1/3/10,1.00 lux
     triggerDev Aussenhelligkeit
     timerevents:
       getG1: 1.00 lux
       last-sender: 1/3/10
       1.00 lux
     timereventsState:
       getG1: 1.00 lux
       last-sender: 1/3/10
       state: 1.00 lux
     triggerEvents:
       getG1: 1.00 lux
       last-sender: 1/3/10
       1.00 lux
     triggerEventsState:
       getG1: 1.00 lux
       last-sender: 1/3/10
       state: 1.00 lux
   Internals:
     0           OGBadHeizen:STATE
     all         OGBadHeizen:STATE
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1463378400
     1          1463396400
   Readings:
     0           Aussentemperatur:d OGBadIstTemperatur:d Aussenhelligkeit:d
     all         Aussentemperatur:d OGBadIstTemperatur:d Aussenhelligkeit:d
   Realtime:
     0          08:00:00
     1          13:00:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          08:00:00
     1          13:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Trigger:
   Triggertime:
     1463378400:
       localtime  1463378400
       Hash:
     1463396400:
       localtime  1463396400
       Hash:
Attributes:
   room       Sonnenschutz


Schmitti

Andi291

Nein, ist nicht richtig.

FHEM bietet grundsätzlich die Möglichkeit Reading / Wert / Einheit getrennt zu behandeln. Das ist insbesondere für DBLog wichtig. Beim KNX ist alles richtig umgesetzt, der EIB ist gewachsen.
Bei Beiden Modulen wird die Einheit einfach hinten an den Wert als String heran gehangen.

Der Ansatz, die Einheiten per Regex wegzusägen, ist genau der richtige...

speedschmidt

Servus,

Besten Dank Andi und igami

Schmitti

speedschmidt

Servus nochmal

ich muss das nochmal hochholen, da ich festgestellt habe, dass die DOIF' s nicht funktionieren mit

...[Aussentemperatur:d] > 15...

in der Abfrage.

Das man ReadingsVal durch ReadingsNum ersetzen soll ist mir inzwischen klar. Muss man dazu von der "fhem"-Syntax in die "perl"-Syntax wechseln {mit geschweiften Klammern}. Ich hatte recherchiert in Commandref und forum, dass das mit dem angehängten ":d" klappen sollte????? Tut es aber nicht....

Also Ohne ":d" funktionieren die DOIF' s, aber das logfile wird vollgemüllt mit o.g. Fehlern. Mit ":d" funktionieren die DOIF' s nicht mehr, da die angesprochenen Readings (Temperatur und Helligkeit) alle auf "0" stehen.

Für Eure konstruktive Hilfe bedanke ich mich wie immer schon im voraus

Schmitti

Andi291

Servus!

Poste doch bitte die komplette Zeile. Und vielleicht auch eine, die funktioniert. Dann fällt mir das eindenken leichter :-)

Grüße, Andi