Brauche Hilfe bei einem Projekt

Hallo Zusammen,

mein erstes ESPHome Projet ist ein wenig ins stocken geraten und ich weis nicht mehr weiter.

Ich habe mir selber eine Waage gebaut um den Füllstand der Co2-Anlage meiner Aquarien zu überwachen. Der Aufbau besteht einem 5Kg Waagebalken mit HX711 Sensormodule, einem 0,96Zoll OLED SSD1306 Display, einem Taster (Pullup) und einem ESP32 D1 Mini NodeMCU.

Das wiegen und Anzeigen in HomeAssistant funktioniert so weit gut.

Jetzt zu dem Teil der mich aktuell etwas überfordert :blush:

Ich habe zwei Co2 Flaschen deren Leergewicht ich kenn und einen Druckminderer. Da ich ja nur das Gewicht der Füllmenge brauch muss ich das Leergewicht der jeweiligen Flasche und des Druckminderes vom Ergebnis der Waage abrechnen und auswählen können welche Flasche grade dran ist.

Flasche1: Waage in g - 2142g - 400g = Füllmenge
Flasche2: Waage in g - 2132g - 400g = Füllmenge

Und hier höre meine Fähigkeiten dann auf.

Hat jemand von euch eine Idee wie ich anstellen in HA zwischen den Flaschen umzuschalten und dann nur die Füllmenge angezeigt zu bekommen?

Grüße
Ingo

Hallo Ingo!

Was willst du denn anzeigen? Bzw. welchen Grund hast du dass du umschalten willst?

Hallo Stefan,

anzeigen möchte ich die Füllmenge der CO2 Flasche in Gramm, im Moment bekomme ich nur das Gesamtgewicht aus Flasche+Druckminderer+Füllmenge.

Umschalten der Flasche währe halt schick da nach einem Wechsel von Flasche 1 auf 2 sich das Gewicht der Flasche ändert.

würdest du uns den code zeigen?
in Moment kann ich dir nur sagen das du den Wert nehmen musst und ich würde es in Lambda dann berechnen
also mit id(Gesamt) - 400 return

Würde hier nicht ein einfacher Template Helfer, welcher in Abhängigkeit eines weitere Helfer (welche Flasche gerade angeschlossen ist) den Job machen.

Im Template würdest du auf Grundlage der vorhandenen Sensoren die Rechnung durchführen und dabei mit eine Abfrage das Gewicht von Flasche 1 oder 2 ansetzen.

Gruß, Lars

Hallo,

sorry war leider krank und konnte nicht antworten. Hier mal mein Code für den ESP32:

esphome:
  name: co2-waage-320l
  friendly_name: CO2-Waage-320L

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "hier steht der key"

ota:
  - platform: esphome
    password: "hier steht der key"

wifi:
  ssid: "mein Wlan"
  password: "hier steht der key"
 
  ap:
    ssid: "Co2-Waage-320L-Hotspot"
    password: "hier steht der key"

#mqtt:
#  broker: meine IP
#  username: mein Benutzer
#  password: hier steht der key
#  port: 1883

captive_portal:

font:
  - file: "arial.ttf"
    id: font1
    size: 12

i2c:
  sda: GPIO21
  scl: GPIO22

sensor:
  - platform: hx711
    name: "HX711 Value"
    id: gewicht
    dout_pin: GPIO17
    clk_pin: GPIO16
    gain: 128
    update_interval: 5s  
    filters:
    - calibrate_linear:
        - 280300 -> 0
        - 441800 -> 500
    unit_of_measurement: g
    accuracy_decimals: 0

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    rotation: 180
    lambda: |-
       it.printf(64, 0, id(font1), TextAlign::TOP_CENTER, "CO2-Waage");
       it.printf(64, 23, id(font1), TextAlign::TOP_CENTER, "%g", id(gewicht).state);

Ich hoffe das hilft.

Grüße

Hallo,

hat lange gebraucht aber hier ist meine Lösung:

der Aufbau:

1x ESP-32 Dev Kit C V4
1x Display 0,96 Zoll OLED SSD1306
1x Sensor AD HX711
1x Wägezelle 5kg
1x Taster

und dann noch der Code:

esphome:
  name: co2-waage-320l
  friendly_name: CO2-Waage-320L

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:
  encryption:
    key: "MEIN KEY"

ota:
  - platform: esphome
    password: "MEIN KEY"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
 
  ap:
    ssid: "MEINE SSID"
    password: "MEIN KEY"

mqtt:
  broker: MEIN IP
  username: !secret mqtt_user
  password: !secret mqtt_password
  port: 1883

captive_portal:

font:
  - file: "arial.ttf"
    id: font1
    size: 12

i2c:
  sda: GPIO21
  scl: GPIO22

globals:
  - id: aktuelle_flasche
    type: bool
    restore_value: yes
    initial_value: "false"  # false = Flasche1, true = Flasche2

binary_sensor:
  - platform: gpio
    pin: 
      number: 13
      mode:
        input: true
        pulldown: true
    name: "CO2-Flaschenumschalter"
    id: flaschenumschalter
    filters:
      - delayed_off: 100ms
    on_press:
      then:
        - lambda: |-
            id(aktuelle_flasche) = !id(aktuelle_flasche);  // Toggle Flasche

sensor:
  - platform: hx711
    name: "HX711 Value"
    id: gewicht
    dout_pin: GPIO17
    clk_pin: GPIO16
    gain: 128
    update_interval: 5s  
    filters:
      - calibrate_linear:
          - 287300 -> 0
          - 447400 -> 500
    unit_of_measurement: g
    accuracy_decimals: 0

  - platform: template
    name: "Flasche1"
    id: flasche1
    lambda: |-
      return id(gewicht).state - 2542;
    unit_of_measurement: "g"
    update_interval: 10s
  
  - platform: template
    name: "Flasche2"
    id: flasche2
    lambda: |-
      return id(gewicht).state - 2532;
    unit_of_measurement: "g"
    update_interval: 10s

  - platform: template
    name: "Füllmenge"
    id: fuellmenge
    lambda: |-
      if (id(aktuelle_flasche)) {
        return id(flasche2).state;
      } else {
        return id(flasche1).state;
      }
    unit_of_measurement: "g"
    update_interval: 10s
    
text_sensor:
  - platform: template
    name: "Füllmenge mit Flaschennummer"
    id: fuellmenge_mit_nummer
    lambda: |-
      char buffer[50];
      sprintf(buffer, "Flasche %d: %.0f g", id(aktuelle_flasche) ? 2 : 1, id(fuellmenge).state);
      return std::string(buffer);
    update_interval: 60s

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    rotation: 180
    lambda: |-
       it.printf(64, 0, id(font1), TextAlign::TOP_CENTER, "CO2-Waage");
       it.printf(64, 23, id(font1), TextAlign::TOP_CENTER, "%s", id(fuellmenge_mit_nummer).state.c_str());

Das ganze geht wahrscheinlich auch eleganter, war aber mein erstes eigenes Projekt :slight_smile:.

Danke für eure Tipps und Hilfestellungen.

Grüße
Ingo