Hauptmenü

Startwert aus InfluxDB

Begonnen von max78, 25 September 2022, 20:42:54

Vorheriges Thema - Nächstes Thema

max78

Hallo,

ich berechne den Zählerstand aus dem aktuellen Verbrauch.
Leider resetet der sich bei jedem Neustart von fhem.

Kann man den Zählerstand irgendwie, beim Neustart, auf den letzten gespeicherten Wert in der InfluxDB setzen?
Oder funktioniert es mit Filelog oder DBLog?   

Otto123

Hi,

womit ermittelst Du den Verbrauch? Normalerweise wird dort auch ein Zähler geführt.
Aber schau hier https://forum.fhem.de/index.php?topic=126231.0
Oder hier: https://www.google.de/search?q=site:forum.fhem.de+monotonic

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

max78

Habe einen ET340 und der rechnet blöderweise nicht phasensaldierend.
Darum berechne ich das selber aus dem aktuellen Verbrauch.

Es schaut ganz gut aus, nur bei einem Neustart ist der Stand weg.
Habe bei den Links leider nicht das richtige gefunden, oder ich suche nach dem falschen....

Es wäre auch bei anderen berechneten Werten, z.b.: Temperatur-Mittelwert toll. Sonst bekomme ich immer einen Fehler und muss einen Startwert händisch setzen.

Es wäre toll wenn man einfach den letzten geloggten Wert, als Startwert verwenden könnte.

Otto123

#3
Meine Links beschreiben alternatives Vorgehen für die Anwendung von "Stromzählern", nicht das setzen eines Startwertes für eine Funktion aus einer Datenbank.
Für steigende Zählerstände: mach zu deinem Zählerstand ein zusätzliches userReadings mit dem modifier monotonic, das macht genau das was Du willst.
https://fhem.de/commandref_modular_DE.html#attributes

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

max78

Schade, dürfte keine einfache Lösung geben.
Ich hätte gedacht bei einem Absturz kann man einfach die letzten Werte wiederherstellen, aus einer Datenbank oder einem File.

Otto123

eingehend redest Du vom Neustart - jetzt redest Du vom Absturz. Unterschied: neustart speichert das statefile, Absturz kann das nicht.

Eine einfache Lösung dafür kenne ich nicht - aber:
Der Start von FHEM ist leicht erkennbar am Events global:initialized
Mit einem notify kannst Du darauf triggern, deine Werte aus der Datenbank lesen und die Werte setzen.

So als Idee ;)
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

max78

Es wäre super wenn es sowohl für Neustart als auch für Absturz funktioniert. (Wenn mal eine Stunde weg ist, ist es auch nicht weiter tragisch)

Danke für den Tipp mit dem notify.
Leider weiß ich nicht, wie ich in FHEM, den Wert aus der Datenbank lesen kann.

Beta-User

Zitat von: max78 am 26 September 2022, 23:57:19
Leider weiß ich nicht, wie ich in FHEM, den Wert aus der Datenbank lesen kann.
Leider scheint es bei InfluxDBLogger - im Unterschied zu DbLog - keine "get"-Aufrufe zu geben, mit denen man Werte aus der DB holen könnte => ggf. mal an den Maintainer wenden...

Zitat
Es wäre super wenn es sowohl für Neustart als auch für Absturz funktioniert. (Wenn mal eine Stunde weg ist, ist es auch nicht weiter tragisch)
a) Man kann ja durchaus jede Stunde das statefile schreiben, dann ist zumindest der letzte Wert da, selbst, wenn FHEM abschmiert...
b) Das eigentliche Problem ist, dass FHEM abschmiert. Bevor man irgendwelche Klimmzüge macht, um einen passenden würgaround zu erstellen, stellt sich doch eigentlich die Frage, warum das passiert. Normal ist es jedenfalls nicht, und für mich wäre es auch nicht hinnehmbar (wir hatten jetzt ein paar solcher Fälle analysiert, und eigentlich immer ließ sich mit relativ überschaubarem Aufwand festmachen, an was es lag...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Zitat von: max78 am 26 September 2022, 23:57:19
Leider weiß ich nicht, wie ich in FHEM, den Wert aus der Datenbank lesen kann.
Kann Dir da auch nur allgemein helfen:
Der Aufruf um einen Wert aus einer Datenbank zu holen sollte im Netz zu finden sein. Daraus lässt sich ein Script / Subroutine machen, welche man aufruft und den Wert zurückgibt. Den schreib man mit setstate einfach ins Device.

Wie man aus einem LogFile einen bestimmten Wert rausholt, habe ich letzten mal ansatzweise mit jemandem behandelt. Das such ich mal raus.

Ich meine bei einem Neustart sollte man solche würgarounds nicht benötigen. Abstürze sollten zu 99% durch Stromausfälle oder den Admin selbst ausgelöst werden, alles andere ist ein Desingfehler der nicht in FHEM an sich begründet ist.
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

Otto123

Zitat von: Otto123 am 27 September 2022, 11:30:32
Wie man aus einem LogFile einen bestimmten Wert rausholt, habe ich letzten mal ansatzweise mit jemandem behandelt. Das such ich mal raus.
Das passt nicht exakt auf deinen Fall aber mal als Beispiel ein häßlicher Einzeiler für die FHEM Kommandozeile
{my $file=InternalVal('FileLog_Wetter','currentlogfile','');; qx(grep '$today.*RegenGesamtMm' $file | tail -1 |awk '{gsub(/_/," ",\$1);;gsub(/:/,"",\$3);;print "setstate Dummy "\$1" "\$3" "\$4}' ) }
Der liest das aktuelle LogFile aus dem Device FileLog_Wetter
Durchsucht diesen nach dem letzten Eintrag von heute mit dem Reading RegenGesamtMm
Gibt einen setstate Befehl zurück den man direkt an FHEM zur Ausführung geben könnte.

Das kann man jetzt in Perl umsetzen, oder in ein shell Script schreiben. Im Shell Script könnte man die Ausgabe auch direkt mittels Telnet nach FHEM pushen (| nc 127.0.0.1 7072 -q 1 2>/dev/null) und hätte es sogar nicht blockierend.
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

max78

Danke,

werds mal mit dem statefile (und, oder get) probieren.