Hauptmenü

Berechnung im Ausführungsteil

Begonnen von Tueftler1983, 14 September 2018, 21:52:50

Vorheriges Thema - Nächstes Thema

Tueftler1983

Hallo ich würde gerne eine Berechnung im Ausführungsteil machen, die reine Berechnung läuf aber das Ergebnis hat zu viele Nachkommastellen. Und da ist das Problem sobald ich auf 3 begrenzen will geht es mit def Berechnung nicht mehr.

Das geht:
(setreading Discovergy2 Verbrauch {([Discovergy2:stand] - [Discovergy2:anfang])})

Das leider nicht:
(setreading Discovergy2 Verbrauch {sprintf "%.3f",ReadingsVal([Discovergy2:stand] - [Discovergy2:anfang])})

Wie muss die Berechnung aussehen?

Ellert

Schon mal zusätzliche runde Klammern probiert?
{sprintf(...
{(sprintf ...
{(sprintf(...

Tueftler1983

Jo mit 2 klammern mehr gehts....

(setreading Discovergy2 Verbrauch {(sprintf("%.3f", ReadingsNum("Discovergy2", "stand", 0) - ReadingsNum("Discovergy2", "anfang", 0)))})


Wie kann ich eig verhindern das das Reading gelöscht wird wenn der PI mal neu gestartet wird?

Denn das Reading "anfang" wird jeweils am Anfang des Monats gesetzt

Otto123

Hi,
Edit: da war ich jetzt zu langsam
::)
mehrere Fehler:
Klammern vergessen wie Ellert schon sagt:
https://commandref.fhem.de/#set
Zitat{(perlExpression)} with the result of perlExpression.
Auch die Kleinigkeiten in der Doku sind relevant.

Das hier ist völlig falsch:ReadingsVal([Discovergy2:stand] - [Discovergy2:anfang])So in etwa könnte es was werden.
(ReadingsVal("Discovergy2","stand","0") - ReadingsVal("Discovergy2","anfang","0"))

Dein erster Code ist set magic (wobei eigentlich die Klammern {} zuviel sind), der zweite Code ist Perl.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tueftler1983

Danke dir bzw euch. Jetzt läuft es ja.

Auch noch ne idee wegen dem löschen bzw vergessen des Readings?

Denn wie gesagt das Reading "Anfang" wird jeweils am 1 des Monats um 00:00:01 Uhr gesetzt. Es ist dann der aktuelle Zählerstand.

Nur wenn der PI aus irgendeinem Grund neu startet ist das Reading ja weg.
Wie kann ich das verhindern?

Ellert

#5
Zitat von: Tueftler1983 am 14 September 2018, 23:50:16
Danke dir bzw euch. Jetzt läuft es ja.

Auch noch ne idee wegen dem löschen bzw vergessen des Readings?

Denn wie gesagt das Reading "Anfang" wird jeweils am 1 des Monats um 00:00:01 Uhr gesetzt. Es ist dann der aktuelle Zählerstand.

Nur wenn der PI aus irgendeinem Grund neu startet ist das Reading ja weg.
Wie kann ich das verhindern?
Nach dem Setzen des Readings save ausführen oder WriteStatefile() aufrufen.

Tueftler1983

Okay aber wie rufe ich WriteStatefile auf?

So gehts nicht:
({WriteStateFile()})

Bekomme dann die Meldung:

{WriteStateFile()}: Undefined subroutine &main::WriteStateFile called at (eval 420992) line 1.

Tueftler1983

Ahh okay, war ein Schreibfehler.... Ein Großes F statt ein kleines f

So ist richtig:({WriteStatefile()})