Frage zu ESPHome

dnwalker

New member
Ich hatte vor eine einfache Steuerung über ESPHome zu bauen die lediglich einen Wasserpegel überwachen soll und das nicht nur wenn der ESP mit HomeAssistant (über eine Automation)verbunden ist sondern auch autark.

Jetzt habe ich einen Pegeschalter über einen GPIO an den ESP angeschlossen und quasi ein "Binary Sensor" erzeugt.

Jetzt kann man bei einem solchen Sensor ja über on_press, on_release, on_state usw. eine Aktion auslösen wie in meinem Fall ein Relais einschalten was eben die Pumpe in Gang setzt.

Soweit hatte ich die Sache dann auch schnell am laufen.

Jetzt ist der ESP stromlos geworden weil bei uns das Versorgungsnetz kurzzeitig ausgefallen war. In der Zeit ist der Wasserpegel soweit gestiegen das der Pegelschalter wie auch vorgesehen eingeschaltet hat und dem ESP einen zu hohen Wasserspiegel gemeldet hat - blöd nur das der ESP zu der Zeit geträumt hat.

Nach einer Weile war de ESP dann wieder "online" aber pumpte nicht ab.

Jetzt ist die Situation ja so das es im Grunde keine Änderung mehr vom Pegelschalter gemeldet wird und der ESP nicht auf den schon eingeschalteten Pegelschalter reagiert da eben nur über eine Änderung etwas ausgelöst und nicht über das dauerhaft anliegende Signal vom Pegelschalter.

Sicher ist die Schaltung somit natürlich nicht.

Wahrscheinlich gibt es da wieder eine ganz einfache Lösung die ich aktuell nicht auf dem Schirm habe.

Also frage ich euch mal ob ihr einen Tipp habt wie man das lösen kann.

Schöne Grüße
dnwalker
 
Programmiere das komplett im esp, es braucht keine Automation in Home Assistant.
Im prinzip doch einfach pegelschalter ist high = Pumpe einschalten.
Ich würde da auch ne hysterese programmieren, also dass die pumpe mindestens ne Minute läuft wenn der schalter hohen wasserstand meldet. Gleiches auch für ausschalten.
Es gibt ESP Platinen mit Relais. Da kannst du direkt mit den GPIO von z.B. esp8266 ein Relais ansteuern. Es gibt Relais Platinen.


YAML:
switch:
  - platform: gpio
    pin: D0
    id: schuetz_links
    name: "Relais A"
    
  - platform: gpio
    pin: D1
    id: schuetz_rechts
    name: "Relais B"
 
  - platform: gpio
    pin: D3
    name: "merker1"
    id: merker1

  - platform: gpio
    pin: D4
    name: "merker2"
    id: merker2
 
Ja ja das habe ich ja gemacht aber mach mal mit deinem Code weiter ...das was Du bis jetzt da stehen hast ist ja nur ein Grundgerüst.

Ich dachte auch das machst du mal eben aber im tatsächlichen Einsatz zeigte sich das es doch nicht ganz so einfach ist wie man es sich gedacht hat.

Im Grunde kann man nicht einfach nur über einen "Binary Sensor" gehen da der eben nur auf Änderungen des Pegels reagiert und sonst absolut nichts macht. Ist der ESP während des Pegelwechsels "abwesend" eben durch einen Spannungsabfall interessiert ihn wenig ob der Pegel sich in der Zwischenzeit geändert hat. Den Wechsel hat er ja "verschlafen"

Im Grunde muss man über einen "ständig laufenden" Intervall oder auch Schleife genannt den Pegel immer wieder abfragen.

In der Situation könnet man dann eben bei z.B. High-Pegel eine Aktion starten.

Irgendwie habe ich das aber noch nicht vernünftig hin bekommen.

Gruß
dnwalker
 
Ja, das mit dem Intervall wäre eine Möglichkeit, oder ein anderer regelmäßiger Trigger, bei mir ein MQTT Payload.

Code:
binary_sensor:
  - platform: gpio
    name: "Schalter 1 Z-Ein"
    pin:
      number: 14
      mode: INPUT_PULLUP
    id: s1_ze

Die ID verwende ich dann weiter:

Code:
mqtt:
  broker: dein.mqtt.broker
  username: username
  password: password
  on_message:
    - topic: topic/#
      then:
      - lambda: |-
          if((id(logik_101) == 1 || id(logik_102) == 1 || (! id(s1_ze).state)) && (id(s1_za).state)) {
            //
            id(logik_103) = 1;
            id(gpio_5_relais_1).turn_on();
          } else {
            id(logik_103) = 0;
            id(gpio_5_relais_1).turn_off();
          }
      - mqtt.publish:
          topic: nodemcu_3/s1_ze
          payload: !lambda |-
            return to_string((int)(id(s1_ze).state));

Alles nach Lambda ist wohl C++.
 
Ich habe es jetzt so gelöst....muss ich aber noch genauer testen...

Code:
esphome:
  name: testesp8266
  friendly_name: TestESP8266

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
#api:
#  encryption:
#    key: "CJjWB9RLUQUDfm590JoQBobIm0CgCjbwq5lnpvzqvX0="

ota:
  password: "e04b3825ff171e71a708287051e1f6ce"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.245
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Testesp8266 Fallback Hotspot"
    password: "10PdbkWlmnrL"

captive_portal:

web_server:
  port: 80
  auth:
    username: xxxxx
    password: xxxxx


switch:

#WLAN LED auf den Boards
  - platform: gpio
    pin: D4
    restore_mode: ALWAYS_OFF
    id: WlanLed # die ID kann optional vergeben werden
    name: "WlANLED_Board"
    disabled_by_default: false
    internal: true
    inverted: true
#-----------------------

  - platform: restart
    name: "Restart-Wasserpumpe"


  - platform: gpio
    pin: D1
    restore_mode: ALWAYS_OFF
    inverted: false
    name: "Wassserpumpe"
    disabled_by_default: false
    id: Wasserpumpe

 


interval:
  - interval: 5s
    then:
      if:
        condition:
          wifi.connected:
        then:
          - switch.turn_on: WlanLed
        else:
          - switch.turn_off: WlanLed
  - interval: 10s
    then:
      if:
        condition:
          binary_sensor.is_on: Fueler
        then:
          - switch.turn_on: Wasserpumpe
          - delay: 5s
          - switch.turn_off: Wasserpumpe
        else:
          - switch.turn_off: Wasserpumpe
 







sensor:   
  - platform: wifi_signal
    name: "WiFi Wasserpumpe-Lichtschacht-links"
    update_interval: 60s

binary_sensor:
  #Statusmeldung
  - platform: status
    name: "Status Wasserpumpe-Lichtschacht-links"
    id: Wasserfueler

 
  - platform: gpio
    pin:
      inverted: true
      number: D2
      mode:
        input: true
        pullup: true
    name: "Wasserfühler"
    id: Fueler
 

Letzte Anleitungen

Statistik des Forums

Themen
4.608
Beiträge
47.199
Mitglieder
4.258
Neuestes Mitglied
fumdock
Zurück
Oben