xirixiz / dsmr-reader-docker

DSMR Reader in Docker.
https://hub.docker.com/r/xirixiz/dsmr-reader-docker
114 stars 33 forks source link

Kan ik 2x dsmr reader middels docker installeren op mijn synology? #298

Closed ff20000 closed 2 years ago

ff20000 commented 2 years ago

Support guidelines

I've found an issue and checked that ...

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:

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:

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

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

xirixiz commented 2 years ago

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.

ff20000 commented 2 years ago
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

xirixiz commented 2 years ago

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!

ff20000 commented 2 years ago

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?

xirixiz commented 2 years ago

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/

ff20000 commented 2 years ago

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

xirixiz commented 2 years ago

Mooi, heb de laatst uitgebreide comment daar even mee bijgewerkt met deze info.