Amazon Dash as a Doorbell

Under my old NodeRed automation setup I had an Amazon Dash button set up as my doorbell. I’ve peeled the label off the front & superglued it to the doorframe and to the unsuspecting eye, it looks just like a common or garden doorbell.

When I migrated to HomeAssistant I also made some network changes that meant the arp calls from the dash couldn’t get through to to the Pi any more, but I’ve fixed that now so here’s how I did it!

First, I installed the Dasher add on for Hassio, and created some config for my Dash button (remember I’m migrating a solution here, so I know the MAC address of my buttons, see the Dasher docs for info on how to find them.)

{
  "buttons": [{
    "name": "Doorbell",
    "address": "xx:xx:xx:xx:xx:xx",
    "url": "https://jarvis.stuartgrimshaw.co.uk/api/services/mqtt/publish",
    "method": "POST",
    "headers": {
      "x-ha-access": "passwordy"
    },
    "json": true,
    "body": {
      "topic": "homeassistant/doorbell",
      "payload": "ON"
    }
  }]
}

This drops a message on to the homeassistant/doorbell MQTT queue that simply says. ON. I toyed with trying to make it a binary sensor, but really that’s just another moving part to make it more complicated when I can hook my automation straight up to the MQTT queue instead.

My response to the bell being pressed is to have Home Assistant speak through my Sonos speakers, I’m using Amazon’s Polly to do that as I already have an AWS account that I use for various things. I’ve created a homeassistant user and assigned it to a group that just has read only permission to Polly, that’s enough to synthesise speech. Plugged in to my HA config, it looks like this:

tts:
  - platform: amazon_polly
    aws_access_key_id: !secret aws_access_key_id
    aws_secret_access_key: !secret aws_secret_access_key
    voice: Brian

Now I just have to hook up a button press to Polly, which was very simple with the following automation:

- alias: "Doorbell pressed"
  trigger:
    platform: mqtt
    topic: "homeassistant/doorbell"
    payload: "ON"
  action:
    service: tts.amazon_polly_say
    data_template:
      entity_id:
        - media_player.office
        - media_player.living_room_2
      message: "Pahrdon me for interrupting, but someome pressed the doorbell."

and that’s pretty much it.

3 Likes