Ölstandmessung mit einem HC-SR04 und einen esp8266

Hallo, ich versuche schon seit längerem einen Yaml Code für eine Ölstandsmessung zu erstellen. Leider ohne Erfolg :frowning:

Ich benutze dazu eine HC-SR04 und einen esp8266. Die Ausgabe vom Abstand Ultraschallsensor und Öl funktioniert. Jedoch das Umrechnen vom Abstand (cm) in noch vorhandenen Öl (L) klappt nicht.

Ich habe dazu eine Peiltabelle vom Hersteller der Öltanks. Diese ist zwar noch etwas ungenau, kann man ja aber noch anpassen wenn das Script mal läuft.

Hat jemand eine Idee wie ich das Script aufbauen muss?

Du könntest mittels calibrate linear mehrere Datenpunkte als Referenz verwenden. Dann macht ESPHome das, ohne selbst die Berechnung erstellen zu müssen.

Habe ein ähnliches Projekt (Füllstand Zisterne) mit Drucksensor TL 136 (der auch für Öl geeignet ist) mit esp8266 + AD Wandler

Hier mein ESPHome prog. mit der Umrechnung Spannung zu Liter und calibrate linear.

captive_portal:

# i2c Bus auf D1 und D2 konfigurieren
i2c:
  id: bus_a
  sda: GPIO4
  scl: GPIO5
  scan: True

# 1-Wire-Sensoren am Pin D4
#dallas:
#  - pin: GPIO2

# ADC einrichten, ADDR-Pin ist auf VCC gelegt, daher Adresse 0x49
ads1115:
  - address: 0x49
    id: ads1115_49

# ADC Kanal A0 zur Messwerterfassung 
sensor:
  - platform: ads1115
    multiplexer: 'A0_GND'
    gain: 4.096
    name: "Wasserstand Zisterne cm"
    id: levelraw
    update_interval: 120s
    unit_of_measurement: cm
    accuracy_decimals: 1
    icon: "mdi:car-coolant-level"
# Messwerte glätten:
    filters:
      - sliding_window_moving_average:
          window_size: 2
          send_every: 2
# Spannungen nach Messreihe in Füllhöhe umrechnen          
      - calibrate_linear:
          - 0.0 -> 0.0
          - 0.23 -> 10
          - 0.57 -> 20
          - 0.94 -> 30
          - 1.27 -> 40
          - 1.6 -> 50
          - 1.95 -> 60
          - 2.28 -> 70
          - 2.5 -> 80
          - 2.73 -> 90
          - 2.93 -> 100

# Füllmenge nach Füllstandskurve berechnen

  - platform: template
    name: "Zisterne Liter"
    lambda: |-
      return id(levelraw).state;
    
    filters:
      - calibrate_linear:
          - 5 -> 40
          - 10 -> 78
          - 9.5 -> 140
          - 12.8 -> 210
          - 20 -> 280
          - 25.5 -> 350
          - 38.2 -> 420
          - 40 -> 490
          - 45 -> 560
          - 63.7 -> 630
          - 70 -> 700
          - 80 -> 770
          - 85 -> 850
          - 90 -> 900
          - 95  -> 950
          - 99.5 -> 1000

    unit_of_measurement: l
    accuracy_decimals: 0

# 1-Wire Temperatursensor 

#  - platform: dallas
#    address: 0xef0516905a21ff28
#    name: "Zisterne Sens1"
#    unit_of_measurement: °C
#    accuracy_decimals: 1    

Hab das ganze gerade erst mit einem JSNSR04 umgesetzt.
Habe zwei 1500L Tanks.
hier mal mein kompletter code.
an den genauen Füllständen muss ich noch arbeiten und es schwankt gerne mal um 10 bis 20 Liter.

esphome:
  name: esp-8266-oiltank
  friendly_name: esp_8266_oiltank

esp8266:
  board: d1_mini

# Enable logging
logger:

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

ota:
  - platform: esphome
    password: "zensiert"

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

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

captive_portal:
    
sensor:
  - platform: ultrasonic
    trigger_pin: D1
    echo_pin: D2
    name: 'Öltank Level'
    update_interval: 3600s
    unit_of_measurement: l
    filters:
      - calibrate_linear:
          method: least_squares
          datapoints:
            - 0.000 -> 3000
            - 0.470 -> 2000
            - 0.970 -> 1000
            - 1.470 -> 0
      - median:
          window_size: 5
          send_every: 1
    accuracy_decimals: 2

Hört sich gut an. Aber wo gen ich den Sensor an? Und woher bekomme ich die Daten, welch du mit „zensiert „ markiert hast?

Mit dem AddOn ESP Home Builder.
Den Rest am besten durch YT Videos zusammen suchen.
Nicht, dass ich es nicht erklären will, ich kann es einfach nicht alles.

Die Daten wo zensiert sind sollten bei dir schon beim Erstellen des ESP im HA vorhanden sein. Du musst dir also nur den Code ab Sensor ansehen. Angeschlossen wird der Sensor an D1 und D2