Stappenplan: DSMR-reader upgraden van v4.x naar v5.x

DSMR-reader v5.x is backwards incompatible met 4.x. Je zult handmatig moeten upgraden om ervoor te zorgen dat het goed werkt.

Lijst van wijzigingen

Gevaar

Zie de changelog, voor v5.x releases en hoger. Bekijk ze voordat je update!

  • ✋ Upgrade niet wanneer je PostgreSQL 9.x of lager draait. Upgrade PostgreSQL eerst.

  • ✋ Upgrade niet wanneer je InfluxDB 1.x draait. Upgrade naar InfluxDB 2.x eerst.

  • ✋ Upgrade niet wanneer je MySQL 5.6 of lager draait. Upgrade MySQL eerst.

  • ℹ️ Deze upgrade vereist je om Python 3.7 of hoger te draaien. Upgrade-stappen later hieronder.


Docker

Let op

Docker-gebruikers, Zie de changelog, voor env var wijzigingen!

Indien je Docker gebruikt, kun je vermoedelijk gewoon de v5.x versie van de Docker container gebruiken, zonder onderstaande stappen te hoeven uitvoeren.


1. Update naar de meeste recente v4.x versie

Update naar v4.20 zodat je de meeste recente v4.x versie draait.

2. Migreer naar github.com/dsmrreader/

Meer dan een jaar geleden is het DSMR-reader project verplaatst naar https://github.com/dsmrreader.

Voer het volgende uit:

sudo su - dsmr
git remote -v

Het zou moeten wijzen naar:

origin      https://github.com/dsmrreader/dsmr-reader.git (fetch)
origin      https://github.com/dsmrreader/dsmr-reader.git (push)

Zo niet, update deze en probeer opnieuw:

git remote set-url origin https://github.com/dsmrreader/dsmr-reader.git
git remote -v

Voer het volgende uit:

logout

3. Python versie check

DSMR-reader 5.x vereist Python 3.7 of hoger.

Voer het volgende uit:

sudo su - dsmr
python3 --version

Het zou de Python-versie moeten tonen. Wanneer je al de versie Python 3.7 (of hoger) draait, kun je de volgende sectie negeren.

Voer het volgende uit:

logout

4. Python-versie upgrade (wanneer je Python 3.6 of lager draait)

Waarschuwing

Voer deze sectie alleen uit wanneer je DSMR-reader draait met Python 3.6 of lager!

Er zijn diverse handleidingen, afhankelijk van je OS. We gaan hier uit van Raspbian OS.

Tip

You may consider upgrading to a higher Python version, e.g. Python 3.11, if possible for your OS.

Voer het volgende uit:

# Credits to Jeroen Peters @ issue #624
sudo apt-get install python3-dev libffi-dev libssl-dev -y
wget https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tar.xz
tar xJf Python-3.11.2.tar.xz
cd Python-3.11.2
./configure --enable-optimizations --with-lto
make
sudo make install
sudo pip3 install --upgrade pip

Let op

Voer python3 --version uit om te controleren of het gelukt is. Indien je foutmeldingen krijgt, ga dan niet verder met de upgrade.


Het volgende wat je absoluut moet doen, is het maken van een verse database back-up en deze op een veilige plek opslaan.

Voer het volgende uit:

sudo su - dsmr
./manage.py dsmr_backup_create --full

Wanneer alles OK is, zie je een melding in de trend van:

Created full backup: /home/dsmr/dsmr-reader/backups/manually/dsmrreader-postgresql-backup-Wednesday.sql.gz

Voer het volgende uit (bestandsnaam kan afwijken in jouw situatie!):

ls -lh /home/dsmr/dsmr-reader/backups/manually/dsmrreader-postgresql-backup-Wednesday.sql.gz

Controleer of het bestand een (aannemelijke) grootte heeft:

-rw-rw-r-- 1 dsmr dsmr 7.5M Dec 18 20:59 /home/dsmr/dsmr-reader/backups/manually/dsmrreader-postgresql-backup-Wednesday.sql.gz

Voer het volgende uit (bestandsnaam kan afwijken in jouw situatie!):

zcat /home/dsmr/dsmr-reader/backups/manually/dsmrreader-postgresql-backup-Wednesday.sql.gz | tail

Controleer dat het eindigt met deze output:

--
-- PostgreSQL database dump complete
--

Voer het volgende uit:

logout

5. Upgrade naar DSMR-reader v5

Gevaar

Herinnering

Zie de changelog, voor v5.x releases en hoger. Bekijk ze voordat je update!

  • ✋ Upgrade niet wanneer je PostgreSQL 9.x of lager draait. Upgrade PostgreSQL eerst.

  • ✋ Upgrade niet wanneer je InfluxDB 1.x draait. Upgrade naar InfluxDB 2.x eerst.

  • ✋ Upgrade niet wanneer je MySQL 5.6 of lager draait. Upgrade MySQL eerst.


Installeer Python venv:

sudo apt-get install python3-venv

Installeer ook libopenjp2-7-dev, om te voorkomen dat je later mogelijk deze fout krijgt:

# "ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory"

sudo apt-get install libopenjp2-7-dev

Stop DSMR-reader:

sudo supervisorctl stop all

Schakel v4.x virtualenv uit:

sudo su - dsmr
deactivate
mv ~/.virtualenvs/ ~/.old-v4-virtualenvs

Maak nieuwe v5.x virtualenv:

python3 -m venv ~/dsmr-reader/.venv/

Verwijder de volgende regel uit /home/dsmr/.bashrc:

# (feel free to use "nano" instead or whatever you'd like)
vi ~/.bashrc

Verwijder deze regel (indien aanwezig):

# Probably on the bottom of the file.
source ~/.virtualenvs/dsmrreader/bin/activate

Voeg in de plaats daarvan deze regel toe:

source ~/dsmr-reader/.venv/bin/activate

Update DSMR-reader codebase:

git fetch
git checkout -b v5 origin/v5

# Make sure you're at v5 now:
git branch

git pull

Installeer dependencies:

source ~/dsmr-reader/.venv/bin/activate

pip3 install pip --upgrade
pip3 install -r ~/dsmr-reader/dsmrreader/provisioning/requirements/base.txt

Tip

Faalt het met:

The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.

Probeer libjpeg-dev te installeren:

logout
sudo apt-get install libjpeg-dev

sudo su - dsmr
pip3 install -r ~/dsmr-reader/dsmrreader/provisioning/requirements/base.txt

Hernoem oude env vars in .env als je die tegenkomt (zie hieronder):

# (feel free to use "nano" instead or whatever you'd like)
vi ~/dsmr-reader/.env

Wanneer je eentje tegenkomt die aan de linkerkant staat, hernoem die naar de variant aan de rechterkant:

# Core env vars/settings
SECRET_KEY       ️                 ➡️   DJANGO_SECRET_KEY
DB_ENGINE        ️                 ➡️   DJANGO_DATABASE_ENGINE
DB_NAME          ️                 ➡️   DJANGO_DATABASE_NAME
DB_USER          ️                 ➡️   DJANGO_DATABASE_USER
DB_PASS          ️                 ➡️   DJANGO_DATABASE_PASSWORD
DB_HOST          ️                 ➡️   DJANGO_DATABASE_HOST
DB_PORT          ️                 ➡️   DJANGO_DATABASE_PORT
CONN_MAX_AGE     ️                 ➡️   DJANGO_DATABASE_CONN_MAX_AGE
TZ               ️                 ➡️   DJANGO_TIME_ZONE
DSMR_USER        ️                 ➡️   DSMRREADER_ADMIN_USER
DSMR_PASSWORD    ️                 ➡️   DSMRREADER_ADMIN_PASSWORD

Check DSMR-reader:

./manage.py check

Het zou iets moeten tonen als: “System check identified no issues (0 silenced).”

Tip

Faalt het met:

ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory

Zorg dan dat je hierboven libopenjp2-7-dev hebt geïnstalleerd:

logout
sudo apt-get install libopenjp2-7-dev

sudo su - dsmr
./manage.py check

Voer uit:

./manage.py migrate

Voer uit:

logout

Let op

N.b.: Dit kan alle handmatige wijzigingen die je zelf ooit hebt gedaan terugdraaien, zoals HTTP Basic Auth configuratie.

Update Nginx config:

sudo cp /home/dsmr/dsmr-reader/dsmrreader/provisioning/nginx/dsmr-webinterface /etc/nginx/sites-available/
sudo ln -s -f /etc/nginx/sites-available/dsmr-webinterface /etc/nginx/sites-enabled/

Herlaad Nginx:

sudo nginx -t
sudo systemctl reload nginx.service

Update Supervisor configs:

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/

Herlaad Supervisor configs:

sudo supervisorctl reread
sudo supervisorctl update

Start DSMR-reader:

sudo supervisorctl start all

6. Deploy

Tot slot, voer het deploy-script uit:

sudo su - dsmr
./deploy.sh

Top! Je zou nu v5.x moeten draaien!

7. Situationeel: Herconfigureer InfluxDB

Als je DSMR-reader gebruikte om data te exporteren naar InfluxDB, dan moet je deze integratie handmatig opnieuw configureren om het werkend te krijgen. De integratie is tevens automatisch uitgeschakeld.

Hint

Waar de vorige versie usernames, passwords en databases gebruikte, is het nu gewijzigd naar organizations, API tokens en buckets.

8. Situationeel: Herconfigureer Dropbox

Als je DSMR-reader gebruikte om backups naar Dropbox te sturen, dan moet je deze integratie handmatig opnieuw configureren om het werkend te krijgen.

9. Situationeel: Remote datalogger env vars

De volgende remote datalogger script instellingen zijn ook hernoemd, maar je hoeft ze alleen aan te passen als je ze daadwerkelijk gebruikt, samen met een nieuwe versie van het remote datalogger script. Bijvoorbeeld wanneer je Docker gebruikt:

DATALOGGER_INPUT_METHOD            ️➡️   DSMRREADER_REMOTE_DATALOGGER_INPUT_METHOD
DATALOGGER_SERIAL_PORT             ️➡️   DSMRREADER_REMOTE_DATALOGGER_SERIAL_PORT
DATALOGGER_SERIAL_BAUDRATE         ➡️   DSMRREADER_REMOTE_DATALOGGER_SERIAL_BAUDRATE
DATALOGGER_API_HOSTS    ️           ➡️   DSMRREADER_REMOTE_DATALOGGER_API_HOSTS
DATALOGGER_API_KEYS    ️            ➡️   DSMRREADER_REMOTE_DATALOGGER_API_KEYS
DATALOGGER_TIMEOUT    ️             ➡️   DSMRREADER_REMOTE_DATALOGGER_TIMEOUT
DATALOGGER_SLEEP    ️               ➡️   DSMRREADER_REMOTE_DATALOGGER_SLEEP
DATALOGGER_MIN_SLEEP_FOR_RECONNECT ➡️   DSMRREADER_REMOTE_DATALOGGER_MIN_SLEEP_FOR_RECONNECT