ESP32 Multisensor ständig in HA unavailable

ich habe mir im Februar auf Basis eines D1mini ESP32 solch einen MultiSensor für’s Wohnzimmer gebaut…

das ganze lief bis letzte Woche völlig unproblematisch. Jetzt ist das Teil 3x täglich in HA “unavailable”, die WLAN Verbindung ist aber stabil.

Ist ein D1mini da evtl. überfordert oder gibt es ein Hitzeproblem? Nach einen Reboot läuft er dann ein paar Stunden wieder, aber leider nicht konstant wie am Anfang.

Gibt es evtl. etwas vergleichbares mit Tasmota (die Hardware würde ich gern unverändert beibehalten)

Warum willst du auf Tasmota gehen? Ich bezweifele, daß es was mit ESPHome zu tun hat. Vielmehr solltest du das eigentliche Problem suchen.

Was ich festgestellt habe ist, daß ein ESP8266 für viele Aufgaben mittlerweile etwas überfordert ist. Da solltest du besser einen ESP32 nehmen. Ich hatte auch einige Geräte mit dem D1 mini gebaut, die nach einigen Updates mit der Aufgabe überfordert waren.

Mit dem ESP32 mini gibt es einen guten Ersatz, den man einfach statt des D1 mini in die vorhandene Schaltung stecken kann. Softwareseitig muss man dabei nur die GPIOs anpassen.

blöder weise habe ich mir den verwendeten ESP flash code nicht abgespeichert.

Gibt es eine Möglichkeit, den aus meinem o.g. D1 mini auszulesen/downloaden?

Der Code sollte doch im ESPHome-Builder noch zu sehen sein, wenn du ihn nicht gelöscht hast.
Aber eine Möglichkeit den aus dem ESP auszulesen kenne ich nicht.

Allerdings ist es auch kein großer Akt, die Grundkonfiguration und die paar Sensoren selbst zu konfigurieren. Die Grundkonfiguration der Sensoren lässt sich auf in der Doku zu ESPHome ja leicht finden.

ja, im ESP Builder ist es noch aber ich habe in der Endphase da recht viel geändert/experimentiert und wollte sicher sein, dass ich auf einem neuen ESP auch genau das flashe, was ich zuletzt im alten habe … Aber wenn man es nicht auslesen kann, muß ich nochmal experimentieren …

Ich hatte mit dem D1 Mini auch so meine Probleme. Er hat einen relativ kleinen RAM Speicher und wenn das RAM knapp wird, dann stürzt er meist ab oder verliert die WLAN-Verbindung. Wenn er sehr voll ist, dann startet die WLAN-Verbindung erst gar nicht und man muss ihn per Kabel neu flashen.

Die Speicherknappheit tritt aber eigendlich nur auf, wenn man resourcenhungrige Komponenten verwendet, wie z.B. längere LED-Stripes (eigene Lichteffekte), LD2410, alles was Kommunikationspuffer benötigt etc. Mit ein paar Temperatur-, Luftdruck-, Luftfeuchtigkeits-, Bewegungs- und Licht-Sensoren kommt er eigentlich klar.

Es ist wichtig, dass du eine ganz neue ESPHome-Version verwendest! Bei ESPHome wurde für den ESP8266 (D1 Mini) ordentlich aufgeräumt und Speicher eingespart. Meine beiden Problem-D1Minis, die ich eigentlich schon durch ESP32 ersetzen wollte, die laufen jetzt super ohne Probleme.

Ich würde mal das Netzteil überprüfen (zum Test durch ein anderes ersetzen). Abstürze können an einer zu schwachen oder gestörten Versorgung liegen.

ich bin da bisher noch nicht so der Experte, fange gerade erst mit ESP32 an und habe das einfach nur nachgebaut. Dies ist mein flash-code.

esphome:
  name: pyramide
  friendly_name: Pyramide

esp32:
  board: nodemcu-32s
  framework:
    type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "7NXDZiLW+lhgbQW8BLNI+NFe85hiFId0p+6cgqUXWGA="

ota:
  - platform: esphome
    password: "077a7355df565f1700d2acd564938678"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

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

captive_portal:
  
switch:

  - platform: gpio
    pin: GPIO2
    name: "internal_led1"
    restore_mode: ALWAYS_ON
    internal: true

  - platform: gpio
    pin: GPIO16
    name: "internal_led1"
    restore_mode: ALWAYS_ON
    internal: true

light:
  - platform: esp32_rmt_led_strip
    chipset: WS2812
    pin: GPIO5
    num_leds: 12
    rgb_order: GRB
    name: "Sensor LED"
    
binary_sensor:
  - platform: gpio
    pin: GPIO26
    name: "Sensor Bewegung"
    device_class: motion

  - platform: gpio
    pin: GPIO12
    name: "Sensor Licht"
    device_class: light
    filters:
      - invert:

  - platform: gpio
    pin: GPIO27
    name: "Sensor Ton"
    device_class: sound
    filters:
      - invert:
      - delayed_off: 2s

sensor:

  - platform: adc
    pin: GPIO36
    name: "Sensor Gas"

  - platform: scd4x
    co2:
      name: "Sensor CO2"
    temperature:
      name: "Sensor Temperatur"
    humidity:
     name: "Sensor Luftfeuchtigkeit"
    update_interval: 60s
    # Altitude compensation for more accurate CO2 measurements
    altitude_compensation: "171m" # Replace with the altitude of your area! 

i2c:
  sda: GPIO21 ##sda Anschluss vom CO2 Sensor
  scl: GPIO22 ##scl Anschluss vom CO2 Sensor
  scan: true
  id: bus_a

output:
  - platform: ledc
    pin: GPIO14
    id: rtttl_out

rtttl:
  output: rtttl_out
  id: my_rtttl
  gain: 80%
   
button:
  - platform: template
    name: "CO2 manual calibration (only in fresh air for at least 20min)"
    entity_category: "config"
    on_press:
      then:
      - scd4x.perform_forced_calibration:
          value: 422

  - platform: template
    name: "Ok"
    on_press: 
       then:
         - rtttl.play: "ok:d=8,o=6,b=120:c"

  - platform: template
    name: "Error"
    on_press:
       then:
         - rtttl.play: "error:d=8,o=4,b=150:c,c"

  - platform: template
    name: "Star Wars"
    on_press: 
       then:
         - rtttl.play: "star_wars:d=16,o=5,b=100:4e,4e,4e,8c,p,g,4e,8c,p,g,4e,4p,4b,4b,4b,8c6,p,g,4d#,8c,p,g,4e,8p"

  - platform: template
    name: "Alarm"
    on_press: 
       then:
         - rtttl.play: "alarm:d=4,o=5,b=120:p,p,8c,8e,8g,8c6,p,p,8c,8e,8g,8c6"

  - platform: template
    name: "Positiv"
    on_press: 
       then:
         - rtttl.play: "positiv:d=8,o=5,b=110:c6,e6"

  - platform: template
    name: "New Product"
    on_press: 
       then:
         - rtttl.play: "new_product:d=16,o=5,b=120:c,e,g,c6"

  - platform: template
    name: "Pling"
    on_press: 
       then:
         - rtttl.play: "Pling:d=16,o=6,b=140:e6,32p,d6"

  - platform: template
    name: "MI"
    on_press: 
       then:
         - rtttl.play: "mi:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d"
         
web_server:
  port: 80
  include_internal: false
  
# Ermittlung der WLAN-Signalstärke alle 60s 
  - platform: wifi_signal
    name: "WiFi Signal"
    id: wifi_signal_db
    update_interval: 60s

# WiFi signal Signalstärke in %
  - platform: copy 
    source_id: wifi_signal_db
    id: wifi_percent
    name: "WiFi Signal Prozent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "%"  

bis auf die paar Sound-Werte kann man mE nichts kürzen.

Das Seltsame ist ja vielmehr, daß das Teil 2 Monate lang problemlos funktioniert hat.

Hab’s mir nochmal angeschaut, war gar kein D1mini aber da ist wohl was zu warm geworden …

ist die Frage was ich beim nächsten ESP32 besser machen kann.

Ich hatte das “ESP32” bei D1Mini überlesen, bei einem ESP32 kann Speichermangel nicht die Ursache sein. Ich würde auf schlechte Steckkontakte/Verbindungen oder die Versorgung tippen. Wenn der ESP32 nicht direkt auf den LEDs liegt und die ganze Anordnung nicht auf extreme Temperaturen erhitzt wird, dann sollte die Temperatur eigentlich auch nicht das Problem sein. Auf den Datenblätten stand glaube ich was von -40 bis +80 Grad Umgebungstemperatur.

Was ist der schwarze Klumpen?

ich wollte die Status LED vom ESP nicht haben und habe da einen Tropfen FlüssigIsolier-Paste drauf gemacht. Die hat wohl auf dem NeoPixel gelegen und ist “angebrannt”.

Dieser ESP ist dann wohl für die Tonne, oder?

Die LED lässt sich oft im Programcode abschalten :grinning_face:

meinst Du in HA oder im ESP flashcode?

ich wüsste nicht wie, ist ein ESP32S WROOM32 nodeMCU

mit 38pins

Finde im Moment nicht wo ich das gelesen habe

Ich kann mir nicht vorstellen, dass so eine kleine 5V LED irgendeinen Kunststoff zum brennen bringen kann. Ich hätte eher Sorgen, dass die Paste die Leiterbahnen irgendwie chemisch angreift und weg oxidiert oder vielleicht einen Hitzestau für die Bauteile darunter erzeugt. Wenn möglich würde ich die Paste entfernen.

Wenn der ESP noch läuft, dann wird er wohl nicht kaputt sein.

Die Status-Led kann über GPIO2 gesteuert (abgeschaltet) werden. Die Power LED hängt direkt an der Versorgung und lässt sich bei diesem Board nicht abschalten soweit mir bekannt.

1 „Gefällt mir“

Ich hatte D1 mini gelesen, aber wenn stattdessen ein ESP32 verbaut ist, sollte es nicht an mangelndem Speicher liegen.

Ähnliche Probleme hatte ich mit meiner Wetterstation, die auch auf einem Wroom basiert. Hier lag es aber daran, daß alles relativ offen verbaut war (keine gute Idee für eine Wetterstation, zugegeben) und irgendwas korrodiert ist.

In deinem Fall würde ich mir mal die Lötverbindungen ansehen und auch die Buchsenleisten, die auf den Pins des ESP stecken. Die haben, wenn man sie billig genug kauft, auch die Tendenz zu korrodieren. Da reicht schon normale Luftfeuchtigkeit.
Ich bin mittlerweile dazu übergegangen, meine ESPs ohne eingelötete Stiftleisten zu kaufen oder, wenn es die nicht gibt, die Pinleisten auszulöten, und die Leitungen direkt anzulöten.

Außerdem solltest du die sehr … ähm kreative … Verdrahtung mal etwas ordentlicher gestalten. :wink:
Nicht daß das etwas mit dem Ausfall zu tun hätte, sondern einfach weil es die Wartung vereinfacht.

das sollte genau aber nicht passieren da es extra zu diesem Zweck gedacht ist ….

eigentlich gehe ich davon aus: gebaut - zugeschraubt - fertig - nichts mit Wartung nötig.

Aber man lernt nie aus …

Wartung in diesem Sinne sollte eigentlich auch nicht nötig sein. Aber wenn mal was nicht geht oder man etwas ändern will, ist es schon einfacher, vorher kein Vogelnest aus Leitungen und Heißkleber entwirren zu müssen.
Deshalb baue ich in meine 3D gedruckten Gehäuse auch immer Leitungsführungen mit ein.

Was den schwarzen Blob angeht: Es kann schon sein, daß sich die Bauteile darunter erwärmen und abkühlen. Wenn die Masse nicht weich genug ist, kann es schon gut sein, daß bei wiederholtem warm und kalt werden, die Bauteile abreißen oder eher Haarrisse in den Leiterbahnen entstehen. Das gilt genauso auch für Heißkleber. Das kommt nicht häufig vor, hat mir aber schon mal ein paar Stunden Fehlersuche in einem kommerziellen Gerät beschert.

ja, und genau das verstehe ich auch nicht. Beim auftragen war es eine dickflüssige zähe Substanz. Jetzt ist dieser schwarze Klumpen absolut fest und starr und ich werde den voraussichtlich auch nie mehr vom ESP abbekommen (ausser man kann durch Erhitzen mit einem Fön noch was machen)… Das war also keine gute Idee einfach nur um die power LED abzudunkeln. Jetzt warte ich auf eine neue Lieferung, hatte so einen ESP mit 38pins nicht mehr da.

Wenn es klein werden soll, empfehle ich den ESP32mini.
Und was die LEDs angeht: wenn die mich stören, löte ich sie einfach von der Platine runter. Das ist, wenn der Lötkolben einmal heiß ist, eine Sache von nicht mal einer Minute und man ist dieses nervige Leuchten los, ohne weiter herumbasteln zu müssen.

Da, wo es mich nicht stört, lasse ich die Power-LED aber lieber drauf, damit ich schnell sehen kann., ob der ESP überhaupt noch Spannung bekommt.

1 „Gefällt mir“

der ESP32 D1mini hat in diesem Falle nicht genug GPIOs und SMD Löten ist so nun gar nicht mein Ding.

Dann klebe ich beim nächsten mal ein Stück schwarzes Isolierband drüber oder bemühe einen Edding….

Du solltest hier besser zwischen D1 und ESP32 unterscheiden. Der D1 mini ist ein ESP8266. Der hat wirklich kaum nutzbare GPIOs.
Der ESP32 mini hat fast genauso viele GPIOs wie der WROOM (gerade nachgezählt. Der hat sogar genausoviele GPIOs)

Alles Übungssache. Aber die LED auszulöten ist einfacher. Es reicht, die LED mit einer guten Menge Zinn (Nicht soviel, daß es Kurzschlüsse gibt) auf beiden Seiten heiß zu machen und mit einer Pinzette wegzunehmen. Meistens bleibt die LED aber am Lötkolben hängen und ist weg. Viel kaputtmachen kann man dabei nicht. Nur die LED wirst du dabei nicht wiederverwenden können. :wink: