Hallo Leute,
ich bin mit meinem FHEM sehr weit gekommen und mache es nun "schön". Dabei stört mich eine Perl Warning, dir mir die Logs aufbläht. Ich sehe leider den Fehler überhaupt nicht.
Dies ist die Fehlermeldung:
2017.07.15 14:04:41 1: PERL WARNING: Missing argument in sprintf at (eval 2066) line 1.
2017.07.15 14:04:41 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 2066) line 1.
2017.07.15 14:04:41 1: PERL WARNING: Missing argument in sprintf at (eval 2069) line 1.
2017.07.15 14:04:41 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 2069) line 1.
2017.07.15 14:04:41 1: PERL WARNING: Missing argument in sprintf at (eval 2072) line 1.
2017.07.15 14:04:41 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 2072) line 1.
Sie betrifft ein MQTT Device, das ich mit einem eigenen stateFormat ausgestattet habe:
stateFormat {sprintf("State: %s Temp.: %.1f°C Humid.: %.1f \%", ReadingsVal($name, "Power",0), ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
Die Fehlermeldung sagt mir, dass ich falsche Formatstrings nutze. Ich nutze aber ein %s, also String für Power sowie ein %.1f für Temperatur und Feuchtigkeit. Die Anzeige ist auch korrekt. Ich komme mir blind vor....
Wäre super, wenn mir jemand die Augen öffnen könnte.. ;-)
Viele Grüße und Danke!
Hendrik
PS: das devStateIcon funktioniert übrigens auch nicht - ich vermute das liegt daran, dass man entweder stateFormat oder devStateIcon setzen darf?..
Anbei das komplette Device Listing
Internals:
IODev myBroker
NAME Sonoff_Cumulus
NR 86
STATE State: OFF Temp.: 33.9°C Humid.: 40.2 %
TYPE MQTT_DEVICE
qos 0
retain 0
Helper:
DBLOG:
AM2301_Humidity:
logdb:
TIME 1500120582.05151
VALUE 40.2
AM2301_Temperature:
logdb:
TIME 1500120582.05151
VALUE 33.9
Power:
logdb:
TIME 1500120060.05027
VALUE OFF
Sensor:
logdb:
TIME 1500120581.9547
VALUE {"Time":"2017-07-15T13:09:41", "AM2301":{"Temperature":33.9, "Humidity":40.2}, "TempUnit":"C"}
TempUnit:
logdb:
TIME 1500120582.05151
VALUE C
Time:
logdb:
TIME 1500120582.05151
VALUE 2017-07-15T13:09:41
state:
logdb:
TIME 1500107475.1682
VALUE off
transmission-state:
logdb:
TIME 1500120581.86333
VALUE incoming publish received
READINGS:
2017-07-15 14:09:42 AM2301_Humidity 40.2
2017-07-15 14:09:42 AM2301_Temperature 33.9
2017-07-15 10:31:15 Power OFF
2017-07-15 14:09:41 Sensor {"Time":"2017-07-15T13:09:41", "AM2301":{"Temperature":33.9, "Humidity":40.2}, "TempUnit":"C"}
2017-07-15 14:09:42 TempUnit C
2017-07-15 14:09:42 Time 2017-07-15T13:09:41
2017-07-15 10:31:15 state off
2017-07-15 14:09:41 transmission-state incoming publish received
message_ids:
publishSets:
:
topic cmnd/sonoff/power
values:
publishSet
on
off
sets:
off
on
publishSet
subscribe:
stat/sonoff/POWER
tele/sonoff/SENSOR
stat/sonoff/STATUS
subscribeExpr:
^stat\/sonoff\/POWER$
^tele\/sonoff\/SENSOR$
^stat\/sonoff\/STATUS$
subscribeReadings:
stat/sonoff/POWER Power
stat/sonoff/STATUS Status
tele/sonoff/SENSOR Sensor
Attributes:
IODev myBroker
alias Cumulus
devStateIcon on:humidity@red:off off:humidity@blue:on
icon sani_water_hot
publishSet publishSet on off cmnd/sonoff/power
room MQTT,Pertinax
stateFormat {sprintf("State: %s Temp.: %.1f°C Humid.: %.1f \%", ReadingsVal($name, "Power",0), ReadingsVal($name,"AM2301_Temperature",0), ReadingsVal($name,"AM2301_Humidity",0))}
subscribeReading_Power stat/sonoff/POWER
subscribeReading_Sensor tele/sonoff/SENSOR
subscribeReading_Status stat/sonoff/STATUS
Falsche Syntax für das Escapen von "%".
Siehe hier: https://stackoverflow.com/questions/1102628/how-do-i-print-the-character-with-printf
LG
pah
Danke!