gelöst: StateFormat / finde den Fehler nicht

Begonnen von SouzA, 24 April 2023, 13:10:27

Vorheriges Thema - Nächstes Thema

SouzA

Hallo,

ich habe ein StateFormat für eine Temperaturmessung erstellt.
Angezeigt wird alles richtig. Im log habe ich aber folgende Fehlermeldung:
2023.04.24 13:04:20 1: PERL WARNING: Invalid conversion in sprintf: "% T" at (eval 9754971) line 1.
2023.04.24 13:04:20 3: eval: sprintf ("T:%.1f°C RF:%.1f% TP:%.1f°C B:%.0f %", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0), ReadingsVal($name,"dewpoint",0), ReadingsVal($name,"battery",0))

Das StateFormat ist, wie schon in der Fehlermeldung wie folgt:
{sprintf ("T:%.1f°C RF:%.1f% TP:%.1f°C B:%.0f %", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0), ReadingsVal($name,"dewpoint",0), ReadingsVal($name,"battery",0))}
List des Devices:
Internals:
   CID        zigbee_Test_Temp_AZi
   DEF        zigbee_Test_Temp_AZi
   FUUID      64461655-f33f-7c83-5189-7f01513d44985b8f
   FVERSION   10_MQTT2_DEVICE.pm:0.268600/2022-12-16
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     20
   NAME       MQTT2_zigbee_Test_Temp_AZi
   NR         787
   STATE      T:21.1°C RF:54.8% TP:11.7°C B:100 %
   TYPE       MQTT2_DEVICE
   eventCount 21
   myBroker_CONN myBroker_127.0.0.1_33888
   myBroker_MSGCNT 20
   myBroker_TIME 2023-04-24 12:59:56
   READINGS:
     2023-04-24 12:20:08   IODev           myBroker
     2023-04-24 12:21:57   associatedWith  MQTT2_zigbee_pi
     2023-04-24 07:51:54   attrTemplateVersion 20200904
     2023-04-24 12:59:56   battery         100
     2023-04-24 12:59:56   dewpoint        11.67
     2023-04-24 12:59:56   humidity        54.82
     2023-04-24 12:59:56   last_seen       2023-04-24T12:59:56+02:00
     2023-04-24 12:59:56   linkquality     51
     2023-04-24 12:21:57   state           online
     2023-04-24 12:59:56   temperature     21.11
     2023-04-24 12:59:56   voltage         3100
Attributes:
   alias      Test Temp AZi
   devicetopic zigbee2mqtt/Test_Temp_AZi
   icon       temperature_humidity
   model      zigbee2mqtt_TempHumSensor
   readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
zigbee2mqtt/Test_Temp_AZi/availability:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE
   stateFormat {sprintf ("T:%.1f°C RF:%.1f% TP:%.1f°C B:%.0f %", ReadingsVal($name,"temperature",0), ReadingsVal($name,"humidity",0), ReadingsVal($name,"dewpoint",0), ReadingsVal($name,"battery",0))}
   userReadings dewpoint:temperature.* {
 my $dp;
 my $temperature = ReadingsVal($name,"temperature",0);
 my $humidity = ReadingsVal($name,"humidity",0);
 my $A = 17.2694;
 my $B = ($temperature > 0) ? 237.3 : 265.5;
 my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );
 my $e = $humidity/ 100 * $es;
 if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";
  return 0;
 }
 my $e1 = $e / 610.78;
 my $f = log( $e1 ) / $A;
 my $f1 = 1 - $f;
 if ($f1 == 0) {
  Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";
  return 0;
 }
 $dp = $B * $f / $f1 ;
 sprintf "%.2f", $dp;
}

Kann mir da jemand helfen?

Vielen Dank und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Sany

das % bei RF muss "escaped" werden, bei sprintf mittels %, also %% 


...RF:%.1f%%..

der Fehler wird ja auch genau an der Stelle angemeckert.


Viel Erfolg!!


Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

SouzA

Hi Sany,

vielen Dank für deine Unterstützung... Jetzt hat es auch funktioniert ohne Fehlermeldung!
Manchmal sind es die einfachsten Dinge ;)

Sieht nun so aus:
{sprintf ("T:%.1f°C RF:%.1f%% TP:%.1f°C B:%.0f%%", ReadingsNum($name,"temperature",0), ReadingsNum($name,"humidity",0), ReadingsNum($name,"dewpoint",0), ReadingsNum($name,"battery",0))}

Thx & bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee