Wszystko poszło sprawnie dzięki temu opisowi
How to Make a Smart Garage Door | No fees or Cloud | DIY Smart Home - Ep#7 - YouTube
Dzień Dobry ponownie
Buduje taki mały sterownik do wjazdu. Użyłem do tego NodeMCU ESP8266 z AIS-Tasmota.
Wszystko pięknie ładnie działa ale nie w AIS
Mam do niego podłączone:
- Czujnik odległości E18-D80NK (do skrzynki na listy)
- wej: D2, VCC,(5v) i GND - dwa kontaktrony
- D4, D3, GND - czujnik temperatury DS18B20
- wej: D7, 3V, GND
W konsoli widać że są informacje o zmianie stanu kontaktronów czy czujnika E18-D80NK ale nie ma tych sensorów w AIS. Temperatura i status urządzenia jest.
Co powinienem jeszcze ustawić, żeby te encje były dostępne ?
00:00:03.493 WIF: Połączony
00:00:03.744 HTP: Aktywny serwer Web dom-E26BD5-3029 z adresem IP 192.168.88.27
19:29:02.218 MQT: Próba połączenia...
19:29:02.311 MQT: Połączony
19:29:02.314 MQT: tele/dom_E26BD5/LWT = Online (Zachowane)
19:29:02.316 MQT: cmnd/dom_E26BD5/POWER =
19:29:02.324 MQT: tele/dom_E26BD5/INFO1 = {"Info1":{"Module":"Generic","Version":"11.1.0(tasmota)","FallbackTopic":"cmnd/DOM_E26BD5_fb/","GroupTopic":"cmnd/dom/"}}
19:29:02.330 MQT: tele/dom_E26BD5/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"dom-E26BD5-3029","IPAddress":"192.168.88.27"}}
19:29:02.341 MQT: tele/dom_E26BD5/INFO3 = {"Info3":{"RestartReason":"Software/System restart","BootCount":16}}
19:29:07.461 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:07","Uptime":"0T00:00:11","UptimeSec":11,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":52,"Signal":-74,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:07.486 MQT: tele/dom_E26BD5/SENSOR = {"Time":"2022-09-07T19:29:07","Switch2":"OFF","Switch3":"ON","Switch4":"ON","Switch5":"ON","DS18B20":{"Id":"000008297347","Temperature":26.0},"TempUnit":"C"}
19:29:12.515 MQT: homeassistant/sensor/E26BD5_DS18B20_Id/config = {"name":"Nowe urządzenie DS18B20 Id","stat_t":"tele/dom_E26BD5/SENSOR","avty_t":"tele/dom_E26BD5/LWT","pl_avail":"Online","pl_not_avail":"Offline","uniq_id":"E26BD5_DS18B20_Id","dev":{"ids":["E26BD5"]},"unit_of_meas":" ","ic":"mdi:eye","frc_upd":true,"val_tpl":"{{value_json['DS18B20']['Id']}}"} (Zachowane)
19:29:12.546 MQT: homeassistant/sensor/E26BD5_DS18B20_Temperature/config = {"name":"Nowe urządzenie DS18B20 Temperature","stat_t":"tele/dom_E26BD5/SENSOR","avty_t":"tele/dom_E26BD5/LWT","pl_avail":"Online","pl_not_avail":"Offline","uniq_id":"E26BD5_DS18B20_Temperature","dev":{"ids":["E26BD5"]},"unit_of_meas":"°C","dev_cla":"temperature","frc_upd":true,"val_tpl":"{{value_json['DS18B20']['Temperature']}}"} (Zachowane)
19:29:12.593 MQT: homeassistant/sensor/E26BD5_status/config = {"name":"Nowe urządzenie status","stat_t":"tele/dom_E26BD5/HASS_STATE","avty_t":"tele/dom_E26BD5/LWT","pl_avail":"Online","pl_not_avail":"Offline","json_attr_t":"tele/dom_E26BD5/HASS_STATE","unit_of_meas":"%","val_tpl":"{{value_json['RSSI']}}","ic":"mdi:information-outline","uniq_id":"E26BD5_status","dev":{"ids":["E26BD5"],"name":"Nowe urządzenie","mdl":"Generic","sw":"11.1.0(tasmota)","mf":"AI-Speaker"}} (Zachowane)
19:29:26.056 MQT: stat/dom_E26BD5/SWITCH3T = {"TRIG":"TOGGLE"}
19:29:26.064 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:26","Uptime":"0T00:00:30","UptimeSec":30,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":46,"Signal":-77,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:26.088 MQT: stat/dom_E26BD5/RESULT = {"POWER":"ON"}
19:29:26.091 MQT: stat/dom_E26BD5/POWER = ON
19:29:30.463 MQT: stat/dom_E26BD5/SWITCH3T = {"TRIG":"TOGGLE"}
19:29:30.470 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:30","Uptime":"0T00:00:34","UptimeSec":34,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":20,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":48,"Signal":-76,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:30.493 MQT: stat/dom_E26BD5/RESULT = {"POWER":"OFF"}
19:29:30.496 MQT: stat/dom_E26BD5/POWER = OFF
19:29:37.498 MQT: stat/dom_E26BD5/SWITCH5T = {"TRIG":"TOGGLE"}
19:29:37.506 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:37","Uptime":"0T00:00:41","UptimeSec":41,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":50,"Signal":-75,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:37.530 MQT: stat/dom_E26BD5/RESULT = {"POWER":"ON"}
19:29:37.534 MQT: stat/dom_E26BD5/POWER = ON
19:29:42.527 MQT: stat/dom_E26BD5/SWITCH5T = {"TRIG":"TOGGLE"}
19:29:42.536 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:42","Uptime":"0T00:00:46","UptimeSec":46,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":23,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":52,"Signal":-74,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:42.561 MQT: stat/dom_E26BD5/RESULT = {"POWER":"OFF"}
19:29:42.565 MQT: stat/dom_E26BD5/POWER = OFF
19:29:49.793 MQT: stat/dom_E26BD5/SWITCH4T = {"TRIG":"TOGGLE"}
19:29:49.802 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:49","Uptime":"0T00:00:53","UptimeSec":53,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":52,"Signal":-74,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:49.826 MQT: stat/dom_E26BD5/RESULT = {"POWER":"ON"}
19:29:49.830 MQT: stat/dom_E26BD5/POWER = ON
19:29:53.168 MQT: stat/dom_E26BD5/SWITCH4T = {"TRIG":"TOGGLE"}
19:29:53.178 MQT: tele/dom_E26BD5/STATE = {"Time":"2022-09-07T19:29:53","Uptime":"0T00:00:57","UptimeSec":57,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Bongeenet","BSSId":"10:27:F5:30:2C:F2","Channel":6,"Mode":"11n","RSSI":54,"Signal":-73,"LinkCount":1,"Downtime":"0T00:00:05"}}
19:29:53.203 MQT: stat/dom_E26BD5/RESULT = {"POWER":"OFF"}
19:29:53.206 MQT: stat/dom_E26BD5/POWER = OFF
Ponieważ Tasmota działa po MQTT nie wszystkie urządzenia/czujniki podpięte do ESP będą rozpoznawane w HA. Czujnik DS jest przedstawiany w HA, bo jest oczywistym sprzętem. Na GPIO wybierasz dokładnie taki czujnik.
Czujnik odległości masz z wyjściem stan wysoki/stan niski. Podobnie działają podłączone kontaktrony. HA otrzymuje tylko po MQTT informację, że coś jest ON lub OFF czy switch się przełączył. Teraz musisz taki komunikat MQTT przerobić na odpowiednią encję w HA. Służy do tego MQTT Binary Sensor
Od Ciebie zależy jak ją sobie dobierzesz, co ma być czym. Do tego dochodzą niuanse w konfiguracji opcji działania danego komponentu w Tasmota. Jest do tego w dokumentacji cała tabela komend od wszystkiego. Między innymi od zachowania przełączników i przycisków w korelacji z POWER
.
Przy takim zestawie podłączonych komponentów możesz łatwiej zrobić to wszystko w ESPHome.
Jeden plik YAML, w którym zawierasz wszystko co powstanie w HA jako urządzenie z encjami.
P.S.
Dziwne nie? Fan Tasmota poleca ESPHome - musiał do tego dojrzeć.
Dzięki !!!
Wszystko zależy od tego co dokładnie chcesz zrobić i dobrać optymalne rozwiązanie.
Ja np do automatyzacji staram się wykorzystywać:
Pyscript Python scripting
Szczyt mojej fascynacji Tasmota miałem gdy zacząłem w urządzaniach z tym oprogramowaniem, wykorzystywać reguły. Jako samodzielne urządzenia te oprogramowanie jest the best, daje maksimum możliwości w tak małym wsadzie. Ale jak już wszystko sprowadza się do współpracy z HA, to okazuje się, że nawet w ESPHome można zawrzeć automatyzacje. Najlepiej poznałem niezawodność współpracy ESPHome z HA podczas realizacji tego mojego pomysłu:
ESP32 jako moduł centralny czujników alarmowych PIR
I po pewnym czasie dzięki @Stravi automatyzacja działania ESP zaszyta została w ESPHome:
Witam serdecznie. Zakupiłem taki o to moduł:
Sterownik WiFi Sonoff DC 2 kanały - Zasilanie - 5 V Micro USB lub 7-32 V AC/DC (Również zwany: Sonoff 2CH DC 5-32V Sterownik Wifi beznapięciowy)
https://www.houseiq.pl/pl/p/Sonoff-2CH-DC-5-32V-Sterownik-Wifi-beznapieciowy/775
Porównując go ze zdjęciem poniżej, dodanym przez @Cezary.K można rzec, że to prawie identyczne moduły.
Z tym że ja w Tasmota wybrałem na bazie Sonoff T1 2CH (29) a nie Generic (18) i to pierwsze ustawienie naprawdę działała świetnie
Zasiliłem go przez:
Przetwornica 24V / 5V-5A GoMedia YJ-240505X - Gdzie pobieram 24V z napędu bramy przesuwnej i gotowym zarobionym przewodem zasilam układ przewodem mikro usb 5V.
Zmierzam do pytania, a mianowicie.
Czytając ten temat, od deski do deski nie mogę wydedukować jak dodać kontaktron do tego układu?
- GPIO14 i GND ?
- GPIO14 i 3v3 ?
I jak ustawić w tasmocie? Czy kontaktron, jaki wybiorę to bez znaczenia?
Jeżeli ktoś, przebrną przez ten temat to prosiłbym o pomoc.
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
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.
Użyłbym do tego Baterii CR123 z koszykiem, aby wydłużyć żywotność działania i nie wymieniać za często baterii.
Ale wada tego rozwiązania jest taka, że to jest BATERIA.
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:
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).
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
- to Ty masz to w ręce więc możesz prześledzić przebieg ścieżek
- nie widzę rezystora
- 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ć.
- 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
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)
Załączam mój albo nasz 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"
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.
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"