RF Bridge Component

The RF Bridge Component provides the ability to send and receive 433MHz remote codes without hardware hacking the circuit board to bypass the efm8bb1 MCU. This component implements the communcation protocol that the original efm8bb1 firmware implements. The device is connected via the UART bus. The uart bus must be configured at the same speed of the module which is 19200bps.

Warning

If you are using the Logger Component make sure you disable the uart logging with the baud_rate: 0 option.

../_images/rf_bridge-full.jpg
# Example configuration entry
uart:
  baud_rate: 19200

rf_bridge:
  on_code_received:
    - homeassistant.event:
        event: esphome.rf_code_received
        data:
          sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
          low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
          high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
          code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

Configuration variables:

  • uart_id (Optional, ID): Manually specify the ID of the UART hub.

  • id (Optional, ID): Manually specify the ID used for code generation.

  • on_code_received (Optional, Automation): An action to be performed when a code is received. See on_code_received Trigger.

on_code_received Trigger

With this configuration option you can write complex automations whenever a code is received. To use the code, use a lambda template, the code and the corresponding protocol timings are available inside that lambda under the variables named code, sync, high and low.

on_code_received:
  - homeassistant.event:
      event: esphome.rf_code_received
      data:
        sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
        low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
        high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
        code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

rf_bridge.send_code Action

Send an RF code using this action in automations.

on_...:
  then:
    - rf_bridge.send_code:
        sync: 0x700
        low: 0x800
        high: 0x1000
        code: 0xABC123

Configuration options:

  • sync (Required, int, templatable): RF Sync timing

  • low (Required, int, templatable): RF Low timing

  • high (Required, int, templatable): RF high timing

  • code (Required, int, templatable): RF code

  • id (Optional, ID): Manually specify the ID of the RF Bridge if you have multiple components.

Note

This action can also be written in lambdas:

id(rf_bridge).send_code(0x700, 0x800, 0x1000, 0xABC123);

rf_bridge.learn Action

Tell the RF Bridge to learn new protocol timings using this action in automations. A new code with timings will be returned to on_code_received Trigger

on_...:
  then:
    - rf_bridge.learn

Configuration options:

  • id (Optional, ID): Manually specify the ID of the RF Bridge if you have multiple components.

Note

This action can also be written in lambdas:

id(rf_bridge).learn();

Getting started with Home Assistant

The following code will get you up and running with a configuration sending codes to Home Assistant as events and will also setup a service so you can send codes with your RF Bridge.

api:
  services:
    - service: send_rf_code
      variables:
        sync: int
        low: int
        high: int
        code: int
      then:
        - rf_bridge.send_code:
            sync: !lambda 'return sync;'
            low: !lambda 'return low;'
            high: !lambda 'return high;'
            code: !lambda 'return code;'
    - service: learn
      then:
        - rf_bridge.learn

uart:
  tx_pin: 1
  rx_pin: 3
  baud_rate: 19200

logger:
  baud_rate: 0

rf_bridge:
  on_code_received:
    then:
      - homeassistant.event:
          event: esphome.rf_code_received
          data:
            sync: !lambda 'char buffer [10];return itoa(data.sync,buffer,16);'
            low: !lambda 'char buffer [10];return itoa(data.low,buffer,16);'
            high: !lambda 'char buffer [10];return itoa(data.high,buffer,16);'
            code: !lambda 'char buffer [10];return itoa(data.code,buffer,16);'

Now your latest received code will be in an event.

To trigger the automation from Home Assistant you can invoke the service with this code:

automation:
  # ...
  action:
  - service: esphome.rf_bridge_send_rf_code
    data:
      sync: 0x700
      low: 0x800
      high: 0x1000
      code: 0xABC123