"PERL WARNING" Was ist an den unten stehende Code falsch?

Begonnen von jailbreaker07, 22 August 2017, 16:55:03

Vorheriges Thema - Nächstes Thema

jailbreaker07

Hallo,

leider finde ich nicht den Grund für die Perl Warnung in der Log Datei...

Der Code um den es sich handelt lautet:

Wandthermostat_Weather:temp.* {my $hum= (ReadingsNum("Wandthermostat_Weather","humidity",0));my $temp= (ReadingsNum("Wandthermostat_Weather","temperature",0));
fhem ("set AktFeuchSchl $hum") ;; fhem ("set AktTempSchl $temp")
}




Der Fehler:

2017.08.22 16:44:44 1: PERL WARNING: Missing argument in sprintf at (eval 299732) line 1.
2017.08.22 16:44:44 3: eval: my $EVTPART0='temperature:';my $EVTPART1='21.1';my $EVENT='temperature: 21.1';my $SELF='akt_TempHum_set';my $NAME='Wandthermostat_Weather';my $TYPE='CUL_HM';{my $hum= (ReadingsNum("Wandthermostat_Weather","humidity",0));my $temp= (ReadingsNum("Wandthermostat_Weather","temperature",0));
fhem ("set AktFeuchSchl $hum") ;; fhem ("set AktTempSchl $temp")
}
2017.08.22 16:44:44 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 299732) line 1.
2017.08.22 16:44:44 3: eval: my $EVTPART0='temperature:';my $EVTPART1='21.1';my $EVENT='temperature: 21.1';my $SELF='akt_TempHum_set';my $NAME='Wandthermostat_Weather';my $TYPE='CUL_HM';{my $hum= (ReadingsNum("Wandthermostat_Weather","humidity",0));my $temp= (ReadingsNum("Wandthermostat_Weather","temperature",0));
fhem ("set AktFeuchSchl $hum") ;; fhem ("set AktTempSchl $temp")
}

Die beiden Dummys werden jedoch wie gewünscht mit Werten versorgt....

Vielen dank

Gruß

Thorsten

amenomade

Hast Du stateFormat oder userReadings auf Wandthermostat_Weather? Poste mal ein "list" davon.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jailbreaker07

Hallo,

Keines von beidenhabe ich dort.

Hier das gewünschte List:

Internals:
   DEF        34D25F01
   NAME       Wandthermostat_Weather
   NOTIFYDEV  global
   NR         103
   NTFY_ORDER 50-Wandthermostat_Weather
   STATE      T: 20.8 H: 59
   TYPE       CUL_HM
   chanNo     01
   device     Wandthermostat
   Helper:
     Dblog:
       Dewpoint:
         Logdb:
           TIME       1503462737.77603
           VALUE      12.5
       Humidity:
         Logdb:
           TIME       1503462737.77603
           VALUE      59
       Temperature:
         Logdb:
           TIME       1503462737.77603
           VALUE      20.8
   Readings:
     2017-01-10 21:47:05   .peerListRDate  2017-01-10 21:47:05
     2017-01-10 21:47:20   R-sign          off
     2017-01-10 21:47:20   RegL_01.        08:00 00:00
     2017-08-23 06:32:17   dewpoint        12.5
     2017-08-23 06:32:17   humidity        59
     2017-08-23 06:32:17   state           T: 20.8 H: 59
     2017-08-23 06:32:17   temperature     20.8
   Helper:
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Role:
       chn        1
Attributes:
   DbLogInclude actuator,measured-temp,temperature,dewpoint,humidity
   group      Thermostat
   model      HM-TC-IT-WM-W-EU
   peerIDs    00000000,
   room       Heizung_Schl


Danke

Gruß

Thorsten

CoolTux

#3
Wieso jetzt genau Deine Meldung kommt kann ich nicht sagen. Aber versuche mal das ganze so zu machen. Musst schauen ob der EVTPART0 soweit passt.
Dein belastet ja FHEM doppelt mit der zusätzlichen Abfrage. Bei diesem Beispiel arbeitet Du nur mit dem was der EVENT Dir gibt.


Wandthermostat_Weather:(temperature|humidity):.* { fhem("set " . ($EVTPART0 eq 'temperature:' ? "AktTempSchl $EVTPART1" : "AktFeuchSchl $EVTPART1")) }




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jailbreaker07

Hallo,
den Code nimmt es so leider nicht...

Gruß

Thorsten

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: jailbreaker07 am 22 August 2017, 16:55:03
leider finde ich nicht den Grund für die Perl Warnung in der Log Datei...
Der Code um den es sich handelt lautet:

Um diesen zitierten Code handelt es sich mit Sicherheit nicht, wenn es darum geht, die Ursache für die Warnung zu finden.
In Deinem Code gibt es doch gar kein sprintf().

Ich würde als Erstes stacktrace aktivieren, dann bekommt man nützliche Zusatzinformationen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jailbreaker07

Hallo,
Ich glaube ich habe den Fehler gefunden, unter den Dummy habe ich unter stateformat folgendes stehen:

{sprintf("%.0f %",ReadingsVal("AktFeuchSchl","state",0))}

Wenn ich das ändere zu:

{sprintf("%.0f pr",ReadingsVal("AktFeuchSchl","state",0))}

Dann kommt keine Fehlermeldung mehr... nur wie bekomme ich das % Zeichen dahin ohne das er meckert?

Danke

Gruß

Thorsten

mahowi

Du mußt das Prozent-Zeichen verdoppeln, (%%), damit es angezeigt wird. Also: {sprintf("%.0f %%",ReadingsVal("AktFeuchSchl","state",0))}
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

amenomade

Aha! Ich war schon auf dem richtigen Weg! ;) Nur falsches Device :)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jailbreaker07

Zitat von: amenomade am 23 August 2017, 11:44:43
Aha! Ich war schon auf dem richtigen Weg! ;) Nur falsches Device :)
Ich habe mir aufgrund deines Tips mal alle device's  angeschaut die mit dem Thermostat zu tun haben und wo ein Sprintf vorkommt.....

Vielen Dank nochmal für die Hilfe