Bodenfeuchtesensoren ESP32 D1 mini ESPHome

Servus zusammen,

hat schon jemand die folgenden Bodenfeuchtesensoren
Bodenfeuchtesensor, Feuchte-Detektor und Pflanzenfeuchte-Messgerät
erfolgreich via einem ESP32 D1 mini mit ESPhome in Homeassistant eingebunden, und hätte evtl. ein YAML Beispiel für mich?

Hab leider mit den Sensoren noch nicht viel Erfahrung. Er hängt an 3.3V. Das folgende waren meine ersten Versuche:

esphome:
  name: controller-esp32
  friendly_name: Controller-ESP32

esp32:
  board: wemos_d1_mini32
  framework:
    type: arduino

# Enable logging
logger:

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

ota:
  password: "xxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: x.x.x.x
    gateway: x.x.x.x
    subnet: 255.255.255.0
    dns1: x.x.x.x
    #dns2: 0.0.0.0
  domain: .xxx.xxx

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Controller-Esp32"
    password: "xxx"

captive_portal:

sensor:
  - platform: adc
    pin: GPIO33
    name: "Soil Moisture Analog"
    update_interval: 10s

binary_sensor:
  - platform: gpio
    pin: GPIO26
    name: "Soil Moisture Digital"
    filters:
      - delayed_on: 5ms
      - delayed_off: 5ms
    on_press:
      then:
        - logger.log: "Soil Moisture Digital is ON"
    on_release:
      then:
        - logger.log: "Soil Moisture Digital is OFF"

Wäre super wenn man irgendwie die Feuchtigkeit als Prozentwert zwischen 0 und 100% angezeigt bekommen würde.

Hast du techn. Daten vom Sensor? Wie hast du den Sensor am ESP angebunden?

Hallo,

davon mal abgesehen. das die Sensoren keine sonderlich lange Lebenserwartung haben ( meine waren nach 3 Monaten am Ende und das in der Wohnung )

Die Teile liefern einen digital und einen Analogwert und ich hab den Analogwert am ESP eingelesen.
Ich bin mir nur nicht mehr sicher, ob ich dafür einen Widerstandteiler nutzen musste, weil die Spannung am Eingang eines ESP8266 nur max 1V betragen darf.

Da hilft am besten aber das Ebook zu dem Sensor, da man als Kunde bei az-delivery kostenlos bekommt.

Wenn du was haltbares haben willst, nehme lieber kapazitive Sensoren, aber da gibt es auch gewaltige Qualitätsunterschiede.

Im PDF ist die Rede von einer langen Lebensdauer von mindestens 6 Monaten (nicht die Welt), was vermutlich nicht ohne Grund aufgeführt ist. Wahrscheinlich wegen der elektrolyse die über die Zeit erfolgt.
Wenn ich mir das so anschau. ist der Kapazitive Sensor die elegantere / länger haltbare Lösung. Im zweifel könnte man den auch noch extra mit Lack versiegeln, dass nichts oxidiert, oder sonstwie eine nicht gewollte Verbindung eingeht.
Wenn das was diverse LLMs ausgeben stimmen, dann sind es 3,3V IN / OUT wie einen maximaler Strom für die Analog-Eingänge von 40mA.

Das folgende Video ist interessant um den passsenden Sensor zu finden:

Hab mir mal den Kapazitiven bestellt. werd weiter testen wenn se da sind.

Der analoge Wert passt nun mit dem folgenden Script:

sensor:
  - platform: adc
    pin: GPIO33
    name: "Soil Moisture"
    unit_of_measurement: "%"
    device_class: MOISTURE
    update_interval: 2s
    attenuation: 11db #required
    filters:

    - median:  # Hinzufügen eines Median-Filters zur Glättung der Werte
        window_size: 10

    - calibrate_linear:
        - 1.07100 ->  100.00   # 1.07100 mit dem ermittelten Wert anpassen
        - 3.12900 ->  0.00      # 3.12900 mit dem ermittelten Wert anpassen
    - lambda: |
       if (x < 0) return 0;
       else if (x > 100) return 100;
       else return (x);
    accuracy_decimals: 0

Wichtig ist, dass man die Werte zu 0 und 100% entsprechend dem vorliegenden Sensor ändert.

Den digitalen Wert beachte ich erst mal nicht. Braucht man vermtlich eh nicht wenn man den Prozentwert hat.
grafik

Hi,

sind das Deine Werte / Script für die kapazitiven Sensoren?

Grüße

Das war noch das Script inkl. der ermittelten Werte für die oben genannten Sensoren.
Die kapazitiven werden erst geliefert, konnte sie noch nicht testen. Wenn sie da sind und ich Zeit habe, ergänze ich weitere Infos.

ok - super.

Ich habe die kapazitiven Sensoren bereits im Einsatz und bin noch in der Findungsphase der richtigen Einstellungen:

sensor:
  - platform: adc
    name: "Sensor_Bodenfeuchte_voltage1"
    id: Humidity_voltage1
    pin: GPIO32
    accuracy_decimals: 2
    update_interval: 5s
    attenuation: 11dB

Dadurch werden mir die Werte in V ausgegeben. Wenn Du die Teile in Betrieb genommen hast, würde ich mich über einen Austausch mit dir freuen :slight_smile:

1 „Gefällt mir“

Hey Guys,
ich hab mir den gleichen Sensor von AZ delivery geholt, an einem ESP 8266 angeschlossen und deinen Code verwendet. Der Sensor zeigt bei mir nur 100% an und misst nicht. Was kann ich da machen?

Wichtig ist das ein analoger PIN verwendet wird.
Am ESP8266 z.b. A0 oder am ESP32 z.b. GPIO32

Beim ESP8266 ggf. darauf achten, ob man einen Wiederstand benötigt. da bin ich mir nicht sicher ob der nur 0 bis 1 V haben darf. Nicht das man ihn grillt wenn mehr anliegt.

ist es der aus dem ersten Bild mit den zwei metall stäben, oder der Kapazitive?

Hab mal das ganze kommentiert:

#  !!! Wichtig es darf nur Bereich 1 oder Bereich 2 aktiv sein. Da der selbe GPIO verwendet wird. !!!
#  !!! Der jeweils andere muss auskommentiert werden !!! 


############################################################################################################################################
# Bereich 1                                                                                                                                #
#                                                                                                                                          #
# Zum ermitteln der Messwerte des vorliegenden Sensors für den Zustand trocken und feucht.                                                 #
# Es erfolgt die Ausgabe in V                                                                                                              #
#                                                                                                                                          #
# Beispiel:                                                                                                                                #
# [22:15:08][D][sensor:094]: 'Bodenfeuchte kalibrierung': Sending state 1.13950 V with 0 decimals of accuracy  --  entspricht Feucht  100% #
# [22:13:48][D][sensor:094]: 'Bodenfeuchte kalibrierung': Sending state 3.12900 V with 0 decimals of accuracy  --  entspricht Trocken 0%   #
#                                                                                                                                          #
# Es wird jeweils der V wert verwendet.  Ggf warten bis sich der Wert einpendelt.                                                          #
#                                                                                                                                          #
############################################################################################################################################

sensor:
  - platform: adc
    pin: GPIO36
    name: "Bodenfeuchte kalibrierung"
    device_class: MOISTURE
    update_interval: 2s
    attenuation: 11db #required
    filters:
    - median:  # Hinzufügen eines Median-Filters zur Glättung der Werte
        window_size: 10
    accuracy_decimals: 0

############################################################################################################################################




############################################################################################################################################
# Bereich 2                                                                                                                                #
#                                                                                                                                          #
# Wenn die Messwerte zur Hand sind, diese in den unteren Bereich bei - calibrate_linear: anpassen.                                         #
#                                                                                                                                          #
# nicht vergessen den oberen Bereich aus zu kommentieren wenn die werte angepasst sind.                                                    #
############################################################################################################################################

sensor:
  - platform: adc
    pin: GPIO36
    name: "Bodenfeuchte"
    unit_of_measurement: "%"
    device_class: MOISTURE
    update_interval: 2s
    attenuation: 11db #required
    filters:

    - median:  # Hinzufügen eines Median-Filters zur Glättung der Werte
        window_size: 10

    - calibrate_linear:
        - 1.13950 ->  100.00   # 1.13950 mit dem ermittelten Wert anpassen
        - 3.12900 ->  0.00      # 3.12900 mit dem ermittelten Wert anpassen

    - lambda: |
       if (x < 0) return 0;
       else if (x > 100) return 100;
       else return (x);
    accuracy_decimals: 0

############################################################################################################################################

Hoffe das hilft in die richtige Richtung.

Hey, danke für die schnelle Antwort, ich teste gerade die mit zwei Metallstäben. Zum Glück konnte ich das Problem inzwischen beheben, ich hatte versehentlich den Digitalausgang statt des Analogausgangs verwendet und im Code GPIO32 geschrieben, aber GPIO33 verwendet.

Ich habe folgenden Code benutzt, den 100% Wert habe ich extra etwas über den gemessenen Wert (~1.36500) auf 1.40000 gesetzt, da die Erde sowieso nie mit 100% Wasser gesättigt ist, da ich zur Kalibrierung den Wert für Luft und den Wert für ein Glas Wasser genommen habe. Leider hat der Wert ziemlich geschwankt, aber ich vermute auch, dass der EC Wert des Wassers / Mediums auch nochmal die Werte verfälscht, wenn man es mit Leitungswasser kalibriert, im Vergleich wenn man dann mit Dünger gießt, was meint ihr dazu?

Ich habe aber auch schon die kapazitiven getestet und als die bei mir waren, haben ich mit dem oberen YouTube Video festgestellt, dass ich die schlechtest möglichen bestellt haben. Die sind leider relativ unbrauchbar, ich weiß nicht, ob die anderen in der Preisklasse wirklich besser sind, aber bei denen war die Streuung der Ergebnisse, auch mit Median von 10 Messungen, sehr hoch, so dass man meiner Meinung nach nur sagen kann, ob die Erde komplett nass oder komplett trocken ist, aber ich würde den Sensoren überhaupt nicht trauen. Die Ergebnisse mit den Metallstäben sahen viel genauer und logischer aus, aber teilt gerne auch eure Ergebnisse, es gibt auch kapazitive für 80€-200€ / stk, aber die sind momentan außerhalb meiner Preisklasse zum Testen.

sensor:
  - platform: adc
    pin: GPIO33
    name: "Soil Moisture"
    unit_of_measurement: "%"
    device_class: MOISTURE
    update_interval: 2s
    attenuation: 11db #required
    accuracy_decimals: 1
    filters:

    - median:  # Hinzufügen eines Median-Filters zur Glättung der Werte
        window_size: 10

    - calibrate_linear:
        - 1.40000 ->  100.00   # 1.07100 mit dem ermittelten Wert anpassen
        - 3.13900 ->  0.00      # 3.12900 mit dem ermittelten Wert anpassen
    - lambda: |
       if (x < 0) return 0;
       else if (x > 100) return 100;
       else return (x);

Ich vermute auch das der EC Wert einen Einfluss ha, er ändert die Leitfähigkeitt.

Die Kapazitiven von AZ-Delivery die ich erhalten habe waren murx.
Hab mal bei einem anderen Händler auf eBay welche bestellt, im Artikel war es passend beschrieben. Um Dienstag hab ich vermutlich mehr Infos.

Alles in allem hätte ich von AZ mehr Qualität erwartet als Sensoren für die Tonne…

Wahrscheinlich muss man im verwendeten Medium Kalibrieren, und oder sich die Werte entsprechend ableiten.
Geeichte Werte wird man mit den einfachen Sensoren ohnehin nicht bekommen.d:-)
Die teuren sind keine Option ohne entsprechenden Goldesel.

Die Zeit wird zeigen wie haltbar die mit den Metallstäben sind.

Ich habe heute meine kapazitiven Sensoren “kalibriert”. Im Letzten Jahr hatte ich welche mit dem Aufdruck 2.0 und klein in der Nähe zur Elektronik 20210603 HW-390 - gekauft über Amazon. Die sind vgl. dem Video “gut”.

Neu hinzugekommen sind nun welche bestellt über Ali: alle mit dem Aufdruck 1.2 sonst nichts. Die sind deutlich dünner von der PCB her und haben alle den “falschen” NE555. Beim Testen/kalibrieren zeigten die sich unauffällig. Schnelle Reaktion von trocken auf nass. Die Werte lagen in der gleichen Range (alle trocken/Luft hängend ca.2,4 V; alle nass/Wasser ca 0.9V).

Ob sich die Mühe des Kalibrierens gelohnt hat, werde ich sehen, wenn diese bei meinen Tomaten & Gurken die Feuchte aufnehmen. Im letzten Jahr hatte ich die Daten in V aus den Sensoren direkt im HA verarbeitet (und nicht vorverarbeitet im ESP32) → dadurch musste ich den Mittelwert aus 5 min heranziehen → erst dadurch konnte ich einen Trend sehen / bei der direkten Auswertung war das Rauschen zu groß.