Hallo,
ich nutze EBUSD von https://github.com/john30/ebusd um meine Vaillant-Wärmepumpe mit meinem Raspberry auszulesen.
Anfang des Jahres bin ich dazu übergegangen meine Raspberry auf Docker (mit Portainer) umzustellen. Alles ist also in Container umgezogen, auch EBUSD.
Allerdings hatte ich damals noch ein Skript welches mir zyklisch Werte abruft. Das bekomme ich jetzt nicht hin, auch nicht mit KI. Irgendwie bekomme ich es nicht hin, mein "Entrypoint" oder "Command" so anzugeben, das es funktioniert.
Kann mir jemand helfen?
Das ist mein Stack:
services: # https://hub.docker.com/r/john30/ebusd
ebusd: #https://github.com/john30/ebusd/blob/master/contrib/docker/docker-compose.example.yaml
image: john30/ebusd
container_name: ebusd
restart: unless-stopped
ports:
- 8888:8888
- 8080:8080
devices:
- /dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_6e4dcde89fdeea11b47832d299583cc7-if00-port0:/dev/ttyUSB0
networks:
network1:
ipv4_address: 192.168.178.212
volumes:
- ebusd_home:/home
- ebusd_etc:/etc/ebusd/
stdin_open: true
tty: true
environment:
EBUSD_DEVICE: "ens:/dev/ttyUSB0"
EBUSD_SCANCONFIG: ""
EBUSD_MQTTHOST: 192.168.178.211
EBUSD_MQTTPORT: 1883
EBUSD_MQTTCLIENTID: "ebusd"
EBUSD_MQTTUSER: "meinUser"
EBUSD_MQTTPASS: "meinPasswort"
EBUSD_MQTTTOPIC: "ebusd"
EBUSD_MQTTGLOBAL: "ebusd/global/"
#EBUSD_MQTTJSON: "s"
volumes:
ebusd_home:
ebusd_etc:
networks:
network1:
name: vlan-creation
external: true
Und das ist mein Skript, welches ich gern zyklisch aufrufen möchte:
#!/bin/bash
ebusctl read -c hmu EnergyIntegral
ebusctl read -c hmu State
ebusctl read -c hmu WaterThroughput
ebusctl read -c hmu Hours
ebusctl read -c hmu HoursHc
ebusctl read -c hmu EnergyHc
ebusctl read -c hmu CurrentYieldPower
ebusctl read -c hmu CurrentConsumedPower
echo "Script ReadValues.sh done." >> /var/log/ebusd.log
Wenn du dein Skript ReadValues.sh zyklisch in einem Docker-Container mit ebusd ausführen möchtest, geht das am besten so:
1. Skript ins Volume legen
Lege dein Skript z. B. in das gemountete Volume ebusd_home oder ebusd_etc, damit es im Container verfügbar ist:
volumes:
- ./ReadValues.sh:/home/ReadValues.sh2. Skript ausführbar machen
chmod +x ./ReadValues.sh3. Zyklische Ausführung einrichten
Du kannst entweder Cron nutzen oder eine Endlosschleife im Container starten:
Mit Cron:
Erstelle ein entrypoint.sh:
#!/bin/bash
ebusd -d "$EBUSD_DEVICE" &
echo "*/5 * * * * /home/ReadValues.sh" > /etc/crontabs/root
crond -fDocker-Compose anpassen:
[code]entrypoint: ["/home/entrypoint.sh"]Oder mit Endlosschleife:
[code]#!/bin/bash
ebusd -d "$EBUSD_DEVICE" &
while true; do
/home/ReadValues.sh
sleep 300 # alle 5 Minuten
doneDann als command im Docker-Compose starten:
command: ["/home/ReadValues-loop.sh"]4.Wichtig:
ebusctl muss im Container verfügbar sein – im offiziellen john30/ebusd Image ist es bereits enthalten, daher sollte dein Skript direkt funktionieren.
Mit dieser Methode läuft dein Skript automatisch in festgelegten Intervallen und liest die Werte von deiner Vaillant-Wärmepumpe aus.