Difference between revisions of "MQTT"
(→Carnage of Assumptions: four is not spelled for in this context!) |
(Added TLS resources and .py code.) |
||
Line 4: | Line 4: | ||
*[http://mosquitto.org/ Mosquitto] An Open Source MQTT v3.1/v3.1.1 Broker | *[http://mosquitto.org/ Mosquitto] An Open Source MQTT v3.1/v3.1.1 Broker | ||
*[http://vasters.com/clemensv/2014/06/02/MQTT+An+Implementers+Perspective.aspx MQTT. An Implementer’s Perspective] by Clemens Vasters | *[http://vasters.com/clemensv/2014/06/02/MQTT+An+Implementers+Perspective.aspx MQTT. An Implementer’s Perspective] by Clemens Vasters | ||
+ | TLS | ||
+ | *[http://rockingdlabs.dunmire.org/exercises-experiments/ssl-client-certs-to-secure-mqtt SSL/TLS Client Certs to Secure MQTT] JERRY DUNMIRE | ||
+ | *[http://jpmens.net/2013/02/25/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker/ Lots of messages: MQTT, Pub/Sub, and the Mosquitto broker] Jan-Piet Mens | ||
+ | *[https://answers.launchpad.net/mosquitto/+question/204639 Unable to connect to mosquitto server using server CA] Useful thread found on mosquitto launchpad | ||
+ | *[https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh tools/TLS/generate-CA.sh] GitHub owntracks / tools | ||
==Build History== | ==Build History== | ||
===Carnage of Assumptions=== | ===Carnage of Assumptions=== | ||
Line 23: | Line 28: | ||
[[File:R18s0.gif|500px]] | [[File:R18s0.gif|500px]] | ||
I made an animated .gif of the HomeAmation.Mqtt app in action. | I made an animated .gif of the HomeAmation.Mqtt app in action. | ||
+ | |||
+ | ===TLS=== | ||
+ | ====Mosquitto_[pub|sub]==== | ||
+ | <source lang="text"> | ||
+ | mosquitto_sub -t "#" -v --cafile ca.crt --cert client.crt --key client.key -p 8883 -h 192.168.1.111 | ||
+ | mosquitto_pub -t test -m "Howdy `date`" -d --cafile ca.crt --cert client.crt --key client.key -p 8883 -h 192.168.1.111 | ||
+ | </source> | ||
+ | ====Python==== | ||
+ | <source lang="python"> | ||
+ | ''' | ||
+ | Created on Dec 3, 2015 | ||
+ | |||
+ | @author: jeffa | ||
+ | ''' | ||
+ | |||
+ | import paho.mqtt.client as mqtt | ||
+ | import json | ||
+ | import HaClasses | ||
+ | import os | ||
+ | import ssl | ||
+ | |||
+ | #publishHost = "192.168.1.222" | ||
+ | publishHost = "192.168.1.111" | ||
+ | mqttPort = 8883 | ||
+ | |||
+ | def on_connect(client, userdata, flags, rc): | ||
+ | print("Connected with result code "+str(rc)) | ||
+ | client.subscribe("#") | ||
+ | |||
+ | def on_message(client, userdata, msg): | ||
+ | print(msg.payload) | ||
+ | |||
+ | rootDir = os.path.dirname(__file__) | ||
+ | dataDir = os.path.join(rootDir, 'Data') | ||
+ | caCrt = os.path.join(dataDir, 'ca.crt') | ||
+ | clientCrt = os.path.join(dataDir, 'client.crt') | ||
+ | clientKey = os.path.join(dataDir, 'client.key') | ||
+ | |||
+ | client = mqtt.Client(protocol=mqtt.MQTTv311) | ||
+ | |||
+ | client.tls_set(caCrt, | ||
+ | certfile=clientCrt, | ||
+ | keyfile=clientKey, | ||
+ | tls_version=ssl.PROTOCOL_TLSv1_2) | ||
+ | |||
+ | client.on_connect = on_connect | ||
+ | client.on_message = on_message | ||
+ | |||
+ | client.connect(publishHost, mqttPort, 60) | ||
+ | client.loop_forever() | ||
+ | </source> |
Revision as of 12:14, 6 December 2015
Contents
MQTT
Resources
- MQTT
- Mosquitto An Open Source MQTT v3.1/v3.1.1 Broker
- MQTT. An Implementer’s Perspective by Clemens Vasters
TLS
- SSL/TLS Client Certs to Secure MQTT JERRY DUNMIRE
- Lots of messages: MQTT, Pub/Sub, and the Mosquitto broker Jan-Piet Mens
- Unable to connect to mosquitto server using server CA Useful thread found on mosquitto launchpad
- tools/TLS/generate-CA.sh GitHub owntracks / tools
Build History
Carnage of Assumptions
September 9, 2015
Pictured a Beagle Bone Black running Debian with a python mqtt subscription to control two relays via the custom shield I built with a couple FET transistors (with room to expand to 8 total).
Have you ever spent way to much time fixing something based on an assumption that you never question again? At least four wasted hours. It was some loading in the relay! bleuch. I replaced FET transistor a couple times and a resistor before realizing there was something funky with the relay drive.
Working prototype
September 13, 2015
Pictured here is a Windows 10 client I built that reads sensors, in this case DS18B20 temperature sensors, and controls for switches. The win10 client is a universal windows app deployed to my desktop, a tablet and hopefully real soon now a windows 10 phone. I used MvvM Light view models and Messenger and utilized the new compiled bindings available now with win10 visual studio 2015.
I made an animated .gif of the HomeAmation.Mqtt app in action.
TLS
Mosquitto_[pub|sub]
mosquitto_sub -t "#" -v --cafile ca.crt --cert client.crt --key client.key -p 8883 -h 192.168.1.111
mosquitto_pub -t test -m "Howdy `date`" -d --cafile ca.crt --cert client.crt --key client.key -p 8883 -h 192.168.1.111
Python
'''
Created on Dec 3, 2015
@author: jeffa
'''
import paho.mqtt.client as mqtt
import json
import HaClasses
import os
import ssl
#publishHost = "192.168.1.222"
publishHost = "192.168.1.111"
mqttPort = 8883
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("#")
def on_message(client, userdata, msg):
print(msg.payload)
rootDir = os.path.dirname(__file__)
dataDir = os.path.join(rootDir, 'Data')
caCrt = os.path.join(dataDir, 'ca.crt')
clientCrt = os.path.join(dataDir, 'client.crt')
clientKey = os.path.join(dataDir, 'client.key')
client = mqtt.Client(protocol=mqtt.MQTTv311)
client.tls_set(caCrt,
certfile=clientCrt,
keyfile=clientKey,
tls_version=ssl.PROTOCOL_TLSv1_2)
client.on_connect = on_connect
client.on_message = on_message
client.connect(publishHost, mqttPort, 60)
client.loop_forever()