NEWS
[ESPHome] welche Komponenten sind resourcenhungrig?
-
Ich habe versucht bei einem ESP8266 mit einem Bewegungsmelder ein paar Informationen (Zeitzpunkt letzte Bewegung Bewegung, Inaktiv seit... , Anzahl Bewegungen) direkt im ESP zu erfassen und in einem Textsensor auszugeben. Prinzipiell funktioniert das, aber das ganze scheint den ESP derart zu überlasten, dass er ständig abstürzt, neu bootet oder den Kontakt zum IO-Broker verliert.
Gibt es irgendwelche Richtlinien, welche Komponenten besonders recourcenhungrig sind?
Beim Compilieren wird mir gemeldet, dass sowohl RAM als auch Flash zu ca. 50% belegt sind.
Die verwendeten Komponenten sind:
-Webserver
-MQTT
-Globals
-Text_sensor (template)
-Sensor (gpio, adc, wifi_signal, uptime, template)
-Binary_sensor (gpio)
-Switch (gpio)
-Time (sntp)Die Textsensoren werden alle 10 Sekunden aktualisiert.
-
@wolfgangfb und die yaml?
-
@arteck
Hier die yaml, sollte eigetnlich alle 10 Sekunden die aktuelle Zeit ausgeben, aktualisiert wird aber nur ca. 2-3 mal pro Minute, nach ein paar Minuten stürzt der ESP ab und bootet dann neu (zu sehen an der Laufzeit). Welche der Komponenten bringt den ESP so arg ins schwitzen?esphome: name: mini-werkbank platform: ESP8266 board: d1_mini project: name: "wolfgang.mini-werkbank" version: "105" includes: - MyTime.h - Mini-Wekbank.h on_boot: - sensor.template.publish: id: D5AnzahlId state: !lambda return id(D5Anzahl); # D4 LED # D5 Bewegung.Werkbank # 68:C6:3A:D4:5C:B6 # Enable logging logger: # Enable Home Assistant API api: ota: password: "xxxxxxx" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Mini-Wekbank" password: "xxxxx" captive_portal: mqtt: broker: 192.168.1.203 on_connect: then: - text_sensor.template.publish: id: MQTTVerbundenId state: "true" on_disconnect: then: - text_sensor.template.publish: id: MQTTVerbundenId state: "false" globals: - id: Zeit type: std::string - id: D5InaktivSek type: int initial_value: '0' restore_value: yes - id: D5Anzahl type: int initial_value: '0' restore_value: yes text_sensor: - platform: template name: "105 Raum.Hobby.ESP.mini-werkbank.IP" lambda: 'return {WiFi.localIP().toString().c_str()};' - platform: template name: 105 Raum.Hobby.ESP.mini-werkbank.MQTT.Verbunden id: MQTTVerbundenId update_interval: never - platform: template name: "105 Raum.Hobby.ESP.mini-werkbank.HTML" id: HTML update_interval: never - platform: template name: "105 Raum.Hobby.ESP.mini-werkbank.Zeit" id: Aktuellezeit update_interval: never # D5 Bewegung - platform: template name: "105 Raum.Hobby.Bewegung.Werkbank.Ausloesezeit" id: D5AusloesezeitID update_interval: never - platform: template name: "105 Raum.Hobby.Bewegung.Werkbank.Inaktiv" id: D5InaktivZeitId update_interval: never - platform: template name: "105 Raum.Hobby.Bewegung.Werkbank.IP" lambda: 'return {WiFi.localIP().toString().c_str()};' sensor: - platform: adc name: "105 Raum.Hobby.ESP.mini-werkbank.Spannung" id: IDCore pin: VCC update_interval: 60s - platform: wifi_signal name: "105 Raum.Hobby.ESP.mini-werkbank.Signal" update_interval: 60s id: IDSignal - platform: uptime name: "105 Raum.Hobby.ESP.mini-werkbank.Laufzeit" id: IDUptime - platform: template name: "105 Raum.Hobby.Bewegung.Werkbank.Anzahl" id: D5AnzahlId update_interval: never accuracy_decimals: 0 - platform: wifi_signal name: "105 Raum.Hobby.Bewegung.Werkbank.Signal" update_interval: 60s binary_sensor: - platform: gpio name: "105 Raum.Hobby.Bewegung.Werkbank.Zustand" id: D5Bewegung filters: - delayed_on_off: 100ms pin: number: D5 mode: INPUT on_press: then: - switch.turn_on: LED - lambda: id(D5Anzahl) += 1; - lambda: id(D5InaktivSek) = 0; - text_sensor.template.publish: id: D5AusloesezeitID state: !lambda return id(Zeit).c_str(); - sensor.template.publish: id: D5AnzahlId state: !lambda return id(D5Anzahl); - mqtt.publish: topic: "Bewegung.Last" payload: !lambda return std::string("HobbyWerkbank ") + id(Zeit).c_str(); - mqtt.publish: topic: "Bewegung.Lastabs" payload: !lambda return str_sprintf("%llu", id(MySntp).now().timestamp); - text_sensor.template.publish: id: HTML state: !lambda return MyTabelle(); on_release: then: - text_sensor.template.publish: id: HTML state: !lambda return MyTabelle(); switch: - platform: gpio pin: number: GPIO02 mode: OUTPUT inverted: true id: LED on_turn_on: - delay: 500ms - switch.turn_off: LED restore_mode: ALWAYS_OFF name: "105 Raum.Hobby.ESP.mini-werkbank.LED" - platform: restart name: "105 Raum.Hobby.ESP.mini-werkbank.Neustart" time: - platform: sntp timezone: Europe/Berlin id: MySntp on_time: - seconds: /10 then: - lambda: id(Zeit) = id(MySntp).now().strftime("%d.%m %H:%M:%S"); - lambda: |- id(D5InaktivSek) += 10; - text_sensor.template.publish: id: D5InaktivZeitId state: !lambda return MyTime(id(D5InaktivSek)); - text_sensor.template.publish: id: HTML state: !lambda return MyTabelle(); - text_sensor.template.publish: id: Aktuellezeit state: !lambda return id(Zeit).c_str(); - seconds: 0 minutes: 0 hours: 0 then: - lambda: |- id(D5Anzahl) = 0; id(D5InaktivSek) = 0;
MyTime.h sieht wie folgt aus:
std::string MyTime(int secs){ char Plural = ' '; if (secs > 60 * 60 * 24 *2 ) { Plural = 'e'; } if (secs < 60){ return str_sprintf("%02.0f Sek", float(secs)); } else { if (secs < 60 * 60){ return str_sprintf("%2.0f Min", abs(float(secs/60))); } else { if (secs < 60 * 60 * 24){ return str_sprintf("%2.0f Std", abs(float(secs/(60 * 60)))); } else { return str_sprintf("%2.0f Tag%c", abs(float(secs/(60 * 60 * 24))), Plural); } } } }
mini-werkbank.h wie folgt:
std::string MyTabelle(){ std::string CrLf = "\r\n"; std::string Rot = " style=\"background-color: red; font-size: 12pt;\""; std::string Gruen = " style=\"background-color: #44ff44; font-size: 12pt;\""; std::string Start = "<table style=\"width: 450 + px; font-size: 10pt; border-collapse: collapse;\" border=\"0\">" + CrLf; std::string Tabelle = Start; std::string Style = id(MQTTVerbundenId).state == "true" ? Gruen:Rot; Tabelle = Tabelle + "<td><tr><td" + Style + ">Mini-Wekbank</td><td style=\"width: 180px; font-size: 8pt;\">" + WiFi.localIP().toString().c_str() + "<br>" + WiFi.macAddress().c_str() + "</td></tr>"; Tabelle = Tabelle + "<tr><td>Signal: </td><td> "+ str_sprintf("%.0f", id(IDSignal).state) + " dBm</td></tr>"; Tabelle = Tabelle + "<tr><td>Laufzeit: </td><td> "+ str_sprintf("%.0f", id(IDUptime).state) + " s</td></tr>"; Tabelle = Tabelle + "<tr><td>Spannung: </td><td> "+ str_sprintf("%.2f", id(IDCore).state) + " V</td></tr>"; Tabelle = Tabelle + "<tr><td>Zeit: </td><td> "+ id(Zeit) + "</td></tr>"; Style = id(D5Bewegung).state == true ? Rot: ""; Tabelle = Tabelle + "<tr><td" + Style + ">Werkbank</td><td> "+ str_sprintf("%.0f", id(D5AnzahlId).state) + "</td></tr>"; Tabelle = Tabelle + "<tr><td>Werkbank</td><td> "+ id(D5InaktivZeitId).state + "</td></tr>"; Tabelle = Tabelle + "<tr><td>Werkbank</td><td> "+ id(D5AusloesezeitID).state + "</td></tr>"; Tabelle = Tabelle + "<tr><td onclick=\"servConn.setState('alias.0.Raum.Hobby.mini-werkbank.ESP.Neustart', true);\">Neustart</td></tr>"; Tabelle = Tabelle + "</table>"; return Tabelle; }