Skip to content

Instantly share code, notes, and snippets.

@TiMladenov
Created October 11, 2019 09:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TiMladenov/3295bd90ad2763b89fd508f1a90b4c5d to your computer and use it in GitHub Desktop.
Save TiMladenov/3295bd90ad2763b89fd508f1a90b4c5d to your computer and use it in GitHub Desktop.
################################################################################
# MQTT at mosquitto.org
#
# Created: 2015-10-15 21:37:25.886276
#
################################################################################
import streams
from mqtt import mqtt
from wireless import wifi
from espressif.esp32net import esp32wifi as wifi_driver
import ssl
# the wifi module needs a networking driver to be loaded
# in order to control the device hardware.
# FOR THIS EXAMPLE TO WORK, A NETWORK DRIVER MUST BE SELECTED BELOW
# uncomment one of the following lines depending on used board
# (e.g. Particle Photon, esp8266 based board, esp32 based board)
# from broadcom.bcm43362 import bcm43362 as wifi_driver
# from espressif.esp32net import esp32wifi as wifi_driver
# from espressif.esp8266wifi import esp8266wifi as wifi_driver
# init the wifi driver!
# The driver automatically registers itself to the wifi interface
# with the correct configuration for the selected device
wifi_driver.auto_init()
streams.serial()
cacert = '-----BEGIN CERTIFICATE-----\n\
MIICITCCAYoCCQCdNIhDS4EYbTANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJC\n\
RzEKMAgGA1UECAwBZDEKMAgGA1UEBwwBZDEKMAgGA1UECgwBZDEKMAgGA1UECwwB\n\
ZDEWMBQGA1UEAwwNMTkyLjE2OC4wLjEwMjAeFw0xOTEwMTAxNDA0NDZaFw0xOTEx\n\
MDkxNDA0NDZaMFUxCzAJBgNVBAYTAkJHMQowCAYDVQQIDAFkMQowCAYDVQQHDAFk\n\
MQowCAYDVQQKDAFkMQowCAYDVQQLDAFkMRYwFAYDVQQDDA0xOTIuMTY4LjAuMTAy\n\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7NuQY+rg/7alGZX5P2cTmSdxE\n\
hT//pwgA65mMDG6sL/Sele0mGwfY+YkfBSHlpGDbDA2+XOeWczXIfTQtSL3VvjJr\n\
y1qjgsmPdNKFxIomwJRKHdSMX4KQoMnlRfwFW0n0K0FUwzo9JMKl4BNBv/gDIjgL\n\
Dxl/Hyr3mD8SuXJ/0wIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAD9DadtvvqQxbRMh\n\
BPE0lKL7DxpY3hXT/MKCx+Rz81rJ8exILOXudouXHBGxtZtU38LaDSUNHuzFNELD\n\
+ArGrC7A2Rc2RCGDV+bXA1HL2KRWmF8E6Yvmv6JX0g1hhuhCPyrD5mPYn2hcPjIL\n\
eIoS1BZL1uuLGYY4HZU3mpn7vPS+\n\
-----END CERTIFICATE-----\n\0'
clicert = '-----BEGIN CERTIFICATE-----\n\
MIICnDCCAgUCCQCgXW5e0L7qKzANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJC\n\
RzEKMAgGA1UECAwBZDEKMAgGA1UEBwwBZDEKMAgGA1UECgwBZDEKMAgGA1UECwwB\n\
ZDEWMBQGA1UEAwwNMTkyLjE2OC4wLjEwMjAeFw0xOTEwMTAxNTI1MjdaFw0xOTEx\n\
MDkxNTI1MjdaMEwxCzAJBgNVBAYTAkJHMQ4wDAYDVQQIDAVTb2ZpYTEOMAwGA1UE\n\
BwwFU29maWExDTALBgNVBAsMBE5vZGUxDjAMBgNVBAMMBUV0aGVyMIIBIjANBgkq\n\
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv1TPv59PtbN9iKtlYlxif1H5/9Z6HTYd\n\
LItbV0eiGqBKMoorieIcCec/UvqwPp3Zr0hxx2FrnOYBNS0GXH0/XKtVCqLFanTe\n\
lV2zDLNk6JDnyEvx0Du3WAwgHtWsY9w6fesjR7FnIiPIOhNdgpD4RcZZVSF8jeLI\n\
Cx8tlA6nnEfR+SeETJAl0uxTEF4R5YDqRpBVIMfx0l9y89Iw/vAeozJqiVICosGu\n\
9vQp604JfuhCwZvpMNiqGI1+eCqAPQzhGejRFCsMwjA0PMk8CPd3ukSe6uXKsmhT\n\
RPIn6QKei8QBrjlFXLLHjbb6XBDQIy4yMRb0+w6XuwVOyJHm/iJymwIDAQABMA0G\n\
CSqGSIb3DQEBCwUAA4GBAF780gJ5rj9Zfba0XDsB9Fu3d+3qs8ArKH/6F6lKYfp3\n\
lE04EZvKhX9E1DVtagw69elebNvRYe8VRMrA0dvEVJ+m59aNE/+iaC3IuujVxwad\n\
MCXY8pvVyc2s1v+AHmGWaPC/GISUDHcyB3ccXxVOY9MItNZvFDMCLB0gT+j2f2Vs\n\
-----END CERTIFICATE-----\n\0'
clikey = '-----BEGIN RSA PRIVATE KEY-----\n\
MIIEowIBAAKCAQEAv1TPv59PtbN9iKtlYlxif1H5/9Z6HTYdLItbV0eiGqBKMoor\n\
ieIcCec/UvqwPp3Zr0hxx2FrnOYBNS0GXH0/XKtVCqLFanTelV2zDLNk6JDnyEvx\n\
0Du3WAwgHtWsY9w6fesjR7FnIiPIOhNdgpD4RcZZVSF8jeLICx8tlA6nnEfR+SeE\n\
TJAl0uxTEF4R5YDqRpBVIMfx0l9y89Iw/vAeozJqiVICosGu9vQp604JfuhCwZvp\n\
MNiqGI1+eCqAPQzhGejRFCsMwjA0PMk8CPd3ukSe6uXKsmhTRPIn6QKei8QBrjlF\n\
XLLHjbb6XBDQIy4yMRb0+w6XuwVOyJHm/iJymwIDAQABAoIBAQCqHaBxghZ/Oc3d\n\
3HbSU84H4j1j6bC9lEWwO1/FZJ2PCwGtmghIGlBPxdoZz2cw5WyNWt4/JjFmWWKt\n\
gxDq3zmdDYEZacwZcTwOljcCjeakmWJcRpoESXQkxvMwN0+FomQnXRALSIKoaiQ2\n\
7szvsDHu6AK5nIKALSksKlZ+E+GXIwIrPTxGISn7o/FusnwwblOgPzOWGjWZ8+LR\n\
+o8M6Jy4/AgIneFksY9ZHroVo5L3SNuOewLbcf8F0LoyG46JR6F+MGnFgcN5BIMK\n\
1QoRTB+lWw3trLjcdWrrUreKvjSKQEjN2s34z+Mi2dyXl4cffp3lA3C/Dq9Fz/X7\n\
H5iLQV9BAoGBAOpqAfbSan6LY/0seCsFF8G6N6zk9oyivQQT3RagctnWhIOW+tfc\n\
UjTd1wYyaPFv/uQ8ckOam3nutWIeTQAuEpDVeUzyMWMDaAPUw0+BMxdwKGWA+eCr\n\
nHYxbf5LraQ0zpCgXADVEbMb8CIzbtpZcNu4EfbR5dpzIOotIk5EP+dxAoGBANDz\n\
L4lVJhnfLqdmxquLfndBvmYd73JviJRMQ8rBW8sJE13EH3fgMZ5XFgIckFFBes+9\n\
Tp2EyPAyfcrZ06gERB5H2qJ/9atriXpv4MmXz4x0IkXMvhSaBBegn4m+RjprQJtn\n\
xXlf5X5CXAJxUMkcr+EX0vrmE0fluM/ch48wVqzLAoGALO+DTuBJH9bypO6oXn7M\n\
bguXbqI5jP4JQ8XXBOZe/dk8b8k6brTCYXYBKSPysA2rC+92a/UwRrB2vsdWNWmf\n\
j3oMla57vyJBBzL6+bunop+SbtrJi8L57EJPdoblU2v4CQtkd5hgmzgI0VWQs3Sf\n\
yM7BStIzwKt/LMTYJa65nVECgYA9SphvGGMMw8LTp/ou58Q5BzfqjG1oi/7sQVLB\n\
buaWMBtWLeltKH5li/YQuIA81ZBIz6b33bNzgdwUXMERT+8LUth3QkG1/t1c5ORz\n\
PezLrmU/REedk3AP3jXuGbpP+JYC//WVHOQcnSqQLN0doSSWSn7Ayixtspz7nBzH\n\
i85g8QKBgGIsWt6ZfeK6vRXHIlALt2mYdxLQqbmAl2B0VKZovIAtWcYKnwu8kVo4\n\
5ldzkTzCGSt9MavHd5nXd9W8Zi8xLKlD6OzuXuFFi0tTGkEVYwnDHSiUlRa9v0Cl\n\
0fKjAJcddswG23QYNRLJAiw4Yqm5iFvi+QEidNdc6Wk4U6g3BI/r\n\
-----END RSA PRIVATE KEY-----\n\0'
# use the wifi interface to link to the Access Point
# change network name, security and password as needed
print("Establishing Link...")
try:
# FOR THIS EXAMPLE TO WORK, "Network-Name" AND "Wifi-Password" MUST BE SET
# TO MATCH YOUR ACTUAL NETWORK CONFIGURATION
wifi.link(NETWORK_SSID,wifi.WIFI_WPA2,NETWORK_PW)
except Exception as e:
print("ooops, something wrong while linking :(", e)
while True:
sleep(1000)
# define MQTT callbacks
def is_sample(data):
if ('message' in data):
return (data['message'].qos == 1 and data['message'].topic == "desktop/samples")
return False
def print_sample(client,data):
message = data['message']
print("sample received: ", message.payload)
def print_other(client,data):
message = data['message']
print("topic: ", message.topic)
print("payload received: ", message.payload)
def send_sample(obj):
print("publishing: ", obj)
client.publish("temp/random", str(obj))
def publish_to_self():
client.publish("desktop/samples","hello! "+str(random(0,10)))
try:
# set the mqtt id to "zerynth-mqtt"
client = mqtt.Client('test_node', True)
ctx = ssl.create_ssl_context(cacert = cacert, clicert = clicert, pkey = clikey, options = ssl.CERT_NONE|ssl.SERVER_AUTH)
for retry in range(10):
try:
client.connect(MQTT_BROKER_IP, 60, 8883, ssl_ctx = ctx)
sleep(1000)
break
except Exception as e:
print("connecting...")
print("connected.")
# subscribe to channels
client.subscribe([["hello",1]])
# configure callbacks for "PUBLISH" message
client.on(mqtt.PUBLISH,print_sample,is_sample)
# start the mqtt loop
client.loop(print_other)
# Every 3 seconds, send a random number to "temp/random"
# you can check temp/random changing here: http://test.mosquitto.org/gauge/
while True:
sleep(3000)
x = random(0,50)
send_sample(x)
# when x ends with 0, publish a message to desktop/samples
# it is echoed back
if x%10==0:
publish_to_self()
except Exception as e:
print(e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment