Installatie: Remote datalogger

Waarschuwing

Het script voor de remote datalogger is op de schop gegaan in DSMR-reader v4.1. Mocht je een eerdere versie gebruiken, overweeg dan om deze opnieuw te installeren met de nieuwere versie hieronder.

Dit installeert een datalogger, die telegrammen doorstuurt naar een installatie van DSMR-reader op afstand, via de API.

Notitie

Voor de duidelijkheid, er zouden twee omgevingen moeten zijn:

  • Het apparaat waar de remote datalogger op draait
  • Het apparaat (of server) waarop de ontvangende DSMR-reader-instantie draait

Ontvangende DSMR-reader-instantie

Zorg ervoor dat je eerste de API van de ontvangende DSMR-reader-instantie klaar hebt staan. Je kunt daar de API inschakelen en bijbehorende API-sleutel inzien/bewerken in de configuratie.

Notitie

Wanneer je slimme meter alleen DSMR v2 ondersteunt (of je gebruikt een niet-Nederlandse slimme meter), zorg er dan voor dat je de DSMR-versie aanpast in de datalogger-configuratie, zodat DSMR-reader de telegrammen goed kan verwerken.

Verder kun je hier het datalogger proces uitschakelen, gezien die toch niet nodig is:

sudo rm /etc/supervisor/conf.d/dsmr_datalogger.conf
sudo supervisorctl reread
sudo supervisorctl update

Apparaat met remote datalogger

Wissel naar het apparaat waarop je de remote datalogger wilt installeren.

Voer uit:

# Packages
sudo apt-get install -y supervisor python3 python3-pip python3-virtualenv virtualenvwrapper

# System user
sudo useradd dsmr --home-dir /home/dsmr --create-home --shell /bin/bash
sudo usermod -a -G dialout dsmr
sudo chown -R dsmr:dsmr /home/dsmr/

# Virtual env
sudo -u dsmr mkdir /home/dsmr/.virtualenvs
sudo -u dsmr virtualenv /home/dsmr/.virtualenvs/dsmrreader --system-site-packages --python python3
sudo sh -c 'echo "source ~/.virtualenvs/dsmrreader/bin/activate" >> /home/dsmr/.bashrc'

# Requirements
sudo -u dsmr /home/dsmr/.virtualenvs/dsmrreader/bin/pip3 install pyserial==3.4 requests==2.24.0 python-decouple==3.3

Datalogger script

Maak een nieuw bestand /home/dsmr/dsmr_datalogger_api_client.py met deze inhoud: dsmr_datalogger_api_client.py op GitHub

Of voer het volgende uit om het direct op bovenstaand pad te downloaden:

sudo wget -O /home/dsmr/dsmr_datalogger_api_client.py https://raw.githubusercontent.com/dennissiemensma/dsmr-reader/v4/dsmr_datalogger/scripts/dsmr_datalogger_api_client.py

API-configuratie (.env)

Notitie

Je bent niet verplicht om het .env-bestand te gebruiken. Als alternatief kun je alle instellingen hieronder ook als systeem-omgevingsvariabelen instellen.

Maak een ander bestand genaamd /home/dsmr/.env aan en zet daar de volgende inhoud in:

### The DSMR-reader API('s) to forward telegrams to:
DATALOGGER_API_HOSTS=
DATALOGGER_API_KEYS=

Houd het bestand open voor meerdere wijziginge / toevoegingen hieronder.

Voeg het schema (http:///https://) en hostnaam/poort toe aan DATALOGGER_API_HOSTS. Voeg de API key toe aan DATALOGGER_API_KEYS. Bijvoorbeeld:

# Example with default port:
DATALOGGER_API_HOSTS=http://12.34.56.78
DATALOGGER_API_KEYS=1234567890ABCDEFGH

# Example with non standard port, e.g. Docker:
DATALOGGER_API_HOSTS=http://12.34.56.78:7777
DATALOGGER_API_KEYS=0987654321HGFEDCBA

Notitie

Gebruik je dezelfde remote datalogger voor meerdere instanties van DSMR-reader? Gebruik dan DATALOGGER_API_HOSTS en DATALOGGER_API_KEYS als komma-gescheiden lijsten:

# Example with multiple DSMR-reader installations:
DATALOGGER_API_HOSTS=http://12.34.56.78,http://87.65.43.21:7777
DATALOGGER_API_KEYS=1234567890ABCDEFGH,0987654321HGFEDCBA

### API host "http://12.34.56.78"      uses API key "1234567890ABCDEFGH"
### API host "http://87.65.43.21:7777" uses API key "0987654321HGFEDCBA"

Seriële poort of netwerk socket instellen?

Kies hieronder voor ofwel A. of B..

A. Seriële poort (.env)

Gebruik je een kabel om telegrammen direct vanaf de seriële poort uit te lezen?

Voeg dan de volgende inhoud toe aan /home/dsmr/.env:

DATALOGGER_INPUT_METHOD=serial
DATALOGGER_SERIAL_PORT=/dev/ttyUSB0
DATALOGGER_SERIAL_BAUDRATE=115200

Als je een andere poort of baud waarde gebruikt, wijzig dit dan in DATALOGGER_SERIAL_PORT / DATALOGGER_SERIAL_BAUDRATE.

B. Netwerk socket (.env)

Gebruik je een netwerk socket voor het uitlezen van de telegrammen? Bijvoorbeeld: ser2net.

Voeg dan de volgende inhoud toe aan /home/dsmr/.env:

DATALOGGER_INPUT_METHOD=ipv4
DATALOGGER_NETWORK_HOST=
DATALOGGER_NETWORK_PORT=

Stel de hostnaam of IP-adres in als DATALOGGER_NETWORK_HOST``en de poort als ``DATALOGGER_NETWORK_PORT.

Overige instellingen (.env)

De volgende instellingen zijn optioneel en kunnen naar wens aangepast worden, wanneer nodig:

  • DATALOGGER_TIMEOUT: De tijd in seconden dat maximaal gewacht wordt op de datalogger en de ontvangende DSMR-reader API. Laat weg om de standaardwaarde te gebruiken.
  • DATALOGGER_SLEEP: De tijd in seconden dat de remote datalogger pauseert, nadat deze een telegram naar de DSMR-reader API heeft verstuurt. Laat weg om de standaardwaarde te gebruiken.
  • DATALOGGER_DEBUG_LOGGING: Stel in op true of 1 om uitgebreide debug-logging in te schakelen. Laat weg om uit te schakelen. Waarschuwing: Indien voor langere tijd ingeschakeld kan dit bijdragen aan de slijtage van je SD-kaartje op een Raspberry Pi!

Supervisor

Notitie

De stappen hieronder zijn eveneens bedoeld voor het apparaat waar je net de remote datalogger op geinstalleerd hebt.

Maak een nieuwe Supervisor-config in /etc/supervisor/conf.d/dsmr_remote_datalogger.conf met inhoud:

[program:dsmr_remote_datalogger]
command=/home/dsmr/.virtualenvs/dsmrreader/bin/python3 -u /home/dsmr/dsmr_datalogger_api_client.py
pidfile=/var/tmp/dsmrreader--%(program_name)s.pid
user=dsmr
group=dsmr
autostart=true
autorestart=true
startsecs=1
startretries=100
stopwaitsecs=20
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=3

Laat Supervisor zijn eigen instellingen uitlezen en doorvoeren, om het proces te starten:

sudo supervisorctl reread
sudo supervisorctl update

Het script zou nu telegrammen moeten doorsturen naar de API host(s) die je eerder hebt ingevoerd.