Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Gaszähler vzlogger in iobroker

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Gaszähler vzlogger in iobroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • Deniz Teoman
      Deniz Teoman last edited by

      Guten Abend allerseits,

      in der Kiste mit dem Sammelsurium aus alten vzlogger Tagen habe ich den USB-Lesekopf mit Reed-Kontakt für den Gaszähler gefunden. Mir ist klar, dass ich den verbauten Reed Kontakt wie in diesem Thread einfach auf ein GPIO des Raspis umbauen kann und damit eine Lösung hätte.

      Re: Gelöst: Gaszähler-Ersatz für vorhandene vzlogger-Anbindung

      Allerdings würde ich gerne eine Lösung finden um den per /dev/ttyUSB0 an einem Raspi empfangenen S0 Impuls an iobroker zu übermitteln (iobroker löuft auf einem anderen Host).

      Generell kommt ein Impuls wie folgt am Raspi an:

      strace -ttt -e read cat < /dev/ttyUSB0 
      1696117178.933970 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0\267\0\1\0\0\0`\17\2\0\0\0\0\0"..., 832) = 832
      1696117178.939941 read(0, 
      
      
      "\0", 131072) = 1
      1696118200.629333 read(0, ^C0x7fb4b2c000, 131072) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
      strace: Process 1083 detached
      

      Vielleicht stehe ich auf dem Schlauch, aber ich suche nach einer Möglichkeit den S0 Impuls zu loggen.

      Deniz Teoman 1 Reply Last reply Reply Quote 0
      • Deniz Teoman
        Deniz Teoman @Deniz Teoman last edited by

        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.

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        445
        Online

        31.9k
        Users

        80.3k
        Topics

        1.3m
        Posts

        1
        2
        148
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo