WLAN Verbindungsabbruch ESP32

Erstmal Danke an @andy4711 .
Hab heute alles auf eine Platine gelötet, da ja alles noch im Versuchsaufbau war. Anschliessend Batterie ran - läuft. Dann habe ich noch an den Zeiten „geschraubt“ , dann auf „Install“ gedrückt. Hab nicht mitbekommen das ESPHome auf eine neue Version geupdatet hat. Sah schon komisch aus bei flashen, so viele neu Sachen geladen. Und am Ende „nur“ gemeckert, das der Speicher recht gut gefüllt ist. Jetzt habe ich aber im DeepSleep ein merkwürdiges Verhalten: er geht in den DeepSleep, allerdings (wie schon erwähnt) b leibt die rote LED auf dem Board an, am „Sensor-Board“ blinkt die blaue LED wie wild solange er im DeepSleep ist. Wenn er dann wieder aufwacht, blinkt sie wieder im 5s Takt (so wie eingestellt, das ist die Meßzeit). So wird die Batterie wohl nicht entlastet, da wird sie nicht lange halten. Kann sich das einer erklären??

Nachtrag: die Spannungsmessung wird jetzt bei jedem Aufwachen ausgeführt. Warum kann ich allerdings auch nicht sagen (habe den Code nicht geändert).

Hallo, habe mal den Freundlichen von „Fernost“ befragt. Dieser meint, dass die rote LED immer leuchtet, weil er an der Batterie/Strom hängt und das nicht geändert werden kann.

Die blaue LED (die scheinbar immer blinkt) kann aber geändert werden. Hier die Vorschläge:

esphome:
  name: voltsensor-rangerover

esp8266:
  board: d1_mini

# ... deine bestehende Konfiguration ...

deep_sleep:
  run_duration: 90s
  sleep_duration: 30min

# GPIO-Konfiguration für die blaue LED
output:
  - platform: gpio
    pin: GPIO2  # Blaue LED am D1 Mini
    id: blue_led
    inverted: true  # Weil die LED bei LOW aktiv ist

automation:
  - trigger: on_boot
    then:
      - output.turn_off: blue_led  # LED ausschalten nach dem Start

  - trigger: on_shutdown  # Wird vor Deep-Sleep ausgeführt
    then:
      - output.turn_off: blue_led  # LED sicher ausschalten
      - delay: 100ms
      - deep_sleep.enter: deep_sleep_1
....

Viel Spass. Gruss

@andy4711 : Danke für den Code,der hat funktioniert. Jetzt muss ich nur noch rausfinden, wie ich das in % umrechnen kann (direkt in der yaml).

sensor:
  - platform: adc
    pin: A0
    name: "Voltsensor Range Rover"
    update_interval: 2s
    accuracy_decimals: 2
    filters:
      - multiply: 15.61820237

Dieser Code hat nicht funktioniert:

output:
  - platform: gpio
    pin: GPIO2  # Blaue LED am D1 Mini
    id: blue_led
    inverted: true  # Weil die LED bei LOW aktiv ist

automation:
  - trigger: on_boot
    then:
      - output.turn_off: blue_led  # LED ausschalten nach dem Start

  - trigger: on_shutdown  # Wird vor Deep-Sleep ausgeführt
    then:
      - output.turn_off: blue_led  # LED sicher ausschalten
      - delay: 100ms
      - deep_sleep.enter: deep_sleep_1

Der obere Teil wird akzeptiert, den Begriff „automation“ kennt er nicht. Hab aber auch rausgefunden, das die rote Lampe immer leuchtet, ist so eine Art Anzeige der Stromzufuhr.


Und auch das Problem der schnell blinkenden blauen LED auf den Board des Ultraschallsensors JSN-SR04T habe ich ergründet: wenn man den DeepSleep benutzen will, sollte man die folgenden Pin´s benutzen:

Hab das mal geändert - und siehe da: kein wildes Blinken mehr. Man lernt nie aus.

1 „Gefällt mir“

das geht mit filters (Linear) am schnellsten

    filters:
    -  calibrate_linear:
       - 2.874 -> 0
       - 0.002 -> 120

Hier ein kompletter Sensor eines Bodenfeuchtesensors von mir (distance und %)

- platform: ads1115
    multiplexer: 'A2_GND'
    gain: 4.096 #measures up to 4.096V default 6.144
    name: "ADS1115 Channel A2-GND DFRobot calibrate"
    update_interval: 5s
    unit_of_measurement: "mm"
    state_class: "measurement"
    device_class: "distance"
    accuracy_decimals: 0
    filters:
    -  calibrate_linear:
       - 2.874 -> 0
       - 0.002 -> 120

  - platform: ads1115
    multiplexer: 'A2_GND'
    gain: 4.096 #measures up to 4.096V default 6.144
    name: "ADS1115 Channel A2-GND DFRobot prozent"
    update_interval: 5s
    unit_of_measurement: "%"
    state_class: "measurement"
    device_class: "moisture"
    accuracy_decimals: 0
    filters:
    -  calibrate_linear:
       - 2.874 -> 0
       - 0.002 -> 120
    - lambda: |
       if (x < 0) return 0;
       else return (x);
1 „Gefällt mir“

HAbe es jetzt mal eingefügt - er zeigt mir aber keine % an…nur den Wert in Volt:

- platform: adc
    id: battery_voltage
    pin: GPIO35
    name: "Outdoor ESP Battery Voltage"
    update_interval: 2s
    accuracy_decimals: 2
    filters:
      - multiply: 24.61820237
  # Convert the Voltage to a battery level (%)
  - platform: copy
    source_id: battery_voltage
    id: battery_percent
    icon: "mdi:battery"
    name: Outdoor ESP Battery Level
    unit_of_measurement: '%'
    device_class: battery
    accuracy_decimals: 1
    filters:
      - calibrate_linear:
          # Map from ESP32 voltage to Battery level
          - 0.0 -> 0
          - 4.07 -> 100 #max possible reported value by ESP32 ADC is 3.3V
      #Handle/cap boundaries
      - lambda: |
          if (x < 0) return 0;
          else if (x > 100) return 100;
          else return (x);
      - delta: 0.5 #Only send values to HA if they change
      - throttle: 8s #Limit values sent to Ha

Gibt es diese Platform: copy??

Habe ich so noch nicht gesehen/verwendet :face_with_monocle:

in meinem Beispiel siehst Du das ich die Ausgangsplattform für beide verwende

hätte noch ein anderes Beispiel:

diesen „xx smooth xx“ habe ich vom Ausgangssensor verwendet:

sensor:
  - platform: scd4x
#    temperature_offset: 4
    co2:
      name: "SCD41 CO2"
#      filters:
#        - offset: 0.00 # offset noch ermitteln  
    temperature:
      name: "SCD41 Temperature"
      id: scd41_temp
      accuracy_decimals: 2
      filters:
        - round: 2 # will round to 2 decimal place
        - offset: 0.00 # offset noch ermitteln  

..
..
..

  - platform: template
    name: "SCD41 smooth Temperature"
    lambda: |-
      return id(scd41_temp).state;
    unit_of_measurement: °C
    update_interval: 10s # 60s ist default
    icon: "mdi:thermometer-alert"
    filters:
     - sliding_window_moving_average:
         window_size: 10
         send_every: 1

aber sie gibt es :v:

Copy Component - ESPHome - Smart Home Made Simple

EDIT:

Kleine Anmerkung da ich nicht wusste das es sich hier um eine Batterie geht (hatte gedacht das es ein Ultraschall Sensor ist)

Eine Batterie ist natürlich nicht erst leer wenn sie 0V hat
Beispiel einer Knopfzelle mit 3V
Neu meist ca. 3,1V = 100%
und Leer bei ca. 2,7V = 0%

Bitte recherchieren, deine Werte im Code sind nicht plausibel

Welchen Teil meinst du genau? Bin da nicht so firm drin…

das kann nicht passen für eine Batterie
da ich so etwas nicht im Einsatz habe muss du jemanden Fragen

Problem ist der Titel dieses (doch schon lang abschweidenden) Beitrages hier :grinning:

hat doch bestimmt jemand hier oder in einem anderem Forum, bevor ich etwas falsches Vorschlage

Ich dachte das sagt nur 0,0V sind 0% und 4,07V sind 100%…zur Berechnung der Prozentangabe :thinking:

Habe mal Goggle befragt:
„esphome battery voltage to percent“

KI hat dann geantwortet, mit Blabla
Aber ein Teil passt zu meiner Meinung
Mach das mal :thinking:

KI Code ungetestet:


# In your ESPHome config under 'sensor:'
sensor:
  - platform: adc
    pin: A0
    id: raw_voltage
    name: "Battery Raw Voltage"
    accuracy_decimals: 2
    filters:
      - multiply: 2.0  # Adjust for your voltage divider if needed [5]
      - calibrate_linear:
          method: exact
          datapoints:
            - 3.00 -> 0.0  # Adjust these to your battery's actual 0% and 100% points [4, 9]
            - 4.20 -> 100.0
          # Add more datapoints for better accuracy if needed
  - platform: template
    name: "Battery Percentage"
    id: battery_percentage
    icon: mdi:battery-medium
    unit_of_measurement: "%"
    accuracy_decimals: 0
    lambda: |-
      float voltage = id(raw_voltage).state;
      if (voltage <= 0) {
        return 0;
      }
      if (voltage >= 100) {
        return 100;
      }
      return voltage; # This will return the calculated percentage directly [2]

# Apply the battery device class in Home Assistant if available [2]
# <<!nav>>device_class: battery<<!/nav>>

[quote=„Dreckfresse, post:52, topic:7627“]

  - platform: adc
    pin: A0
    id: raw_voltage
    name: "Battery Raw Voltage"
    accuracy_decimals: 2
    filters:
      - multiply: 2.0  # Adjust for your voltage divider if needed [5]
      - calibrate_linear:
          method: exact
          datapoints:
            - 3.00 -> 0.0  # Adjust these to your battery's actual 0% and 100% points [4, 9]
            - 4.20 -> 100.0
          # Add more datapoints for better accuracy if needed
  - platform: template
    name: "Battery Percentage"
    id: battery_percentage
    icon: mdi:battery-medium
    unit_of_measurement: "%"
    accuracy_decimals: 0
    lambda: |-
      float voltage = id(raw_voltage).state;
      if (voltage <= 0) {
        return 0;
      }
      if (voltage >= 100) {
        return 100;
      }
      return voltage; # This will return the calculated percentage directly [2]

Funktioniert leider nicht, beim Kompilieren kommt folgender Fehler:

/config/esphome/h2o-zisterne-d1-mini.yaml:74:23: error: stray '#' in program
   74 |       return voltage; # This will return the calculated percentage directly [2]