FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jailbreaker07 am 22 August 2017, 16:55:03

Titel: "PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: jailbreaker07 am 22 August 2017, 16:55:03
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
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: amenomade am 22 August 2017, 23:14:40
Hast Du stateFormat oder userReadings auf Wandthermostat_Weather? Poste mal ein "list" davon.
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: jailbreaker07 am 23 August 2017, 06:39:43
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
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: CoolTux am 23 August 2017, 07:52:21
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
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: jailbreaker07 am 23 August 2017, 10:03:25
Hallo,
den Code nimmt es so leider nicht...

Gruß

Thorsten
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: CoolTux am 23 August 2017, 10:11:52
Oh schade. Na denn.
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: betateilchen am 23 August 2017, 10:13:00
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.
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: jailbreaker07 am 23 August 2017, 10:58:09
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
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: mahowi am 23 August 2017, 11:09:46
Du mußt das Prozent-Zeichen verdoppeln, (%%), damit es angezeigt wird. Also: {sprintf("%.0f %%",ReadingsVal("AktFeuchSchl","state",0))}
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: amenomade am 23 August 2017, 11:44:43
Aha! Ich war schon auf dem richtigen Weg! ;) Nur falsches Device :)
Titel: Antw:"PERL WARNING" Was ist an den unten stehende Code falsch?
Beitrag von: jailbreaker07 am 23 August 2017, 18:25:53
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