What do you do if you want to know if someone rings your doorbell when you’re not home?
Well, you could buy the Ring Video Doorbell if you want an all singing, all dancing solution that lets you see and speak to whoever’s at the door and want to spend around £160. You’ll also need to run power to the doorbell or faff about with the rechargeable battery.
Or, if you have Home Assistant and an RFXtrx 433MHz transceiver, you could spend less than a tenner…
OK, I’m not comparing like for like. My version doesn’t have video or audio. All it does is send you a message when someone rings the bell.
The RFXtrx is compatible with a number of wireless doorbells – the ones that have a battery operated bell push that sends a signal to a base unit which sounds the bell.
It’s worth noting that you can’t just pick up any old 433MHz doorbell. RFXtrx only supports a small number of chimes:
Note that the list does not include the Byron BY range of doorbells that seem to be the most common, sold in places like B&Q and Argos. However, it does appear that the doorbells sold by Wilkinsons under their Wilco brand are actually compatible – they seem to work on the Byron SX protocol.
I picked up a Byron 1byone Easy Chime, but the setup should be the same for any compatible unit.
To set them up in Home Assistant you’ll need to follow the same process as for the Oregon weather sensors I discussed last time. First of all set the automatic_add parameter for the RFXtrx sensor platform:
sensor: platform: rfxtrx automatic_add: true
Once that’s set, press the doorbell. That should create an entity for the doorbell:
You can now take the code and add it to your sensor configuration as a device:
sensor: platform: rfxtrx devices: 0716000100da0170: name: doorbell data_type: - Sound fire_event: true
You should then get an entity for that specific doorbell:
You’ll see that there’s another parameter this time: fire_event.
That ensures that Home Assistant fires an event even if the state hasn’t changed. The doorbell_sound entity state doesn’t always change when it’s pressed. The fire_event parameter ensures that you get an event every time it’s pressed.
So now you’ve got the entity set up, the next step is to set up a notification when it’s pushed. You’ll need an automation that responds to the signal_received event:
- alias: 'Doorbell pushed' trigger: - platform: event event_type: signal_received event_data: entity_id: sensor.doorbell_sound action: - service: persistent_notification.create data: message: "Doorbell rung" title: "Notification"
This creates a notification in the front end that will remain until you dismiss it:
Alternatively you could send a notification via a service such as Pushover:
- alias: 'Doorbell pushed' trigger: - platform: event event_type: signal_received event_data: entity_id: sensor.doorbell_sound action: - service: notify.pushover data_template: message: "Someone's at the door!" data: title: 'Doorbell'
So there you go – a cheap and cheerful way of telling when someone’s rung your doorbell. It might lack the features of the Ring doorbell, but it could just be a starting point for other automations.
1 August 2020 – Note:
Release 0.113 of Home Assistant made some changes to RFXTrx. Individual devices are now configured under the main rfxtrx section in configuration.yaml with no configuration under the sensor and switch sections.
I now have my rfxtrx integration set up for my doorbell as follows:
rfxtrx: device: /dev/rfxtrx devices: # Doorbell 0716020000180e70: fire_event: True
That created a sensor automatically, but with a entity name based on the device type – in my case, that was “Select Plus”. I could then rename the entity for the sound back to sensor.doorbell_sound in the frontend by selecting the entity and editing the entity ID and name:
Finally, the event firing doesn’t work in quite the same way. A state change is now triggered when the bell is pushed, so my trigger for the automation became:
trigger: - entity_id: sensor.doorbell_sound platform: statein Home Automation