neues Modul: VZLOGGER

Begonnen von optimizer, 05 September 2015, 23:53:59

Vorheriges Thema - Nächstes Thema

optimizer

Hallo,

für alle VOLKSZAEHLER Freunde habe ich das Modul VZLOGGER geschrieben, um ohne die VZ-Middleware Daten in FHEM speichern zu können. Da ich keine feine Auflösung brauche, habe ich die SQL-Datenbank für Volkszähler nicht installiert.
Das Linux Programm vzlogger unterstützt mittlerweile sehr viele Stromzähler (d0, SML, S0-Impulse ...) und sendet diese normalerweise an die VZ-Datenbank. vzlogger kann aber auch einen kleinen HTTP-Daemon (local > enabled = true, meters > channels > api = NULL) starten und die Rohdaten dort ausgeben. Diese Funktion nutze ich zum Auslesen des Zählerstands meines L&G d0-Zählers.

Falls Du vzlogger nicht selber compilieren möchtest, kannst du das Programm (für RaspberryPi Debian compiliert) hier herunterladen.

In der vzlogger.conf anbei sind die Minimalparameter eingetragen. Diese musst Du noch an deinen Zähler anpassen. Beachte folgendes:

  • "local" > "enabled": true // Damit wird der HTTP-Daemon gestartet
  • "local" > "buffer": 420 // positive Werte zeigen den Werte-Puffer der letzten x Sekunden an. Dies sollte mit dem Ausleseabstand in FHEM (delay) zusammenpassen, bzw. in FHEM nicht unterschritten werden.
  • "meters" > "channels" > "api" : NULL // Wenn Du die Volkszähler-Datenbank/Middleware nicht benutzen willst, setze api auf NULL
  • "meters" > "channels" > "UUID" : 123 // bei api:NULL ist eine virtuelle ID im Nummernkreis 0-9 u. a-f ausreichend, z.B. e18
In der Konfigurationsdatei vzloggerd0.conf findest du ein Beispiel für einen D0-Zähler, in vzloggerS0.conf für S0-Impulszähler.

Verwendung in FHEM:
Installier vorher den perl JSON-parser:
$ sudo cpan JSON


define <name> VZLOGGER <IP-Adresse von vzlogger> <Port> <Channel / UUID>
z.B.: define Strombezug VZLOGGER localhost 8080 180
oder: define Zaehlerstand VZLOGGER 192.168.x.y 8080 1.8.1

Wähle einen passenden Verarbeitungsmodus mit VZLOGGER_modus.
Das Ergebnis wird in die readings energy und energy_current und energy_avg geschrieben. Wenn Du das statistics Modul verwendest, werden damit sowohl delta als auch MIN/MAX Werte zum einfacheneren loggen erzeugt.
Bei Leistungswerten wird ein virtueller Zählerstand in "energy" aufsummiert. Den Offset/Aufsetzpunkt dazu kannst du mit dem Attribut VZLOGGER_offset bestimmen. Zur Info wird unter Internals das letzte Offset-setzen-Datum angezeigt.

Attribute:

  • VZLOGGER_corrF:  Korrekturfaktor/Multiplikator um reading zu übersteuern. Default = 1.0
  • VZLOGGER_modus: Wähle einen Verarbeitungsmodus:  "Zählerstand": absolute Werte, "Leistung": Leistungswerte (W, kW), "Impuls": S0-Impulse
  • VZLOGGER_offset: Zähleroffset für Verbrauchszähler zum Errechnen eines Zählerstands. Dieses Attribut wird nach dem ersten Reading gelöscht. Bitte nicht in FHEM config abspeichern, da sonst der Aufsetzpunkt jedes mal beim nächsten FHEM Start verwendet wird. 
  • VZLOGGER_resolution: Auflösung für S0-Impulse
  • VZLOGGER_unit: Einheit für state. Default = kWh
  • VZLOGGER_show0avg: auch 0-Werte anzeigen lassen
  • connectTimeout: Timeout in Sekunden für langsame Verbindungen. Default = 7
  • delay: Zeit zwischen zwei Lesevorgängen in Sekunden. Default = 120 Sekunden

Als userReadings können folgende Hilfsfunktionen verwendet werden:
- Berechnung des (Solar)Eigenverbrauchs als virtueller Zählerstand: SolarEigenverbrauch (Zählerstand Einspeisung,Zählerstand Erzeugung,Zählerstand Eigenverbrauch)
- Berechnung des Gesamtverbrauchs als virtueller Zählerstand: StromGesamtverbrauch (Zählerstand Einspeisung,Zählerstand Erzeugung,Zählerstand Bezug,Zählerstand Gesamtverbrauch)
z.B. attrib userReadings EnergyGesamtverbrauch {StromGesamtverbrauch(ReadingsVal("vz280","energy",0),ReadingsVal("Solaranlage","Total.Energy",0),ReadingsVal("vz180","energy",0),ReadingsVal("vz180","EnergyGesamtverbrauch",0))}

Hilfe bei der Fehlersuche:
1. Einstellungen in vzlogger.conf korrekt? buffer groß genug (600)? siehe auch Wiki unter VOLKSZAEHLER
2. Zeigt der http-daemon vom Linux Programm vzlogger sinnvolle Werte an? z.B. http://raspberrypi:8080/
3. Richtige Modul Definition in fhem? Stimmt host, port, uuid?
...


Änderungen:
13.10.15 Version 0.2: Unterstützung S0 Impulszähler, besseres Fehlerhandling
28.10.15 Version 0.3: Offset für s0 und Leistungswerte. Verarbeitungswahl über Attribut VZLOGGER_modus. energy_avg
06.11.15 Version 0.4: neuer Parameter f. Korrekturfaktor
13.11.15 Version 0.5: neue Hilfsfunktionen für PV-Besitzer: SolarEigenverbrauch, StromGesamtverbrauch
15.03.16 Version 0.6: bessere Durchschnittsberechnung, neues state-Format, neuer Parameter VZLOGGER_show0avg

onkel-tobi

Hi,

dass liest sich doch sehr gut.
Meinst Du das klappt performancetechnisch auf meinem fhem RPi?
Hast du die github  version von vzlogger verwendet?

Danke & Gruß,
Tobi

optimizer

Hallo Tobi,

bei mir läuft alles (FHEM + 1wire + 2x vzlogger) auf dem Raspi. Ich habe jedoch den Verdacht, dass vzlogger mit zunehmender uptime immer mehr CPU/Speicher braucht. Aber da findet sich bestimmt eine Lösung.

vzlogger hole ich immer aus github - zur Zeit Version 0.4.4 bei mir.

osid-timo

Hallo optimizer
Deine Lösungsidee hat mich begeistert
Ich habe versucht sie wie vorgeschlagen zu konfigurieren aber ich bekomme keine Daten:
"empty reading 0" siehe auch FHEM screenshot

Meine vzlogger.conf für meinen EasyMeter Q3C sieht wie folgt aus.
Und gestartet habe ich sie mit vzlogger -c  /etc/vzlogger4FHEMvzlogger.conf

{
// vzlogger.conf with minimal settings without middleware
"retry" : 30,           /* how long to sleep between failed requests, in seconds */
"daemon": true ,        /* run periodically */
"verbosity" : 15,        /* between 0 and 15 */
//"log" : "/var/log/vzlogger.log",/* path to logfile, optional */
"log" : "/home/pi/vzlogger.log",  /* path to logfile, optional */

"local" : {
    "enabled" : true,   /* should we start the local HTTPd for serving live readings? */
    "port" : 8080,   /* the TCP port for the local HTTPd */
    "index" : true,   /* should we provide a index listing of available channels if no UUID was requested? */
    "timeout" : 30,   /* timeout for long polling comet requests, 0 disables comet, in seconds */
//    "buffer" : 30   /* default=600 how long to buffer readings for the local interface, in seconds */
    "buffer" : 600   /* negative values: how many readings for the local interface */

},

"meters" : [
    {
    "enabled" : true ,                // true, Beginn EasyMeter Q3C Zähler
    "protocol" : "sml",
    "baudrate" : 9600,
    "device" : "/dev/ttyUSB0",
    "parity" : "8N1",
    "pullseq" : "2f3f210d0a",        // HEX Darstellung der Pullsequenz
    "interval" : 60,                 // Wartezeit bis zum nächsten Pull
   "channels": [{
       "api" : "NULL" ,         // ohne middleware
       "uuid" : "180",          // virtuelle UUID / Channel für FHEM
            "identifier" : "1-1:1.8.0",  // /* Wirkarbeit Bezug +A T0*/
        }]

    }]
}

Die Abfrage http://192.168.178.37:8080/  ergibt:
{ "version": "0.4.2", "generator": "vzlogger", "data": [ { "uuid": "180", "last": 0, "interval": 60, "protocol": "sml" } ] }


was ist an der Konfiguration anzupassen, damit ich Daten bekomme
Gruß Oswald
FHEM Pi3: 1* CUL, 30* Homematic, 10* EnOcean
FHEM Pi3: IR-Lesekopf, BT->SMA
FHEM Pi3: ZHK, 1-wire, 1* VBus   Resol DeltaSol BS

optimizer

#4
Hallo Oswald,

freut mich, dass dir mein Lösungsansatz gefällt.

Das Auslesen funktioniert laut log-Datei schon mal. Probier mal ob "1-1:1.8.0*255" als identifier. Es könnte aber auch an "alten" Version liegen, da es mittlerweile 0.4.5 gibt.

Gruß
optimizer

osid-timo

Hallo optimizer,
der Tipp mit Update auf 0.4.5 bringt die Lösung, *255 hat keine Veränderung erbracht

nach einem reboot klappen dann auch mehrere Kanäle
danke für die Unterstützung
FHEM Pi3: 1* CUL, 30* Homematic, 10* EnOcean
FHEM Pi3: IR-Lesekopf, BT->SMA
FHEM Pi3: ZHK, 1-wire, 1* VBus   Resol DeltaSol BS

optimizer

#6
Nachdem man mit vzlogger auch S0 Impulse loggen kann, habe ich mein Modul nun etwas angepasst (Version 0.2): Man kann nun einen größeren Puffer (z.B. local>buffer:240 ) in der vzlogger.conf mit kürzeren Leseabständen in FHEM nutzen, um keine Daten zu verlieren. Bereits verarbeitete Zeitstempel werden einfach "überlesen". Bin noch am überlegen, ob ich noch eine Durchschnittsberechnung einbaue, oder die Funktion in vzlogger nutze.

Bitte vzlogger ab Version vzlogger v0.4.6 based on heads/master-0-gf5e1c4158d verwenden. Darin wurden buffer-overflow Probleme in der NULL-api beseitigt.

vzlogger.conf für S0 mit NULL-Api :

{
"retry" : 30,                   /* how long to sleep between failed requests, in
"daemon": false ,               // run periodically
"verbosity" : 15,               /* between 0 and 15 */
//"log" : "/var/log/vzlogger.log",/* path to logfile, optional */
//"log" : "/home/pi/vzloggers0.log",/* path to logfile, optional */

"local" : {
    "enabled" : true,   /* should we start the local HTTPd for serving live read
    "port" : 8080,              /* the TCP port for the local HTTPd */
    "index" : true,             /* should we provide a index listing of availabl
    "timeout" : 30,             /* timeout for long polling comet requests, 0 di
    "buffer" : 240 /* default=600 how long to buffer readings for the local inte

},

"meters" : [
{
    "enabled" : true , // 11.9. nach http://wiki.volkszaehler.org/hardware/contr
    "allowskip": false,
    "protocol" : "s0",
    "resolution": 2000, // Resolution of your meter
    "gpio": 18,         // GPIO Pin of your Raspi
    "configureGPIO": true,
    "debounce_delay": 0,
    "interval": -1,
//    "aggtime": 10,  // auf meter-level: aggregate all signals and give one upd
    "channels": [{
            "api" : "NULL" ,
            "uuid" : "e18", // virtuelle uuid. nur Buchstaben von a - f u. Zahle
            "identifier" : "Power", // "Power" oder "Impulse" für Impulszähler
            "type": "device",
            "scaler": 1,
//          "aggmode": "AVG",   
            "aggmode": "none", 
            "duplicates": 0     // neu
            }]
    }]
}




Gruß
optimizer

onkel-tobi

#7
Hi,

also nachdem ich heute doch ziemlich oft falsche Parameter gesetzt habe, aktualisiere ich hier noch mal den Status.

vzlogger startet inzwischen und ich erhalte folgendes log:
[Oct 17 22:41:03][]     Startup done.
[Oct 17 22:41:05][mtr0] Got 4 new readings from meter:
[Oct 17 22:41:05][mtr0] Reading: id=1-0:1.8.0*255/ObisItentifier:1-0:1.8.0*255 value=5603362.10 ts=1445114465850
[Oct 17 22:41:05][mtr0] Reading: id=1-0:1.8.1*255/ObisItentifier:1-0:1.8.1*255 value=5603362.10 ts=1445114465850
[Oct 17 22:41:05][mtr0] Reading: id=1-0:1.8.2*255/ObisItentifier:1-0:1.8.2*255 value=0.00 ts=1445114465850
[Oct 17 22:41:05][mtr0] Reading: id=1-0:16.7.0*255/ObisItentifier:1-0:16.7.0*255 value=332.90 ts=1445114465850
[Oct 17 22:41:05][sml]  sending pullsequenz send (len:5 is:5).


Allerdings kann ich trotz
    "local": {
        "enabled": true,   // enable local HTTPd for serving live readings
        "port": 8080,       // TCP port for local HTTPd
        "index": true,      // provide index listing of available channels if no UUID was requested
        "timeout": 30,      // timeout for long polling comet requests in seconds (0 disables comet)
        "buffer": -1        // HTTPd buffer configuration for serving readings, default -1
                            //   >0: number of seconds of readings to serve
                            //   <0: number of tuples to server per channel (e.g. -3 will serve 3 tuples)
    },
keine Daten auf port 8080 abrufen...
Auf port 8080 läuft nichts.
Hat da noch wer eine Idee?

Danke & Gruß,
Tobi

optimizer

Hallo Tobi,

du hast hoffentlich beim rumprobieren jedesmal vzlogger gekillt.
Erscheint im log der Start von HTTPd?: [http] Starting local interface HTTPd on port 8081
Alternativ würd ich einen anderen port (z.B. 8081 ) probieren.


pejonp

#9
Zitat von: optimizer am 05 September 2015, 23:53:59
Hallo,

für alle VOLKSZAEHLER Freunde habe ich das Modul VZLOGGER geschrieben, um ohne die VZ-Middleware Daten in FHEM speichern zu können.
..............
Hallo optimizer,

ich wollte meinen Hauszähler Siemens TD3511 auch erst über den VZLOGGER anbinden, bin aber damit nicht zu rande gekommen. Ich habe die Einbindung über ein Perscript in FHEM realisiert. In diesem wird auch von 300 Baud auf 19200 umgeschalten.

define TD3511 at +*00:01:00 {fhem "trigger TD3511 ".`FHEM/td3511.pm &`}
attr TD3511 room HausZaehler
attr TD3511 verbose 1
define FileLog_TD3511 FileLog ./log/TD3511Log-%Y-%m.log TD3511
attr FileLog_TD3511 room HausZaehler
define SVG_FileLog_TD3511_1 SVG FileLog_TD3511:SVG_FileLog_TD3511_1:CURRENT
attr SVG_FileLog_TD3511_1 room HausZaehler

Jörg
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

onkel-tobi

#10
Zitat von: optimizer am 18 Oktober 2015, 15:48:23
du hast hoffentlich beim rumprobieren jedesmal vzlogger gekillt.
jawohl.
Zitat
Erscheint im log der Start von HTTPd?: [http] Starting local interface HTTPd on port 8081
Alternativ würd ich einen anderen port (z.B. 8081 ) probieren.
Ich hatte in der Tat das Problem, dass ich scheinbar den httpd nicht mit installiert habe bis heute Mittag über die install.sh.
Seitdem bekomme ich auch folgendes im log:
[Oct 18 19:06:50][http] Starting local interface HTTPd on port 8080
[Oct 18 19:06:50][sml]  sending pullsequenz send (len:5 is:5).
[Oct 18 19:06:50][chn0] Start logging thread for NULL-api. Running as daemon: yes
[Oct 18 19:06:50][]     Startup done.
[Oct 18 19:06:50]       Opened logfile /var/log/vzlogger.log
[Oct 18 19:06:50][push] No pushDataServer defined.
[Oct 18 19:06:50][]     ===> Start meters
[Oct 18 19:06:50][mtr0] Meter connection established
[Oct 18 19:06:50][mtr0] Meter thread started
[Oct 18 19:06:50][mtr0] Meter is opened. Starting channels.
[Oct 18 19:06:50][mtr0] Number of readers: 32
[Oct 18 19:06:50][chn0] Logging thread started
[Oct 18 19:06:50][chn0] Start logging thread for NULL-api. Running as daemon: yes
[Oct 18 19:06:50]       Opened logfile /var/log/vzlogger.log
[Oct 18 19:06:50][push] No pushDataServer defined.
[Oct 18 19:06:50][]     ===> Start meters
[Oct 18 19:06:50][mtr0] Meter connection established
[Oct 18 19:06:50][mtr0] Meter thread started
[Oct 18 19:06:50][mtr0] Meter is opened. Starting channels.
[Oct 18 19:06:50][mtr0] Number of readers: 32
[Oct 18 19:06:50][chn0] Logging thread started
[Oct 18 19:06:50][http] Starting local interface HTTPd on port 8080
[Oct 18 19:06:50][chn0] Start logging thread for NULL-api. Running as daemon: yes
[Oct 18 19:06:50][]     Startup done.

Es beibt allerdings dabei, dass auf port 8080 nichts horcht. Port ändern bringt auch nichts...

pi@raspberrypi ~ $ nmap localhost

Starting Nmap 6.00 ( http://nmap.org ) at 2015-10-18 19:12 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0019s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 991 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
25/tcp    open  smtp
111/tcp   open  rpcbind
587/tcp   open  submission
1234/tcp  open  hotline
8083/tcp  open  us-srv
8084/tcp  open  unknown
8085/tcp  open  unknown

Noch eine Idee?

Update:
Ich werd verrückt. Wenn ich vzlogger einfach mit -l starte, klappts...
Aber wieso stand vorher auch im log, dass der httpd gestartet wurde?
Noch eine andere Frage, mein Zählerstand wir din Watt ausgegeben, wie passe ich das ma Besten in kWh an?

Gruß & Danke,
Tobi

osid-timo

#11
Hallo Tobi,
eine Version mit dem Volkszähler Image läuft bei mir, lediglich alle paar Tage gibt es über httpd keine Daten mehr, den vzlogger neu gestartet und alles ist für ein paar Tage wieder ok.

Aus diesem Grund wollte ich ein schlankere Implementierung installieren und habe auf ein Image mit FHEM die vzlogger Installation hinterhergeschoben, aber dabei bin ich in die gleiche Situation gekommen:
keine httpd Verbindung wird hergestellt!

Was fehlt an der Installation?

Gruß osid-timo
FHEM Pi3: 1* CUL, 30* Homematic, 10* EnOcean
FHEM Pi3: IR-Lesekopf, BT->SMA
FHEM Pi3: ZHK, 1-wire, 1* VBus   Resol DeltaSol BS

onkel-tobi

Hi,
hast Du mal ein vzlogger -l probiert?

Gruß,
Tobi


Gesendet von iPhone mit Tapatalk

osid-timo

Hallo Tobi,
vzlogger -l bringt bei mir keinen Unterschied
bei mir bleibt der Port 8080 nicht verfügbar

wer hat eine Idee um die Installation doch noch komplett durchzuführen

Gruß osid-timo
FHEM Pi3: 1* CUL, 30* Homematic, 10* EnOcean
FHEM Pi3: IR-Lesekopf, BT->SMA
FHEM Pi3: ZHK, 1-wire, 1* VBus   Resol DeltaSol BS

onkel-tobi

Hi osid,

gehe mal davon aus, dass Du via git installiert hast?
Du findest da im VZ dann eine install.sh, füre die mal als root aus.

Gruß,
Tobi