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

Rozumiem. Co w sytuacji, w której chciałbym “tylko” wprost skorzystać ze stanów przekazywanych po wykryciu ruchu przez czujkę? Konnected Conversion Kit jest jedyną opcją?

Mam w kartonie ekspander int-ors, więc 8 wyjść miałbym teoretycznie do dyspozycji i zaprogramowania, ale czy to konieczne?

Można zrealizować to za pomocą chociaż by ESPHome i płytki jaką ja użyłem. Ale jeśli chcesz zachować funkcjonalność alarmu, to bez przeprogramowania centrali się nie da.

Nawet w sytuacji komunikacji jednokierunkowej, tzn. bez wysyłania czegokolwiek z HA do satela?

Samo podpięcie czujek (zasilanych z satela) do ESPhome pozwoli na detekcję ruchu, czy nie?

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

Jeśli nie chcesz czujek odpinać od Satela (tak jak ja to zrobiłem), to możesz je zastąpić wyjściami z centrali, które będą tożsame ze stan każdej czujki. W centrali jedno wejście=jedno wyjście i to należy zrobić programowo w centrali.
Warunki:

  • jedna czujka to jedno wejście w centrali alarmowej
    analogicznie
  • jedna czujka to jedno wyjście z centrali dla ESP.

Jeśli brakuje wejść czy wyjść to potrzebne ekspandery.

Co zrobisz z otrzymanymi sygnałami z wyjść centrali, to tylko zależy na jakie rozwiązanie się zdecydujesz. Czy ESPHome, jak wyżej, czy inny sprzęt integrowany z HA.

A takie podejście do tematu:

Kontroler czujników obecności - EspHome ?

Czujka PIR wystawia stan i tym sygnałem dalej operuję w ESPhome, czy źle myślę?

Centrala satel korzysta do swoich celów a ESPhome do swoich. Da się?

Wybacz ale trzeci raz tego samego pisał nie będę.

To Ty musisz zdecydować czy odpinać czujniki od centrali Satel.

Z elektrycznego punktu widzenia możesz wpiąć się równolegle do czujników.
Musisz tylko znaleźć płytkę która obsłuży wejścia z czujek :slightly_smiling_face:

Pozostaje kwestia dostosowania poziomów sygnałów. EsP używa logiki GPIO 3,3V. W centralach alarmowych i czujnikach takich napięć nie ma. Najczęściej jest 12V.

1 polubienie

No ale wtedy używamy optoizolatorów, prawda?
Chyba że coś źle rozumiem, jeszcze nie używałem :stuck_out_tongue:

Prawda… optoizolatorów/transoptorów. Czujnik ruchu u mnie ma wyjście NC czyli w stanie spoczynku zwarcie do GND. Wewnętrzne rezystory pullup w ESP32 dają stan wysoki dla GPIO. Po wykryciu ruchu odpowiednio sterowana jest bramka tranzystora w czujniku. Inaczej jest po stronie centralki, wejścia są programowalne i z tego co pamiętam można je ustawić pod różne opcje z użyciem rezystorów symetryzujących. Nie pamiętam jakimi napięciami są sterowane. Z pewnością nie jest to 3,3V.

Z elektrycznego punktu widzenia należy najpierw zobaczyć w jakim układzie są połączone czujniki. Często w systemach alarmowych tworzy się z kilku czujek obwód/pętlę połączonych szeregowo wyjść naruszenie (ruch) i osobny obwód sabotażowy. Najczęściej z użyciem rezystorów symetryzujących. Centralka wówczas rozpoznaje zarówno wykrycie ruchu (zmniejszenie rezystancji pętli), przerwanie obwodu (wzrost rezystancji) i zwarcie do masy.

@Lipas - przy centralce Perfecta 32 ile wyjść masz wykorzystanych, a ile wolnych?

1 polubienie