Volkszaehler.org

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

Vorheriges Thema - Nächstes Thema

bgewehr

Hier das neueste Volkszaehler.org Modul für fhem.

Das Reading, welches als state genommen werden soll, kann im define gewählt werden, also:

define <name> VOLKSZAEHLER <ip-address> <port-nr> <channel> <state:last/min/max/average/consumption> <poll-delay>

Beispiele:

#Kanal im Volkszaehler, der den Momentanverbrauch per I/R-Lesekopf ermittelt, alle 60 Sekunden davon der Mittelwert
define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf average 60
attr Verbrauch_aktuell delay 60
attr Verbrauch_aktuell group Strom
attr Verbrauch_aktuell room Volkszaehler

#In fhem loggen, um einen Graphen daraus zu zeigen
define FileLog_Verbrauch_aktuell FileLog ./log/Verbrauch_aktuell-%Y-%m.log Verbrauch_aktuell
attr FileLog_Verbrauch_aktuell group Volkszaehler
attr FileLog_Verbrauch_aktuell logtype text
attr FileLog_Verbrauch_aktuell room Z_Log

#der Graph dazu
define FilePlot_Verbrauch_aktuell weblink fileplot FileLog_Verbrauch_aktuell:Volkszaehler:CURRENT
attr FilePlot_Verbrauch_aktuell label "Stromverbrauch: $data{currval1}"
attr FilePlot_Verbrauch_aktuell room Volkszaehler

#Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, jede Stunde davon der letzte Wert
define Zaehlerstand VOLKSZAEHLER 192.168.178.45 80 ebb9c9b0-7058-11e2-b5ed-d12ec87a3a7f last 1800
attr Zaehlerstand delay 1800
attr Zaehlerstand group Strom
attr Zaehlerstand room Volkszaehler

#Kanal im Volkszaehler, der den Zählerstand per I/R-Lesekopf ermittelt, alle 24 Stunden davon der Verbrauch
define Verbrauch_24h VOLKSZAEHLER 192.168.178.45 80 635481a0-6fcd-11e2-8587-eda25228f8bf consumption 86400
attr Verbrauch_24h group Strom
attr Verbrauch_24h room Volkszaehler


Die neuesten Versionen befinden sich im GIT: http://github.de/bgewehr/fhem

Das File 23_VOLKSZAEHLER.pm kommt ins Verzeichnis \\fritz.box\FRITZ.NAS\fhem\FHEM

Zusätzlich braucht Ihr JSON for Perl, also cpan JSON eingeben und das Modul installieren.

Als Ergebnis erhält man (z. B.) folgendes:

(siehe Anhang / see attachement)
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

Hier noch die gplot-Datei für die Diagramme (nur 5 Anlagen zugelassen pro Post!)

Sie muss ins Verzeichnis \\fritz\FRITZ\fhem\www\gplot.

Diese muss noch individuell an das gewählte Reading angepasst werden!
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

Bitte schaut ab sofort ins fhem-Wiki, dort sind die aktuellen Dinge verlinkt!

http://www.fhemwiki.de/wiki/Volkszaehler
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

Ich nutze aktuell Dein Volkszähler-Modul im Probebetrieb, um später einmal bedingungsabhängig eine Steckdose zu schalten. Dabei taucht folgendes Problem auf, wenn sich der betreffende Zählerstand nicht verändert hatte, z.B. weil kein Bezug oder keine Lieferung im letzten Intervall erfolgt ist.
Dann liefert die Middlewareabfrage eine leere Rückantwort, z.B.:

{"version":"0.2","data":{"uuid":"<UUID>","from":"1380744043614","to":"1380744643473","average":0,"consumption":0,"rows":3}}

Wenn ich nun bei einem Zähler den "max"-Wert abfrage, ist die Antwort leer. Eigentlich bräuchte man eine numerische Null. Ist es als Abhilfe sinnvoll, in diesem Fall einen Rückgabewerte von Null im Modul zu erzeugen, damit keine leere Rückantwort erfolgt?

Die Rückgabe mit Zählerstandsänderung sieht z.B. so aus:
{"version":"0.2","data":{"uuid":"<UUID>","from":"1380744643473","to":"1380745242341","min":[1380744942402,304.862],"max":[1380744942402,304.862],"average":152.688,"consumption":25.4,"rows":3,"tuples":[[1380744942402,304.862,1]]}}

Ich könnte zwar "consumption" auslesen, da dort immer ein numerischer Wert zurückgegeben wird, hantiere aber bisher lieber mit dem Stundenwert aus "max", anstelle des 5 Minuten-Wertes in "consumption". -- Gerade sehe ich, daß "consumption" auch einen leeren Wert zurückliefert. In den Readings findet man ein Datum, statt der Null.
Readings
AVERAGE 2013-10-02 22:46:22
CONSUMPTION 2013-10-02 22:46:22
FROM 2013-10-02 22:35:40
LAST 1970-01-01 01:00:00
MAX 1970-01-01 01:00:00
MIN 1970-01-01 01:00:00
TO 2013-10-02 22:45:40

Geht also auch nicht. Was läuft da bei mir schief? Könnte es ein Problem bei der JSON-Dekodierung sein?

Viele Grüße
G.

bgewehr

Hallo!

Ich habe die Erfahrung gemacht, dass es sinnvoll ist, die Anzahl der abgefragten Tupel zu erhöhen, um sicherer eine  vernünftige Antwort zu bekommen.

Probier das doch bitte zuerst aus!

Gruß Bernd
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

es scheint eine Besonderheit der Middleware zu sein, keine Tupel auszugeben, wenn sich Zählerstände nicht ändern. Ich habe Deine Zeile im Browser eingegeben und die Anzahl der Tupel stark erhöht. es kommen trotzdem keine anderen Informationen. Ich nutze das z.B. aus, um per periodischem Shell-Script herauszufunden, wann der vzlogger neue Daten einliefert und schicke dann den Zählerstand eines Wechselrichters zeitnah hinterher, um die Zählerstände einigermaßen zu synchronisieren.

Noch ein paar Informationen. Die betreffenden Daten bei mir sind vom Typ "Stromzaehler", d.h. in der mysql-Datenbank stehen die Zählerstände. Der Erfassungszeitraum ist 5 min. Wenn es in dem Zeitraum, der bei Dir als delay definiert ist, keine Änderung gibt, kommen keine Tupel.

Dieses Verhalten der Middleware könnte man jetzt in volkszaehler-dev diskutieren. Möglicherweise ist das kein Bug, sondern ein Feature. was mich nur wundert, daß auch bei den reading "consumption" keine Null übergeben wird, sondern ein Datum drinsteht. Das muß irgendwie in Deinem Modul geschehen.

Soll ich mal eine Anfrage bei volkszaehler-dev initiieren? Vielleicht ist das inzwischen gelöst. Ich habe ein vz-Image auf dem Raspi vom Anfang des Jahres und seitdem nicht aktuallisiert. Soweit läuft es ja. Mit dem git-zeugs kenne ich mich auch nicht aus.

Viele Grüße
G.

bgewehr

Ja, ich denke das ist dort richtig platziert! Man hat vor kurzem so einige Optimierungen an der Middleware diskutiert .. Bin gespannt, wa Du erreichen kannst! Lass Dich von Thorben nicht abschrecken!
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

Habe vorsichtshalber erstmal die Volkszähler-Scripte auf den aktuellen Stand gebracht. Damit hat sich das Problem der nicht vorhandenen Tupel erledigt. Den aktuellen Stand, z.B. vom Bezug erhält man mit dem Browseraufruf

http://<IP>/middleware.php/data/<Bezug_uuid>.json?from=now&tuples=1

Die Antwort der Middleware ist jetzt
{"version":"0.3","data":{"uuid":"<Bezug_uuid>","from":1381597809000,"to":1381598109000,"min":[1381597809000,567.6],"max":[1381597809000,567.6],"average":567.6,"consumption":47.3,"rows":1,"tuples":[[1381597809000,567.6,1]]}}

Ich habe in meinem Modul mal den Aufruf auf "from=now&tuples=1" geändert. Jetzt steht der letzte 5 min Wert in allen Readings, so wie in der Middleware-Rückgabe im Browser.

Das sollte zumindest für mich jetzt soweit passen.

Viele Grüße
G.

PowderK

Hy bgwehr

Ich nutzte dein Volkszählermodul nun schon einige Zeit ohne Probleme. Es sind jedoch einige fragen bei mir aufgetaucht.

Ich habe zwei Tarife und möchte den "Verbrauch" einzeln erfassen. Ich lasse jede Stunde einmal den Zählerstand loggen. Ist es möglich daraus die Differenz zu erfassen ?

Alternativ erfasse ich alle 24h den Mittelwert des Verbrauchs
Ist es dort möglich
1. eine genaue Zeit anzugeben wann abgelesen wird und
2. den Verbrauch um den faktor 1000 zu dividieren um daraus die kwh zu ermitteln?

hier mal meine Konfiguration

###############
# Volkszähler #
###############


# Zählerstand NT #

define Tarif_NT VOLKSZAEHLER 192.168.178.26 80 aa22d480-5c40-11e3-981d-d510040c44ac last 1800
attr Tarif_NT delay 1800
attr Tarif_NT room Volkszaehler
define Tarif_WP_1 FileLog ./log/NT-%Y-%m.log Tarif_NT
attr Tarif_WP_1 logtype text
attr Tarif_WP_1 room Log

# Zählerstand HT #

define Tarif_HT VOLKSZAEHLER 192.168.178.26 80 8a044550-5c40-11e3-9614-cdae29693371 last 1800
attr Tarif_HT delay 1800
attr Tarif_HT room Volkszaehler
define WP_2 FileLog ./log/HT-%Y-%m.log Tarif_HT
attr WP_2 logtype text
attr WP_2 room Log

# Aktueller Verbrauch WP #

define Verbrauch_aktuell VOLKSZAEHLER 192.168.178.26 80 94bc6a00-5377-11e3-ab45-33131f4d2469 average 10
attr Verbrauch_aktuell delay 10
attr Verbrauch_aktuell room Volkszaehler
define Strom_WP_3 FileLog ./log/Strom_Cur-%Y-%m.log Verbrauch_aktuell
attr Strom_WP_3 logtype text
attr Strom_WP_3 room Log

define Verbrauch_24h VOLKSZAEHLER 192.168.178.26 80 94bc6a00-5377-11e3-ab45-33131f4d2469 consumption 86400
attr Verbrauch_24h delay 86400
attr Verbrauch_24h room Volkszaehler
define Strom_WP_3_24h FileLog ./log/Strom_24h-%Y-%m.log Verbrauch_24h
attr Strom_WP_3_24h logtype text
attr Strom_WP_3_24h room Log

Rohan

Hi,

Zitat von: PowderK am 11 Dezember 2013, 10:35:59
.... Ist es möglich daraus die Differenz zu erfassen ?
...
2. den Verbrauch um den faktor 1000 zu dividieren um daraus die kwh zu ermitteln?

Ein Großteil deiner Fragen wird hier beantwortet => http://forum.fhem.de/index.php/topic,16868.0.html

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Darth.Weber

Hallo  Forum  8)

ich habe die JSON.pm, 23_VOLKSZAEHLER.pm sowie Convertert.pm und Parser so wie in der Anleitung beschrieben kopiert, aber FHEM liefert nur "Cannot load module VOLKSZAEHLER"
im Log steht immer: Compilation failed in require at ./FHEM/23_VOLKSZAEHLER.pm line 31, <$fh> line 144.

probehalber nach Tip vom bernd im /var/InternerSpeicher/fhem/FHEM darin:
23_VOLKSZAEHLER.pm
JSON.pm
JSON/Converter.pm
JSON/Parser.pm

leider immer der o.a. Fehler. Kann mir jemand helfen ? chown und chmod sind auch so wie die anderen pm Dateien

Gernott

Hallo Bernd

Nochmal eine Frage. Wenn in der Volkszähler-Datenbank sich die Zählerstände nicht ändern, erhält man mit der Webabfrage

http://192.168.1.200/middleware.php/data/<uuid>.json?from=now&tuples=1

die Antwort
{"version":"0.3","data":{"uuid":"<uuid>","from":1390517166000,"to":1390517286000,"min":[1390517166000,0],"max":[1390517166000,0],"average":0,"consumption":0,"rows":1,"tuples":[[1390517166000,0,1]]}}.

Dein Modul meldet aber dann keine Null zurück, sondern eine leere Antwort in allen Readings.
Wenn die Zähler sich ändern, werden Werte größer Null korrekt angezeigt.

Woran könnte das liegen?

Viele Grüße
G.

bgewehr

Hallo, Gernott,
dies ist eine Funktion der VZ-Middleware. Bitte stelle die Frage in der Volkszaehler Mailingliste!
Wenn Du was rausfindest, lass es mich bitte wissen.
Danke und Gruß
Bernd


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

bgewehr

@Genott: Benutzt Du die letzte Version aus Github?


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 24 Januar 2014, 07:08:17
Hallo, Gernott,
dies ist eine Funktion der VZ-Middleware.
Hallo Bernd
Das sollte in Ordnung sein. Als Resultat meiner Browser-Abfrage kommt eine Antwort von der Middleware, in der die Nullen stehen.

{
"version": "0.3",
"data": {
"uuid": "<uuid>",
"from": 1390599006000,
"to": 1390599125000,
"min": [1390599006000,
0],
"max": [1390599006000,
0],
"average": 0,
"consumption": 0,
"rows": 1,
"tuples": [[1390599006000,
0,
1]]
}
}


Sie werden nur nicht gelesen, warum auch immer. Was müßte ich denn einstellen, um zum debugging die komplette Response der Middleware in fhem angezeigt zu bekommen? Nicht, daß fhem die Nullen verschluckt und dann ein leeres Feld zurückgibt.

Das ist übrigens eine Response mit Werten >0, die seltsamerweise korrekt gelesen werden:

{
"version": "0.3",
"data": {
"uuid": "<uuid>",
"from": 1390599006000,
"to": 1390599125000,
"min": [1390599006000,
381.176],
"max": [1390599006000,
381.176],
"average": 381.176,
"consumption": 12.6,
"rows": 1,
"tuples": [[1390599006000,
381.176,
1]]
}
}


Meine Version enspricht Deiner Github-Version. ich hatte nur mal den Abfragestring geändert (auf "from=now", siehe letztes Post und die Response dazu).

Gruß
G.