Smartmeter: vzlogger on Orange Pi Zero

Hi,

these are the steps to install vzlogger on an Orange Pi Zero by using a volkszaehler TTL device as interface to get the measures of the electricity meter. Connect the Output to the Pin 10/GPIO199/UART1_RX

First of all install Armbian .

Enable UART1. Open /boot/armbianEnv.txt and add the device tree overlay.

overlay_prefix=sun8i-h3
overlays=uart1

Reboot the PC. If the volkszaehler TTL interface is already connected you can check if data are received.
Install python serial and start python

root@debdev ~ # apt install python3-serial
root@debdev ~ # python3

Enter the following code

import serial
# Serielle Schnittstelle konfigurieren
ser = serial.Serial('/dev/ttyS1', 9600, timeout=1)
while True:
    data = ser.read(16)  # Read 16 Bytes 
    if data:
        print(data.hex())  # print Bytes as Hex 

This should be shown something like this:

77070100100700ff0101621b52005900
000000000000060177070100240700ff
0101621b520059000000000000000601
77070100380700ff0101621b52005900
0000000000000001770701004c0700ff
0101621b520059000000000000000001
77070100200700ff0101622352ff6900
000000000009490177070100340700ff
0101622352ff69000000000000094a01
77070100480700ff0101622352ff6900
0000000000094701770701001f0700ff
0101622152fe69000000000000000401

Download, build and install vzlogger

root@debdev ~ #apt-get install extrace git-core cmake libtool dh-autoreconf uuid-dev libmicrohttpd-dev \
    build-essential pkg-config libgnutls28-dev libssl-dev libmosquitto-dev libgcrypt20-dev libcurl3-dev \
	libunistring-dev libssl-dev libsasl2-dev libcurl4-openssl-dev uuid-dev libtool libltdl-dev
	
root@debdev ~ # mkdir ~/software
root@debdev ~ # cd  ~/software
root@debdev ~ # export CMAKE_INSTALL_PREFIX=/usr/local
root@debdev ~ # wget https://raw.github.com/volkszaehler/vzlogger/master/install.sh	
root@debdev ~ # bash install.sh	vzlogger libjson libsml mqtt

Create a user vzlogger and add it to the dialout group to get access to the serial device(s)

root@debdev ~ # useradd -r -s /sbin/nologin vzlogger
root@debdev ~ # usermod -a -G vzlogger vzlogger
root@debdev ~ # usermod -a -G dialout vzlogger

Edit /etc/systemd/system/vzlogger.service and adjust as seen below

vi /etc/systemd/system/vzlogger.service
[Unit]
Description=vzlogger
After=syslog.target network.target
[Service]
User=vzlogger
Group=vzlogger
ExecStart=/usr/local/bin/vzlogger -c /etc/vzlogger.conf
ExecReload=
StandardOutput=null
ExecStartPre=-/usr/bin/mkdir -p /var/log/vzlogger
ExecStartPre=-/usr/bin/chown vzlogger:vzlogger/var/log/vzlogger

[Install]
WantedBy=multi-user.target

Add als the following lines to /etc/rc.local (before exit 0 :-))

/usr/bin/mkdir -p /var/log/vzlogger
/usr/bin/chown volkszaehler:volkszaehler /var/log/vzlogger

then you have to define your Smartmeter/electricity meter config. For me a EFR SGM-C8.

Create a file /etc/vzlogger.conf

{
"retry" : 0,                   /* how long to sleep between failed requests, in seconds */
"verbosity" : 15,               /* between 0 and 15 */
"log" : "/var/log/vzlogger/vzlogger.log",/* path to logfile, optional */

"local" : {
        "enabled" : true,      /* should we start the local HTTPd for serving live readings? */
        "port" : 8081,            /* the TCP port for the local HTTPd */
        "index" : true,         /* should we provide a index listing of available channels? */
        "timeout" : 30,         /* timeout for long polling comet requests, 0 disables comet, in seconds */
        "buffer" : 600,          /* how long to buffer readings for the local interface, in seconds */
         },
         // mqtt client support (if ENABLE_MQTT set at cmake generation)
         "mqtt": {
                 "enabled": true,  // enable mqtt client. needs host and port as well
                 "host": "10.10.254.100", // mqtt server addr
                 "port": 1883, // 1883 for unencrypted, 8883 enc, 8884 enc cert needed,
                 "cafile": "", // optional file with server CA
                 "capath": "", // optional path for server CAs. see mosquitto.conf. Specify only cafile or capath
                 "certfile": "", // optional file for your client certificate (e.g. client.crt)
                 "keyfile": "", // optional path for your client certficate private key (e.g. client.key)
                 "keypass": "", // optional password for your private key
                 "keepalive": 30, // optional keepalive in seconds.
                 "topic": "home/stromzaehler", // optional topic dont use $ at start and no / at end
                 "id": "", // optional static id, if not set "vzlogger_<pid>" will be used
                 "user": "user", // optional user name for the mqtt server
                 "pass": "mqttpw", // optional password for the mqtt server
                 "retain": false, // optional use retain message flag
                 "rawAndAgg": false, // optional publish raw values even if agg mode is used
                 "qos": 0, // optional quality of service, default is 0
                 "timestamp": false // optional whether to include a timestamp in the payload
         },
         "meters" : [
			{
					// EFR SGM-C8
					"enabled" : true,       /* disabled meters will be ignored */
					"protocol" : "sml",     /* use 'vzlogger -h' for list of available protocols */
					"device" : "/dev/ttyS1", // Serial device
					"parity": "8N1",               
					"baudrate": 9600,
					"interval": 10,
					"aggtime":30, // aggrate for 30sec and then send
					"use_local_time": true,
					"channels": [
														{
														"uuid": "034a512b-3958-4d74-a58b-caa297c6f28c", //Powershell  [system.guid]::NewGuid().Guid | Set-Clipboard
														"identifier": "1-0:1.8.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "e0d53b6d-45d7-483e-b3f0-da6832c9843b",
														"identifier": "1-0:2.8.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "c0398814-e358-405c-8ae7-1ea1ccf34882",
														"identifier": "1-0:16.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "26d47a34-ca49-4941-8459-ba82a6427f40",
														"identifier": "1-0:36.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
												{
														"uuid": "3460a86e-de8b-4168-b058-57933e8995ca",
														"identifier": "1-0:56.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_co>
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "2bd577a9-5b61-445d-aaaf-47ad664e8a94",
														"identifier": "1-0:76.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "9d6c3b8b-c4b8-469d-94d8-fb85c4e8caba",
														"identifier": "1-0:32.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "3008ee57-06c6-4f47-a426-2996126e5fb9",
														"identifier": "1-0:52.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "3d05b927-45a1-4dd8-bc29-b57d07fb6c11",
														"identifier": "1-0:72.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "9bfc0a8b-7a4e-420a-a8fb-c8a125c1b4aa",
														"identifier": "1-0:31.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "3739a365-96f7-4e4c-bfa5-c4e7c6766430",
														"identifier": "1-0:51.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "3cae1182-b5ae-43b0-b924-52cf17a21853",
														"identifier": "1-0:71.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
																										{
														"uuid": "3e9463b5-7319-403e-a597-0b02b580f0c4",
														"identifier": "1-0:81.7.1",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "c9520c8b-8341-437d-af88-c82a2325c9c2",
														"identifier": "1-0:81.7.2",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "270d1a11-f458-4a43-8f1c-301578eed7dd",
														"identifier": "1-0:81.7.4",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "ee2140ec-a9a7-423b-b565-26ddefe20303",
														"identifier": "1-0:81.7.15",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "7a2c975a-af19-41c7-887e-6097d0590f70",
														"identifier": "1-0:81.7.26",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														},
														{
														"uuid": "60aef602-d242-4bf2-af0d-86b7077ca917",
														"identifier": "1-0:14.7.0",
														"api": "null", // Nur MQTT https://wiki.volkszaehler.org/software/controller/vzlogger/vzlogger_conf_parameter#channels
														"middleware": "http://localhost",
														"aggmode": "max", // Possible avg, max, none
														"duplicates": 60
														}
					]
		

				}
        ]
}

Enable and start vzlooger

root@debdev ~ # systemctl enable vzlogger
root@debdev ~ # systemctl start vzlogger