Hauptmenü

Syntaxfehler / Perl

Begonnen von RitterSport, 09 März 2016, 10:58:48

Vorheriges Thema - Nächstes Thema

RitterSport

Das unten aufgeführte Notify lief monatelang problemlos, jetzt gibt er mir seit ein paar Tagen (Update?) laufend Fehler im Log aus.
Funktionieren tut es, habe ich irgendwo einen Syntaxfehler??

Sensor23:temperature:.* {
my $inttmp = ReadingsVal("Sensor23", "temperature", 0) - ReadingsVal("Sensor22", "temperature", 0);

fhem "set Solarthermie_Differenz $inttmp";

}


Der hinterlegte Fehler:

2016.03.09 10:50:51 1: PERL WARNING: Argument "4.81 M-BM-0C" isn't numeric in numeric lt (<) at (eval 4898326) line 1.
2016.03.09 10:50:51 3: eval: my $EVTPART0='temperature:';my $TYPE='cloneDummy';my $SELF='Solarthermie_Differenz_Eintragung';my $EVTPART1='34.9375';my $EVENT='temperature: 34.9375';my $NAME='Sensor23';{
my $inttmp = ReadingsVal("Sensor23", "temperature", 0) - ReadingsVal("Sensor22", "temperature", 0);

fhem "set Solarthermie_Differenz $inttmp";


Kann mir jemand auf die Sprünge helfen?
Danke

HansDampfHH


"4.81 M-BM-0C" isn't numeric in numeric lt (<)


Es wird zurecht bemängelt, dass "4.81 M-BM-0C" keine Zahl ist.
So wie ich das sehe entsteht das Problem bei dem Operator < und somit eventuell an einer anderen Stelle?
In dem notify sehe ich keine solche Stelle...
FHEM Docker, CUL868, Zigbee, CCU2, Jeelink

RitterSport

#2
Habe mir den Log angesehen und dies tritt erst auf seit dem letzten Update von mir am 02.03. auf.
In keinem der betroffenen Sensoren ist im Logfile dieses ominöse M-BM-0C zu finden.

Loglevel5:

}<
2016.03.09 14:14:53 5: Cmd: >set Solarthermie_Differenz 6.625<
2016.03.09 14:14:53 4: dummy set Solarthermie_Differenz 6.625
2016.03.09 14:14:53 5: Triggering Solarthermie_Differenz (1 changes)
2016.03.09 14:14:53 5: Notify loop for Solarthermie_Differenz 6.625
2016.03.09 14:14:53 1: PERL WARNING: Argument "6.62 M-BM-0C" isn't numeric in numeric lt (<) at (eval 5266875) line 1.
2016.03.09 14:14:53 3: eval: my $EVTPART0='temperature:';my $TYPE='cloneDummy';my $SELF='Solarthermie_Differenz_Eintragung';my $EVTPART1='63.0625';my $EVENT='temperature: 63.0625';my $NAME='Sensor23';{
my $inttmp = ReadingsVal("Sensor23", "temperature", 0) - ReadingsVal("Sensor22", "temperature", 0);

fhem "set Solarthermie_Differenz $inttmp";

Wenn ich die anderen meiner Sensoren in das Notify eintrage, bekomme ich den gleichen Fehler: auch wenn diese Sensoren ganz anderen Typs sind.
Egal ob OWDevice, Cul-EM. LaCrosse oder Werte aus einem Dummy.

Wie kann ich das weiterhin finden?

betateilchen

Lustig, im Juli letzten Jahres gab es schonmal so eine Meldung...

https://forum.fhem.de/index.php/topic,38804.0.html

Auf einen Fehler im notify tippe ich nicht - ich vermute eher, dass Du irgendwo mit average oder einer Summenbildung arbeitest, deren Berechnung NACH dem Setzen des Wertes 6.625 in den Dummy getriggert wird. Darauf deutet jedenfalls Dein Logfile hin.


2016.03.09 14:14:53 4: dummy set Solarthermie_Differenz 6.625
2016.03.09 14:14:53 5: Triggering Solarthermie_Differenz (1 changes)
2016.03.09 14:14:53 5: Notify loop for Solarthermie_Differenz 6.625


Das Setzen der Differenz erfolgt noch problemlos.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

RitterSport

Eigentlich recht simpel, die Werte kommen von einem 2. Raspi per Fhem2Fhem, sind dort von einem OWDevice.
Also kein Average oder keine Summenbildung meiner Meinung nach.
Im Eventmonitor tauchen diese anderen Zeichen auch nicht auf.

Könnte ich irgendwie vorher sicherstellen das die gelieferten Werte numerisch sind?

dev0

Du kannst auch ReadingsNum statt ReadingsVal verwenden...

betateilchen

Wird aber in diesem Fall nix nützen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

RitterSport

Fehler gefunden:

Ein DOIF hat auf den Dummy zugegriffen und sollte bei bei langer Zeit im negativen Wert eine Meldung ausgeben:
DOIF ([Solarthermie_Differenz] < -12)\

Geändert auf DOIF ([Solarthermie_Differenz:state] < -12)\