Mqtt Dasher Service

edit SideBar

Mqtt Dasher Service

Create an mqtt-dasher service. (Debian/Ubuntu distros).


Limits permissions for promiscuous net socket access via libpcap.

This assumes npm install without the global flag so uses /opt/node_modules instead of /usr/lib.


# install nodejs from debsource
curl -sL | sudo -E bash -
sudo apt-get install -y nodejs

# install mqtt-dasher and libpcap dependency
sudo apt-get install libpcap-dev
sudo npm install mqtt-dasher

# add user to run the service, and group to limit access to setcap files
sudo useradd mqtt-dasher -d /opt/node_modules/mqtt-dasher -U

# make a copy of nodejs to set privileged net capabilities on
sudo cp `which nodejs` /opt/node_modules/mqtt-dasher/nodejs.setcap

# set user and group for mqtt-dasher first
sudo chgrp mqtt-dasher /opt/node_modules/mqtt-dasher/nodejs.setcap
sudo chmod 750 /opt/node_modules/mqtt-dasher/nodejs.setcap

# allow raw sockets and net admin for promiscuous mode
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /opt/node_modules/mqtt-dasher/nodejs.setcap

Create the Service


Description=mqtt-dasher service

ExecStart=/opt/node_modules/mqtt-dasher/nodejs.setcap /opt/node_modules/mqtt-dasher/server.js
# WorkingDirectory=/opt/node_modules/mqtt-dasher   # Required on some systems
RestartSec=10             # Restart service after 10 seconds if node service crashes
StandardOutput=syslog     # Output to syslog
StandardError=syslog      # Output to syslog
Environment=CONFIG_DIR=/etc/mqtt-dasher NODE_ENV=production


Configure and start

sudo mkdir /etc/mqtt-dasher


  host: localhost
  ## Preface for the topics $PREFACE/$TOPIC
  ## (not in mqtt-dasher 0.1.0)
  #preface: ha/dash

  ab:cd:ef:12:34:56: ha/dash/listerine
sudo systemctl enable mqtt-dasher
sudo systemctl start mqtt-dasher

Home Assistant Switch

An mqtt switch which:

  • turns on when the dash button is activated
  • turns off when the dash button deactivates
  • can be activated and deactivated from HA
- name: Listerine
  platform: mqtt
  command_topic: ha/dash/listerine
  state_topic: ha/dash/listerine
  payload_on: 'active'
  payload_off: 'inactive'
  retain: false

The switch isn't intended to be used in the HA UI, it should be mapped to a script instead.

To Do

Compile mqtt-dasher with nexe so that nodejs.setcap can't be so easily abused.

Recent Changes (All) | Edit SideBar Page last modified on 13 May 2017, at 11:55 AM UTC Edit Page | Page History
Powered by PmWiki