Installatie: Stapsgewijs
Voor alle andere gebruikers, die graag willen weten wat ze exact uitvoeren.
Gebruik dit om zowel de datalogger als de applicatie op hetzelfde apparaat te installeren.
Tip
Overweeg zeker om Docker-containers te gebruiken in plaats van onderstaande, gezien die al bijna alle aspecten en stappen in zich bevatten.
Het kan zijn dat DSMR-reader op termijn wisselt naar Docker-only-ondersteuning.
1. Databaseopslag (PostgreSQL)
De applicatie slaat de P1-metingen standaard op.
Installeer database:
sudo apt-get install -y postgresql
Tip
Start PostgreSQL niet wegens een fout in ‘locales’? Bijvoorbeeld:
Error: The locale requested by the environment is invalid.
Error: could not create default cluster. Please create it manually with
pg_createcluster 12 main start
Probeer: dpkg-reconfigure locales
.
Werkt het nog steeds niet? Open dan dit bestand /etc/environment
, voeg onderaan de regel LC_ALL="en_US.utf-8"
toe en herstart het systeem. Probeer daarna pg_createcluster 12 main start
(of welke versie je ook gebruikt).
Voer uit:
# Check status, should be green/active
sudo systemctl status postgresql
(!) Negeer voor de volgende drie commando’s de foutmelding: ‘could not change directory to “/root”: Permission denied’.
Creëer databasegebruiker:
sudo -u postgres createuser -DSR dsmrreader
Creëer database, met als eigenaar de databasegebruiker die we net hebben aangemaakt:
sudo -u postgres createdb -O dsmrreader dsmrreader
Stel wachtwoord in voor databasegebruiker:
sudo -u postgres psql -c "alter user dsmrreader with password 'dsmrreader';"
Optioneel: Database back-up terugzetten
Hint
Indien je een back-up van de database wilt terugzetten met je oude gegevens, nu is het moment om dat te doen.
Database back-up terugzetten? Zie hier voor instructies.
2. Afhankelijkheden
Tijd om diverse tools te installeren. Deze zijn nodig voor de Nginx webserver, de Gunicorn applicatieserver en voor het binnenhalen van de code van de applicatie vanaf GitHub:
# "libopenjp2-7-dev" is due to "ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory" sudo apt-get install -y cu nginx supervisor git python3 python3-psycopg2 python3-pip python3-venv libopenjp2-7-dev
Met het CU-programma kun je vrij gemakkelijk de DSMR-verbinding testen naar je slimme meter toe. Erg handig om te kijken of dat überhaupt al lekker werkt.
3. Applicatiegebruiker
De applicatie draait standaard onder de gebruiker dsmr
. Hierdoor heeft het geen root
-rechten (nodig), wat over het algemeen zeer afgeraden wordt.
Maak een aparte gebruiker aan met eigen homedir. De applicatie installeren we hier in en zal draaien onder die gebruiker:
sudo useradd dsmr --home-dir /home/dsmr --create-home --shell /bin/bash
De gebruiker heeft ook toegang nodig om de kabel te kunnen uitlezen. Hiervoor voegen de we gebruiker toe aan de groep
dialout
:sudo usermod -a -G dialout dsmr
Ga ofwel door naar het volgende hoofdstuk voor een testmeting of ga direct door naar stap 4.
Optioneel: Je eerste meting
Notitie
OPTIONEEL: Je kunt deze stap overslaan wanneer je al eerder een (test)meting hebt gedaan met je slimme meter. Ik raad het dus vooral aan als je nog nooit eerder je P1-poort hebt uitgelezen. Hiermee verzeker je jezelf ook dat de applicatie straks dezelfde (werkende) toegang heeft voor de metingen.
Log nu in als de gebruiker die we zojuist hebben aangemaakt voor de eerste testmeting!
sudo su - dsmr
Test met
cu
voor DSMR 4+:cu -l /dev/ttyUSB0 -s 115200 --parity=none -E q
Of test met
cu
voor DSMR 2.2 (ongetest):cu -l /dev/ttyUSB0 -s 9600 --parity=none
Je zou nu iets moeten zien als Connected.
. Vervolgens krijg je, als het goed is, binnen tien seconden een hele lap tekst te zijn met een hoop cijfers. Werkt het niet? Probeer dan een andere BAUD-waarde, zoals hierboven beschreven. Of kijk op een nuttig weblog.
Om cu af te sluiten, typ “
q.
”, druk op Enter en wacht voor een paar seconden. Het programma sluit af met de meldingDisconnected.
.Voer uit:
logout
4. Webserver/Nginx (deel 1)
We configureren vervolgens de webserver (Nginx). Deze serveert alle statische bestanden en geeft de applicatie-verzoeken door naar de backend, waar de applicatie in Gunicorn draait onder Supervisor. Deze stellen we later in.
Zorg ervoor dat je hier geen
dsmr
gebruiker bent.Voer uit:
whoami # Still "dsmr"? Execute CTRL+D or: logout
Django kopieert alle statische bestanden naar een aparte map, die weer door Nginx gebruikt wordt. Daarom is er tevens (schrijf)toegang voor nodig.
Voer uit:
sudo mkdir -p /var/www/dsmrreader/static sudo chown -R dsmr:dsmr /var/www/dsmrreader/
5. Kloon project code vanaf GitHub
Nu kunnen we de code van de applicatie van GitHub downloaden en in de homedir zetten die we net aangemaakt hebben.
Zorg ervoor dat je hier (nog steeds) dsmr` gebruiker bent.
Voer uit:
whoami # Not "dsmr"? Execute: sudo su - dsmr
Kloon de repository:
git clone --branch v5 https://github.com/dsmrreader/dsmr-reader.git
Dit kan enkele seconden in beslag nemen. Als het goed is zie je hierna een map genaamd dsmr-reader
, met daarin een kopie van de repository zoals die op GitHub staat.
6. Externe afhankelijkheden
De afhankelijkheden voor deze applicatie moeten gedownload en opgeslagen worden.
Zorg ervoor dat je hier (nog steeds) dsmr` gebruiker bent.
Voer uit:
whoami # Not "dsmr"? Execute: sudo su - dsmr
Maak virtualenv:
python3 -m venv ~/dsmr-reader/.venv/
Voor eenvoudiger gebruik van virtualenv later:
bash -c 'echo "cd ~/dsmr-reader" >> ~/.bashrc' bash -c 'echo "source ~/dsmr-reader/.venv/bin/activate" >> ~/.bashrc'
Je kunt dit vrij gemakkelijk testen door uit te loggen als dsmr
gebruiker (met CTRL + D of typ logout
) en vervolgens weer in te loggen met sudo su - dsmr
.
Als het goed is heeft je terminal nu een (.venv)
prefix, bijvoorbeeld: (.venv)dsmr@rasp:~/dsmr-reader $
Daarnaast zou python3
moeten wijzen naar de virtualenv:
which python3
# Expected output:
# /home/dsmr/dsmr-reader/.venv/bin/python3
Installeer afhankelijkheden (kan een minuutje in beslag nemen):
pip3 install -r dsmrreader/provisioning/requirements/base.txt
Stel lokale config in:
cp dsmrreader/provisioning/django/settings.py.template dsmrreader/settings.py cp .env.template .env ./tools/generate-secret-key.sh
7. Initialisatie
Tijd om te kijken of alles goed is ingesteld. We gaan de applicatie proberen te initialiseren.
Zorg ervoor dat je hier (nog steeds) dsmr` gebruiker bent.
Voer uit:
whoami # Not "dsmr"? Execute: sudo su - dsmr
Voer uit:
./manage.py check
Je zou iets moeten zien zoals:
System check identified no issues (0 silenced).
Voer dit uit om de database, die we eerder hebben aangemaakt, te initialiseren:
./manage.py migrate
Ga nu bezig met de statische bestanden voor de webinterface. Dit kopieert alle statische bestanden in de map die we eerder, vlak na de installatie voor Nginx, hebben aangemaakt. Het zorgt ervoor dat Nginx deze bestanden kan hosten buiten de code-bestanden.
Synchroniseer statische bestanden:
./manage.py collectstatic --noinput
Stel inloggegevens in voor de admingebruiker, door het
.env
te openen met een teksteditor naar eigen voorkeur. Zoek deze regels (of voeg ze toe):# In /home/dsmr/dsmr-reader/.env ### Admin credentials. #DSMRREADER_ADMIN_USER= #DSMRREADER_ADMIN_PASSWORD=
Tip
Verwijder de #
vooraan de regel en voer de gewenste inloggegevens in. Bijvoorbeeld:
DSMRREADER_ADMIN_USER=admin
DSMRREADER_ADMIN_PASSWORD=supersecretpassword
Laat DSMR-reader nu de admingebruiker voor je aanmaken of resetten.
Voer uit:
./manage.py dsmr_superuser
8. Webserver/Nginx (deel 2)
Je bent op dit punt bijna klaar met de installatie.
Zie ook
Deze installatiehandleiding gaat er vanuit dat je de Nginx webserver alleen gebruikt voor deze applicatie.
Het is uiteraard mogelijk dat andere applicaties ook Nginx gebruiken, maar daarvoor zul je de wildcard moet weghalen in de dsmr-webinterface
vhost, die je hieronder kopieert.
Zorg ervoor dat je hier geen
dsmr
gebruiker bent.Voer uit:
whoami # Still "dsmr"? Execute CTRL+D or: logout
Verwijder de standaard vhost van Nginx wanneer je deze niet zelf gebruikt (zie de notitie hierboven):
sudo rm /etc/nginx/sites-enabled/default
Kopieer de vhost voor de applicatie. Deze luistert standaard naar elke hostname (wildcard), maar dat is natuurlijk naar eigen wens aan te passen:
sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/nginx/dsmr-webinterface /etc/nginx/sites-available/ sudo ln -s /etc/nginx/sites-available/dsmr-webinterface /etc/nginx/sites-enabled/
Laat Nginx controleren of je geen typefouten hebt gemaakt en herstart Nginx vervolgens wanneer de
-t
configtest lukt:# Command below should output "syntax is ok" and/or "test is successful" sudo nginx -t sudo systemctl restart nginx.service
9. Supervisor
We gaan nu Supervisor configureren, die gebruikt wordt om de applicatie en achtergrondprocessen te draaien. Tevens zorgt Supervisor ervoor dat deze processen bij het (opnieuw) opstarten automatisch draaien.
Kopieer de configuratie-bestanden voor Supervisor:
sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_datalogger.conf /etc/supervisor/conf.d/ sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_backend.conf /etc/supervisor/conf.d/ sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/supervisor/dsmr_webinterface.conf /etc/supervisor/conf.d/
Voer de volgende commando’s in. Deze zorgen ervoor dat Supervisor de eigen configuratie opnieuw controleert en toepast:
sudo supervisorctl reread sudo supervisorctl update
Er zouden drie processen moeten draaien met RUNNING
. Kijk goed of ze uiteindelijk niet in ERROR
of BACKOFF
status terecht zijn gekomen. Je kunt het overzicht verversen door het status
command een paar keer uit te voeren.
Voer uit:
sudo supervisorctl status
Voorbeeld van wanneer alles naar behoren draait:
dsmr_backend RUNNING pid 123, uptime 0:00:06
dsmr_datalogger RUNNING pid 456, uptime 0:00:07
dsmr_webinterface RUNNING pid 789, uptime 0:00:07
Wil je uit supervisor? Druk dan op CTRL + D
om uit supervisor te gaan.