No Home Assistant, um projeto adicional muito interessante é o Openmqttgateway, que assim com o ESPHOME, permite de forma fácil a conexão de diversos dispositivos ao seu Home Assistant.
O Openmqttgateway permite a conexão com dispositivos bluetooth, Lora, RF, GSM / GPRS e Infravermelho, por meio de MQTT em sistemas do tipo Home Assistant, Node-Red, openHAB, FHEM, Domoticz e EEDOM. Na realidade como usa MQTT, é compatível com qualquer outro sistema que utilize MQTT.
Aproveito para indicar uma ferramenta, MQTT Explorer, que utilizo para acompanhar as publicações do servidor MQTT.
No meu caso, especificamente eu queria capturar cliques nos botões de um controle remoto RF.
Consegui sem problemas capturar os cliques para o Hass.io. Onde descobri que cada botão gera um valor e que um clique longo em cada botão também gera valores independentes.
- Botão A: {"value":14061140,"protocol":1,"length":24,"delay":347}
- Botão B: {"value":14061144,"protocol":1,"length":24,"delay":348}
O protótipo que montei foi baseado nesta página.
Na configuração mais fácil, podemos usar o botão A para ligar um dispositivo e o botão B para desligar.
/config/configuration.yaml
switch:
- platform: mqtt
name: "btn_a"
state_topic: "home/OpenMQTTGateway_ESP8266_RF/433toMQTT"
command_topic: "home/OpenMQTTGateway_ESP8266_RF/commands/MQTTto433"
payload_on: "14061140"
payload_off: "14061144"
optimistic: false
value_template: "{{ value_json.value }}"
Mas o interessante é usar o mesmo botão para ligar e desligar o mesmo aparelho. Para isto fica um pouco mais difícil.a) Criar um input_boolean no arquivo de configuração do Hass.io. Uma variável que servirá para guardar o estado do aparelho que você irá controlar.
/config/configuration.yaml
input_boolean:
rf_14061140:
name: rf-a
icon: mdi:antenna
b) Criar um binary_sensor no arquivo de configuração que irá capturar, via MQTT, o valor do botão clicado e atualizar o valor da variável que criamos, no caso input.rf_14061140.
/config/configuration.yaml
binary_sensor:
- platform: mqtt
name: rf_14061140_sensor
state_topic: 'home/OpenMQTTGateway_ESP8266_RF/433toMQTT'
value_template: >-
{% if value_json.value == 14061140 %}
{{'ON'}}
{% else %}
{{states('binary_sensor.rf_14061140_sensor') | upper}}
{% endif %}
off_delay: 1
c) Criar uma automação que irá atualizar o valor da nossa variável
/config/automations.yaml
- id: '1587403706163'
alias: Controla rf_14061140
trigger:
- entity_id: binary_sensor.rf_14061140_sensor
from: 'off'
platform: state
to: 'on'
action:
- data: {}
entity_id: input_boolean.rf_14061140
service: input_boolean.toggle
/config/configuration.yaml
switch:
- platform: template
switches:
rf_btn_a:
entity_id: input_boolean.rf_14061140
value_template: "{{ is_state('input_boolean.rf_14061140', 'on') }}"
turn_on:
- service: mqtt.publish
data:
payload: '14061140'
topic: home/OpenMQTTGateway_ESP8266_RF/commands/MQTTto433
turn_off:
- service: mqtt.publish
data:
payload: '14061140'
topic: home/OpenMQTTGateway_ESP8266_RF/commands/MQTTto433
e) Para evitar erros, é importante lembrar que:
{{'ON'}} é diferente de {{"'ON'"}}
e
is_state('input_boolean.rf_14061140', 'on') é diferente de is_state(' input_boolean.rf_14061140', 'on')