Userreading aktualisiert sich nicht

Begonnen von Panger1337, 22 Dezember 2017, 06:03:03

Vorheriges Thema - Nächstes Thema

Panger1337

Hallo zusammen

ich habe ein Problem bei dem ich leider nicht mehr weiterkomme.
Ich habe ein Ecometer definiert und ein Userreading eingestellt welches mir die Differenz zwischen aktuellem Stand und letztem Stand ausrechnen soll.
Ich habe dazu einen Dummy angelegt, der einmal pro Tag (23:55) den aktuellen Stand bekommt. Die Differenz wäre damit der Tagesverbrauch an Heizöl.

Hier die defines:
define heizoelverbrauch dummy
attr heizoelverbrauch readingList tagesverbrauch
attr heizoelverbrauch room 4.1_Heizoel
attr heizoelverbrauch userReadings tagesverbrauch difference { ReadingsVal("heizoelverbrauch","state",0)}
define FileLog_heizoelverbrauch FileLog ./log/heizoelverbrauch-%Y.log heizoelverbrauch
attr FileLog_heizoelverbrauch room 4.1_Heizoel


Wenn ich manuell set heizoelverbrauch ausführe wird mir auch schön die Differenz berechnet. Wenn das automatisch passiert durch das "at", allerdings nicht.
#Übergabe des Tagesstands an den Dummy
define heizoelverbrauch_andummy at *23:55:00 { my $d= ReadingsVal("ecometer","RemainingUsableLevel",0);; fhem("set heizoelverbrauch $d");;}
attr heizoelverbrauch_andummy room 4.1_Heizoel


Ich bin hier leider mit meinem Latein am Ende :-(

Das hier ist ein Auszug aus dem Filelog (06:40 war ein manueller Eintrag, da wird das Userreading auch gesetzt, 23:55 war dann der at, kein Userreading)
2017-12-21_06:40:05 heizoelverbrauch 2412
2017-12-21_06:40:05 heizoelverbrauch tagesverbrauch: 0
2017-12-21_23:55:00 heizoelverbrauch 2393

Woran könnte das liegen?

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

marvin78

Bitte immer ein list der beteiligten Devices posten. Die Defines helfen nur bedingt weiter.

Es könnte zum Beispiel sein, dass keine Events kommen und deshalb nichts berechnet wird.

Panger1337

Hi Marvin

danke schon mal für dein Feedback.

Habe das jetzt mal komplett auf manuelle Bearbeitung umgestellt, in dem ich einige at Befehle zusammengeschrieben habe.

Die schreiben mir jetzt morgens und abends den Stand in ein Reading und berechnen dann die Differenz.

ein list rufe ich dann mit
list "device"
auf, korrekt?

Habe das Device wo es nicht geklappt hat schon gelöscht. Ich erstelle aber nochmal ein neues Userreading im Device Ecometer zum testen (würde mir dann die manuellen ats sparen) und poste dann hier nochmal das Ergebnis.

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

Panger1337

userreading neu gemacht. Stand jetzt

Internals:
   DEF        /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
   DeviceName /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
   FD         13
   NAME       ecometer
   NR         116
   PARTIAL   
   PORTSTATE  open
   STATE      opened
   TYPE       TEK603
   buffer     534900160210072d2f0000017161004909450f3f6292
   READINGS:
     2017-12-22 07:51:11   RemainingUsableLevel 2393
     2017-12-22 07:48:15   RemainingUsablePercent 60.8
     2017-12-22 07:48:15   Temperature     13.89
     2017-12-22 07:48:15   Time            07:45:47
     2017-12-22 07:48:15   TotalUsableCapacity 3903
     2017-12-22 07:48:15   Ullage          73
     2017-12-22 07:03:07   abendstand      2373
     2017-12-22 07:02:35   morgenstand     2393
     2017-12-22 07:52:38   remainingusablelevel alt
     2017-12-22 06:55:22   state           opened
     2017-12-22 07:03:22   tagesdifferenz  -20
     2017-12-22 07:52:38   tagesverbrauch  0
Attributes:
   room       4.1_Heizoel
   userReadings tagesverbrauch difference { ReadingsVal("ecometer","RemainungUsableLevel",0)}


Ich schaue gegen Mittag nochmal rein, dann müsste das Ecometer einen neuen Wert geliefert haben, dann sehe ich ob das Userreading jetzt geht.

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

CoolTux

Also ich sehe da überhaupt nicht durch. Was genau macht Dein userReadings?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

marvin78

#5
Das userReading berechnet die Differenz aus neuem und altem Wert.

Bau dein at mal um auf

define heizoelverbrauch_andummy at *23:55:00 set heizoelverbrauch [ecometer:RemainingUsableLevel]

Panger1337

Hi CoolTux

das Userreading soll mir die Differenz zwischen aktuellem Wert eines readings und dem vorangegangenen liefern.

Wenn ich die Commandref richtig verstanden habe ist genau das die Funktion von "difference"

difference: das Reading wird auf die Differenz zw. dem aktuellen und dem vorherigen Wert gesetzt.

Das klappt aber leider nicht bzw. nur wenn ich manuell das Reading aus dem "difference" seinen Wert berechnet setze

@Marvin:
Korrekt, das at sollte einen Dummy befüllen (das habe ich aber jetzt geändert)
In dem Dummy sollte dann der Tagesverbrauch (die Differenz zwischen altem und neuem Wert) berechnet werden
Das versuche ich gerade statt im Dummy im originalen Ecometer abzubilden, also ohne Dummy

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

CoolTux

Ah, ok. Vielen Dank. Habe mal eben in der Commandref gesucht. Das ganze ist Teil von userReadings, ich habe verzweifelt den FHEM Befehl oder die Funktion difference gesucht  :-X
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Panger1337

#8
Hatte bei der neu erstellten Zusammenstellung noch einen Tippfehler.
Korrigiert, jetzt warte ich auf ein neues Reading des Ecometer (ca., 9:50)

Er hat aber eben zumindest den Wert 0 in tagesverbrauch geschrieben (weil er aufgrund des Tippfehlers keinen Wert bekommen hat). Also scheint das userreading was ich neu gemacht habe zumindest getriggert zu werden.

Das war im Dummy nicht der Fall. Da wurde zwar das Reading gesetzt, aber das userreading dann nicht...
definiert war das at wie folgt (zwischenzeitlich habe ich den Dummy rausgeworfen und versuche das über den Ecometer selbst zu regeln.

#Übergabe des Tagesstands an den Dummy
define heizoelverbrauch_andummy at *23:55:00 { my $d= ReadingsVal("ecometer","RemainingUsableLevel",0);; fhem("set heizoelverbrauch $d");;}
attr heizoelverbrauch_andummy room 4.1_Heizoel



Der DUmmy wie folgt
#Dummy für Tracking des Stands und FIlelog
define heizoelverbrauch dummy
attr heizoelverbrauch readingList tagesverbrauch
attr heizoelverbrauch room 4.1_Heizoel
attr heizoelverbrauch userReadings tagesverbrauch difference { ReadingsVal("heizoelverbrauch","state",0)}
define FileLog_heizoelverbrauch FileLog ./log/heizoelverbrauch-%Y.log heizoelverbrauch
attr FileLog_heizoelverbrauch room 4.1_Heizoel


Ich kann mir darauf keinen Reim machen.
Vielleicht lag es daran, dass ich im Dummy mit "set" gearbeitet habe und den state geändert habe.
Beim Ecometer jetzt arbeite ich mit setreading.

Vielleicht lag es daran.

Komisch war nur wenn ich manuell in der Befehlszeile "set heizoelverbrauch XYZ" gemacht habe, dann hat er das Userreading gesetzt, wenn das über den at Befehl gelaufen ist, dann nicht, obwohl gleicher Befehl.

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

marvin78

Zitat von: Panger1337 am 22 Dezember 2017, 08:48:19

@Marvin:
Korrekt, das at sollte einen Dummy befüllen (das habe ich aber jetzt geändert)
In dem Dummy sollte dann der Tagesverbrauch (die Differenz zwischen altem und neuem Wert) berechnet werden
Das versuche ich gerade statt im Dummy im originalen Ecometer abzubilden, also ohne Dummy


Das halte ich für eine gute Idee. Ich sehe hier keinen offensichtlichen Fehler. Schau mal, ob das so klappt. Wie oft aktualisiert sich das Reading? Du kannst auch mal mit setreading testen.

Panger1337

Ich musste das leider in einen Dummy machen weil das Ecometer sich etwa jede Stunde aktualisiert, aber nur alle 24 Stunden den Wert neu berechnet (Heizölstand)
Daher wäre bei 23 Berechnungen in difference der Wert 0 rausgekommen.

Den Dummy habe ich daher nur einmal am Tag befüllt um die Differenz zu bekommen.

Das neue Userreading im Ecometer ist jetzt eigentlich nur zu Testzwecken ob es geht.

Habe die Berechnung des Heizölverbrauchs jetzt über diverse at Befehle geregelt (morgens Stand schreiben, Abends Stand schreiben, Differenz berechnen und Zähler hochzählen

Wie gesagt: Wenn ich den Dummy manuell per Befehlszeile geändert habe "set heizoelverbrauch XYZ" dann hat das Userreading gerechnet
Wenn das AT den Stand geändert hat, dann wurde es nicht berechnet

2017-12-21_06:40:05 heizoelverbrauch 2412 -- hier manuell gesetzt
2017-12-21_06:40:05 heizoelverbrauch tagesverbrauch: 0 -- Userreading hat reading neu gesetzt
2017-12-21_23:55:00 heizoelverbrauch 2393 -- hier wurde per at-Befehl neu gesetzt, Eintrag userreading fehlt


Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

marvin78

Schau dir auch mal das statistics Modul an. Das macht sowas für dich.

Panger1337

Hi Marvin

ja, das habe ich mir schon angeschaut, hat da aber nicht für mich gepasst.
Hab das beim Stromzähler jetzt laufen und da ist es super.

Vielleicht versuche ich es beim Heizöl auch nochmal damit

Habe aber generell das Problem dass der Verbrauch eigentlich vom Vortag ist (da der Ecometer nachts um 00:48 Uhr den neuen Stand berechnet, ausgibt)
Wenn ich das dann in einen Plot setze mit Tagesmitteltemperatur habe ich eine Verschiebung um einen Tag zwischen Temperatur und Heizölverbrauch.

Kann ich beim Plot aus einem Filelog das Datum um einen Tag fix verschieben?

ALso z.B. im Filelog Datum heute, will ich im Plot als gestrigen Wert darstellen, geht das?

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD

marvin78

Sicher bin ich nicht aber schau dir mal logProxy an. Damit kann man einiges anstellen.

Panger1337

Im Device Ecometer hat sich das Userreading jetzt aktualisiert

Vielleicht teste ich es mit einem Dummy nochmal.

Grüße
Panger
Chromebox 3 mit 16GB RAM und 128GB SSD als FHEM Instanz
10x TX29DTH, WLAN Gateway PCA301 und LaCrosse, IR Lesekopf für Stromzähler, WLAN Gateway für Onewire (Heizung)
Modbus Heizung und PV, Wetter, Abfall etc
Weiterer Ausbau: TBD