Managing ESPhome configs
Posted on So 27 November 2022 in Computer & Electronics
Wie Ihr Euch vielleicht erinnert, hatte ich ein kleines Gefrierschrank-Malheur das auf dem versehentlichen Ausschalten eines Smartplugs beruhte. Das ist natürlich ärgerlich! Und wenn ich so darüber nachdenke, wäre das auch sehr vermeidbar gewesen, wenn denn der Schalter am Smartplug deaktiviert gewesen wäre. Also habe ich mir ein alternatives Konfig-File für den nous A1T Smartplug gebaut, bei dem der Schalter inaktiv ist.
Da ich inzwischen diverse Geräte habe, auf denen eine ESPhome Firmware läuft habe ich mir ein modulares Konfigurationsschema eingerichtet und ich dachte mir, ich zeige Euch das heute mal.
Modularität
Praktischerweise ist es nämlich möglich, in ESPhome Config Files wieder andere
Files zu importieren. Z.B. sieht mein Config File (espresso.yml
) für den
Sonoff S20, der die Espressomaschine steuert so aus:
substitutions:
devicename: "espresso"
packages:
base: !include lib/base.yml
sonof-s20t: !include lib/sonoff-s20.yml
Das ist sehr übersichtlich. Hier werden nur Dinge konfiguriert, die spezifisch für genau dieses Gerät sind. Alles andere wird importiert. Auf diese Weise kann ich auch sehr bequem Updates oder Änderungen auf alle Geräte ausrollen und halte die Config-Dateien schön einfach.
In base.yml
finden sich, wie schon angemerkt, die Konfigurationselemente,
die für alle ESPhome Devices gelten. Z.B. die WLAN Konfiguration, Captive
Portal Zugangsdaten etc.:
# common settings for all ESP devices
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: on
ap:
ssid: "${devicename}-AP"
password: !secret ap_password
api:
password: !secret api_password
ota:
password: !secret api_password
captive_portal:
time:
- platform: homeassistant
id: homeassistant_time
logger:
web_server:
port: 80
sensor:
- platform: wifi_signal
name: "${devicename} - Wifi Signal"
update_interval: 60s
icon: mdi:wifi
- platform: uptime
name: "${devicename} - Uptime"
update_interval: 60s
icon: mdi:clock-outline
text_sensor:
- platform: wifi_info
ip_address:
name: "${devicename} - IP Address"
ssid:
name: "${devicename} - Wi-Fi SSID"
bssid:
name: "${devicename} - Wi-Fi BSSID"
- platform: version
name: "${devicename} - ESPHome Version"
hide_timestamp: true
binary_sensor:
- platform: status
name: "${devicename} - Status"
Wie man sieht sind keine echten Passwörter hinterlegt und so kann ich diese
Datei hier problemlos teilen. Letzte sind secrets.yml
gespeichert (diesmal
natürlich mit geänderten Passworten):
wifi_ssid: "mySSID"
wifi_password: "My wifipassword"
ap_password: "My Accesspoint password"
api_password: "My APIpassword"
Die Sonoff-S20 spezifischen Config Elemente stehen wiederum in sonoff-s20.yml
:
# sonoff S20 common settings
esphome:
name: $devicename
comment: "Sonoff S20 Smartplug"
name_add_mac_suffix: false
esp8266:
board: esp8285
restore_from_flash: true
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode:
input: true
pullup: true
inverted: true
name: "Button"
on_press:
- switch.toggle: relay
switch:
- platform: gpio
name: "${devicename} Relay"
pin: GPIO12
id: relay
Und mit der Zeit entsteht so ein hübsch aufgeräumter Baum von Config-Elementen:
.
├── dryer.yml
├── espresso.yml
├── freezer.yml
├── fridge.yml
├── lib
│ ├── base.yml
│ ├── nous-a1t-noswitch.yml
│ ├── nous-a1t.yml
│ ├── secrets.yaml
│ ├── sonoff-base.yml
│ └── sonoff-s20.yml
├── secrets.yaml -> lib/secrets.yaml
├── shop-heater.yml
├── washer.yml
└── wine-fridge.yml
Ein YAML File für jedes Gerät, das sich aus den generischen Configs im lib/
Folder bedient.
Und man kann sehen, dass ich nun für den nous A1T
Smartplug eine alternative
Config nous-a1t-noswitch.yml
angelegt habe, die dem Knopf des Plugs keine
Funktion zuweist, so dass man ihn nicht manuell schalten kann.