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
"°C" und "lux" sind logischerweise nicht numerisch.
BTW: Falsches (Unter-)Forum, oder?
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.
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
Steht im reading dann auch lux oder nur im STATE? Du kannst bei DOIF auf numerische Ausdrücke Filtern (http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen), ist dann vergleichbar zu ReadingsNum, nur dass man in der Syntax von DOIF bleibt.
Grüße
igami
Servus!
Bei Verwendung des Modul KNX steht lux nur im state, nicht im Reading. Beim Modul EIB ist dem nicht so...
Grüße, Andi
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
Servus nochmal,
ich versuche jetzt mal:
...[Aussentemperatur] > 15.0......
und
...[Aussentempertaur] > 15.0 ºC....
melde mich wenn ich Ergebnisse habe.
Schmitti
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
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
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
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...
Servus,
Besten Dank Andi und igami
Schmitti
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
Servus!
Poste doch bitte die komplette Zeile. Und vielleicht auch eine, die funktioniert. Dann fällt mir das eindenken leichter :-)
Grüße, Andi
Servus,
@Andi:
so funktioniert es, aber Fehlermeldungen im Logfile:
define BeschattungSZ DOIF ([08:00-14:00] and [SZHeizen] eq "off" and [Aussentemperatur] > 15 and [SZIstTemperatur] > 23 and [AussenhelligkeitOst] > 60000) (set SZSonnenschutzEin on) DOELSE (set SZSonnenschutzEin off)
Logfile:
2016.05.26 15:20:08 1: PERL WARNING: Argument "89702.40 lux" isn't numeric in numeric gt (>) at (eval 2748) line 1.
2016.05.26 15:20:08 1: PERL WARNING: Argument "28.10 °C" isn't numeric in numeric gt (>) at (eval 2751) line 1.
so funktioniert es nicht, dafür keine Fehlermeldungen:
define BeschattungSZ DOIF ([08:00-14:00] and [SZHeizen] eq "off" and [Aussentemperatur:d] > 15 and [SZIstTemperatur:d] > 23 and [AussenhelligkeitOst:d] > 60000) (set SZSonnenschutzEin on) DOELSE (set SZSonnenschutzEin off)
Schmitti
Servus!
Selbst hab ich keine Idee - aber Google :-)
Voraus gesetzt, die beiden Werte stammen von KNX-Geräte, versuchs mal so:
define BeschattungSZ DOIF ([08:00-14:00] and [SZHeizen] eq "off" and [Aussentemperatur:state:d] > 15) and [SZIstTemperatur] > 23 and [AussenhelligkeitOst:state:d] >60000) (set SZSonnenschutzEin on) DOELSE (set SZSonnenschutzEin off)
Grüße, Andi
Servus Andi,
bis auf die kleine Copy & Paste - Falle (Klammer hinter < 15) funktioniert es jetzt so wie du vorgeschlagen hast. Ich werd das auch gleich mal an AntonWinden weiterposten, der hängt/hing an einem ähnlichen Fall.
define BeschattungSZ DOIF ([08:00-14:00] and [SZHeizen] eq "off" and [Aussentemperatur:state:d] > 15 and [SZIstTemperatur:state:d] > 23 and [AussenhelligkeitOst:state:d] > 60000) (set SZSonnenschutzEin on) DOELSE (set SZSonnenschutzEin off)
Kann vielleicht mal jemand die Beispiele in der Commandref überarbeiten - diesbezüglich. Würde die Anzahl solcher Threats einschränken.
Aber mal ganz dumm gefragt: Was hast du genau bei Google(oder in der Forum-Suche) eingegeben um die Antwort zu finden??? Ich hatte nach "ReadingsVal" und "ReadingsNum" gesucht und bin auch fündig geworden, bin aber mit den dort geposteten Vorschlägen nicht ans Ziel gekommen. Naja waren eben auch "nur" ähnlichen Fälle.
Aber in jedem Fall kann man sich das jetzt merken... Besten Dank nochmal und - ich hoffe für dich auch - einen schönen Feiertag und schönes Wochenende.
Schmitti
Ich hab in der Forumssuche ein, zwei entsprechende alte Posts gefunden. In der Commandref stehen (ganz am Ende) einige Beispiele mit dieser Syntax. Ein Versuch war es Wert :-)
Schönen (sonnen-) tag noch.
Grüße, Andi