Com o tempo, tenho transformado o meu apartamento numa smart home. Fiz isso usando o Home-assistant (HASS), alguns ESP8266 e ESP32 com vários tipos de sensores, e uns interruptores da marca SonOff, produzidos pela ITEAD.
Até há uns dias, usava código meu nos ESP8266 e ESP32. Nos interruptores, algo bem mais complicado, converti-os do firmware original para um firmware free open source chamado Tasmota. Este firmware Tasmota é largamente utilizado pela comunidade portuguesa do HASS. Nesta conversão, a parte mais difícil é mesmo abrir os interruptores e soldar uns pins a um programador série para fazer upload do código. Só custa a primeira vez…
Aqui há uns dias, converti todos os meus ESP para ESPhome, pelas várias vantagens que já referi. Hoje, decidi testar o ESPhome num dos meus interruptores de testes da SonOff.
As instruções para fazer esta mudança dos SonOff de Tasmota para ESPhome estão no próprio site do ESPhome. Mas ficam aqui os passos que fiz para um SonOff T2.
A primeira coisa que é necessário fazer é gerar um firmware com Over The Air (OTA) e fazer upload para o SonOff. Fiz tal e qual como nas instruções do ESPhome.
Cada interruptor smart-home SonOff pode ter uma configuração diferente. Cá em casa tenho vários SonOff T1 com 1 e 2 interruptores. Seguindo as instruções do ESPhome, fiz um teste com o SonOff T1 2ch.
No site está uma tabela com os pins e a configuração que temos de preparar em cada pin.
Pin | Função |
---|---|
GPIO0 | Button 1 (inverted) |
GPIO12 | Relay 1 and Blue LED |
GPIO9 | Button 2 (inverted) |
GPIO5 | Relay 2 and Blue LED |
GPIO10 | Button 3 (inverted) |
GPIO4 | Relay 3 and Blue LED |
GPIO13 | Blue LED (inverted) |
GPIO1 | UART TX pin (for external sensors) |
GPIO3 | UART RX pin (for external sensors) |
Por cada botão, vamos ter de adicionar uma secção destas:
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: "Sonoff 2CH Button 1"
on_press:
- switch.toggle: relay_1
E um destes:
switch:
- platform: gpio
name: "Sonoff 2CH Relay 1"
pin: GPIO12
id: relay_1
Vão ter de arrumar todos os switch
e todos os binary_sensor
na mesma secção, e não se podem repetir secções.
Reparem que o binary_sensor
, que aqui representa um dos botões no painel do SonOff, tem uma condição on_press
que altera um switch
chamado relay_1
. Este nome deve ser colocado como identificador do switch
que querem mudar de posição. Neste caso, o id
do switch
1 será relay_1
.
É esta condição que faz com que a luz se ligue ou desligue de cada vez que pressionam o botão no painel do interruptor.
O resultado final fica assim:
substitutions: hostname: 'sonoff_04' esphome: name: $hostname platform: ESP8266 board: esp01_1m wifi: ssid: MINHA_REDE_WIFI password: PASSWORD_DA_MINHA_REDE_WIFI fast_connect: True domain: .home api: reboot_timeout: 0s password: "PASSWORD_PARA_API" ota: safe_mode: True password: PASSWORD_PARA_OTA logger: # SonOff T2 2CH configuration binary_sensor: - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True name: "$hostname Button 1" on_press:
- switch.toggle: relay_1 - platform: gpio pin: number: GPIO9 mode: INPUT_PULLUP inverted: True name: "$hostname Button 2"
on_press:
- switch.toggle: relay_2 switch: - platform: gpio name: "$hostname Relay 1" pin: GPIO12
id: relay_1 - platform: gpio name: "$hostname Relay 2" pin: GPIO5
id_5 output: - platform: esp8266_pwm id: sonoff_led pin: number: GPIO13 inverted: True light: - platform: monochromatic name: "Sonoff LED" output: sonoff_led
Reparem como aproveitei o que que explico sobre como configurar o ESPhome para facilitar os nomes de cada sensor e atuador.
Assim, se depois de ter o interruptor a teste uns dias estiver tudo a funcionar sem problemas, basta mudar o nome do hostname
na secção substitutions
para ter tudo pronto para outro interruptor com a mesma configuração. Só muda o nome.