Ajout des scripts MQTT
This commit is contained in:
parent
e9c20be21c
commit
df81ee662a
84
python/mqtt2papirus.py
Executable file
84
python/mqtt2papirus.py
Executable file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/python2
|
||||
# -*- coding: utf8 -*-
|
||||
|
||||
# Get data from MQTT broker and print them to
|
||||
# Papirus ePaper display
|
||||
|
||||
from papirus import Papirus
|
||||
from papirus import PapirusTextPos
|
||||
|
||||
import paho.mqtt.client as mqtt
|
||||
|
||||
import datetime
|
||||
import decimal
|
||||
|
||||
# MQTT settings
|
||||
mqtt_server = 'localhost'
|
||||
mqtt_port= 1883
|
||||
mqtt_auth= {'username':'cameteo',
|
||||
'password':'CaMeteo'}
|
||||
mqtt_client_id= 'mqtt2papirus'
|
||||
|
||||
topic="pi/papirus_zero_hat/temperature/#"
|
||||
|
||||
# Papirus display settings
|
||||
disp_rotation = 0
|
||||
font_path = '/usr/share/fonts/truetype/freefont/FreeMono.ttf'
|
||||
font_path_bold = '/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf'
|
||||
text_size = 15
|
||||
|
||||
date = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
temp = "-"
|
||||
unit_temp = "\u00B0C"
|
||||
|
||||
#Set the dispaly and position of text
|
||||
text = PapirusTextPos(False, rotation=disp_rotation)
|
||||
#text.Clear()
|
||||
text.AddText(date, 0, 0, text_size, Id="Date", font_path=font_path_bold)
|
||||
text.AddText("Connecting to MQTT...", 5, 15, text_size, Id="Temperature", font_path=font_path)
|
||||
text.WriteAll()
|
||||
|
||||
# The callback for when the client receives a CONNACK response from the server.
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
print("Connected with result code "+str(rc))
|
||||
date = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
text.UpdateText("Date", date, font_path=font_path_bold)
|
||||
text.UpdateText("Temperature", "Connected to MQTT !")
|
||||
text.WriteAll()
|
||||
# Subscribing in on_connect() means that if we lose the connection and
|
||||
# reconnect then subscriptions will be renewed.
|
||||
client.unsubscribe("$SYS/#")
|
||||
client.subscribe(topic)
|
||||
|
||||
# The callback for when a PUBLISH message is received from the server.
|
||||
def on_message(client, userdata, msg):
|
||||
global unit_temp
|
||||
top=msg.topic[len(topic)-1:].strip()
|
||||
print(top+" : "+str(msg.payload))
|
||||
|
||||
if top == "date" :
|
||||
text.UpdateText("Date", msg.payload, font_path=font_path_bold)
|
||||
|
||||
if top == "unit" :
|
||||
unit_temp = msg.payload
|
||||
|
||||
if top == "value" :
|
||||
val = decimal.Decimal(msg.payload)
|
||||
txt = "T= %.1f" % val + unit_temp.decode("utf-8")
|
||||
text.UpdateText("Temperature", txt)
|
||||
text.WriteAll()
|
||||
|
||||
########
|
||||
# Main #
|
||||
########
|
||||
|
||||
#Connect to MQTT broker and loop...
|
||||
mqtt_client = mqtt.Client(mqtt_client_id, clean_session=False)
|
||||
mqtt_client.username_pw_set(mqtt_auth['username'], mqtt_auth['password'])
|
||||
mqtt_client.on_connect = on_connect
|
||||
mqtt_client.on_message = on_message
|
||||
mqtt_client.connect(mqtt_server, mqtt_port, 60)
|
||||
|
||||
mqtt_client.loop_forever()
|
||||
|
||||
|
92
python/mqtt2sql.py
Executable file
92
python/mqtt2sql.py
Executable file
@ -0,0 +1,92 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
# Pérenisation de données arrivant sur un MQTT
|
||||
# vers une base de données MariaDb/MySQL
|
||||
# Auteur : Arofarn
|
||||
# v0.1
|
||||
|
||||
#################
|
||||
# Configuration #
|
||||
#################
|
||||
|
||||
#MQTT Broker
|
||||
mqtt_host = "aro-yuno"
|
||||
mqtt_port = 1883
|
||||
mqtt_client_id = "mqtt2sql"
|
||||
#mqtt_auth = { 'username' : 'arofarn', 'password' : 'xxx' }
|
||||
qos=1
|
||||
topic = "huzzah0/#"
|
||||
|
||||
#MySQL database
|
||||
|
||||
sql_host = "localhost"
|
||||
#sql_port =
|
||||
sql_base = "iot_test"
|
||||
sql_user = "arofarn"
|
||||
#sql_pass = "password"
|
||||
|
||||
########
|
||||
# MAIN #
|
||||
########
|
||||
|
||||
import paho.mqtt.client as mqtt
|
||||
from datetime import datetime
|
||||
import json
|
||||
import pymysql.cursors
|
||||
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
print("Connected with result code "+str(rc))
|
||||
client.subscribe(topic)
|
||||
|
||||
def on_message(client, userdata, msg):
|
||||
top=msg.topic[len(topic)-1:].strip()
|
||||
|
||||
subtopics = top.split("/")
|
||||
payload = msg.payload.decode()
|
||||
|
||||
val = json.loads(payload)
|
||||
print("%s : %s %s (%s)" % (val['type'], val['value'], val['unit'], subtopics[0]))
|
||||
|
||||
with connection.cursor() as cursor:
|
||||
sql = "INSERT INTO `data` (`valdate`, `value`, `type_id`, `sensor_id`) VALUES (%s, %s, %s, %s)"
|
||||
cursor.execute(sql, (datetime.strptime(val['date'], "%d/%m/%Y %H:%M:%S"), float(val['value']), val['type'], subtopics[0]))
|
||||
|
||||
connection.commit()
|
||||
|
||||
def on_message_date(client, userdata, msg):
|
||||
payload = msg.payload.decode()
|
||||
try:
|
||||
d = datetime.strptime(payload, "%d/%m/%Y %H:%M:%S")
|
||||
print("Date : %s" % d)
|
||||
except:
|
||||
print("Date mal formatée : %s" % payload)
|
||||
|
||||
|
||||
def on_disconnect(client, userdata, msg):
|
||||
if msg != 0:
|
||||
print("Déconnexion imprévu : %s" % msg)
|
||||
connection.close()
|
||||
|
||||
connection = pymysql.connect(host=sql_host,
|
||||
user=sql_user,
|
||||
#password=sql_pass,
|
||||
db=sql_base,
|
||||
charset='utf8mb4',
|
||||
cursorclass=pymysql.cursors.DictCursor)
|
||||
|
||||
########
|
||||
# Main #
|
||||
########
|
||||
|
||||
#Connect to MQTT broker and loop...
|
||||
mqtt_client = mqtt.Client(mqtt_client_id, clean_session=False)
|
||||
#mqtt_client.username_pw_set(mqtt_auth['username'], mqtt_auth['password'])
|
||||
mqtt_client.on_connect = on_connect
|
||||
mqtt_client.on_message = on_message
|
||||
mqtt_client.on_disconnect = on_disconnect
|
||||
|
||||
mqtt_client.message_callback_add("huzzah0/NTP/date", on_message_date)
|
||||
|
||||
mqtt_client.connect(mqtt_host, mqtt_port, 60)
|
||||
|
||||
mqtt_client.loop_forever()
|
63
python/papirus-lm752mqtt.py
Executable file
63
python/papirus-lm752mqtt.py
Executable file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf8 -*-
|
||||
|
||||
#Get LM75 temperature value and send it to MQTT broker
|
||||
|
||||
import smbus
|
||||
import paho.mqtt.publish as mqtt
|
||||
import datetime
|
||||
|
||||
# MQTT settings
|
||||
mqtt_server = 'localhost'
|
||||
mqtt_port= 1883
|
||||
mqtt_auth= {'username':'cameteo',
|
||||
'password':'CaMeteo'}
|
||||
mqtt_client_id= 'papirus_temp2mqtt'
|
||||
mqtt_qos=2
|
||||
|
||||
mqtt_topic="pi/papirus_zero_hat/temperature/"
|
||||
|
||||
#LM75B settings
|
||||
LM75B_ADDRESS = 0x48
|
||||
LM75B_TEMP_REGISTER = 0
|
||||
LM75B_CONF_REGISTER = 1
|
||||
LM75B_THYST_REGISTER = 2
|
||||
LM75B_TOS_REGISTER = 3
|
||||
LM75B_CONF_NORMAL = 0
|
||||
|
||||
class LM75B(object):
|
||||
def __init__(self, address=LM75B_ADDRESS, busnum=1):
|
||||
self._address = address
|
||||
self._bus = smbus.SMBus(busnum)
|
||||
self._bus.write_byte_data(self._address, LM75B_CONF_REGISTER, LM75B_CONF_NORMAL)
|
||||
|
||||
def getTempC(self):
|
||||
"""Return temperature in degrees Celsius"""
|
||||
raw = self._bus.read_word_data(self._address, LM75B_TEMP_REGISTER) & 0xFFFF
|
||||
raw = (((raw << 8) & 0xFF00) + (raw >> 8) +128 ) /256
|
||||
return raw
|
||||
|
||||
########
|
||||
# Main #
|
||||
########
|
||||
|
||||
#Get and print data
|
||||
date = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
print(date)
|
||||
|
||||
sens = LM75B()
|
||||
lm75_temp = sens.getTempC()
|
||||
print("Temperature (Papirus HAT LM75b) : %s °C" % lm75_temp)
|
||||
|
||||
|
||||
#Send data to MQTT broker
|
||||
mqtt_data = [{'topic':mqtt_topic + "value", 'payload':lm75_temp, 'qos':mqtt_qos, 'retain':True},
|
||||
{'topic':mqtt_topic + "date", 'payload':date, 'qos':mqtt_qos, 'retain':True},
|
||||
{'topic':mqtt_topic + "unit", 'payload':"\u00B0C", 'qos':mqtt_qos, 'retain':True},
|
||||
{'topic':mqtt_topic + "desc", 'payload':"LM75b sensor", 'qos':mqtt_qos, 'retain':True}]
|
||||
|
||||
mqtt.multiple(mqtt_data,
|
||||
hostname= mqtt_server ,
|
||||
port= mqtt_port ,
|
||||
auth= mqtt_auth ,
|
||||
client_id= mqtt_client_id )
|
59
python/picam+mqtt.py
Executable file
59
python/picam+mqtt.py
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
# Take a picture with the Pi Camera module and publish the path
|
||||
# and name of the file on a MQTT broker
|
||||
|
||||
import picamera
|
||||
import paho.mqtt.publish as mqtt
|
||||
from time import sleep
|
||||
import datetime
|
||||
|
||||
|
||||
# Camera settings
|
||||
camera_resolution=(2592, 1944)
|
||||
camera_warmup_time=2 #in seconds
|
||||
#camera_iso=800
|
||||
|
||||
# MQTT settings
|
||||
mqtt_server = 'localhost'
|
||||
mqtt_port= 1883
|
||||
mqtt_auth= {'username':'cameteo',
|
||||
'password':'CaMeteo'}
|
||||
mqtt_client_id= 'picamera2mqtt'
|
||||
mqtt_qos=2
|
||||
|
||||
# Photo parameters
|
||||
photo_path = '/home/pi/photos/'
|
||||
photo_format = 'jpg'
|
||||
photo_mqtt_topic = 'pi/picamera/'
|
||||
|
||||
########
|
||||
# Main #
|
||||
########
|
||||
|
||||
file_date = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||||
file_name = file_date + "." + photo_format
|
||||
|
||||
# Taking a photo
|
||||
#################
|
||||
cam = picamera.PiCamera(resolution = camera_resolution)
|
||||
|
||||
# Warm-up
|
||||
cam.start_preview()
|
||||
sleep(camera_warmup_time)
|
||||
|
||||
print(photo_path+file_name)
|
||||
|
||||
cam.capture(photo_path+file_name)
|
||||
|
||||
# MQTT publication
|
||||
###################
|
||||
mqtt_data = [{'topic':photo_mqtt_topic+"path", 'payload':photo_path, 'qos':mqtt_qos, 'retain':False},
|
||||
{'topic':photo_mqtt_topic+"last_photo_name", 'payload':file_name, 'qos':mqtt_qos, 'retain':False},
|
||||
{'topic':photo_mqtt_topic+"last_photo_date", 'payload':file_date, 'qos':mqtt_qos, 'retain':False}]
|
||||
|
||||
mqtt.multiple(mqtt_data,
|
||||
hostname= mqtt_server ,
|
||||
port= mqtt_port ,
|
||||
client_id= mqtt_client_id ,
|
||||
auth= mqtt_auth )
|
Loading…
Reference in New Issue
Block a user