Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Small Things for Monitoring

Jan-Piet Mens
November 17, 2016

Small Things for Monitoring

Jan-Piet Mens

November 17, 2016
Tweet

More Decks by Jan-Piet Mens

Other Decks in Technology

Transcript

  1. Small Things
    for Monitoring
    Jan-Piet Mens
    November 2016
    @jpmens

    View full-size slide

  2. @jpmens: consultant, part-
    time admin, small-scale
    fiddler, loves DNS,
    plain text, and things
    that work. Dreamed up
    OwnTracks & wrote jo

    View full-size slide

  3. Today’s special
    MQTT


    ESP8266


    for monitoring stuff

    View full-size slide

  4. MQTT is a standard,
    a transport,
    PUB/SUB messaging,
    designed for
    unreliable networks
    MQTT

    View full-size slide

  5. security
    TLS
    authentication
    ACLs
    TLS-PSK
    (payload encryption)

    View full-size slide

  6. Quality of Service
    0 At most once
    1 Assured delivery
    2 Once only

    View full-size slide

  7. topic names
    UTF-8, hierarchical, wildcards
    temperature/room/living
    devices/#
    finance/+/eur/rate

    View full-size slide

  8. PUB/SUB cauldron

    View full-size slide

  9. MQTT brokers
    the server bit of MQTT

    View full-size slide

  10. Mosquitto
    C, fast, lightweight, ACLs (plugin), TLS, TLS-PSK, bridge,
    Websockets, logging via $SYS, FLOSS
    http://mosquitto.org

    View full-size slide

  11. 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

    View full-size slide

  12. languages
    Lua, Python, C, JavaScript, Perl, Ruby, Java, ...

    View full-size slide

  13. 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
    payload
    topic

    View full-size slide

  14. 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()

    View full-size slide

  15. 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

    View full-size slide

  16. The hardware …
    EUR 22.83
    Flash/RAM 16 / 64
    USB 2
    LAN/WAN 1 / 1
    WiFi 802.11 b/g/n
    GL-Inet AR150

    View full-size slide

  17. Small, but too much
    EUR 50 - 100

    View full-size slide

  18. 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

    View full-size slide

  19. ESP8266
    EUR 1.50
    ESP-01
    EUR 2.60
    NodeMCU
    EUR 1.50
    ESP-12

    View full-size slide

  20. Electrodragon
    EUR 5.50
    http://www.electrodragon.com

    View full-size slide

  21. Sonoff
    EUR 4.47
    https://www.itead.cc/sonoff-wifi-wireless-switch.html

    View full-size slide

  22. Wemos D1 mini
    EUR 4.00
    Flash/RAM 4MB / 64 KB
    Voltage 3.3V
    Digital I/O 11
    Analog 1

    View full-size slide

  23. Wemos shields
    EUR 1.95
    EUR 4.50
    EUR 1.40
    EUR 2.90

    View full-size slide

  24. Homie-ESP8266
    #include
    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

    View full-size slide

  25. 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

    View full-size slide

  26. homie-ota
    https://github.com/jpmens/homie-ota
    Retro/Vintage-style

    View full-size slide

  27. Monitoring
    Temperature, movement (PIR), humidity, inexpensive sensors,
    many examples, LWT, mqttwarn for integration, Node-Red

    View full-size slide

  28. alerting: mqttwarn
    https://github.com/jpmens/mqttwarn

    View full-size slide

  29. practical solutions
    alerting, metering, logging, location awareness, tracking,
    automation, and controlling, host monitoring

    View full-size slide

  30. MQTT in the wild
    Graylog, beaver, Ansible, RabbitMQ, collectd, openHAB, Github,
    Wireshark, Flukso, RemakeElectric, Jenkins, Diamond, OwnTracks

    View full-size slide

  31. mqtt.org
    @mqttorg

    View full-size slide

  32. Particle Photon
    EUR 19.00

    View full-size slide

  33. Particle Electron
    EUR 70.00

    View full-size slide