FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Tueftler1983 am 14 September 2018, 21:52:50

Titel: Berechnung im Ausführungsteil
Beitrag von: Tueftler1983 am 14 September 2018, 21:52:50
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?
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Ellert am 14 September 2018, 23:17:54
Schon mal zusätzliche runde Klammern probiert?
{sprintf(...
{(sprintf ...
{(sprintf(...
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Tueftler1983 am 14 September 2018, 23:28:08
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
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Otto123 am 14 September 2018, 23:34:17
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
Titel: Antw:Berechnung im Ausführungsteil
Beitrag 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?
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Ellert am 15 September 2018, 08:02:46
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.
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Tueftler1983 am 15 September 2018, 08:28:20
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.
Titel: Antw:Berechnung im Ausführungsteil
Beitrag von: Tueftler1983 am 15 September 2018, 08:54:53
Ahh okay, war ein Schreibfehler.... Ein Großes F statt ein kleines f

So ist richtig:({WriteStatefile()})