ESPHome Fehler - Duplicate key “sensor”

Hallo, ich habe mir per ChatGPT eine ESPHome YAML für meine Wiegezellen erstellt.

Nun sagt mir aber der Editor des ESPHome den Fehler

Duplicate key “sensor”
in “/config/esphome/gasflaschenwaage.yaml”, line 107, column 1
NOTE: Previous declaration here:
in “/config/esphome/gasflaschenwaage.yaml”, line 50, column 1

Kann ich verstehen es gibt 2x “sensor:” aber lösche ich jetzt den 2. “sensor:” Bereich und setze alles was dort steht unter den 1. “sensor:” Bereich wir der gesamte Code als Falsch deklariert… Was mach ich da falsch? hier mal mein Code =)

esphome:
  name: gasflaschenwaage
  friendly_name: gasflaschenwaage
  platform: ESP8266
  board: d1

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  password: ""

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Gasflaschenwaage"
    password: ""

captive_portal:

# Aktiviere die Web-Oberfläche
web_server:
  port: 80

# Nutze die Home Assistant Zeitquelle
time:
  - platform: homeassistant
    id: homeassistant_time

globals:
  - id: gespeichertes_gewicht
    type: float
    restore_value: no
    initial_value: '0'
  - id: kalibrierung_niedrig_referenz
    type: float
    initial_value: '0.0'
  - id: kalibrierung_hoch_referenz
    type: float
    initial_value: '10000.0' # Beispielwert

# Konfiguriere den HX711 Lastzellenverstärker
sensor:
  - platform: hx711
    dout_pin: D1
    sck_pin: D2
    gain: 128
    update_interval: never
    id: gasflaschen_gewicht
    filters:
      - lambda: |-
          if (id(kalibrierung_hoch_referenz) - id(kalibrierung_niedrig_referenz) == 0) return 0;
          float kalibrierungsfaktor = (x - id(kalibrierung_niedrig_referenz)) / (id(kalibrierung_hoch_referenz) - id(kalibrierung_niedrig_referenz));
          return kalibrierungsfaktor * 10000;  # Ersetze 10000 durch den Wert, der dem Gewicht in Gramm bei voller Kalibrierung entspricht.

# Einstellbare Werte über das Webinterface
number:
  - platform: template
    name: "Vollgewicht"
    id: vollgewicht
    min_value: 0
    max_value: 30000
    step: 100
    initial_value: 21100
    unit_of_measurement: "g"
  - platform: template
    name: "Tara Gewicht"
    id: tara_gewicht
    min_value: 0
    max_value: 20000
    step: 100
    initial_value: 11000
    unit_of_measurement: "g"
  - platform: template
    name: "Kalibrierung Niedrig Referenz"
    id: num_kalibrierung_niedrig_referenz
    min_value: 0
    max_value: 5000
    step: 1
    initial_value: 0.0
    on_value:
      then:
        - globals.set:
            id: kalibrierung_niedrig_referenz
            value: !lambda 'return x;'
  - platform: template
    name: "Kalibrierung Hoch Referenz"
    id: num_kalibrierung_hoch_referenz
    min_value: 5000
    max_value: 50000
    step: 1
    initial_value: 10000.0
    on_value:
      then:
        - globals.set:
            id: kalibrierung_hoch_referenz
            value: !lambda 'return x;'

# Template-Sensor zur Berechnung des prozentualen Anteils
sensor:
  - platform: template
    name: "Gasflasche Verbleibender Gasanteil"
    id: gasflasche_verbleibender_gasanteil
    lambda: |-
      float vollgewicht = id(vollgewicht).state;
      float tara = id(tara_gewicht).state;
      float aktuelles_gewicht = id(gasflaschen_gewicht).state;
      if (vollgewicht - tara <= 0) return 0.0; // Verhindert Division durch Null
      float prozent = ((aktuelles_gewicht - tara) / (vollgewicht - tara)) * 100.0;
      return prozent;
    unit_of_measurement: "%"
    accuracy_decimals: 2
    update_interval: never # Aktualisiere nur bei expliziter Anforderung

# Stündliche Gewichtsaktualisierung
interval:
  - interval: 1h
    then:
      - sensor.force_update: gasflaschen_gewicht
      - sensor.force_update: gasflasche_verbleibender_gasanteil

Du hast Sensor dann number und dann wieder Sensor am Anfang stehen. Das geht so nicht, du musst die Sensor: zusammenfassen

Ja das hatte ich ja schon bemerkt und habe dann den zweiten Sensor Bereich zum ersten geschrieben, dann war aber der gesamte Code falsch :sweat_smile:

esphome:
  name: gasflaschenwaage
  friendly_name: gasflaschenwaage
  platform: ESP8266
  board: d1

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  password: ""

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Gasflaschenwaage"
    password: ""

captive_portal:

# Aktiviere die Web-Oberfläche
web_server:
  port: 80

# Nutze die Home Assistant Zeitquelle
time:
  - platform: homeassistant
    id: homeassistant_time

globals:
  - id: gespeichertes_gewicht
    type: float
    restore_value: no
    initial_value: '0'
  - id: kalibrierung_niedrig_referenz
    type: float
    initial_value: '0.0'
  - id: kalibrierung_hoch_referenz
    type: float
    initial_value: '10000.0' # Beispielwert

# Konfiguriere den HX711 Lastzellenverstärker
sensor:
  - platform: hx711
    dout_pin: D1
    sck_pin: D2
    gain: 128
    update_interval: never
    id: gasflaschen_gewicht
    filters:
      - lambda: |-
          if (id(kalibrierung_hoch_referenz) - id(kalibrierung_niedrig_referenz) == 0) return 0;
          float kalibrierungsfaktor = (x - id(kalibrierung_niedrig_referenz)) / (id(kalibrierung_hoch_referenz) - id(kalibrierung_niedrig_referenz));
          return kalibrierungsfaktor * 10000;  # Ersetze 10000 durch den Wert, der dem Gewicht in Gramm bei voller Kalibrierung entspricht.


  - platform: template
    name: "Gasflasche Verbleibender Gasanteil"
    id: gasflasche_verbleibender_gasanteil
    lambda: |-
      float vollgewicht = id(vollgewicht).state;
      float tara = id(tara_gewicht).state;
      float aktuelles_gewicht = id(gasflaschen_gewicht).state;
      if (vollgewicht - tara <= 0) return 0.0; // Verhindert Division durch Null
      float prozent = ((aktuelles_gewicht - tara) / (vollgewicht - tara)) * 100.0;
      return prozent;
    unit_of_measurement: "%"
    accuracy_decimals: 2
    update_interval: never # Aktualisiere nur bei expliziter Anforderung

# Einstellbare Werte über das Webinterface
number:
  - platform: template
    name: "Vollgewicht"
    id: vollgewicht
    min_value: 0
    max_value: 30000
    step: 100
    initial_value: 21100
    unit_of_measurement: "g"
  - platform: template
    name: "Tara Gewicht"
    id: tara_gewicht
    min_value: 0
    max_value: 20000
    step: 100
    initial_value: 11000
    unit_of_measurement: "g"
  - platform: template
    name: "Kalibrierung Niedrig Referenz"
    id: num_kalibrierung_niedrig_referenz
    min_value: 0
    max_value: 5000
    step: 1
    initial_value: 0.0
    on_value:
      then:
        - globals.set:
            id: kalibrierung_niedrig_referenz
            value: !lambda 'return x;'
  - platform: template
    name: "Kalibrierung Hoch Referenz"
    id: num_kalibrierung_hoch_referenz
    min_value: 5000
    max_value: 50000
    step: 1
    initial_value: 10000.0
    on_value:
      then:
        - globals.set:
            id: kalibrierung_hoch_referenz
            value: !lambda 'return x;'



# Stündliche Gewichtsaktualisierung
interval:
  - interval: 1h
    then:
      - sensor.force_update: gasflaschen_gewicht
      - sensor.force_update: gasflasche_verbleibender_gasanteil