Hallo,
ich habe mir ein eigenes Statistikmodul programmiert, das mir (PV-Anlage, Wärmepumpe,...) Eigenverbrauchsquote, Autarkie, Einspeicevergütung usw. seit Start und auch für jeden einzelnen Tag berechnet.
Dazu werden die Zählerstände (Bezug, Einspeisung, Erzeugung) jeweils um Mitternacht in Variablen (des Moduls) gesichert und als Offset verwendet. Wird jetzt fhem neu gestartet, zum Beispiel weil in der fhem.cfg etwas verändert wurde, dann sind diese Offsets Null und die Tageswerte sind gleich den Werten seit Start. Die Offsets müssten also gespeichert un nach Neustart wieder geladen werden.
Geht das auf elegante Weise?
Thomas
dafür sind readings da. die werden mit save gespeichert und beim neustart gelesen.
stecke deine variablen in readings. wenn der name mit einem . anfängt sind sie 'versteckt' und im frontend nicht sichtbar.
für rereadcfg gibt es übrigens keinen wirklich sinnvollen grund.
gruss
andre
Hallo Andre,
erstal danke schön. Funktioniert soweit. Allerdings kann ich im Modul intern die Readings nicht lesen.
Lesen mittels
ReadingsVal($hash,".OFFSET_TODAY",0) liefert mir leider immer Null.
Beschreiben mittels
readingsBulkUpdate($hash,".OFFSET_TODAY",MeinWert)
Was mache ich falsch?
Thomas
ReadingsVal will als ersten parameter den device namen nicht den hash.
gruss
andre
Hallo,
das Problem ist doch, dass ich auf die Moduleigenen Readings zugreife.
Bein Programmieren des Moduls kenne ich aber doch den Devicenamen noch gar nicht.
Beispiel:
98_EnergyStat.pm ist mein "Modul"
ich lege dann später mittels "define stat EnergyStat X Y Z A B" das "Device stat" an. Ich könnte es aber auch "Elisabeth" nennen, das weiss ich ja während der Programmierung des Moduls noch nicht.
Hier den Devicenamen "stat" anzugeben habe ich auch schon versucht, das gibt eine Fehlermeldung beim Modulladen, weil "stat" eben noch unbekannt ist.
Wie greife ich also korrekterweise auf die eigenen Readings eines Moduls mittels ReadingsVal zu?
($hash)->{READINGS}{.READINGNAME}{VAL} funktioniert nicht wenn dem Namen ein Punkt voransteht.
Gruß, Thomas
dein device name steckt zur laufzeit in $hash->{NAME}.
.READINGNAME ist kein gültiger string. deshalb musst du ihn in anführungszeichen setzen. $hash->{READINGS}{'.READINGNAME'}{VAL}
wenn du direkt auf $hash->{READINGS} zugreifst musst du vorher mit defined auch prüfen ob es vorhanden ist. sonst legst du leere hash einträge an und das bringt fhem später durcheinander. das ist genau was ReadingsVal dir abnimmt.
gruss
andre
Zitat von: justme1968 am 03 Dezember 2014, 11:41:55
dein device name steckt zur laufzeit in $hash->{NAME}.
Also
"ReadingsVal($hash->{Name},".READINGNAME",0);" ?
Thomas
NAME nicht Name.
gruss
andre
Zitat von: justme1968 am 03 Dezember 2014, 11:48:08
NAME nicht Name.
gruss
andre
JAJA, is gut ;)
Danke schön.