Hab es nun selbst mit einem Python-Skript gelöst. Das Skript liest kontinuierlich Impulse von dem über USB angeschlossenen USB-Lesekopf, aktualisiert basierend auf dessen Impulsen den Gaszählerstand, und sendet den aktuellen Zählerstand in Echtzeit an einen MQTT-Broker, während es den Zählerstand in einer Datei speichert, um den Fortschritt zwischen Neustarts beizubehalten.
Hier mein Python-Skripts, falls das für jemanden hilfreich ist:
1. Python-Skript
import serial
import paho.mqtt.client as mqtt
import os
# Konfiguration
serial_port = '/dev/ttyUSB0'
mqtt_broker = 'BROKER_ADDRESS'
mqtt_port = 1883
mqtt_topic = 'gaszaehler/stand'
mqtt_username = None
mqtt_password = None
zaehlerstand_file = 'zaehlerstand.txt'
# Überprüfen, ob die Zählerstand-Datei existiert
if os.path.exists(zaehlerstand_file):
with open(zaehlerstand_file, 'r') as file:
zaehlerstand = float(file.read())
else:
zaehlerstand = float(input("Bitte geben Sie den aktuellen Zählerstand ein: "))
with open(zaehlerstand_file, 'w') as file:
file.write(str(zaehlerstand))
# Callback, wenn mit dem MQTT-Broker verbunden
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
# MQTT-Client konfigurieren
client = mqtt.Client()
client.on_connect = on_connect
if mqtt_username and mqtt_password:
client.username_pw_set(mqtt_username, mqtt_password)
# Verbindung zum MQTT-Broker herstellen
client.connect(mqtt_broker, mqtt_port, 60)
client.loop_start()
# Seriellen Port öffnen
ser = serial.Serial(serial_port, baudrate=9600, timeout=1)
try:
while True:
raw_data = ser.readline()
print(f"Raw: {raw_data}")
if raw_data:
zaehlerstand += 0.01
print(f"Sending: {zaehlerstand}")
client.publish(mqtt_topic, str(zaehlerstand))
with open(zaehlerstand_file, 'w') as file:
file.write(str(zaehlerstand))
except KeyboardInterrupt:
pass
finally:
ser.close()
client.loop_stop()
client.disconnect()
2. Systemd-Service erstellen
Um das ganze beim Systemstart auszuführen erstelle ich noch dengaszaehler.service im Verzeichnis /etc/systemd/system/ mit folgendem Inhalt:
[Unit]
Description=Gaszaehler MQTT Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /pfad/zum/skript.py
WorkingDirectory=/pfad/zum
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Ersetzen Sie /pfad/zum/skript.py mit dem vollständigen Pfad zu Ihrem Python-Skript und /pfad/zum mit dem Verzeichnis, in dem sich Ihr Skript befindet.
3. Service aktivieren und starten
Nachdem Sie dann der systemd-Service erstellt ist, kann man ihn mit folgendem Befehlen aktivieren und starten:
sudo systemctl enable gaszaehler.service
sudo systemctl start gaszaehler.service
Nun sollte das Python-Skript beim Systemstart automatisch ausgeführt werden, und beim ersten Start wird es nach dem Zählerstand fragen. Der Zählerstand wird in der Datei zaehlerstand.txt gespeichert und bei jedem Neustart des Skripts daraus gelesen.