[gelöst] Syntax von stateFormat

Begonnen von reini3549, 14 September 2014, 13:22:17

Vorheriges Thema - Nächstes Thema

reini3549

Hallo
kann mir bitte jemand helfen
Ich möchte den Inhalt der dummy Variable Tagesverbrauch formatiert ausgeben.
attr Tagesverbrauch stateFormat {sprintf("%.2f kWh")} gibt natürlich nur 0.00 kWh aus. Wie muss ich die Zeile schreiben, dass der Inhalt der Variablen genommen wird?

LG
Reinhard

Puschel74

Hallo,

stateFormat {sprintf("%.2f"." W",ReadingsVal("Laptop_Lader_Mess","power",0))}

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

reini3549

danke!
Nur zum Verständnis, d.h. ich kann die Formatierung nur beim Einlesen vom Gerät (SO Zähler), bei mir in einem Modul in der 99_myUtils.pm machen. Die dummy Vatiable habe ich ja in der cfg definiert. Das Modul wird immer um Mitternacht gestartet. Da gibt es keine Möglichkeit die Formatierung in der cfg zu machen? state wird immer richtig aktualisiert, nur halt mit zig Kommastellen.

hexenmeister

Wie meinst Du das? Welche Möglichkeit fehlt Dir noch? Du kannst ja alles in stateFormat machen... Ist doch "in cfg"...
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

reini3549

Danke für die Antwort

ich habe folgendes in der cfg definiert:

# Ermittlung Strom Tagesverbrauch
define DailyPowerDiff dummy
attr DailyPowerDiff room hidden
define Tagesverbrauch dummy
attr Tagesverbrauch room Flur
# attr Tagesverbrauch stateFormat {sprintf("%.2f kWh")...............} hier möchte ich die Formatierung machen
define Tagesverbrauch_Haushalt at *23:59 {prg_Daily_Stat}


LG
Reinhard


hexenmeister

Verstehe nicht ganz, was das tun soll...
Hast Du eine Funktion, die die Werte liefert und per AT in ein DUMMY schreibt? Und diesen möchtest Du noch formatieren? Warum dann nicht gleich in der Funktion selbst? Und auch wenn so, dann wo liegt noch das Problem? Bei Deinem sprintf fehlt natürlich noch der eigentliche Wert... etwas so:
...stateFormat {sprintf("%.2f kWh", ReadingsVal($name,"wasweissich",0))}

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

reini3549

danke habs verstanden. Ich wollte es nicht in der Funktion machen, sondern direkt beim dummy, das wird ja ausgegeben, und wollte wissen wie es geht. Dachte es ist so eleganter.

reini3549

Entschuldigt, habs doch noch nicht verstanden.

in der cfg steht folgendes:

# Ermittlung Strom Tagesverbrauch
define DailyPowerDiff dummy
attr DailyPowerDiff room hidden
define DailyPower dummy
attr DailyPower room Flur
define Tagesverbrauch_Haushalt at *23:59 {prg_Daily_Stat}


in der 99_myUtils.pm folgendes:
sub
prg_Daily_Stat()
{
#
# Zunächst Differenz aktueller Wert - Wert von Gestern berechnen
$data{DPval} = ReadingsVal("Counter","counters.A",0)/1000.0 - Value("DailyPowerDiff");
# Tagesverbrauch in DailyPower speichern
fhem ("set DailyPower $data{DPval}");
# Aktuellen Wert speichern
$data{DPval} = ReadingsVal("Counter","counters.A",0)/1000.0;
fhem ("set DailyPowerDiff $data{DPval}");
}


Das Ganze funktioniert, aber ich bekomme die Formatierung nicht hin. Wo und wie schreibe ich das stateFormat hin, Kann ich das in der cfg machen, oder nur im Unterprogram.

Vielen Dank
Reinhard

hexenmeister

stateFormat ist ein Attribut an dem Device, dessen Reading Du umformatieren möchtest. Du kannst das Ganze in der Weboberfläche erzeugen.
Das wäre dann Config. Aber auch eine Formatierung im Code ist genauso möglich. Beantwortet das Deine Frage, oder habe ich Dich nicht richtig verstanden?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

reini3549

vielen Dank, die Theorie war mir schon klar, aber am wie scheitere ich noch. Ich habs über die  Weboberfläche versucht, also in der config, bekomme dann aber keinen Wert mehr ausgegeben, sondern 0,00 kWh. Ich mache also was falsch?

Das es so nicht passt ist mir schon klar:

attr DailyPower stateFormat {sprintf("%.2f kWh",ReadingsVal($name,"DailyPower","?"))}

aber wie schreibe ich das Ganze, wenn ich den Inhalt der Dummy Variablen formatiert ausgeben möchte?

viele Grüße
Reinhard



hexenmeister

Ich glaube, ich fange an, das Problem zu verstehen ;)
ReadingsVal liest in Deinem Fall ein Reading namens 'DailyPower' aud dem Dummy 'DailyPower'. Das Reading gibt es dort gar nicht. Also entweder Du setzt in Deinem Perl-Code ein entsprechendes Reading (mit setreading), oder, wenn Du Reading 'state' nutzt (mit set), dann benutze das:
attr DailyPower stateFormat {sprintf("%.2f kWh",ReadingsVal($name,"state","?"))}
Das setzt den internen Wert STATE (ist nicht ganz das gleiche wie Reading 'state') auf den formatierten String.


Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

reini3549

Hallo Hexenmeister,

vielen Dank, so funktioniert es. Jetzt hab ich es dank deiner Hilfe verstanden.

LG
Reinhard

Puschel74

Hallo,

Beiträge bitte nicht schließen.
Ein gelöst vor dem Titel genügt - siehe die anderen Beiträge.
Danke.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

reini3549

Ok, sorry wusste ich nicht, bin ja neu hier

LG
Reinhard

Puschel74

Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.