ESP32 jako moduł centralny czujników alarmowych PIR (zintegruj bez Integry) #ESPHome #Tasmota #Konnected.io

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 - :ok_hand:
Nie trzeba kompilować własnego pliku bin Tasmota, więc zapraszam do własnych implementacji kodu.

2 polubienia