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 melding Disconnected..

  • 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.