OpenSource/HomeAssistant

HomeAssistant에 Tasmota RF433Mhz Bridge 연동하기

TABSPACE 2024. 9. 13. 21:15

준비물

- GPIO 핀헤더 작업이 된 ESP8266 또는 ESP32 기반 모듈 (이하 모듈)

- RF433Mhz 수신기 (SRX882)

- RF433Mhz 송신기 (STX882)

 

작업과정

1. 모듈의 GPIO0번-GND를 쇼트 후(펌웨어업로드모드로 진입) 전원 인가

 

2. https://tasmota.github.io/install/ 에서 Tasmota Sensors Firmware로 Flash 작업 수행

 

 

3. RF433Mhz 수신기(SRX882)를 점퍼선 등을 이용해 모듈과 연결

- 4개의 핀헤더 부위가 있음 VCC, CS, DATA, GND

-- VCC = 모듈의 5V핀에 연결

-- CS = VCC와 같이 연결되도록 함. (SRX882의 VCC와 CS를 연결)

-- DATA = 모듈의 GPIO4번(D2)에 연결

-- GND = 모듈의 GND핀에 연결

 

4. RF433Mhz 송신기(STX882)를 점퍼선 등을 이용해 모듈과 연결

- 3개의 핀헤더 부위가 있음 VCC, DATA, GND

-- VCC = 모듈의 5V핀에 연결

-- DATA = 모듈의 GPIO5번(D1)에 연결

-- GND = 모듈의 GND핀에 연결

 

5. Tasmota를 WiFi 연결 및 MQTT설정 후, 위 단계에서 지정한 GPIO모듈 설정

- D2 GPIO4 = RFrecv 선택

- D1 GPIO5 = RFSend 선택

 

6. RF리모콘 등 RF433 신호를 송신할수있는 장치에서 눌러보면, Tasmota Console에서 다음과 같이 메시지 수신됨.

{"Time":"2022-11-04T14:16:07","RfReceived":{"Data":"0xXXXXXX","Bits":24,"Protocol":17,"Pulse":500}}

 

7. HomeAssistant에 설정되어있는 MQTT 서버로 Autodiscovery 를 위해 아래의 코드를 지정된 topic에 publish함.

- 지정된 topic의 예시

homeassistant/sensor/rfbridge/signal/config

 

- publish 대상 메시지의 예시

{
   "name" : "RfBridge Signal",
   "unique_id" : "rfbridge_signal",
   "~" : "tele/tasm01",
   "state_topic" : "~/RESULT",
   "value_template" : "{{ value_json.RfReceived.Data }}",
   "json_attributes_topic" : "~/RESULT",
   "availability" : [
      {
         "payload_available" : "Online",
         "payload_not_available" : "Offline",
         "topic" : "~/LWT"
      }
   ],
   "device" : {
      "identifiers" : [
         "Tasm01"
      ],
      "manufacturer" : "Tasmota",
      "model" : "NodeMCU",
      "name" : "RfBridge",
      "sw_version" : "12.2.0"
   }
}

 

8. MQTT Publish message 후에, Home Assistant에서 추가된 디바이스 확인 가능

 

9. Home Assistant 개발자 도구에서 추가한 장비(예제에서는 sensor.rfbridge_rfbridge_signal)에서 모듈에서 수신된 RF433 데이터를 확인할 수 있음

 

10. 수신된 RF433 데이터를 기반으로 자동화 구성.

- 예시: 텔레그램으로 메시지 발송

automation:
  - id: Automation__RfBridge_Button_Pressed
    alias: RfBridge Button Pressed
    mode: queued

    trigger:
      - platform: state
        entity_id:
        - sensor.rfbridge_rfbridge_signal

    action:
      - service: telegram_bot.send_message
        data:
          message: "Button {{ trigger.to_state.state }} pressed"

 

[참고] 위의 경우, 의도하지 않은 동작이 발생할 수 있음. Home Assistant의 동작발동조건(trigger)는 변경에만 응답함. 즉 동일한 메시지포맷의 RF433신호가 반복적으로 들어올 경우, 첫번째 RF433 신호에만 반응하고, 다음 신호는 상태(state)가 변경되지 않았기에 반응하지 않음. 이를 정교하게 하기 위한 방식으로는 해당 자동화의 동작(action) 마지막을 mqtt.publish 서비스를 한번 더 호출하여, topic을 초기화해주는 방식으로 처리할 수 있음. (만약, 자동화를 Data:0xXXXXX로 조건을 설정하였을 경우, Data:0x0000형태로 임의의 값을 입력하는 방식으로 구성)

 

[참고2] 마찬가지로, Tasmota 모듈이 네트워크 연결이 해제된 경우(unavailable 또는 unknown) sensor값이 이전 상태의 Data값으로 복원되기에 자동화 발동 조건에 따라 의도하지 않게 실행이 될 수 있음. 따라서 오프라인에서 복구되는 경우를 제외한 자동화로 아래와 같이 변경할 수 있음.

automation:
  - id: Automation__RfBridge_Button_Pressed
    alias: RfBridge Button Pressed
    mode: queued

    trigger:
      - platform: state
        entity_id:
        - sensor.rfbridge_rfbridge_signal
        attribute: Time

    condition: |-
      {{ trigger.to_state.state not in ( "unavailable", "unknown" )
         and
         trigger.from_state.state != "unavailable"
      }}

    action:
      - service: telegram_bot.send_message
        data:
          message: "Button {{ trigger.to_state.state }} pressed"