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