Sterowanie Bramą Garażową poprzez moduł SONOFF SV (AI-Speaker - Home Assistant)

Dla oczyszczenia umysłu proponuję powrót do pierwszego posta.

Normalnie to się robi tak:
Kontaktron wpinasz między GPIO a masę.
Jeśli przewody są dłuższe od kilku centymetrów możesz między GPIO a 3,3V wpiąć dodatkowy rezystor podciągający powiedzmy 4k7.

ALE
Na tej twojej płytce jest po drodze między dostępnym polem lutowniczym, a MCU, układ ULN2003A - to jest drabinka układów Darlingtona (taki gotowy układ np. pośredniczący między np. MCU, a przekaźnikami, czy silnikami), ale do twoich rozważań wystarczy jego logiczny układ zastępczy
uln2003a
drabinka diod jest do tłumienia przepięć pochodzących od obciążeń indukcyjnych (takich jak przekaźnik czy silnik) więc możesz zignorować jej istnienie (przez konstruktora została zapewne podpięta pod Vcc) - zostanie drabinka inwerterów.

Skutek tego jest taki, że skoro wejście zwierasz do masy wykrywając stan w którym kontaktron jest obok magnesu, to na jego wyjściu pojawi się wtedy stan wysoki i taki dotrze do MCU.
Jakie ma to skutki dla wyboru typu wejścia niech lepiej odpowie ktoś kto używa Tasmoty na co dzień (nie mam weny do kopania po dokumentacji).
Ale tak poza konkurencją (bo nie szukałem schematu tej płytki, którą masz, a to by się przydało, by go sensownie przeanalizować) obstawiam, że jakiś rezystor pullup (na wejściu czyli między tym polem lutowniczym, a napięciem zasilania) będzie potrzebny.

A co do kontaktronu to może być każdy, ale sugeruję jakąś gotową konstrukcję w obudowie hermetycznej umożliwiającej łatwe mocowanie z regulacją np. na 2 wkręty (i optymalnie z fabrycznym kablem wystarczającej długości), zapewne będzie w komplecie z magnesem również z jakimś sensownym mocowaniem.

PS Ponieważ to (jakoby) Sonoff, to zakładałem, że iTead się do niego przyznaje, ale na ich stronie z dokumentacją nie ma śladu po podobnych konstrukcjach (no może jestem ślepy?)
https://wiki.iteadstudio.com/Product

PPS Generalnie to jednak warto wiedzieć jak jest zbudowany dany układ by lepiej zrozumieć jego działanie, a akurat tutaj TI nie pożałowało na schemacie

Dziękuję @szopen za lekturę, tak jak mówisz, przydałaby się osoba, która już to testowała.

Swoją drogą zacząłem kminić coś takiego mając zasięg zigbee przy bramie.
Posiłkuję się tutaj postem kolegi @Tomasz jakiś czas temu robiłem licznik gazu.

Jako kontaktronu użyłbym SONOFF SNZB-04 ZigBee - wylutował bym wewnętrzny kontaktron.

i przylutował tutaj taki jak poniżej.

2023-01-26 07_37_21-Kontaktron boczny KN-M08 srebrny (KN-M08) • Cena, Opinie 12649769573 • Allegro.p

Użyłbym do tego Baterii CR123 z koszykiem, aby wydłużyć żywotność działania i nie wymieniać za często baterii.

image

Ale wada tego rozwiązania jest taka, że to jest BATERIA. :sweat_smile:
Dlatego mając już Przetwornicę / zasilacz 24V / 5V-5A z wolnym USB typu A (micro USB zasila mi już SONOFFa 2CH), wpiąłbym zasilacz jak poniżej i ustawił 3V taką wartość, jaka potrzeba jest do zasilenia tego układu.

Pozostaje tylko uwzględnić ten dodatkowy moduł w home assistant podczas otwierania bramy, aby pokazywał odpowiednią ikonę.

Tak czytam i nie rozumiem czemu zwyczajnie nie dodasz kontaktron pod GPIO14, ustawisz w konfiguracji Tasmota GPIO14 jako Przełącznik -i. Dopisek i oznacza odwrócenie logiki działania.
Przetestuj na stole i będziesz wiedział czy działa. Wystarczy zajrzeć podczas testów do konsoli Tasmota.

P.S.

Nie ma potrzeby wlutowywania kontaktronu, dodać można drugi równolegle:
symulacja-połączenia-równoległego

1 polubienie

Dziękuję za info @Cezary.K wezmę to na stół i sprawdzę twoje ustawienia. Podzielę się z wami rezultatem.

Tak poza konkurencją to ten Sonoff (obojętnie prawdziwy czy nie) ma na płytce stabilizator napięcia - to ten zbiór elementów na zdjęciach na prawo od pinów niewlutowanego modułu RF433 (więc gdybyś tam chciał dorzucić jakiś inny układ to można z niego “podkraść” zasilanie, ale jak widzisz nie będzie takiej potrzeby).

Dzięki @szopen za tą sugestię :slight_smile:

Jakkolwiek i tak musisz namierzyć napięcie zasilania MCU ESP, bo do niego podpinasz rezystory pullup.

Witam @Cezary.K znalazłem chwilę czasu i testuję. Ale napotkałem pewną rozbieżność.
Piszesz, abym w Tasmocie ustawił

Przełącznik -i

Ale jak widzisz poniżej, nie ma takiej opcji albo zmieniły się oznaczenia w nowszej wersji tasmota?

Zakupiłem również kontaktron, jak na poniższym zdjęciu i zmieniając na różnego rodzaju przełączniki, przekaźniki, przyciski nic w konsoli się nie pojawia. Sprawdzałem z tymi ustawieniami:

  • GPIO14 i GND ?
  • GPIO14 i 3v3 ?

Chyba że ten kontaktron jest wadliwy xD albo nie taki kupiłem jak powinienem… ehhh

Kontaktron to sprawdź multimetrem ustawionym na sprawdzanie przejścia albo w trybie omomierza.

A co do pozostałych kwestii, to

  1. to Ty masz to w ręce więc możesz prześledzić przebieg ścieżek
  2. nie widzę rezystora
  3. nawet miernikiem możesz zweryfikować poziomy napięć na interesującym wejściu (kontaktron do tego w ogóle nie jest potrzebny) zwierając do masy nietresujący pin (ale patrz 2 - gdzie jest pullup?) jedziesz przecież poza sspecyfikacją wykorzystanego modułu, to musisz go sobie zmodyfikować.
  4. należałoby jeszcze zweryfikować konfigurację programową, ale tu odsyłam do dokumentacji Tasmota.

Obecnie mój mały upgrade płytki pod napędem bramy garażowej i jej zamiana na ten model z dwoma przekaźnikami.

Dlaczego zamiana płytki? Ponieważ dokładam barierę IR “fotokomórki” i drugi przekaźnik odzwierciedli jej stan dla napędu bramy. Pozostaje nadal kontaktron dla sygnalizacji otwarcia bramy. Na pośredniczeniu sygnału z bariery przez ESP, zyskuję dodatkowo informację dla sterowania zaplanowaną sygnalizacją świetlną w garażu. Tak aby wiedzieć/widzieć czy odpowiednio głęboko się autem wjechało, a nie trzeba było wysiadać i patrzeć czy już wystarczy… Czyli następnym etapem będzie jakiś semafor :vertical_traffic_light:
Oprogramowanie na ESPHome i tu zaskoczenie, pomógł mi zweryfikować składnię i podpowiedział fragmenty kodu ChatGTP (wystarczy odpowiednio formułować pytania i podawać kontekst) :dizzy_face:

Załączam mój albo nasz :wink: kod:

substitutions:
  device_name: "esp12frelayx2"
  device_name_lower: "brama_foto"

esphome:
  name: ${device_name_lower}

esp8266:
  board: esp12e

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ${device_name}
    password: "haslo"

captive_portal:

web_server:
  port: 80

time:
  - platform: homeassistant
    id: homeassistant_time

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO12
      mode: INPUT_PULLUP
      inverted: false
    name: "kontaktron brama"
    id: contact_sensor
    device_class: garage_door
  - platform: gpio
    pin:
      number: GPIO13
      mode: INPUT_PULLUP
      inverted: false
    name: "fotoIR"
    id: fotoIR_sensor
    device_class: safety
    on_press:
      then:
        - switch.turn_on: foto
    on_release:
      then:
        - switch.turn_off: foto

status_led:
  pin:
    number: GPIO2
    inverted: True

switch:
  - platform: gpio
    pin: GPIO4
    name: "Garage Door Relay"
    id: relay
    internal: true
  - platform: gpio
    pin: GPIO5
    name: "Garage Door foto"
    id: foto
    internal: true
cover:
  - platform: template
    device_class: garage
    name: "Garaż"
    id: template_cov
    lambda: |-
      if (id(contact_sensor).state) {
        return COVER_OPEN;
      } else {
        return COVER_CLOSED;
      }
    open_action:
      - switch.turn_on: relay
      - delay: 0.3s
      - switch.turn_off: relay
#    stop_action:
#      - switch.turn_on: relay
#      - delay: 0.3s
#      - switch.turn_off: relay
    close_action:
      - switch.turn_on: relay
      - delay: 0.3s
      - switch.turn_off: relay

button:
  - platform: restart
    name: "${device_name} Restart"
    device_class: "restart"

sensor:
  - platform: uptime
    name: "${device_name} Last Restart"
    update_interval: 300s
    device_class: "timestamp"
    entity_category: "diagnostic"
    unit_of_measurement: ""
    filters:
      - lambda: |-
          auto time = id(homeassistant_time).now();
          if (time.is_valid()) {
            return time.timestamp - x;
          } else {
            return {};
          }
  - platform: wifi_signal
    name: "${device_name} WiFi Signal"
    update_interval: 300s
    device_class: "signal_strength"
    entity_category: "diagnostic"
2 polubienia

Proste sygnalizatory w postaci dwóch kontrolerów od Magi Home z kawałkami taśmy założone. Sterowniki taśm działają lokalnie (Wi-Fi) z HA poprzez dedykowaną integrację. Do tego prosta automatyzacja w HA:

- id: '1686952560768'
  alias: foto brama
  description: ''
  trigger:
  - platform: state
    entity_id: binary_sensor.fotoir
  condition: []
  action:
  - choose:
    - conditions:
      - condition: state
        entity_id: binary_sensor.fotoir
        state: 'on'
      sequence:
      - service: light.turn_on
        entity_id: light.controller_rgbw_1cd4d3
        data_template:
          rgb_color:
          - 255
          - 0
          - 0
      - service: light.turn_on
        entity_id: light.controller_rgbw_5f7513
        data_template:
          rgb_color:
          - 255
          - 0
          - 0
    - conditions:
      - condition: state
        entity_id: binary_sensor.fotoir
        state: 'off'
      sequence:
      - service: light.turn_off
        entity_id: light.controller_rgbw_5f7513
      - service: light.turn_off
        entity_id: light.controller_rgbw_1cd4d3
  mode: single

Docelowo kusi wykonanie tego (świetnie udokumentowanego) projektu:

EDIT:

Prawie gotowe, pozostaje montaż w docelowym miejscu.



3 polubienia

W uzupełnieniu możliwości projektu asystenta parkowania dorobiłem sobie sensory MQTT dla informacji w asystencie domowym.
Bazując na przykładowym kodzie z dokumentacji projektu:

# Create these entries under your existing MQTT integration header,
# whether that is in your primary configuration.yaml, a split yaml file
# or in the MQTT section of a package.
# You can change the name to anything desired and add any other standard
#  sensor attributes like icon, etc.

mqtt:
  sensor:
    - name: "Car Detected"
      state_topic: "stat/parkasst/cardetected"
    - name: "Parking Distance"
      state_topic: "stat/parkasst/parkdistance"
      unit_of_measurement: "in"


1 polubienie