Amazon Dash Button Flow

This flow and the script included in this git repository supports capturing Amazon Dash button presses using the npm node-dash-button package.

dash.js

This node.js script uses the node-dash-button module to monitor for Dash button presses. When a button is pressed, it sends an MQTT message that can be captured in NodeRed via the MQTT Node.

You'll need to make two changes to the dash.js script. Change the IP address for your MQTT server, the MQTT topic being sent and change the MAC address associated with your Dash button.

dash.flow

This is a NodeRed flow that captures the button press with an MQTT node and then runs a Function Node that toggles a global variable.

You'll want to modify the MQTT node topic to match the topic that you set in dash.js and you'll want to change the name of the variable set.

[
  {
    "id": "7add9f95.36737",
    "type": "mqtt-broker",
    "z": "",
    "broker": "15.1.4.50",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "verifyservercert": true,
    "compatmode": true,
    "keepalive": "60",
    "cleansession": true,
    "willTopic": "",
    "willQos": "0",
    "willRetain": null,
    "willPayload": "",
    "birthTopic": "",
    "birthQos": "0",
    "birthRetain": null,
    "birthPayload": ""
  },
  {
    "id": "d814ac59.51db5",
    "type": "debug",
    "z": "828b7952.cf43c8",
    "name": "",
    "active": true,
    "console": "false",
    "complete": "true",
    "x": 585,
    "y": 324,
    "wires": []
  },
  {
    "id": "31036645.e9fe8a",
    "type": "mqtt in",
    "z": "828b7952.cf43c8",
    "name": "Peets Button",
    "topic": "dashbutton/peets",
    "broker": "7add9f95.36737",
    "x": 124.5,
    "y": 325,
    "wires": [
      [
        "d814ac59.51db5",
        "1a8e95fc.25de7a"
      ]
    ]
  },
  {
    "id": "1a8e95fc.25de7a",
    "type": "function",
    "z": "828b7952.cf43c8",
    "name": "Set Peets Variable",
    "func": "node.warn('start');\nif (!context.global.state) {\n    node.warn('context.global.state is null');\n    context.global.state = { peets: false };\n    if (context.global.state.peets === null) {\n        node.warn('context.global.state.peets is null');\n        context.global.state.peets = false;\n    }\n}\nif (context.global.state && context.global.state.peets) {\n    node.warn('toggle state');\n    context.global.state.peets = !context.global.state.peets;\n} else {\n    node.warn('setting state to true');\n    context.global.state.peets = true;\n}\n node.warn('sending msg: ' + context.global.state.peets);\n return context.global.state.peets;",
    "outputs": 1,
    "noerr": 0,
    "x": 365.5,
    "y": 383,
    "wires": [
      [
        "d814ac59.51db5"
      ]
    ]
  }
]
rgstephens

Flow Info

created 1 year, 5 months ago

Node Types

Core
  • debug (x1)
  • function (x1)
  • mqtt in (x1)
  • mqtt-broker (x1)

Tags

  • amazon
  • dash
  • button
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option