Hauptmenü

[GELÖST]Sprintf Problem

Begonnen von Markus., 27 Januar 2018, 08:09:32

Vorheriges Thema - Nächstes Thema

Markus.

Hallo Zusammen,

habe folgendes Reading in einem Device

wasserdruck { "press": {"value": 1.169}, "sensor": {"value": "ok"}}

und möchte nur den Wert value von press dargestellt haben.
Versuche es gerade mit folgendem sprintf als stateformat
{sprintf("Wasserdruck: %.1f", ReadingsVal($name,"press_value",0)) }

Bekomme aber nur 0.0 angezeigt.

Komme irgendwie nicht dahinter wo der Fehler liegt :-(

Gruß

Markus

Amenophis86

Wenn ich es richtig sehe versuchst du mit Readings als auf ein Json String zuzugreifen, dass kann die Funktion so nicht. Dh du musst entweder den Teil ausschneiden aus deinem Reading, oder du arbeitest mit expandJson.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Markus.

hallo

expandJson ist installiert. Keine Ahnung warum dasbei dem Device nicht geht :-(

Gruß

Markus

Amenophis86

Dann solltest du die Informationen mal nicht vor enthalten und hier die entsprechenden Device mit einem list posten, dass man auch alles sieht.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Markus.

ups sorry stimmt :-)

Aber glaube das Problem gefunden zu haben. Und zwar habe ich meine expandJson wie folgt konfiguriert.
(Vaillant.*|Ebus.*:.*:.{.*.*{.*.*}})
Aber das device mit dem sprintf stateformat hiess "ebus_druck" also klein geschrieben.
Habs jetzt umbenannt und nun funktioniert es :-)

Hier mal ein list wie es vorher war:

Internals:
   CFGFN     
   IODev      MQTTBroker
   NAME       ebus_druck
   NR         390
   STATE      Wasserdruck: 1.3
   TYPE       MQTT_DEVICE
   Helper:
     DBLOG:
       transmission-state:
         logdb:
           TIME       1517033222.95426
           VALUE      subscription acknowledged
   READINGS:
     2018-01-27 09:07:55   press_value     1.266
     2018-01-27 09:07:55   sensor_value    ok
     2018-01-27 09:07:50   state           get
     2018-01-27 09:07:55   transmission-state incoming publish received
     2018-01-27 09:07:55   wasserdruck     {
     "press": {"value": 1.266},
     "sensor": {"value": "ok"}}
   message_ids:
   publishSets:
     :
       topic      vaillant_ebus/bai/WaterPressure/get
       values:
         get
   sets:
     get       
   subscribe:
     vaillant_ebus/bai/WaterPressur
     vaillant_ebus/bai/WaterPressure
   subscribeExpr:
     ^vaillant_ebus\/bai\/WaterPressur$
     ^vaillant_ebus\/bai\/WaterPressure$
   subscribeReadings:
     vaillant_ebus/bai/WaterPressur:
       cmd       
       name       wasserdruck
     vaillant_ebus/bai/WaterPressure:
       cmd       
       name       wasserdruck
Attributes:
   DbLogExclude .*
   IODev      MQTTBroker
   devStateStyle style="text-align:left"
   icon       weather_barometric_pressure
   publishSet get vaillant_ebus/bai/WaterPressure/get
   room       010_Heizung
   stateFormat {sprintf("Wasserdruck: %.1f", ReadingsVal($name,"press_value",0))}
   subscribeReading_wasserdruck vaillant_ebus/bai/WaterPressure



und hier wie es jetzt ist und wo es nun funktioniert.

Internals:
   CFGFN     
   IODev      MQTTBroker
   NAME       Ebus_Druck
   NR         390
   STATE      Wasserdruck: 1.3
   TYPE       MQTT_DEVICE
   Helper:
     DBLOG:
       transmission-state:
         logdb:
           TIME       1517033222.95426
           VALUE      subscription acknowledged
   READINGS:
     2018-01-27 09:07:55   press_value     1.266
     2018-01-27 09:07:55   sensor_value    ok
     2018-01-27 09:07:50   state           get
     2018-01-27 09:07:55   transmission-state incoming publish received
     2018-01-27 09:07:55   wasserdruck     {
     "press": {"value": 1.266},
     "sensor": {"value": "ok"}}
   message_ids:
   publishSets:
     :
       topic      vaillant_ebus/bai/WaterPressure/get
       values:
         get
   sets:
     get       
   subscribe:
     vaillant_ebus/bai/WaterPressur
     vaillant_ebus/bai/WaterPressure
   subscribeExpr:
     ^vaillant_ebus\/bai\/WaterPressur$
     ^vaillant_ebus\/bai\/WaterPressure$
   subscribeReadings:
     vaillant_ebus/bai/WaterPressur:
       cmd       
       name       wasserdruck
     vaillant_ebus/bai/WaterPressure:
       cmd       
       name       wasserdruck
Attributes:
   DbLogExclude .*
   IODev      MQTTBroker
   devStateStyle style="text-align:left"
   icon       weather_barometric_pressure
   publishSet get vaillant_ebus/bai/WaterPressure/get
   room       010_Heizung
   stateFormat {sprintf("Wasserdruck: %.1f", ReadingsVal($name,"press_value",0))}
   subscribeReading_wasserdruck vaillant_ebus/bai/WaterPressure


Und nich ein list vom expandJson device


Internals:
   DEF        (Vaillant.*|Ebus.*:.*:.{.*.*{.*.*}})
   NAME       ej3
   NR         203
   NTFY_ORDER 50-ej3
   STATE      2018-01-27 09:12:45
   TYPE       expandJSON
   s_regexp   (Vaillant.*|Ebus.*:.*:.{.*.*{.*.*}})
   t_regexp   .*
   version    1.10
   READINGS:
     2018-01-27 06:10:22   state           active
   helper:
Attributes:
   room       099_System



Muss mich da mal weiter mit beschäftigen.... ;-)

Gruß

Markus

Amenophis86

Top, freut mich, dass du den Fehler gefunden hast.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...