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…
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.
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:
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…
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.
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?
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: