Sonoff RF Bridge with ESPHOME?

The SonOff RF Bridge uses the ESP8285 and not the ESP32. It can be flashed with both ESPHome as well as Tasmota. MIne is flashed with Tasmote. The Chip used for 433MHz communication is EFM8BB1 which I have flashed with Portisch FW. On order to flashe the EFM8BB1, I had to make some HW modification:
image

1 Like

Thank you for this. Being a bit noobish I understand better when I can view all the code at once. Would it be possible for you to post all your yaml files somewhere? Regards.

Excluding the standard YAML code, this is what I use for controlling my switches.

And yes, someone could potentially use this information to control my switches and in that case, please go ahead and do that but be fast because they are being replaced with Wi-Fi enabled and Tuya cutter lights and switches in a fast phase :slight_smile:

As you can see I haven’t enabled the receiver and I have turned of the web service because if not, the device will reboot all the time. Maybe it’s only my device or all are the same. I remember i also did the HW mod, but as I remember it was not only these two wires i was cutting it was also a third one if I remember correctly.

As my experience from playing with the ESPHome Dallas component is that the timing (not using timer interrupts) are not that precise I guess this might cause some problems having both the web service and receiver running at the same time as you try to transmit. So if it’s unstable having both the receiver and transmitter running, turn of the one you don’t use for the moment.

Also. It’s not fun to re-flash every time you add some device. I have seen some setup where the codes was provided via the API from HA to the ESPHome device and that setup would be better I think. But I didn’t know enough about ESPHome YAML configurations at the time I configured this but someone else might step in here

#web_server:

status_led:
  pin:
    number: GPIO13
    inverted: yes

sensor:
  - platform: wifi_signal
    name: RF Bridge Wifi Signal
    update_interval: 60s
  - platform: uptime
    name: RF Bridge Uptime
    update_interval: 60s


# USBRX = GPIO4 ---> receiver
# USBTX = GPIO5 ---> trasmitter
# receiver = pin 5 of the 8-legged chip (the one closer to the wifi antenna)
# transmitter = pin 4 of the 6-legged chip (closest to r12)

# https://esphome.io/components/remote_transmitter.html#remote-setting-up-rf   

#remote_receiver:
#  pin: GPIO04
#  dump:
#    - nexa
#    - rc_switch
#    - all
# Settings to optimize recognition of RF devices
#  tolerance: 50%
#  filter: 4us
#  idle: 4ms
#  buffer_size: 1kb
#  on_rc_switch:
#    - lambda: !lambda |-
#        char code[100];
#        sprintf(code, "Code:%llu Protocol:%d", x.code, x.protocol);
#        id(mqtt_client).publish("rf/bridge/all", code);

#  on_rc_switch:
#    then:
#      - mqtt.publish:
#          topic: "test/rc_switch"
#          payload: x.code

remote_transmitter:
  pin: GPIO05
  carrier_duty_percent: 100%



switch:
  ### Arbetsrum
  - platform: template
    name: Arbetsrum Bord
    optimistic: True
    assumed_state: True
    #LuxorParts 1 3
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010101000101010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010101000101010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: Arbetsrum Fönster
    optimistic: True
    assumed_state: True
    #Proove 1 1
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110101010'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010101010'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s

  ### Kök
  - platform: template
    name: "Kök Arbetsbänk"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 1
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 1
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  
  - platform: template
    name: "Kök Diskbänk"
    optimistic: True
    assumed_state: True
    #Proove 1 2
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110101001'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010101001'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "Kök Fönster"
    optimistic: True
    assumed_state: True
    #LuxorParts 1 4
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010100010101010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010100010101010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "Kök Småfönster"
    optimistic: True
    assumed_state: True
    #LuxorParts 1 1
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010001010101010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010001010101010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  ### Ute
  - platform: template
    name: "Ute Farstun"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 3
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 3
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  
  ### Hall
  - platform: template
    name: "Hall Fönster"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 2
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 2
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  
  - platform: template
    name: "Hall Höger"
    optimistic: True
    assumed_state: True
    #LuxorParts 2 1
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '010001010001010101010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '010001010001010101010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "Hall Vänster"
    optimistic: True
    assumed_state: True
    #Proove 1 3
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110100110'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010100110'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s

  ### Sovrum
  - platform: template
    name: "Sovrum Fönster"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 4
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 4
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  
    ### Trapp uppe
  - platform: template
    name: "Trapp uppe Sybord"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 5
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 5
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  


  ### T
  - platform: template
    name: "T Byrån"
    optimistic: True
    assumed_state: True
    #Proove 1 4
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110100101'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010100101'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "T Soffan"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 6
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 6
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  

  - platform: template
    name: "T TV"
    optimistic: True
    assumed_state: True
    #Proove 2 3
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110010110'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010010110'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
  

  - platform: template
    name: "Y"
    optimistic: True
    assumed_state: True
    #Proove 2 1
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110011010'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010011010'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s

  ### Y
  - platform: template
    name: "Y Skåp"
    optimistic: True
    assumed_state: True
    #LuxorParts 2 2
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '010001010100010101010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '010001010100010101010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "Y Höger"
    optimistic: True
    assumed_state: True
    #Proove 2 2
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110100110011001'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '1001100110100101011010101010010101010101011010010110101010011001'
          protocol: 8
          repeat: 
            times: 10
            wait_time: 0s


  ### X
  - platform: template
    name: "X Fönster"
    optimistic: True
    assumed_state: True
    #Luxorpart I 4
    turn_on_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010101010001010101'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s
    turn_off_action:
      - remote_transmitter.transmit_rc_switch_raw:
          code: '000101010101010001010100'
          protocol: 1
          repeat: 
            times: 10
            wait_time: 0s

  - platform: template
    name: "X Bord"
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 8
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 8
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
  

  ### Dashboard
  - platform: template
    name: Dashboard
    optimistic: True
    assumed_state: True
    #Nexa
    turn_on_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 1
          group: 0
          channel: 7
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms
    turn_off_action:
      - remote_transmitter.transmit_nexa:
          device: 0x227BACA
          state: 0
          group: 0
          channel: 7
          level: 0
          repeat: 
            times: 10
            wait_time: 10ms




#Proove Packet structure:
#Learn by sending On code
#    Bit nbr:  Name:
#    01-52     Transmitter code. 26 bits, sent as 52 (every other bit is the inverse of previous)
#    53-54     Group On(01), Off(10)
#    55-56     On(01), Off(10) (or Dim(11)?)
#    57-60     Channel. 1=1010, 2=1001, 3=0110, 4=0101
#    61-64     Switch.  1=1010, 2=1001, 3=0110, 4=0101
#    (65-73    Dimmer value, 16 steps. (optional))
#    #                10        20        30        40        50           60
#    #       1234567890123456789012345678901234567890123456789012 34 56 7890 1234
#    ----------------------------------------------------------------------------
#    #1 On:  1001100110100101011010101010010101010101011010010110 10 01 0101 0101
#    #1 Off: 1001100110100101011010101010010101010101011010010110 10 10 0101 0101
#    #2 On:  1001100110100101011010101010010101010101011010010110 10 01 0101 0110
#    #2 Off: 1001100110100101011010101010010101010101011010010110 10 10 0101 0110
#    #3 On:  1001100110100101011010101010010101010101011010010110 10 01 0101 1001
#    #3 Off: 1001100110100101011010101010010101010101011010010110 10 10 0101 1001
#    Gr On:  1001100110100101011010101010010101010101011010010110 01 01 0101 0101
#    Gr Off: 1001100110100101011010101010010101010101011010010110 01 10 0101 0101


#LuxorParts
#I=0x15 II=0x45 III=0x51 IV=0x54
#1=0x15 2=0x45 3=0x51 4=0x54
#On=0x55 Off=0x54

#1=0x15 '00010101'
#2=0x45 '01000101'
#3=0x51 '01010001'
#4=0x54 '01010100'

#On=0x55 '01010101'
#Off=0x54 '01010100'


#Everflourish / Clas Ohlson
#https://github.com/chrols/emw100
#Intro sequence is 0XAAA4A92A4A9294A5494AL / 10101010101001001010100100101010010010101001001010010100101001010100100101001010
#The ID is 27 bits long
#ID	Binary	Hexadecimal
#1	100101001010010100100101001	0X4A52929
#2	100100101001010010101001010	0X494A54A
#3	010101001001010100101001001	0X2A4A949
#4	010100101010010100101001010	0X295294A
#The command is 22 bits long
#Switch On: 0100101001010010100101 (0X1294A5) Switch Off: 0101001010010100101001 (0X14A529)
#DELAY (time for a bit) = .00057
#SLEEP (time period between each switch) = .016

any idea why the RM433 remote from Sonoff does not work well with Sonoff bridge?

Hi, I have my Sonoff RFBridge flashed with Tasmota and Portisch. It works well to decode most 433MHz devices I have, except for the Sonoff 433 RM Remote control. In fact the bridge isn’t able to read anything from the remote in rfraw166 mode, but in rfraw177 mode, it spits out lots of inconsistent garbage.
Have you found any method to read, decode and eventually mimic (simulate) RM433 key codes using the RF Bridge as a trnasmitter?