segunda-feira, abril 20, 2020

Hass.io & Openmqttgateway - Botão liga desliga no controle RF mesmo valor

  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



d)  Finalmente criar o interruptor, switch.
 /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')

Nenhum comentário:

Postar um comentário

Busca do Google

Custom Search