@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;
}