Była Tasmota z regułami na działaniach matematycznych. Płytka przestała logować się do sieci Wi-Fi, cóż dałem szansę ESPHome. Dzięki koledze @Stravi, który pomógł i przekonuje mnie do automatyzacji opartych na funkcjonalności szablonów w ESPHome, powstała taka konfiguracja dla tej samej płytki w mojej centralce alarmowej:
esphome:
name: centralka-pir
platform: ESP32
board: esp32dev
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
ota:
password: "fc496a8c59f6a42dbfaa8cb06e14f5b0"
wifi:
ssid: "twoja_siec"
password: "twoje-haslo"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Centralka-Pir Fallback Hotspot"
password: "5Cmv4WLFh1ip"
captive_portal:
# czujniki PIR podlaczone do GPIO
binary_sensor:
- platform: gpio
id: gpio5
pin:
number: GPIO05
mode:
input: true
pullup: true
name: "Kuchnia"
device_class: motion
- platform: gpio
id: gpio12
pin:
number: GPIO12
mode:
input: true
pullup: true
name: "Sypialnia"
device_class: motion
- platform: gpio
id: gpio13
pin:
number: GPIO13
mode:
input: true
pullup: true
name: "Łazienka"
device_class: motion
- platform: gpio
id: gpio14
pin:
number: GPIO14
mode:
input: true
pullup: true
name: "Pokój"
device_class: motion
- platform: gpio
id: gpio16
pin:
number: GPIO16
mode:
input: true
pullup: true
name: "Pralnia"
device_class: motion
- platform: gpio
pin:
number: GPIO17
mode:
input: true
pullup: true
id: gpio17
name: "Warsztat"
device_class: motion
- platform: gpio
id: gpio19
pin:
number: GPIO19
mode:
input: true
pullup: true
name: "Garaż"
device_class: motion
- platform: gpio
id: gpio23
pin:
number: GPIO23
mode:
input: true
pullup: true
name: "Wejście"
device_class: motion
- platform: gpio
id: gpio27
pin:
number: GPIO27
mode:
input: true
pullup: true
name: "Bawialnia"
device_class: motion
- platform: template
name: Alarm
lambda: |-
if (id(gpio5).state ||
id(gpio12).state ||
id(gpio13).state ||
id(gpio14).state ||
id(gpio16).state ||
id(gpio17).state ||
id(gpio19).state ||
id(gpio23).state ||
id(gpio27).state) {
return true;
} else {
return false;
}
on_press:
- switch.turn_on: relay
on_release:
- switch.turn_off: relay
# GPIO18 jako wyście na centralkę alarmową
switch:
- platform: gpio
pin:
number: GPIO18
inverted: true
id: relay
sensor:
- platform: wifi_signal
name: "Garage Door WIFI Strength"
update_interval: 60s
- platform: adc
id: bat
pin: GPIO39
name: "centralka akumulator"
attenuation: 11dB
filters:
- multiply: 0.963991 #mnożnik dla przesunięcia odczytów
- calibrate_polynomial:
degree: 2
datapoints:
# Map 0.0 (from sensor) to 0.0 (true value)
- 0.0 -> 0.0
- 0.593 -> 3.3
- 0.814 -> 4.53
- 1.39 -> 7.8
- 2.18 -> 12.2
- 2.28 -> 12.85
- 2.67 -> 15.15
update_interval: 60s
Najważniejszy fragment kodu odpowiedzialny za sterowanie alarmu centrali gdy którykolwiek czujnik wykryje ruch:
- platform: template
name: Alarm
lambda: |-
if (id(gpio5).state ||
id(gpio12).state ||
id(gpio13).state ||
id(gpio14).state ||
id(gpio16).state ||
id(gpio17).state ||
id(gpio19).state ||
id(gpio23).state ||
id(gpio27).state) {
return true;
} else {
return false;
}
on_press:
- switch.turn_on: relay
on_release:
- switch.turn_off: relay
Dzięki Dawid -
Nie trzeba kompilować własnego pliku bin Tasmota, więc zapraszam do własnych implementacji kodu.