1000L Container - Füllstand in Liter & Prozent - suche Hilfe

Hallo an alle,
meine selbstgebauten Messungen für die Zisterne und meinen 1000L Tank sind fertig und einsatzbereit. Werden demnächst eingebaut - ich bastele gerade an den „Sensoren“ für den Füllstand.Die Messungen geben jeweils den Abstand von oben zur Wasseroberfläche an (also zB 0,54m).
Die Zisterne hat eine Gesamthöhe von 3m bis zum Sensor, die maximale Füllhöhe liegt bei 2,51m von unten bzw 0,49m vom Sensor. Durchmesser liegt bei glatt 1m. Für die Prozentberechnung habe ich folgenden Sensor gefunden und auch schon eingebunden:

#Füllhöhe in Prozent Zisterne
    - unique_id: zisterne_fuellhoehe
      name: Füllhöhe Zisterne in %
      state: "{{ ((1-((states('sensor.h2o_zisterne_d1_mini_ultrasonic_sensor') | float(default=0) -0.54) / 3.00))*100)|round(0)}}"
      icon: mdi:arrow-expand-vertical
      device_class: humidity
      unit_of_measurement: "%" 

Das sollte funktionieren. Nun fehlt mir aber noch ein Sensor für die Literzahl - kann mir einer helfen?
Für den 1000L Container habe ich noch keinen Sensor, hier mal die Daten:
LängexBreitexHöhe = jeweils 1m . Dafür bräuchte ich ebenfalls zwei Sensoren - Füllstand in Liter und in Prozent. Wäre echt nett wenn ihr da auch helfen könntet - meine Kenntnisse im Programmieren sind leider etwas dürftig.
Danke…

Keiner ne Idee?? Oder braucht ihr noch andere Daten??

Hi, du hast dir doch schon einen Sensor für den ersten Tank gebaut. Den kannst du doch als Grundlage nutzen und dann einfach die Prozentangabe in Liter umrechnen.

Also 1000l = 100% usw..

Grüße

Mit welcher Hardware liesst du den Wasserstand aus? Ich habe auch einen 1000l Tank und würde das gerne nachbauen. Benutzt du Ultraschall?
Gruß
Martin

Hallo @MartyBr : ja genau mit dem Jsn-sr04t und einen D1 Mini. Strom liefert eine 18650 Batterie mit 3,7Volt, geladen über ein TP4056 Batterieladungsmodul ,das wiederum Lade-Strom von einem Solarmadul mit 5V und 2W bekommt. Da das Ultraschall Modul 5V benötigt,habe ich das MT3608 DC-DC Netzteil Adapter Step up Modul zwischen TP4056 und D1 Mini geschalten. Das liefert dann 5V Spannung für D1 und das Ultraschall Modul.
Die Software habe ich so ausgelegt,das jede 45 Minuten der D1 aufwacht und misst, zwischen 20Uhr und 6Uhr schläft er komplett,da brauche ich keine Messung. Spart ja auch noch Energie. Übrigens Energie: der D1 misst noch die Batterie Spannung aus,dann weiß ich wann die Batterie dem Ende entgegen geht.Wenn du noch mehr benötigst,sag Bescheid. Werde versuchen eine kleine Zeichnung zu machen,den Code aus der Yaml mache ich auch hier rein.
HomeAssistent sieht so aus:

1 „Gefällt mir“

Das klingt gut. Mein 1000l Container steht direkt hinter der Garage. Dann kann ich zur Stromversorgung ein 5V Netzteil nehmen. Das sollte die Schaltung vereinfachen.

Wenn du so freundlich bist und den Schaltplan wie auch die „Bestückungsliste“ hier zu posten, dann werde ich mich sehr freuen.

Wie ist deine Erfahrung mit dem Jsn-sr04t?

Viele Grüße

Martin

P.S.
Hast du den D1 Mini per ESPHome installiert? Ich habe jetzt mein erstes Projekt mit ESPHome umgesetzt. Ich habe einen Bewässerungscomputer mit einem ESP32 und einer Relaisplatine gebaut. Nachdem ich die Grundbetakung mittels Chrome und dem Webflasher machen konnte, wurde die Software dann mittels ESPHome geflashed.

Also im 1000L Container funktioniert es bestens,mir ist es auch nicht so wichtig ob da noch 637 oder 640L drin sind, sondern das er noch gut halb voll ist. Ein paar kleine Schwankungen gibt es,aber bisher im einstelligen Bereich.

Das mache ich…

Ja,läuft über ESPHOME..

Lediglich bei meiner Zisterne funktioniert es noch nicht ganz so gut,muss noch die geeignete Stelle finden. Sieht so aus als ob da was stört,ich weiß nur noch nicht ob es das Einkaufrohr und die Leiterstufen sind. Aber das finde ich noch raus…

Hier wie versprochen der „Schaltplan“.Ich bin kein Elektroniker, der Schaltplan ist mit Word erstellt - seht es mir bitte nach:

Bestückungsliste ist wie folgt:
ESP32 D1 Mini
JSN-SR04T 20-450 Ultraschallsensor
MT3608 DC-DC Netzteil Adapter Step up Modul
TP4056 Batterieladungsmodul - USB Typ C

Hier noch mein yaml Code:

#Zeitabfrage
time:
  - platform: sntp
    id: sntp_time
    timezone: Europe/Berlin
#DeepSleep (2 Minuten aufwachen/43 Minuten schlafen)
deep_sleep:
  id: deep_sleep_ctrl
  run_duration: 2min
  sleep_duration: 43min

globals:
  - id: page
    type: int
    initial_value: "1"
  - id: mode_text
    type: std::string
    initial_value: '"Unbekannt"'

interval:
  # Steuerung von DeepSleep je nach Uhrzeit (zwischen 20 und 6Uhr 10h DeepSleep;zwischen 6 und 20Uhr 2 Minuten wach/43Mi9nuten Schlaf)
  - interval: 30s
    then:
      - lambda: |-
          auto time = id(sntp_time).now();
          if (!time.is_valid()) return;

          if (time.hour >= 20 || time.hour < 6) {
            // Nachtmodus
            id(deep_sleep_ctrl).set_run_duration(1000);       // 1 Sekunde wach
            id(deep_sleep_ctrl).set_sleep_duration(10 * 60 * 60 * 1000); // 10 Stunden schlafen
            id(mode_text) = "Nachtmodus";
            ESP_LOGI("sleep", "Schalte in Nachtmodus (10h Schlaf)");
          } else {
            // Tagmodus
            id(deep_sleep_ctrl).set_run_duration(2 * 60 * 1000);       // 2 Minuten wach
            id(deep_sleep_ctrl).set_sleep_duration(43 * 60 * 1000);    // 43 Minuten schlafen
            id(mode_text) = "Tagmodus";
            ESP_LOGI("sleep", "Schalte in Tagmodus (2min wach, 43min Schlaf)");
          }

sensor:
#Entfernungsmessung mit Ultraschall-Abstandssensor JSN-SR04T
  - platform: ultrasonic
    trigger_pin: GPIO33
    echo_pin: GPIO34
    name: "Ultrasonic Sensor"
    update_interval: 10s
    timeout: 4m
    force_update: false
    filters:
    - lambda: if (isnan(x)) { return 999.0; } return x;
    - sliding_window_moving_average:
        window_size: 5
        send_every: 5

# Batteriesensor
  - platform: adc
    id: solar_plant_batt_voltage
    pin: GPIO39
    attenuation: auto
    name: Batteriespannung 1000L Tank
    unit_of_measurement: 'V'
    update_interval: 5s
    accuracy_decimals: 2
    filters:
        # Zuordnung von ESP32-Spannung zu Batteriespannung
        - multiply: 2 #das ist (100k + 100k)/(100k)=200k/100k=200/100=2
        #gleitender Median zur Glättung von Spitzen
        - median:
            window_size: 10
            send_every: 10
            send_first_at: 10
#        - delta: 0.1 # Werte nur senden, wenn sie sich ändern
#        - throttle: 30s #Werte an HA begrenzen
# Umrechnung der Spannung in einen Batteriestand (%)
  - platform: copy
    source_id: solar_plant_batt_voltage
    id: solar_plant_batt_level
    icon: "mdi:battery"
    name: Batteriestand 1000L Tank
    unit_of_measurement: '%'
    accuracy_decimals: 2
    filters:
        - calibrate_linear:
            # Zuordnung von ESP32-Spannung zu Batteriestand
            - 0.0 -> 0
            - 4.2 -> 100 #maximal möglicher vom ESP32 ADC gemeldeter Wert ist 3,3V
        #Grenzen behandeln/begrenzen
        - lambda: |
            if (x < 0) return 0;
            else if (x > 100) return 100;
            else return (x);
#        - delta: 0.5 #Werte nur senden, wenn sie sich ändern
#        - throttle: 30s #Werte an HA begrenzen
#MQTT Broker
mqtt:
    broker: 192.168.178.105
    username: mqtt_broker
    password: **********

Wenn du eine Steckdose in der Nähe hast - umso besser. Da meiner draussen steht, hat sich eine Batterie und ein Solarpaneel angeboten. Den Step-up Wandler habe ich eingefügt, da mit der Batterie alleine als Stromversorgung die Messwerte immer wieder ausgesetzt haben. Mit 5V über USB gab es das nicht, also habe ich auf 5V umgerüstet.
Falls noch Fragen sind, einfach raus damit.

2 „Gefällt mir“

Kannst du noch den Code für ESPHome posten bzw. den Link?
Da ich dort ein Steckdose habe, benötige ich nur

  • ESP32 D1 Mini
  • JSN-SR04T 20-450 Ultraschallsensor
    Richtig?

Er hat seinen Code doch einen Beitrag vorher gepostet :nerd_face:

Und zu deiner anderen Frage => Ja
Netzteil für den ESP benötigst du noch

Ist das nicht der Yaml-Code für Home Assistant? Ich suche den Code zur Programmierung des ESP in ESPHome.

Nein, das ist der Code der in die ESPHome yaml kommt, also auf dem ESP läuft.

Nachtrag: erst ab captive_portal: !!!

1 „Gefällt mir“

Ich habe aber auch nochmal eine Frage an die Code Spezialisten hier:
In meiner yaml (siehe oben) gibt es eine DeepSleep Funktion → von 20 bis 6Uhr DeepSleep ,dazwischen 43 Minuten DeepSleep und für 2 Minuten aufwachen, dann wieder DeepSleep. Nun ist es mir schon zweimal passiert, das einer der Messungen nicht aufgewacht ist. Ich habe folgenden Verdacht: laut Log wacht der ESP um z.B. 5:52Uhr auf, macht auch eine Messung, geht dann wieder in den DeepSleep. Da es ja vor 6Uhr ist, wäre der Nachtmodus aktiv - damit schläft er wieder 10h - sehe ich das richtig? Wie kann ich das ändern?

Ist das captive_portal ein Teil von ESPHome, wie es in Home Assistant integriert ist? Oder muss das captive_portal zusätzlich installiert werden?

Mein ESPHome hat die Version 2025.8.0

Gruß
Martin

Das findest du in der Yaml Datei deines ESP in ESPHome unter Edit. Der Teil oberhalb vom captive_portal ist der Allgemeine,da ist zB WiFi aufgeführt,oder der API Key usw. Unterhalb vom captive_portal beginnt der programmspezifische Code - also der den ich oben gepostet habe.
Hier ESPHOME:


Und hier meine Projekte - da siehst du auch den "Edit"Button.

Danke für die ausführliche Antwort. Ich fange gerade an mit ESPHome zu arbeiten. Ich muss noch einlesen.

Gruß

Martin

Alles gut,das kenne ich…