Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:controller:vzlogger:vzlogger_conf_parameter

Dies ist eine alte Version des Dokuments!


vzlogger.conf

Eine Beschreibung der Konfigurationsdatei von vzlogger, der Übersichtlichkeit halber in Abschnitte aufgeteilt.

Formatiert ist sie nach JSON; kompakt, manuell lesbar und einfach zu parsen. Entgegen dem Standard unterstützt vzlogger auch Kommentare /*…*/ oder // innerhalb der Konfigurationsdatei.
Korrekte Kommata und Klammerung ist zwingend. Der vzlogger.conf-Editor hilft dabei. Er bietet auch eine meter- und channel-Vorauswahl und blendet dann Schlüssel aus die nicht benötigt werden.
Zeichenketten (String) müssen in Klammern gesetzt werden, Ganzzahlen (Integer) und Logische Ausdrücke (Bool) dürfen nicht. Gruppen {} und Schlüssel dürfen in root nur einmalig verwendet werden, in Arrays [] aber mehrmals.

Bestimmte Schlüssel bekommen, wenn sie nicht explizit genannt werden, bei Bedarf einen Standardwert (Default) zugewiesen.

root

Im Wurzelverzeichnis haben wir die allgemeinen Einstellungen.

{
  "retry": 0,
  "daemon": true,
  "verbosity": 0,
  "log": "/var/log/vzlogger.conf",

retry

Wartezeit in Sekunden nach einer fehlgeschlagenen Anfrage.

Typ Integer
Wert 0-?
Empfehlung 0

daemon

Betreibt vzlogger als Dienst (daemon) in den Hintergrund.
Bedingt durch einen Fehler im Code werden bei false die erfassten Daten nicht versendet, es taugt daher leider nur für Tests.

Typ Bool
Wert true/false
Empfehlung true

verbosity

Ausführlichkeit des Fehlerlogs.
In der höchsten Detailstufe werden auch alle verfügbaren OBIS-Codes eines SML-Telegramms gelistet.

Typ Integer
Wert 0 = Alarme
1 = Fehler
3 = Warnungen
5 = Informationen
10 = Diagnose
15 = Detailinformationen
Empfehlung 15 zu Beginn
0 wenn alles fehlerfrei läuft

log

Speicherort des Fehlerlogs.

Typ String
Wert Muss eine vorhandenes Verzeichnis sein auf dem schreibender Zugriff erlaubt ist.
Empfehlung „/var/log/vzlogger.log“ im Regelfall
„“ wenn S0-Impulse in schneller Folge geloggt werden da Schreibzugriffe auf SD-Karte das loggen stören können

push

Empfangsort des VZ-Push-Servers.
Über den Dienst ist es zum Beispiel möglich Daten an die VZ-Middleware zu schicken die zwar dargestellt, aber nicht gespeichert werden. Es muss parallel dazu der Push-Server der Middleware aktiviert werden.

  "push": [
    {
      "url": ""http://127.0.0.1:5582""
    }

push

Typ Array
Empfehlung [] - nicht aktiv

url

Zielort an dem die Daten in Empfang genommen werden.

Typ String
Wert eine gültige URL
Empfehlung http://127.0.0.1:5582“ für VZ

local

HTTP-Dienst (httpd) für Daten-Pull. Stellt die Daten der konfigurierten meter zu manuellen Kontrolle oder für andere Anwendungen bereit. Erspart einem z.B das Parsen des SML-Telegramms von einem eHz.
Es können alle Werte angezeigt werden für die ein channel angelegt wurde, auch jene die „api“ : „null“ konfiguriert wurden.

  "local": {
    "enabled": false,
    "port": 8081,
    "index": false,
    "timeout": 0,
    "buffer": 0
  },

local

Typ Gruppe

enabled

Aktiviert den httpd.

Typ Bool
Wert true/false
Empfehlung false

port

Der Port an dem der Dienst auf Anfragen hört. Wenn auf der selben Maschine bereits ein httpd arbeitet ist darauf zu achten das der Port nicht doppelt verwendet wird! Für HTTP ist der Standard-Port 80, PPM bieten wir üblicherweise auf 8080 an.

Typ Integer
Wert ?
Empfehlung 8081

index

Normal sollte die Anfrage auch die UUID des gewünschten channel enthalten, z.B.: http://localhost:8081/c673b290-fdac-11e0-a470-1d9351203a00. Wird der Index aktiviert werden auf Anfrage http://localhost:8081/ alle channel ausgegeben.

Typ Bool
Wert true/false
Empfehlung false bei Systemen die von öffentlichen Netzwerken aus verfügbar sind

timeout

?

Typ Integer
Wert 0-?
Empfehlung 0

buffer

? Größe des Ringspeichers ?

Typ Integer
Wert 0-?
Empfehlung 0

meters

Hier werden die Datenquellen (Zähler, Sensoren) definiert mit denen der vzlogger kommunizieren soll. Jede Quelle ist eine Gruppe von Schlüsseln, es sind also mehrere Meter möglich.
Nicht alle Paramter sind in allen Konfigurationen erforderlich oder sinnvoll. Erst werden die Allgemeinen, dann die speziellen Parameter, in Abhängigkeit von protocol, beschrieben.

Typ Array

Allgemein

  "meters": [
    {
      "enabled": false,
      "allowskip": false,
      "aggtime": -1,
      "aggfixedinterval": false,
      "protocol": "s0",
      "device": "",
      "channels": [],

enabled

Den betreffenden Meter (z.B. für Diagnosezwecke) an- oder abstellen.

Typ Bool
Wert true/false
Standard false
Empfehlung true

allowskip

Schlägt das öffnen des Meter fehl bricht vzlogger ab oder ignoriert ihn und setzt mit dem nächsten konfigurierten Meter fort.

Typ Bool
Wert true/false
Standard false
Empfehlung true - der Meter wird im Fehlerfall übersprungen

aggtime

Vzlogger kann Messwerte sammeln und zusammenfügen (aggregieren) bevor sie an die MW gesendet werden. Hier wird die Sammelzeit in Sekunden definiert. Es ist darauf zu achten, dass die aggtime nicht kürzer ist als interval.

Typ Integer
Wert 0-?
-1 deaktiviert die Funktion sicher
Standard -1
Empfehlung -1

aggfixedinterval

Für eine optisch schönere Darstellung im Frontend ist es möglich alle aggregierten Kanäle dieses Meters mit identischem Timestamp an die Middleware zu senden.

Typ Bool
Wert true/false
Standard false
Empfehlung -

protocol

Das Protokoll mit dem der Meter sendet. Der JSON-Editor hilft bei der korrekten Wahl.

Typ String
Wert „s0“ Impulssignale
„d0“ Zeilenbasierter Klartext nach DIN EN 62056-21
„sml“ SML wie es bei EDL-21, eHz und SyM2 verwendet wird
„random“ Zufallsgenerator
„file“ Auswerten einer bestehenden Datei, wird mittels format weiter parametriert
„exec“ Programmausgaben parsen
„fluksov2“ Protokoll der Flukso-Meter
„ocr“ Bilderkennung
„oms“ Open Metering System, ein Ableger von M-Bus
„w1therm“ 1-Wire-Temperatursensoren an Busmaster DS2482
Empfehlung -

device

Das Linux-Device über den der Meter angebunden ist.

Typ String
Wert „“ oder
„/dev/ttyUSB0“ und andere gültige Device mit Schreib- und Leserecht.
Empfehlung „/dev/ttyUSB0“ für einen IR-Schreib-Lesekopf mit USB-Ausgang, unnötig bei s0 an GPIO oder d0/sml über TCP/IP.

channels

So ziemlich die wichtigste Gruppe. Hier erfolgt die Zuordnung der von vzlogger gelesenen Daten zu den Kanälen der Middleware. Es sind mehrere channels in jedem meter möglich.

Bei Inbetriebnahme kann man die channels erstmal leer lassen, verbositiy = 15 setzen und im log oder dump_file schauen was für Daten und unter welchen identifier die meter zur Verfügung stellen.
      "channels": [
        {
          "uuid": "",
          "identifier": "",
          "api": "volkszaehler",
          "middleware": "http://localhost/middleware.php",
          "host": "127.0.0.1",
          "secretKey": "",
          "type": "device",
          "scaler": 1,
          "timeout" : 30,
          "aggmode": "none",
          "duplicates": 0
        }

uuid

Über die UUID werden die Kanäle der Middleware identifiziert. Sie wird beim Erstellen eines Kanals von der Middleware generiert.

Typ String
Wert z.B. „57acbef0-88a9-11e4-934f-6b0f9ecd95a8“

identifier

Über diesen String werden die Werte zu diesem channel aus den Daten des meter identifiziert. Wie der String aussieht hängt vom protocol ab.

Typ String
protocol Wert
s0 „Impulse“ oder „Impulse_neg“ für Impulse
s0 „Power“ oder „Power_neg“ dabei werden die Impulse auf Basis der resolution von Arbeit (kWh) in Leistung (W) umgerechnet
d0 z.B. „1-0:1.8.0“ OBIS-Codes
sml z.B. „1-0:1.8.0“ OBIS-Codes
random „“ bleibt immer leer
file „“ oder per $i definiert z.B. $i = $v ⇒ Temperatur = 10 ⇒ Identifier „Temperatur“, Value = 10
exec „“ oder per $i definiert z.B. $i = $v ⇒ Temperatur = 10 ⇒ Identifier „Temperatur“, Value = 10
fluksov2 z.B. „Consumption“ oder „Power“ wie bei FlukSo zu -ChannelId und +ChannelId zugewiesen
ocr z.B. „wert“ wie unter meter, identifier parametriert
oms z.B. „1.8.0“ OBIS-Codes
w1therm z.B. „28-00000450cbbd“ ID des Sensors

api

Hier wird die Programmierschnittstelle definiert über die der vzlogger Kontakt aufnehmen soll.

Typ String
Wert „volkszaehler“ für die VZ-Middleware
„mysmartgrid“ vzlogger kann auch mySmartGrid mit Daten beliefern
„influxdb“ vzlogger kann auch InfluxDB mit Daten beliefern
„null“ wenn die Werte nur über den integrierten httpd oder push bereitgestellt werden sollen
Standard „volkszaehler“
Empfehlung „volkszaehler“

middleware

Die URL über welche die api zu erreichen ist.

Typ String
Wert z.B. „http://localhost/middleware.php“ für eine VZ-Middleware auf der selben Maschine (Raspberry Image)
z.B. „https://demo.volkszaehler.org/middleware.php“ für den VZ Demo Server
Empfehlung http://localhost/middleware.php

host

Die URL über welche die InfluxDB api zu erreichen ist.

Typ String
Wert z.B. „127.0.0.1“ für eine InfluxDB auf der selben Maschine
Empfehlung „127.0.0.1“
Für InfluxDB gibt es eine Reihe weiterer, optionaler Parameter. Siehe dazu den vzlogger.conf-Editor oder die Beipielkonfguration im Git

secretKey

Schlüssel für die Kommunikation mit der mySmartGrid-api

Typ String
Wert ?
Empfehlung „“

type

Art des meter, nur für mySmartGid-api

Typ String
Wert „device“
„sensor“
Empfehlung „“

scaler

Faktor für die Werte, nur für mySmartGid-api

Typ String
Wert 0-?

timeout

Zeit in Sekunden für die Zustellung per Curl nach der die Verbindung als misslungen betrachtet wird.

Typ Integer
Standard 30

aggmode

Mathematische Art der Aggregation die der vzlogger vornehmen soll. Nur wirksam in Verbindung mit aggtime größer als 0.

Typ String
Wert „avg“ Durchschnitt, zu verwenden bei Aktualwerten wie Strom, Spannung oder Temperatur
„max“ Maximal, zu verwenden bei Zählerständen
„sum“ Summe, zu verwenden bei Impulsen
„none“ keine Aggreagtion vornehmen
Standard „none“
Empfehlung „none“

duplicates

Zeit in Sekunden in denen wiederholende, identische Werte (z.B. unveränderte Zählerstände) nicht an die api weitergeleitet werden sollen.

Typ Integer
Wert 0-?
Empfehlung 0, insbesondere bei s0-Impulsen!

protocol-spezifische Schlüssel

Jedes protocol hat eine eigene Reihe erforderlicher und optionaler Schlüssel.

s0

      "gpio": -1,
      "mmap": "",
      "gpio_dir": -1,
      "configureGPIO": true,
      "resolution": 1000,
      "send_zero": false,
      "debounce_delay": 30,
      "nonblocking_delay": 100000,

gpio

Bestimmt den GPIO am RaspberryPi an dem der Meter angeschlossen ist.

Typ Integer
Wert 4, 17, 18, 22, 23, 27, je nach verwendeter Erweiterung und Eingang.
Empfehlung -

mmap

Für hochfrequente Impulssignale können die GPIO des RaspberryPi auf Memory-Mapping umgestellt werden. Die Ports müssen manuell als Eingänge konfiguriert werden. Nur für Impulssignale!

Typ String
Wert „“ deaktiviert
„rpi1“ Raspberry A?
„rpi2“ Raspberry B?
Empfehlung „“

gpio_dir

Es kann die Zählrichtung umgekehrt werden.

Typ Integer
Wert 0 Zählung positiv
1 Zählung negativ
-1 deaktiviert die Funktion sicher
Empfehlung -1

configureGPIO

Vzlogger kann die E/A-Konfiguration des GPIO übernehmen.

Typ Bool
Wert true/false
Empfehlung true

resolution

Impulse/kWh, wird bei api:mysmartgrip und identifier:Power benötigt.

Typ Integer
Wert 1-?
Standard 1000
Empfehlung Entsprechend der Angabe auf dem Zähler

send_zero

Wenn keine Impulssignale eintreffen wird der vzlogger auch keinen Datentupel an die MW senden. Ist send_zero aktiv wird jede Sekunde ein Tuple gesendet auch wen keine Impulse registriert wurden. In Verbindung mit aggtime kann der Zeitraum vergrößert werden.

Typ Bool
Wert true/false
Standard false
Empfehlung false

debounce_delay

Bei mechanischen Impulsquellen (Reedkontakten) kann es zu Kontaktprellen kommen. Hier wird definiert wie viele Millisekunden nachfolgende Signalflanken ignoriert werden.

Typ Integer
Wert 0-?
Standard 30
Empfehlung 0 für elektronische Signalquellen. 30 oder mehr für mechanische.

nonblocking_delay

Zeitverzögerung in Nanosekunden bei aktiviertem mmap.

Typ Integer
Wert 0-?
Standard 10000
Empfehlung 10000, bei 5000 können auf einem RaspberryPi 2 Impulse mit bis zu 30kHz geloggt werden.

d0

Manche Zähler senden ihre Daten unaufgeforder alle paar Sekunden (Push), andere müssen dazu aufgefordert werden (Pull). Ob es sich um einen Pull- oder Push-Meter handelt kann mit einer Digitalkamera an der IR-Diode geprüft werden. Vielleicht ist dein Zählertyp aber auch schon im Wiki dokumentiert.

      "interval": -1,
      "host": "",
      "dump_file": "",
      "pullseq": "",
      "ackseq": "auto",
      "baudrate": 300,
      "baudrate_read": 300,
      "parity": "7e1",
      "wait_sync": "off",
      "read_timeout": 10,
      "baudrate_change_delay": 0

interval

Verzögerung zwischen Zugriffen auf Pull-Meter in Sekunden. Es ist darauf zu achten das der Meter genug Zeit hat zu antworten, z.B. wenn er seriell mit nur 300bd sendet.

Typ Integer
Wert 0-?
-1 deaktiviert die Funktion sicher
Standard -1
Empfehlung -1 bei Push-Meter
Nach Bedarf

host

Für Meter die nicht lokal sondern übers TCP/IP-Netz angebunden sind.

Typ String
Wert „“ eine gültige URL mit Port
Empfehlung „“

dump_file

Das Datentelegramm kann zu Diagnosezwecken zusätzlich in eine Datei ausgegeben werden.

Typ String
Wert „“ Muss eine vorhandenes Verzeichnis sein auf dem schreibender Zugriff erlaubt ist.
Standard „“
Empfehlung „~/d0-dump.txt“ z.B. Sollte nach der Fehlersuche aber abgestellt werden: „“

pullseq

Initialisierungssequenz für Pull-Meter.

Typ String
Wert z.B. „2F3F210D0A“
Standard „“
Empfehlung „“ bei Push-Meter
„2F3F210D0A“ bei Pull-Meter

ackseq

Nach der Initilisierungssequenz antwortet ein Pull-Meter mit einem Einzeiler, um das Datentelegramm zu erhalten ist eine Startsequenz nötig. Ev. wird dabei auch die Baudrate umgestellt. Ist aber stark vom Zähler abhängig.

Typ String
Wert „auto“
z.B. „063030300d0a“ für 300bd
z.B. „063035300d0a“ für 9600bd
Standard „“
Empfehlung „auto“

baudrate

Die serielle Geschwindigkeit mit der der Meter kommuniziert.

Typ Integer
Wert 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, u.A.
Standard 9600
Empfehlung 300

baudrate_read

Pull-Meter erlauben teilweise auch mehr als 300bd. Diese muss in der ackseq angefordert und hier dem vzlogger mitgeteilt werden.

Typ Integer
Wert 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, u.A.
Standard wie unter baudrate eingestellt
Empfehlung 300 geht eigentlich immer. Je nach Länge des Datentelegramms kann die zeitliche Auflösung aber zu wünschen übrig lassen weil interval recht groß sein muss.

parity

Frameformat der seriellen Kommunikation.

Typ String
Wert „7e1“, „8n1“, „7o1“, „7n1“
Standard „7e1“
Empfehlung „7e1“

wait_sync

Manche Zähler schicken kein Synchronisationssignal „!“ sondern weiter Datentelegramme ohne auf eine pullseq zu warten.

Typ String
Wert „off“ ?
„end“ ?
Standard „off“
Empfehlung „off“

read_timeout

Zeit in Sekunden nach denen der vzlogger die Kommunikation für beendet erachtet. Ist erforderlich falls der Zähler kein Synchronisationssignal sendet, die Startsequenz fehlt schlägt oder sonstwie Zeichen verloren gehen. Die Zeit darf aber nicht zu kurz sein sonst wird mitten im Datentelegramm abgebrochen.

Typ Integer
Wert 1-?
Standard 10
Empfehlung 10

baudrate_change_delay

Zeit in ms nach ackseq bevor die Baudrate auf baudrate_read umgestellt wird.

Typ Integer
Wert 0-?
Standard 0
Empfehlung 0, da vor umstellen der Baudrate der UART sowieso geleert wird

sml

Manche Zähler senden ihre Daten unaufgeforder alle paar Sekunden (Push), andere müssen dazu aufgefordert werden (Pull). Ob es sich um einen Pull- oder Push-Meter handelt kann mit einer Digitalkamera an der IR-Diode geprüft werden. Vielleicht ist dein Zähler aber auch schon im Wiki dokumentiert.

      "interval": -1,
      "host": "",
      "pullseq": "",
      "baudrate": 9600,
      "parity": "8n1",
      "use_local_time": false

interval

Verzögerung zwischen Zugriffen auf Pull-Meter in Sekunden. Es ist darauf zu achten das der Meter genug Zeit hat zu antworten, z.B. wenn er seriell mit nur 300bd sendet.

Typ Integer
Wert 0-?
-1 deaktiviert die Funktion sicher
Standard -1
Empfehlung -1 bei Push-Meter
Nach Bedarf

host

Für Meter die nicht lokal sondern übers TCP/IP-Netz angebunden sind.

Typ String
Wert „“ eine gültige URL mit Port
Empfehlung „“

pullseq

Initialisierungssequenz für Pull-Meter.

Typ String
Wert z.B. „2F3F210D0A“
Standard „“
Empfehlung „“ bei Push-Meter
„2F3F210D0A“ bei Pull-Meter

baudrate

Die serielle Geschwindigkeit mit der der Meter kommuniziert.

Typ Integer
Wert 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, u.A.
Standard 9600
Empfehlung 9600

parity

Frameformat der seriellen Kommunikation.

Typ String
Wert „7e1“, „8n1“, „7o1“, „7n1“
Standard „8n1“
Empfehlung „8n1“

use_local_time

Nutzt zur Erstellung des Timestamp die aktuelle Uhrzeit des Rechners („true“) statt des Zählers („false“).
Die meisten Zähler liefern im Datenstrom die Echtzeit mit. Wenn diese bei der Inbetriebnahme korrekt eingestellt wurde, verwenden wir sie um z.B. mögliche Zeitverschiebungen durch FiFo-Puffer auszuschließen. Sind die Timestamp falsch oder fehlen sogar ganz muss der vzlogger die lokale Rechnerzeit heranziehen.

Typ Bool
Wert true/false
Standard false
Empfehlung false

—-

random

Zufallsgenerator


file

Auswerten einer bestehenden Datei, wird mittels format weiter parametriert


exec

In einem exec-Kanal wird für jede Abfrage das im Parameter command angegebene Shellkommando aufgerufen und die Standard-Ausgabe dieses Kommandos geparst. Dabei kann das erwartete Format mit Hilfe des format Parameters spezifiziert werden.

  • exec-Kanäle sind nicht möglich, wenn der vzlogger als root ausgeführt wird. Durch einen Compiler-Parameter lässt sich diese Sicherheitsmaßnahme ausschalten. Es wird allerdings empfohlen, den vzlogger besser nicht als root auszuführen. In vielen Standard-Images ist dies nicht der Fall.
  • Es wird für den Aufruf eine Shell verwendet, damit sind Pipes etc in vollem Umfang möglich
  • Enthält der Formatstring kein $t, wird die aktuelle Uhrzeit als Timestamp verwendet

command

Dieses Kommando wird ausgeführt; seine Ausgabe geparst

Typ string
Wert Shell-Kommando
Beispiel Siehe Wikiseiten zum Kostal Piko oder zum DZG DVH 4013 Modbus

format

Jede Zeile der Ausgabe des command wird mit diesem Formatstring geparst und für jede Zeile ein eigener Datensatz erzeugt. Somit können sowohl mehrere Werte (z.B. verschiedene Register, die mit einem einzigen Aufruf des command ausgelesen wurden) als auch Werte unterschiedlicher Zeitstempel (z.B. man fragt die Quelle alle 30 Sekunden ab, möchte aber aus Gründen immer Batches von sechs Werten gleichzeitig in die Datenbank schreiben) mit einem einzelnen Aufruf eingetragen werden.

Typ string
Wert Formatstring
Beispiel '$t: $i = $v' für Ausgaben wie '1559656949: Gesamtenergie = 23294'
  • $t: timestamp
  • $i: identifier (beliebiger String, taucht im Channel unter identifier wieder auf)
  • $v: value

Werte ohne identifier-Angabe landen beim Channel mit '„identifier“: „“'.

Weitere Dokumentation könnte man in den Mailinglistenarchiven, z.B. hier ff., finden.


fluksov2

Protokoll der FlukSo-Meter


ocr

Bilderkennung


oms

Open Metering System, ein Ableger von M-Bus


w1therm

Für 1-Wire-Temperatursensoren am Busmaster DS2482 sind keine weiteren Parameter nötig.


Schluss

Und ganz wichtig: Klammern schließen!

     }
  ]
}
software/controller/vzlogger/vzlogger_conf_parameter.1610640850.txt.gz · Zuletzt geändert: 2021/01/14 17:14 von jau