Projekt: Gasflaschen Füllstand messen und auswerten

Aubau von der Gasflaschen Waage

Für meine Waage habe ich mir ein Stück Bett genommen mit 35×35 cm und einer Stärke von 1.5 cm. Es gibt zwei unterschiedliche Load-Cells einmal nur aus Metal und eine kleiner Version die einen Gummi unten angebracht hat. Für beide Versionen gibt es Halterungen die man mit einem 3D Drucker drucken kann. Ich verwende eine Drucker von Bambulab und dort im Store kann man die Halterungen einfach suchen oder auch auf Thingiverse sind viele Model vorhanden. Danach habe ich auf der Unterseite Fräsungen gemacht für die Kabel und damit man den ESP32-C3 und das HX711 Modul.

Bambulab_Store

Hier findet ihr das benötigte Material!

Produkt Amazon
2er Set, ESP32-C3 Super Mini shopping_cart Bei Amazon kaufen
4 x Halbbrücken Wägezelle und HX711 Modul shopping_cart Bei Amazon kaufen
Material bei Aliexpress

Alle Material-Links sind Affiliate Links.

Verdrahtung der Schaltung

Zum Vergrössern auf das Bild klicken.

Der Sketch auf Github

Github Logo

Einstellungen in der Arduino IDE

				
					https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
				
			

Projekt Beschreibung

Die entwickelte Waage basiert auf einem ESP32-C3 und einem HX711-Verstärker zur präzisen Erfassung des Gewichts einer Gasflasche.
Nach dem Einschalten verbindet sich das System mit dem WLAN und einem MQTT-Broker.
Das aktuelle Gesamtgewicht wird regelmäßig gemessen, gefiltert und in Kilogramm berechnet.
Aus dem Leer- und Vollgewicht der Flasche wird der prozentuale Füllstand bestimmt.
Alle relevanten Werte werden per MQTT an Home Assistant übertragen.
Eine Tare-Funktion ermöglicht das Zurücksetzen des Nullpunkts bei leerer Waage.
Zusätzlich kann eine Kalibrierung mit einem definierten Referenzgewicht durchgeführt werden.
Die Messwerte werden nur bei relevanter Änderung übertragen, um MQTT-Traffic zu reduzieren.
Nach einer definierten Messdauer wechselt das Gerät automatisch in den Deep-Sleep-Modus.
Die Schlafdauer hängt davon ab, ob eine Flasche erkannt wurde oder nicht, um Energie zu sparen.

Kurze Zusammenfassung

Die Gas Cylinder Scale misst mit einem HX711 und einer Wägezelle das Gesamtgewicht einer Gasflasche und berechnet daraus den Füllstand in Prozent.
Das System verbindet sich per WLAN mit einem MQTT-Broker und überträgt Gewicht, Status und Füllstand an Home Assistant.
Eine Tare-Funktion setzt den Nullpunkt bei leerer Waage, eine Kalibrierfunktion erlaubt die Justierung mit einem Referenzgewicht.
Zur Reduktion von MQTT-Traffic wird nur bei relevanter Gewichtsänderung gesendet.
Nach einer definierten Messzeit wechselt das Gerät automatisch in den Deep-Sleep-Modus, um Energie zu sparen.


Einstellbare Variablen

Hardware:

  • HX_DT – Data-Pin des HX711

  • HX_SCK – Clock-Pin des HX711

Flaschenparameter:

  • BOTTLE_EMPTY_KG – Leergewicht der Gasflasche

  • BOTTLE_FULL_KG – Gesamtgewicht bei voller Flasche

Kalibrierung:

  • CAL_REF_KG – Referenzgewicht für Kalibrierung

Messverhalten:

  • MEASURE_INTERVAL_MS – Messintervall während Wachphase

  • MEASURE_WINDOW_MS – Gesamtdauer der Wachphase

Erkennung & Filter:

  • BOTTLE_THRESHOLD_KG – Mindestgewicht zur Flaschenerkennung

  • CHANGE_THRESHOLD_KG – Minimale Gewichtsänderung für MQTT-Update

Energiesparen:

  • SLEEP_EMPTY_MIN – Sleep-Dauer ohne erkannte Flasche

  • SLEEP_BOTTLE_MIN – Sleep-Dauer bei erkannter Flasche

Dashboard in Home Assistant

Dashboard_Gasbottle

YAML - Dashboard

				
					type: vertical-stack
title: Gasflasche Waage
cards:
  - type: horizontal-stack
    cards:
      - type: button
        entity: binary_sensor.gas_bottle_present
        name: Gasflasche
        icon: mdi:gas-cylinder
        show_state: true
        show_name: true
        tap_action:
          action: none
        state_color: true
        styles:
          icon:
            - width: 64px
            - height: 64px
          name:
            - font-size: 14px
            - padding-top: 8px
      - type: button
        name: Neu tarieren
        icon: mdi:scale-balance
        tap_action:
          action: call-service
          service: mqtt.publish
          service_data:
            topic: gasbottle/command
            payload: TARE
        show_state: false
        show_name: true
        state_color: true
        styles:
          icon:
            - width: 64px
            - height: 64px
          name:
            - font-size: 14px
            - padding-top: 8px
      - type: button
        name: Kalibrieren (1kg)
        icon: mdi:tune
        tap_action:
          action: call-service
          service: mqtt.publish
          service_data:
            topic: gasbottle/command
            payload: CALIBRATE
        show_state: false
        show_name: true
        state_color: true
        styles:
          icon:
            - width: 64px
            - height: 64px
          name:
            - font-size: 14px
            - padding-top: 8px
  - type: gauge
    entity: sensor.gas_bottle_fill_level
    name: Füllstand Gasflasche
    unit: "%"
    min: 0
    max: 100
    needle: true
    severity:
      green: 30
      yellow: 10
      red: 0
  - type: sensor
    entity: sensor.gas_bottle_weight
    name: Aktuelles Gewicht
    icon: mdi:weight-kilogram
    graph: none
  - type: entities
    title: System Status
    state_color: true
    entities:
      - entity: sensor.gas_bottle_info
        name: Status / Info
        icon: mdi:information-outline
        secondary_info: last-changed

				
			

/homeassistant/configuration.yaml

				
					mqtt:
  sensor:
    - name: "Gas Bottle Weight"
      unique_id: gasbottle_weight_kg
      state_topic: "gasbottle/weight"
      unit_of_measurement: "kg"
      device_class: weight
      state_class: measurement
      icon: mdi:weight-kilogram
      value_template: "{{ value | float(0) | round(2) }}"

    - name: "Gas Bottle Fill Level"
      unique_id: gasbottle_fill_level
      state_topic: "gasbottle/fill_level"
      unit_of_measurement: "%"
      state_class: measurement
      icon: mdi:gas-cylinder
      value_template: "{{ value | float(0) | int }}"

    - name: "Gas Bottle Info"
      unique_id: gasbottle_info
      state_topic: "gasbottle/info"
      icon: mdi:information-outline

  binary_sensor:
    - name: "Gas Bottle Present"
      unique_id: gasbottle_present
      state_topic: "gasbottle/status"
      payload_on: "BOTTLE"
      payload_off: "NO_BOTTLE"
      device_class: occupancy

  button:
    - name: "Gas Bottle Scale Tare"
      unique_id: gasbottle_scale_tare
      command_topic: "gasbottle/command"
      payload_press: "TARE"
      retain: false
      icon: mdi:scale-balance
      availability_topic: "gasbottle/availability"
      payload_available: "online"
      payload_not_available: "offline"

    - name: "Gas Bottle Scale Calibrate"
      unique_id: gasbottle_scale_calibrate
      command_topic: "gasbottle/command"
      payload_press: "CALIBRATE"
      retain: false
      icon: mdi:tune
      availability_topic: "gasbottle/availability"
      payload_available: "online"
      payload_not_available: "offline"
				
			

Alle Code Beispiele findet ihr natürlich auch auf Git-Hub!

★☆★ Wenn ihr den Kanal unterstützen wollt über ★☆★

oder über

Vielen Dank im Voraus, Euer Edi.