Small Things
for Monitoring
Jan-Piet Mens
November 2016
@jpmens
@jpmens: consultant, part-
time admin, small-scale
fiddler, loves DNS,
plain text, and things
that work. Dreamed up
OwnTracks & wrote jo
Today’s special
MQTT



ESP8266



for monitoring stuff
MQTT is a standard,
a transport,
PUB/SUB messaging,
designed for
unreliable networks
MQTT
security
TLS
authentication
ACLs
TLS-PSK
(payload encryption)
Quality of Service
0 At most once
1 Assured delivery
2 Once only
topic names
UTF-8, hierarchical, wildcards
temperature/room/living
devices/#
finance/+/eur/rate
PUB/SUB cauldron
MQTT brokers
the server bit of MQTT
Mosquitto
C, fast, lightweight, ACLs (plugin),TLS,TLS-PSK, bridge,
Websockets, logging via $SYS, FLOSS
http://mosquitto.org
bridging
CLI utilities
mosquitto_sub -v
[-h localhost] [-p 1883]
[--cafile file]
[--cert file --key file]
[-u username [-P password]]
-t 'topic/#'
subscribe
publish
mosquitto_pub
...
[-r]
-t topic
-m payload
languages
Lua, Python, C, JavaScript, Perl, Ruby, Java, ...
Python API: PUB
#!/usr/bin/env python
import paho.mqtt.publish as mqtt
mqtt.single('conf/hello', 'Hello MQTT')
$ mosquitto_sub -h localhost -v -t 'conf/#'
conf/hello Hello MQTT
payloadtopic
Python API: SUB
callbacks
#!/usr/bin/env python
import paho.mqtt.client as paho
def on_connect(mosq, userdata, rc):
mqttc.subscribe("conf/+", 0)
def on_message(mosq, userdata, msg):
print "%s %s" % (msg.topic, str(msg.payload))
mqttc = paho.Client(userdata=None)
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.connect("localhost", 1883, 60)
mqttc.loop_forever()
Python API: SUB
$ mosquitto_pub -t 'conf/thirsty' -m 'Beertime?'
$ mosquitto_pub -t 'conf/catering' -m 'Coffee is ready'
$ ./sub.py
conf/thirsty Beertime?
conf/catering Coffee is ready
The hardware …
EUR 22.83
Flash/RAM 16 / 64
USB 2
LAN/WAN 1 / 1
WiFi 802.11 b/g/n
GL-Inet AR150
Small, but too much
EUR 50 - 100
ESP8266
Low-cost micro controller
full TCP/IP stack
A bit like an Arduino (same IDE, or Lua)
but with on-board WiFi (!)
and really inexpensive
Different form factors
ESP8266
EUR 1.50
ESP-01
EUR 2.60NodeMCU
EUR 1.50
ESP-12
Electrodragon
EUR 5.50
http://www.electrodragon.com
Sonoff
EUR 4.47
https://www.itead.cc/sonoff-wifi-wireless-switch.html
Wemos D1 mini
EUR 4.00
Flash/RAM 4MB / 64 KB
Voltage 3.3V
Digital I/O 11
Analog 1
Wemos shields
EUR 1.95
EUR 4.50
EUR 1.40
EUR 2.90
Homie-ESP8266
#include <Homie.h>
HomieNode buttonNode("button", "button");
void loopHandler() {
int buttonValue = debouncer.read();
/* ... */
if (Homie.setNodeProperty(buttonNode, "open",
buttonValue ? "true" : "false", true)) {
}
}
void setup() {
debouncer.attach(PIN_BUTTON);
Homie.setFirmware("button-homie", "1.0.0");
Homie.registerNode(buttonNode);
Homie.setLoopFunction(loopHandler);
Homie.setup();
}
void loop() {
Homie.loop();
debouncer.update();
}
https://github.com/marvinroger/homie-esp8266
Arduino IDE
Le bouton
devices/cea191e0/$nodes button:button
devices/cea191e0/$online true
devices/cea191e0/$name Le bouton
devices/cea191e0/$localip 192.168.8.151
devices/cea191e0/$fwname button-homie
devices/cea191e0/$fwversion 1.0.0
devices/cea191e0/$signal 100
devices/cea191e0/button/open true
homie-ota
https://github.com/jpmens/homie-ota
Retro/Vintage-style
Monitoring
Temperature, movement (PIR), humidity, inexpensive sensors,
many examples, LWT, mqttwarn for integration, Node-Red
alerting: mqttwarn
https://github.com/jpmens/mqttwarn
practical solutions
alerting, metering, logging, location awareness, tracking,
automation, and controlling, host monitoring
MQTT in the wild
Graylog, beaver, Ansible, RabbitMQ, collectd, openHAB, Github,
Wireshark, Flukso, RemakeElectric, Jenkins, Diamond, OwnTracks
mqtt.org
@mqttorg
Particle Photon
EUR 19.00
Particle Electron
EUR 70.00

OSMC 2016 - Small things for monitoring by Jan-Piet Mens