Es gibt nichts Frustrierenderes, als mitten im Grillvorgang plötzlich kein Gas mehr zu haben. Du hast Freunde und Familie eingeladen, alle Grillzutaten vorbereitet und dann – das Desaster: Der Grill lässt sich nicht anmachen oder geht während des Grillens aus. Aber keine Sorge! In diesem Beitrag zeige ich dir, wie du ein intelligentes Benachrichtigungssystem mit Home Assistant einrichtest, das dich daran erinnert, wenn dein Gasgrilltank fast leer ist.

Die Lösung, die ich für dieses Problem entwickelt habe, ist eine smarte, batteriebetriebene Gasflaschenwaage, die unter der Gasflasche sitzt und deren Gewicht überwacht. Die Messungen werden an Home Assistant übertragen und können Automatisierungen auslösen, die zum Beispiel Benachrichtigungen an dein Smartphone und deinen Smart Speaker senden. Hier ist das ausführliche Video-Tutorial:

Was wir benötigen

Die folgende Grafik zeigt die wesentlichen Tools & Komponenten, die wir benötigen

Daneben brauchen wir natürlich eine ESPHome und eine Home Assistant Installation.

Diagramm zur Verkabelung

Das folgende Bild zeigt das Schaltbild. Die Verkabelung ist bei diesem Projekt etwas komplexer, daher bitte genau darauf achten, alles korrekt zu verdrahten. Ich übernehme auch keine Verantwortung für Fehler im gezeigten Diagramm.

Wie im Diagramm zu sehen ist, müssen wir zuerst die vier Wägezellen verdrahten und mit dem HX711-Board verbinden. Anschließend verbinden wir das HX711-Board mit dem D1 Mini-Board. Der nächste Schritt besteht darin, die 3 Batterien in Reihe zu schalten und sie mit dem DC-DC-Step-Up-Konverter zu verbinden, der eine konstante Spannung von 5V für die Stromversorgung des gesamten Systems erzeugen soll. Wir fügen auch ein Kabel mit einem Widerstand von 170K-220K Ohm vom Batterieanschluss zum A0-Analog-Digital-Konverter-Eingang des D1 Mini hinzu, um die Batteriespannung zu messen (um zu sehen, ob die Batterien voll oder leer sind). Außerdem fügen wir einen elektrischen Schalter hinzu, um das gesamte System leicht ein- und ausschalten zu können.

Gehäuse

Ich habe ein Gehäuse für die Gasflaschenwaage entworfen. Das Gehäuse besteht aus einem oberen Teil, der sich auf- und abbewegen kann, und einem unteren Teil, der die gesamte Elektronik sowie die Wägezellen trägt. Der obere Teil drückt dann auf die Wägezellen, um das Gewicht der Gasflasche zu messen. Ich habe die STL-Dateien auf Printables hochgeladen:

https://www.printables.com/de/model/908600-gas-bottle-scale

Du kannst das Gehäuse auf einem 3D-Drucker drucken oder – wenn du keinen zur Hand hast – einfach einen Online-Service für den 3D-Druck nutzen. Sei dir jedoch bewusst, dass diese Drucke lange dauern. Der untere Teil hat bei mir etwa 18 Stunden gedauert, der obere Teil etwa 15 Stunden. Es kann daher auch etwas teurer werden, wenn du es bei einem Online-Service drucken lässt.

Alles verbinden und verlöten

Nachdem das Gehäuse gedruckt ist, können wir alles zusammenbauen. Dazu ist auch etwas Löten erforderlich, um die Drähte mit dem D1 Mini zu verbinden. In diesem Fall sollte man nicht mit Jumperkabeln arbeiten (da diese einfach zu viel Platz einnehmen würden), sondern die Drähte direkt per Lötstelle mit dem D1 Mini verbinden.

ESPHome YAML code

Nachdem der Prototyp erstellt wurde, wird es Zeit, den ESP8266 auf dem D1 mini mit Code zu bespielen. Dazu verwende ich ESPHome. Der Vorteil von ESPHome ist, dass man alles bequem über ein YAML File konfigurieren kann, welches dann in C++ Code umgewandelt wird und anschließend in eine Binärdatei kompiliert wird, die auf den ESP8266 geflashed werden kann. Hier der Beispiel YAML Code:

substitutions:
  name: "gas-bottle-scale"
  friendly_name: gas_bottle_scale

esphome:
  name: ${name}
  friendly_name: ${friendly_name}
  name_add_mac_suffix: false
  project:
    name: esphome.web
    version: '1.0'
  on_boot:
    priority: -100.0
    then:
      - delay: 1s
      - script.execute: test_ota

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "gas-bottle-scale"
    password: "XNRwyVDfA2f7"

# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:

sensor:
  - platform: hx711
    id: gasbottle_weight
    name: "Gasbottle Weight"
    dout_pin: GPIO0
    clk_pin: GPIO2
    gain: 128
    update_interval: 1s
    filters:
      - calibrate_linear:
          - 82000 -> 0
          - 81300 -> 1
      - quantile
    unit_of_measurement: kg
  - platform: adc
    id: battery_charging_adc
    name: "Battery charging ADC value"
    pin: A0
    update_interval: 5s
  - platform: template
    name: "Battery charging state"
    unit_of_measurement: '%'
    update_interval: 5s
    lambda: |-
      return (((id(battery_charging_adc).state -0.666)/0.25) * 100.00);
  - platform: template
    name: "Gasbottle fill state"
    unit_of_measurement: '%'
    update_interval: 1s
    lambda: |-
      return ((id(gasbottle_weight).state - 3 / 5) * 100.00);

binary_sensor:
  - platform: homeassistant
    id: otamode
    entity_id: input_boolean.esphome_deep_sleep_devices_ota_mode
  
deep_sleep:
  run_duration: 1min
  sleep_duration: 59min
  id: deep_sleep_handler
script:
  - id: test_ota
    mode: queued
    then:
      - logger.log: "Checking OTA Mode"
      - if:
          condition:
            binary_sensor.is_on: otamode
          then:
            - logger.log: 'OTA Mode ON'
            - deep_sleep.prevent: deep_sleep_handler
          else:
            - logger.log: 'OTA Mode OFF'
            - deep_sleep.allow: deep_sleep_handler
      - delay: 2s
      - script.execute: test_ota

text_sensor:
  - platform: wifi_info
    ip_address:
      name: ESP IP Address

Einige Teile des Codes werden im Folgenden etwas genauer erklärt.

Deep Sleep & OTA Modus

Da dieses Gerät batteriebetrieben ist, verwende ich den sogenannten „Deep Sleep“-Modus des ESP8266, der wesentlich weniger Energie benötigt als der Betrieb bei voller Leistung. Für den ersten Prototyp läuft mein Gerät 1 Minute bei voller Leistung, sendet Messungen an Home Assistant und geht dann für 59 Minuten in den Deep Sleep. Somit werden nur einmal pro Stunde Messungen durchgeführt, was definitiv ausreichend ist. Letztendlich kann man wahrscheinlich sogar auf alle 12 oder 24 Stunden heruntergehen, da die Gasflasche sich wahrscheinlich nur nach dem Grillen leert und man wahrscheinlich nicht mehrmals am Tag grillt. Das hilft, Energie der Batterien zu sparen!

Der Deep Sleep hat jedoch den Nachteil, dass das Aktualisieren der Firmware über OTA (Over-the-Air) ziemlich schwierig ist, da man sicherstellen muss, dass das Gerät online ist, wenn ein OTA-Update durchgeführt wird. Wenn das Gerät nur 1 Minute pro Stunde online ist, kann es schwierig sein, diesen Zeitraum zu treffen. Daher habe ich einen sogenannten „OTA-Modus“ eingeführt. Ich habe einen binären Sensor „OTA-Modus“, den ich von Home Assistant importiere. Wenn dieser Sensor auf „true“ gesetzt ist, verhindert der oben gezeigte ESPHome-YAML-Code den Deep Sleep. Wenn der binäre Sensor auf „false“ gesetzt ist, wird der Deep Sleep wieder aktiviert. Damit kann ich den Deep Sleep ganz bequem von Home Assistant aus verhindern, um Firmware Updates durchzuführen!

Berechnung des Batterieladezustands

Im YAML Code oben sieht man eine Formel zur Berechnung des Batterieladezustands, welche ich im Folgenden erläutern möchte. Die Formel sieht folgendermaßen aus:

lambda: |-
      return (((id(battery_charging_adc).state -0.666)/0.25) * 100.00);

Ich habe die folgende Illustration erstellt, die helfen sollte, das zu verstehen. Aber nutzt bitte auch das YouTube Video, das weitere mündliche Erläuterungen beinhaltet.

Berechnung des Batterieladestands

Kalibrierung der Wägezellen

Du musst sicherstellen, dass die Wägezellen kalibriert sind, um genaue Messungen zu erhalten. Im obigen Code siehst du die folgende Kalibrierung:

filters:
  - calibrate_linear:
      - 82000 -> 0
      - 81300 -> 1
  - quantile
unit_of_measurement: kg

Diese Kalibrierung muss jedoch an deine spezifische Einrichtung angepasst werden. Sobald du den ESPHome-YAML-Code kompiliert und die Binärdatei auf den ESP8266 geflasht hast, wird der ESP8266 die Sensorwerte protokollieren. Mit den Sensorwerten im Log kannst du zunächst den „Nullpunkt“ identifizieren, also den Punkt, an dem kein Gewicht auf der Waage liegt. Danach kannst du ein genau bekanntes Gewicht auf die Waage legen, zum Beispiel 1 kg. Dann kannst du die Werte im obigen Code-Snippet ersetzen.

Probiere es aus

Sobald du die Firmware auf den ESP8266 geflasht hast, ist es Zeit, den Prototyp auszuprobieren. Ich hoffe, es funktioniert! Lass mir gerne einen Kommentar da, wie es geklappt hat.

Categories:

Comments are closed