Volkszaehler.org

Begonnen von bgewehr, 14 Mai 2013, 21:48:33

Vorheriges Thema - Nächstes Thema

bgewehr

Ich habe es immer so gesehen:
Da der Volkszaehler in bestimmten Intervallen abgefragt wird, ist entweder der Maxwert oder der Mittelwert des Abfrageintervalls der beste Wert für fhem. From now kann man nicht viel erwarten, wenn die Daten vom Sensor nicht kontinuierlich geliefert werden. Also vielleicht wieder zurück auf meine Abfrage und ein längeres Intervall und Max als Reading auswählen?


Sent from my iPhone using Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Gernott

Hallo Bernd

Du brauchst ja meine Abfrage nur mal mit einer IP und uuid von Dir in der Browserzeile einzugeben. Wenn Du "from now" und "tuples=1" anhängst, bekommst Du das aktuellste Tupel mit den Werten (siehe mein Post oben).

Die Frage ist, warum Werte von Null nicht übergeben werden, obwohl sie vom Volkszähler in der Response zurückgeliefert werden. Könntest Du mir dabei helfen?

Mal der Versuch einer Eingrenzung:
Wenn ich die Zeile
my $max = $decoded->{data}->{max}[1]||""; in diese ändere
my $max = $decoded->{data}->{max}[1]||0;

erscheint korrekt eine Null in den readings. Also steht im Feld {max}[1] von $decoded nichts drin. Ich bin mit Perl nicht gerade fit. Wie kann ich denn eine debug-Ausgabe erzeugen. Du hast ja schon eine print-Anweisung drin. Wo erscheint denn diese Ausgabe, wenn das Modul aufgerufen wird?

Gruß
G.

bgewehr

Debugging geht per Telnet auf die Fritzbox, dort siehst Du den stdout auf der console. Telnet muss man vorher einschalten per dtmf code. Dann den Print aktivieren, dann kannst Du zusehen...


Sent from my iPhone using Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Gernott

Jetzt habe ich einige Stunden herumprobiert und das Problem der verschluckten Null gefunden. Es ist das logische ODER in Deinen Variablenzuweisungen.
Wenn in einem Array-Element die dort stehende 0 (Null) zurückgegeben wird, und danach kommt im Code das ||"", wird statt der Null der leere Wert "" zurückgeliefert.

Wie gesagt, mit dem Volkszähler war alles in bester Ordnung.

Gruß
G.

bgewehr

Interessant! Ich habe immer angenommen, dass diese || nur greifen, wenn KEIN Wert erhalten wird. Danke für die Analyse und die Lösung. Machst Du in Github ein pull request?


Sent from my iPhone using Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Gernott

Zitat von: bgewehr am 25 Januar 2014, 17:01:38
Danke für die Analyse und die Lösung. Machst Du in Github ein pull request?

Keine Ursache. Das Github überfordert meine momentanen Fähigkeiten. Weiß nicht, wie das geht und habe auch keinen Account dort.

bgewehr

OK, macht nichts! Ich ändere dann einfach selbst. Schickst Du mir Deine Version zu?


Sent from my iPhone using Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Gernott

Hallo Bernd

Ich habe nur hinten jeweils das ODER weggenommen. Hier der Code aus diesem Bereich:
my $min = $decoded->{data}->{min}[1];
  my $min_at = $decoded->{data}->{min}[0]||0;
  $min_at = localtime($min_at/1000);
  my $max = $decoded->{data}->{max}[1];
  my $max_at = $decoded->{data}->{max}[0]||0;
  $max_at = localtime($max_at/1000);
  my $average = $decoded->{data}->{average};
  my $consumption = $decoded->{data}->{consumption};
  my $from = $decoded->{data}->{from}||0;
  $from = localtime($from/1000);
  my $to = $decoded->{data}->{to}||0;
  $to = localtime($to/1000);
  my $last = $decoded->{data}->{tuples}[0][1];
  my $last_at = $decoded->{data}->{tuples}[0][0]||0;
  $last_at = localtime($last_at/1000);
  my $state=$last||"";

Eventuell kann man das bei den Zeitstempeln auch machen. Das Abfangen einer leeren Rückantwort des Volkszählers müßte man aber irgendwie noch lösen. Von daher ist das nicht wirklich fertig.

Meine Abfrage URL ist etwas vereinfacht (siehe etliche Posts weiter oben), was aber nicht im Sinne des Moduls ist. Von daher ist nicht meine komplette Datei angehängt.

Noch eine Frage. Warum übergibst Du die Werte "from" und "to" nicht als VAL an fhem, obwohl Du sie berechnest?

  my $sensor5="FROM";
  $hash->{READINGS}{$sensor5}{TIME} = $from->strftime('%Y-%m-%d %H:%M:%S');
  $hash->{READINGS}{$sensor5}{VAL} = "";
 
  my $sensor6="TO";
  $hash->{READINGS}{$sensor6}{TIME} = $to->strftime('%Y-%m-%d %H:%M:%S');
  $hash->{READINGS}{$sensor6}{VAL} = "";


Mir ist die Konvertierung in einen Zeitstempel nicht ganz schlüssig. Müßten nicht bei allen Readings dieselben Zeitstempel stehen wenn ihre Werte aus demselben Aufruf stammen?

Gruß
G.




Peter aus Calw

Hallo,
versuche eben das volkszaehlermodul in meinem FHEM zu installieren.
bereits das erste Kommando :
define <name> VOLKSZAEHLER <ip-address> <port-nr> ..............
gibt den Fehler zurück :
Cannot load module VOLKSZAEHLER
Das Modul ist aber vorhanden in Raspi :

/root/opt/fhem/FHEM/23_VOLKSZAEHLER.pm

wo liegt der Fehler ?
Gruß Peter

bgewehr

Der Vollständigkeit halber: der Fehler lag an der fehlenden Installation von JSON.pm und dem JSON Ordner...


Gesendet von meinem iPad mit Tapatalk
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Frank S.

Moin.

Ich habe in der letzten Woche auch das Modul installiert und es funktioniert gut.

Nun habe ich es erweitert, um am Ende das Tages den Verbrauch der letzten 24 Stunden zu speichern. Dazu lese ich mit einen ReadingsVal den State von Verbrauch_24h und schreibe diese in ein Logfile. Leider steht hier nun der Wert 0 drin. Habe ich etwas übersehen?

Schöne Grüße
Frank

## Berechnung Tageswert
define Strom_lastTag_log dummy
attr Strom_lastTag_log room Volkszaehler

define Berechnung_Tageswerte_Energie at *23:59:00 {\
         my $sld = ReadingsVal("Verbrauch_24h","STATE",0);;\
fhem("set Strom_lastTag_log $sld ");; \
}
attr Berechnung_Tageswerte_Energie room Volkszaehler

define FileLog_Strom_lastTag FileLog ./log/Strom_lastTag-%Y.log Strom_lastTag_log
attr FileLog_Strom_lastTag logtype text
attr FileLog_Strom_lastTag room Volkszaehler

bgewehr

Hi, das mit den fhem perl scripten ist nicht so meine Baustelle.

Stell die Frage lieber in den Anfängerfragen, da wird mir auch immer geholfen...  8)
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Zitat von: Frank S. am 15 Juni 2014, 17:10:48
Moin.

define Berechnung_Tageswerte_Energie at *23:59:00 {\
         my $sld = ReadingsVal("Verbrauch_24h","STATE",0);;\
    fhem("set Strom_lastTag_log $sld ");; \
}
attr Berechnung_Tageswerte_Energie room Volkszaehler

Ich würde vielleicht nicht den state nehmen, der ist ja mit dem Textzusatz c: verseucht. Nimm doch lieber das Consumption Reading direkt...
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Frank S.

Moin.

Danke für den Tipp. Ich habe nun den Wert "CONSUMPTION" angefragt, und es hat funktioniert.

## Berechnung Tageswert
define Strom_lastTag_log dummy
attr Strom_lastTag_log room Volkszaehler

define Berechnung_Tageswerte_Energie at *23:59:00 {\
         my $sld = ReadingsVal("Verbrauch_24h","CONSUMPTION",0);;\
fhem("set Strom_lastTag_log $sld ");; \
}
attr Berechnung_Tageswerte_Energie room Volkszaehler


Schöne Grüße
Frank

Frank S.

Moin.

Nach dem mein LogFile nun einige Zeit läuft, ist mir aufgefallen, dass der Wert CONSUMPTION nur einmal am Tag aktualisiert wird. Und zwar immer zu der Zeit, an dem der Server gestartet wurde. Dadruch kann es zur verfälschten Werten kommen. Wie bekommt man es hin, dass der Wert CONSUMPTION immer kurz vorher aktualisiert wird, wenn ich den Wert um Mitternacht abspeichere?

z.B. define at?

Schöne Grüße
Frank S.