Hallo zusammen,
ich habe ein Projekt zur automatischen Füllstandsmessung meines Pelletlagerraums mit ESP32 und zwei JSN-SR04T Ultraschallsensoren aufgebaut, das direkt in Home Assistant integriert ist. Leider bekomme ich keine sinnvollen Messwerte – obwohl die Sensoren grundsätzlich funktionieren (getestet mit Arduino).
Projektziel:
Der ESP32 misst einmal täglich den Abstand zur Pellet-Oberfläche mit zwei Ultraschallsensoren. Daraus wird automatisch der aktuelle Füllstand des Lagerraums in cm und Kilogramm berechnet. Die Werte sollen ausschließlich in Home Assistant geloggt werden – kein Display, keine SD-Karte.
Lagerraum-Daten:
• Maße: 2 m x 3 m x 2,3 m → 13,8 m³ Volumen
• Pelletdichte: ca. 650 kg/m³
Hardware:
• ESP32 D1 Mini (AZ-Delivery)
• 2x JSN-SR04T Ultraschallsensoren
• Stromversorgung über USB
• WLAN-Verbindung zu Home Assistant
Anschlussbelegung:
• Sensor 1: Trigger = GPIO4, Echo = GPIO5
• Sensor 2: Trigger = GPIO27, Echo = GPIO25
Problem:
ESP32 lässt sich problemlos flashen und erscheint in Home Assistant. Die Sensoren zeigen aber dauerhaft ca. 80 cm an, obwohl sich der Füllstand ändert. Die berechnete Füllhöhe bleibt z. B. bei 229,7 cm – und das Gewicht entsprechend konstant. Es wirkt, als würde gar nicht neu gemessen.
Was ich brauche:
• Hat jemand eine funktionierende Lösung mit JSN-SR04T und ESP32 in ESPHome?
• Gibt es bekannte Probleme mit bestimmten GPIOs?
• Muss ich evtl. noch einen Timeout, Gain, Pulldown etc. setzen?
• Funktionieren JSN-SR04T mit ESPHome überhaupt zuverlässig in dieser Konfiguration?
Ich bin für jede Hilfe oder einen funktionierenden Beispielcode sehr dankbar!
esphome:
name: pelletlager
friendly_name: Pelletlager
esp32:
board: esp32dev
framework:
type: arduino
logger:
api:
encryption:
key: "..."
ota:
password: "..."
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Pelletlager"
password: "..."
captive_portal:
globals:
- id: sensor1_offset
type: float
initial_value: "0.0"
- id: sensor2_offset
type: float
initial_value: "0.0"
sensor:
- platform: ultrasonic
trigger_pin: GPIO4
echo_pin: GPIO5
name: "Sensor 1 Entfernung"
id: sensor1_distance
update_interval: 86400s
filters:
- lambda: return x + id(sensor1_offset);
- platform: ultrasonic
trigger_pin: GPIO27
echo_pin: GPIO25
name: "Sensor 2 Entfernung"
id: sensor2_distance
update_interval: 86400s
filters:
- lambda: return x + id(sensor2_offset);
- platform: template
name: "Fuellhoehe (cm)"
id: fuellhoehe_cm
unit_of_measurement: "cm"
update_interval: 86400s
lambda: |-
float raumhoehe = 230.0;
float d1 = id(sensor1_distance).state;
float d2 = id(sensor2_distance).state;
if (isnan(d1) || isnan(d2)) return NAN;
return raumhoehe - ((d1 + d2) / 2.0);
- platform: template
name: "Pelletmenge (kg)"
id: pelletmenge
unit_of_measurement: "kg"
update_interval: 86400s
lambda: |-
float breite = 3.0;
float laenge = 2.0;
float dichte = 650.0;
float hoehe = id(fuellhoehe_cm).state / 100.0;
float volumen = breite * laenge * hoehe;
return volumen * dichte;