Energieverbrauch mit dummy und userReading loggen

Begonnen von balli1187, 07 März 2017, 17:16:07

Vorheriges Thema - Nächstes Thema

balli1187

ach Gott.... da hätte man auch selbst drauf kommen können. Strings lasen sich halt schlecht verrechnen.
Der Verbrauch wird nun mit ReadingsNum richtig berechnet, allerdings werden die Kosten nach Berechnung des neuen Verbrauchs nicht berechnet.... hier hat sich nichts geändert.

Noch eine Frage: Wie kann ich verhindern, dass die Readings automatisch bei Neustart aktualisiert werden? Meine kosten stehen von Beginn an auf 4,75€ (siehe list), was 1/12 des Grundpreises entspricht. Es wurde also initial einmalig berechnet obwohl kein Verbrauch vorhanden war. Meine Sorge ist, dass hier ständig neue Werte für Verbrauch und (wenn es dann klappt) Kosten berechnet werden, wenn ich FHEM mal neu starte. Ich möchte dies aber nur einmal pro Monat händisch eintragen.

@viegener: nochmal zum Zeilenumbruch und den 4-fachen Semikolon in der cfg... Wäre es dann so richtig:
define powermeter dummy
attr powermeter alias Stromzähler
attr powermeter setList kWh:textField
attr powermeter stateFormat {''}
attr powermeter webCmd kWh
attr powermeter readingList Strom.kWhPreis,;;;;
Strom.Grundpreis
attr powermeter userReadings Strom.Verbrauch difference {ReadingsNum("powermeter","state","");;},;;;;
Strom.Kosten {ReadingsNum("powermeter","Strom.Verbrauch","") * ReadingsNum("powermeter","Strom.kwhPreis","") + ReadingsNum("powermeter","Strom.Grundpreis","")/12;;}


Grüße, Stephan
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

viegener

@balli1187: Nein das ist definitiv so nicht richtig und einiges kommt darauf an, ob im Attributeditor oder als Kommando...

Grundsätzlich:
User readings werden durch Komma (!) abgetrennt nicht durch Semikolons
Wenn Semikolons innerhalb von Kommandos oder perl benötigt werden, dann müssen diese vervielfacht werden, denn einfache Semikolons trennen verschiedene FHEM-Befehle voneinander.
Innerhalb von perl werden Semikolons aber nur benötigt wenn mehrere perl-Befehle im Spiel sind. In Deinen user readings steht jeweils ein einzelner, also müssten eigentlich einfach alle Semikolons in diesem Fall weg
Zeilenumbrüche werden nicht durch Semikolon ermöglicht.

Empfehlung - verwende FHEMWeb und ändere das Attribut dort im Attribut-Texteditor - dann kannst Du einfach Zeilenumbrüche ohne irgendwelche Zeichen nutzen und musst auch keine virfachen Semikolons benutzen.


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

balli1187

Okay. Hier habe ich offenbar noch einiges an Nachholbedarf...

Leider habe ich nach wie vor keine Lösung bezüglich der Berechnung gefunden. Meine Kosten werden einfach nicht berechnet.

Noch eine Frage zum modifier "differente": in der commandref ist zu lesen, dass dieser erst bei der zweiten Ausführung greift, was ja auch logisch ist. Aus einem Wert kann man halt keine Differenz bilden. ich bin allerdings davon ausgegangen, dass es, sobald es Vorgängerversion gibt, der modifier immer greift. Schließlich ist es ja dann möglich. Beim Raumproblemen musste ich allerdings nach jedem Neustart erst zwei werte eingeben. Der letzte werte vor dem Neustart würde also nicht mit dem ersten nach dem Neustart verrechnet. Woran kann das liegen?

Grüße, Stephan
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

viegener

Zu userreadings mit difference kann ich jetzt nicht sehr viel sagen. Grundsätzlich finde ich es aber normal, dass ein Neustart hier wie eine Neudefinition der userreadings wirkt (denn genau das passiert ja).

Solange Du deine Definition nicht aufräumst und korrigierst (wie oben angegeben) - Das gilt auch für readingList wird es nicht gehen.
Bei "Meine Kosten werden einfach nicht berechnet" ohne Angabe wie die Defs aussehen (sprich ein list des devices) kann ich nicht helfen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

balli1187

Moin,

leider gab es in letzter Zeit andere, dringendere Dinge bei mir anzugehen, daher war es hier so lange ruhig....
Nun hatte ich mal wieder etwas Zeit mich mit dem Problem zu beschäftigen und will meine Erkenntnisse hier kundtun:

nachdem ich meine Def aufgeräumt habe und nun alles nur noch über das Webinterface eingebe, funktioniert es auch ;-) hier meine aktuelle Definition der userReadings:
attr powermeter userReadings Strom.Verbrauch difference {ReadingsNum("powermeter","state","");},Strom.Kosten {ReadingsNum("powermeter","Strom.Verbrauch","") * ReadingsNum("powermeter","Strom.kwhPreis","") + ReadingsNum("powermeter","Strom.Grundpreis","")/12;}

Mittlerweile werden auch die Kosten richtig berechnet.  Der Fehler lag hier in der Eingabe der Zahlenwert. Ich hatte alles mit mit einem Komma statt Punkt als Dezimaltrennzeichen eingegeben. Da es keine Fehlermeldungen gab und die Werte auch in den Readings auftauchten, hat es etwas länger gedauert dies herauszufinden und zu bemerken, dass die Nachkommastellen quasi abgeschnitten werden. Dadurch kam immer eine Multiplikation mit 0 herein... Naja, jetzt funktioniert es jedenfalls :-)

Jetzt brauche ich nur noch eine Lösung für das Restart-Problem. userReadings difference benötigt logischerweise zwei Werte um die Differenz berechnen zu können. Das heißt ich müsste nach einem Restart immer erst den alten Wert nochmal eingeben und dann den neuen Wert.

Gibt es eine Möglichkeit dies zu automatisieren, sodass der letzte state aus dem Log gelesen und gesetzt und das userReadings difference wird?

Grüße, Stephan
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero