Kan ik 2x dsmr reader middels docker installeren op mijn synology?
ff20000 opened this issue · 7 comments
Support guidelines
- I've read the support guidelines
I've found an issue and checked that ...
- ... the documentation does not mention anything about my problem
- ... there are no open or closed issues that are related to my problem
Description
Ik heb dsmr draaiend op mijn synology.
Nu heb ik 2 meters thuis.
1 werk gerelateerd en 1 prive. Beide slimme meters wil ik graag uitlezen middels elke een aparte dsmr docker container.
Ik ben al een tijdje aan het vogelen maar ik kom er niet uit.
Expected behaviour
Ik hoop 2 slimme meters uit te lezen middels de dsmr reader in docker
Actual behaviour
Krijg het niet voor elkaar.
Het lijkt erop als dsmr elke keer naar dezelfde database kijkt.
Kan ik dat ook aanpassen?
Steps to reproduce
docker-compose.dsmr.yaml
version: '3'
services:
dsmrdb:
# When using Postgres, release 13.x is supported only
# due to the limited availability of client packages, especially for arm32v7
image: postgres:14-alpine
container_name: dsmrdb
restart: always
volumes:
- ./dsmrdb:/var/lib/postgresql/data
environment:
- TZ=Europe/Amsterdam
- PG_TZ=Europe/Amsterdam
- POSTGRES_USER=dsmrreader
- POSTGRES_PASSWORD=dsmrreader
- POSTGRES_DB=dsmrreader
healthcheck:
# postgres is the default user, please update with
# the DJANGO_DATABASE_USER used for dsmr-reader-docker
# default for DSMR Reader is dsmrreader
test: [ "CMD-SHELL", "pg_isready -U dsmrreader" ]
interval: 10s
timeout: 5s
retries: 10
dsmr:
image: xirixiz/dsmr-reader-docker:latest
depends_on:
dsmrdb:
condition: service_healthy
container_name: dsmr
links:
- dsmrdb
cap_add:
- NET_ADMIN
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./dsmr_backups:/app/backups
environment:
- TZ=Europe/Amsterdam
- DJANGO_TIME_ZONE=Europe/Amsterdam
- VIRTUAL_HOST=localhost
ports:
- 7777:80
- 7779:443
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
# healthcheck:
# disable: true
healthcheck:
test:
[
"CMD",
"curl",
"-Lsf",
"http://127.0.0.1/about",
"-o",
"/dev/null",
"-w",
"HTTP_%{http_code}"
]
interval: 10s
timeout: 5s
retries: 10
volumes:
dsmrdb: null
dsmrdb_backups: null
docker-compose.dsmr2.yaml
version: '3'
services:
dsmrdb2:
# When using Postgres, release 13.x is supported only
# due to the limited availability of client packages, especially for arm32v7
image: postgres:14-alpine
container_name: dsmrdb2
restart: always
volumes:
- ./dsmrdb2:/var/lib/postgresql/data
environment:
- TZ=Europe/Amsterdam
- PG_TZ=Europe/Amsterdam
- POSTGRES_USER=dsmrreader
- POSTGRES_PASSWORD=dsmrreader
- POSTGRES_DB=dsmrreader2
healthcheck:
# postgres is the default user, please update with
# the DJANGO_DATABASE_USER used for dsmr-reader-docker
# default for DSMR Reader is dsmrreader
test: [ "CMD-SHELL", "pg_isready -U dsmrreader" ]
interval: 10s
timeout: 5s
retries: 10
dsmr2:
image: xirixiz/dsmr-reader-docker:latest
depends_on:
dsmrdb2:
condition: service_healthy
container_name: dsmr2
links:
- dsmrdb2
cap_add:
- NET_ADMIN
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./dsmr_backups2:/app/backups
environment:
- TZ=Europe/Amsterdam
- DJANGO_TIME_ZONE=Europe/Amsterdam
- VIRTUAL_HOST=localhost
ports:
- 7788:80
- 7789:443
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
# healthcheck:
# disable: true
healthcheck:
test:
[
"CMD",
"curl",
"-Lsf",
"http://127.0.0.1/about",
"-o",
"/dev/null",
"-w",
"HTTP_%{http_code}"
]
interval: 10s
timeout: 5s
retries: 10
volumes:
dsmrdb2: null
dsmrdb_backups2: null
Docker info
Client:
Context: default
Debug Mode: false
Server:
Containers: 14
Running: 12
Paused: 0
Stopped: 2
Images: 25
Server Version: 20.10.3
Storage Driver: btrfs
Build Version: Btrfs v4.0
Library Version: 101
Logging Driver: db
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs db fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 3fa00912415f3e9c6f82dd72119179d599efd13b
runc version: 31cc25f16f5eba4d0f53e35374532873744f4b31
init version: ed96d00 (expected: de40ad0)
Security Options:
apparmor
Kernel Version: 4.4.180+
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 9.576GiB
Name: DS718
ID: QNHE:YH67:7QUH:MFBC:MJAN:S3OH:NDKK:6XPO:I3GG:O4JZ:PAWB:ZNWS
Docker Root Dir: /volume1/@docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No kernel memory TCP limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No blkio weight support
WARNING: No blkio weight_device support
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
Version
- Docker compose version (type
docker-compose --version
): - System info (type
uname -a
):
Docker compose
docker-compose version 1.28.5, build 24fb474e
Container logs
Als ik alleen dsmr2.yaml uitvoer:
Hij zegt dat de database "dsmrreader" bestaat bij het starten van dsmr2.yaml
Voer ik eerst dsrm.yaml en dan dsmr2.yaml dan zitten ze beide op dezelfde database volgens mij.
Kan ik dit ook aanpassen op de een of andere manier, zodat ik een extra database aanmaak voor mijn 2e slimme meter?
Additional info
No response
Dat is wel te doen. Ik zie alleen dat je jouw compose file niet in code geplakt hebt hier, maar als plain text. Zou je het als code willen neerzetten, dan kan ik de wijzigingen die nodig zijn eenvoudig voor jou aanpassen.
version: '3'
services:
dsmrdb2:
# When using Postgres, release 13.x is supported only
# due to the limited availability of client packages, especially for arm32v7
image: postgres:14-alpine
container_name: dsmrdb2
restart: always
volumes:
- ./dsmrdb2:/var/lib/postgresql/data
environment:
- TZ=Europe/Amsterdam
- PG_TZ=Europe/Amsterdam
- POSTGRES_USER=dsmrreader
- POSTGRES_PASSWORD=dsmrreader
- POSTGRES_DB=dsmrreader2
healthcheck:
# postgres is the default user, please update with
# the DJANGO_DATABASE_USER used for dsmr-reader-docker
# default for DSMR Reader is dsmrreader
test: [ "CMD-SHELL", "pg_isready -U dsmrreader" ]
interval: 10s
timeout: 5s
retries: 10
dsmr2:
image: xirixiz/dsmr-reader-docker:latest
depends_on:
dsmrdb2:
condition: service_healthy
container_name: dsmr2
links:
- dsmrdb2
cap_add:
- NET_ADMIN
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./dsmr_backups2:/app/backups
environment:
- TZ=Europe/Amsterdam
- DJANGO_TIME_ZONE=Europe/Amsterdam
- VIRTUAL_HOST=localhost
ports:
- 7788:80
- 7789:443
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
# healthcheck:
# disable: true
healthcheck:
test:
[
"CMD",
"curl",
"-Lsf",
"http://127.0.0.1/about",
"-o",
"/dev/null",
"-w",
"HTTP_%{http_code}"
]
interval: 10s
timeout: 5s
retries: 10
volumes:
dsmrdb2: null
dsmrdb_backups2: null
poging 2
Hi, something like this should work (assuming you run things in bridge network mode):
version: '3'
services:
dsmrdb_01:
image: postgres:14-alpine
container_name: dsmrdb_01
restart: always
volumes:
- ./dsmrdb_01:/var/lib/postgresql/data
environment:
- TZ=Europe/Amsterdam
- PG_TZ=Europe/Amsterdam
- POSTGRES_USER=dsmrreader
- POSTGRES_PASSWORD=dsmrreader
- POSTGRES_DB=dsmrreader
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U dsmrreader" ]
interval: 10s
timeout: 5s
retries: 10
dsmrdb_02:
image: postgres:14-alpine
container_name: dsmrdb_02
restart: always
volumes:
- ./dsmrdb_02:/var/lib/postgresql/data
environment:
- TZ=Europe/Amsterdam
- PG_TZ=Europe/Amsterdam
- POSTGRES_USER=dsmrreader
- POSTGRES_PASSWORD=dsmrreader
- POSTGRES_DB=dsmrreader
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U dsmrreader" ]
interval: 10s
timeout: 5s
retries: 10
dsmr_01:
image: xirixiz/dsmr-reader-docker:latest
depends_on:
dsmrdb_01:
condition: service_healthy
container_name: dsmr_01
links:
- dsmrdb_01
cap_add:
- NET_ADMIN
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./dsmr_01_backups:/app/backups
environment:
- TZ=Europe/Amsterdam
- DJANGO_TIME_ZONE=Europe/Amsterdam
- VIRTUAL_HOST=localhost
- DJANGO_DATABASE_NAME=dsmrreader
- DJANGO_DATABASE_HOST=dsmrdb_01
ports:
- 7788:80
- 7789:443
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
healthcheck:
test:
[
"CMD",
"curl",
"-Lsf",
"http://127.0.0.1/about",
"-o",
"/dev/null",
"-w",
"HTTP_%{http_code}"
]
interval: 10s
timeout: 5s
retries: 10
dsmr_02:
image: xirixiz/dsmr-reader-docker:latest
depends_on:
dsmrdb_02:
condition: service_healthy
container_name: dsmr_02
links:
- dsmrdb_02
cap_add:
- NET_ADMIN
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./dsmr_02_backups:/app/backups
environment:
- TZ=Europe/Amsterdam
- DJANGO_TIME_ZONE=Europe/Amsterdam
- VIRTUAL_HOST=localhost
- DJANGO_DATABASE_NAME=dsmrreader
- DJANGO_DATABASE_HOST=dsmrdb_02
ports:
- 7888:80
- 7889:443
devices:
- "/dev/ttyUSB1:/dev/ttyUSB1"
healthcheck:
test:
[
"CMD",
"curl",
"-Lsf",
"http://127.0.0.1/about",
"-o",
"/dev/null",
"-w",
"HTTP_%{http_code}"
]
interval: 10s
timeout: 5s
retries: 10
volumes:
dsmrdb_01: null
dsmrdb_01_backups: null
dsmrdb_02: null
dsmrdb_02_backups: null
This creates dsmr_01, dsmr_02, dmsrdb_01 and dsmrdb_02.
dsmr_01 will run on ports 7788 and 7789
dsmr_02 will run on ports 7888 and 7889
Then update the device of the second container / DSMR instance in settings at "http://:/admin/dsmr_datalogger/dataloggersettings/" to "/dev/ttyUSB1".
Validated locally, works like a charm!
Hallo het werkt nu, alleen krijg ik dezelfde waardes binnen in beide containers
Ik heb 2 P1 meter lezers aangesloten op mijn NAS.
1 op ttyUSB0
1 op ttyUSB1
Ik heb een klein dingetje veranderd nog aan de code
bij dsmr_01
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
bij dsmr_02
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
Maar nog komen dezelfde waardes binnen van 1 P1 device.
Doe ik nog iets fout?
Ja klopt, dat moest je idd nog wel aanpassen. Wat Docker/DSMR setup betreft staat alles goed. Wat je kan doen is direct de P1 uitlezen en checken of de waarden die binnenkomen ook echt van elkaar verschillen.
Dat kan met:
cu -l /dev/ttyUSB0 -s 9600 --parity=none
Alleen niet op een Synology, dus je zal het om te testen even anders moeten aansluiten (Windows of Ubuntu oid) om de seriele waarden direct uit te lezen. Wanneer de waarden daar niet indentiek zijn, dan kunnen we het verder onderzoeken, maar ik kan het mij niet voorstellen dat het aan de configuratie van DSMR ligt.
Een andere optie kan nog zijn om /dev/ttyUSB1 ook echt te linken in de container naar /dev/ttyUSB1. Je kan in het admin deel van DSMR Reader dan aanpassen dat de waarden uitgelezen moeten worden van /dev/ttyUSB1. Op die manier sluit je zeker uit dat er ook maar een foutje gemaakt in de koppeling van het device.
http://<host>:<port>/admin/dsmr_datalogger/dataloggersettings/
Het werkt. De laatste tip werkte.
Ik heb hem gelinked naar /dev/ttyUSB1 en in het admin deel daar ook naartoe verwezen.
Daarna deze container opnieuw gestart en toen deed hij het.
Top blij mee, bedankt voor je hulp
Mooi, heb de laatst uitgebreide comment daar even mee bijgewerkt met deze info.