MQTT is a handy protocol for sending/receiving lightweight data.
What is MQTT
MQTT
stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple
and lightweight messaging protocol, designed for constrained devices and low-bandwidth,
high-latency or unreliable networks. The design principles are to minimise
network bandwidth and device resource requirements whilst also attempting to
ensure reliability and some degree of assurance of delivery. These principles
also turn out to make the protocol ideal of the emerging “machine-to-machine”
(M2M) or “Internet of Things” world of connected devices, and for mobile
applications where bandwidth and battery power are at a premium.
V5.0 and
v3.1.1 are OASIS standards (v3.1.1 is also a standard for ISO)
Protocol
The standard
ports for MQTT to use.
TCP/IP port 1883 is reserved with IANA for use with MQTT. TCP/IP port 8883 is also registered, for using MQTT over SSL.
What
security does MQTT support.
You can
pass a user name and password with an MQTT packet in V3.1 of the protocol.
Encryption across the network can be handled with SSL, independently of the
MQTT protocol itself (it is worth noting that SSL is not the lightest of
protocols, and does add significant network overhead). Additional security can
be added by an application encrypting data that it sends and receives, but this
is not something built-in to the protocol, in order to keep it simple and
lightweight.
Programmørerne i SKP har i øjeblikket besøg af 6 elever fra Holland.
Eleverne kommer fra DaVinci College i Dordrecht, som er en af vores internationale
skolesamarbejdspartnere. De skal være her i 4 uger og det kommer til at køre
som en workshop.
Eleverne har stor indflydelse på projektets udformning og
det produkt de skal aflevere. De er inddelt i tre gruppe, som har valgt:
Lysstyrring: mood light, dimming o. lign. styrring
af lys i forskellige rum
Miljø styring, temperatur, luftfugtighed og
andre indeklima faktorer som indstilles og/eller aflæsses
Post- og pakkekasse, som er på nettet og
fortæller ejeren hvornår der er kommet post. Samme gruppe sidder med Cloud server,
der samler tråde fra alle grupper og giver muligheder for indstillinger og aflæsninger
gennem en mobil app.
I går var jeg sammen med de Hollandske elever i AROS og de
fik selvfølgelig set Boy og Regnbuen. Det var hyggeligt og de virkede engageret
og vi snakkede om deres skole, uddannelsens sammensætning og niveau og AROS er
jo perfekt til at komme ind på kunst og kultur. Der vil være flere sociale
arrangementer under besøget.
Der er flere medarbejdere involveret fra AARHUS TECH:
Lene og Rasmus som er inde over kommunikationen og aftaler
med DaVinci og de hollandske undervisere. Flemming som er international
koordinator og Yvette Dyhr tager heldigvis tager sig af papirarbejdet. Endelig
er det mig som håndtere workshoppen og leder slagets gang i hverdagen.
Hass.io laver din Raspberry Pi (eller en anden enhed) til den ultimative hjemmeautomatiserings server drevet af Home Assistant. Med Hass.io kan du fokusere på at integrere dine enheder og skrive automatiseringer.
I dette projekt er der brugt en digital temperatur måler tilkoblet en Raspberry PI.
I projektet er der brugt: Raspberry PI 3 DS18B20 Temperatur Sensor
Afsnit 1: Opsætning
Projektet som denne tutorial er baseret på er opsat som følgende:
1. Der skal i command prompten, indtastes:
sudo nano /boot/config.txt
så skal der i bunden af files indsættes:
dtoverlay=w1–gpio
2. Luk Nano, and genstart Pi’en
sudo reboot
3. Log ind i Pi igen, og igen i the command prompten indtastes:
sudo modprobe w1–gpio
4. indtast så:
sudo modprobe w1-therm
5. skift standard path til /sys/bus/w1/devices path’en ved at indtaste:
cd /sys/bus/w1/devices
6. tilføj så ls til listen af moduler ved at indtaste:
ls
det giver et display som skal have et formatet: 28-XXXXXXXXXXXX med X værende modulets variable identifikations værdig
7. indtast så cd 28-XXXXXXXXXXXX (skift X til værdien du har fået oplyst)
8. indtast
cat w1_slave
det promter et display en en temperaturmåling i rå data givet af sensoren, den specifikke temperatur er givet ved t=xxxxx, formatet skal ses som xx,xxx grader celsius
Afsnit 2: Automatisk måling med logfil
import os
import glob
import time
from time import *
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = int(temp_string) / 1000.0
temp_c = str(round(temp_c, 1))
return temp_c
def write_temp():
with open("/home/pi/temp.csv", "a") as log:
log.write("{0},{1}\n".format(strftime("%d-%m %H:%M"), read_temp()))
while True:
write_temp()
print(read_temp())
sleep(150)
overstående stykke kode er et python program som har funktionen at måle sensorens temperatur hvert tredje minut og derefter nedskrive det i en csv fil på en forbestemt path. målingerne har en følgende struktur:
Afsnit 3: Graf
import dash
import dash_core_components as dcc
import dash_html_components as html
import csv
import sys
with open('temp.csv') as csv_file:
reader = csv.reader(csv_file, delimiter=',')
mylist = list(reader)
x={}
y={)
z=[]
xy=[]
for i in range(len(mylist)):
f = str(mylist[i])
space = ' '
str4f = f.replace("[","").replace("]","").replace("'","").replace(",","").replace(" ","/")
x[i] = str4f[:str4f.index("/")]
y[i] = str4f[str4f.index("/")+1:str4f.rindex("/")]
z.append(float(str4f[str4f.rindex("/")+1:]))
xy.append(str4f[:str4f.index("/")] + space + str4f[str4f.index("/")+1:str4f.rindex("/")])
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Temperatur'),
dcc.Graph(
id='example',
figure={
'data': [
{'x': xy, 'y': z, 'type': 'line', 'name': 'Temps'},
],
'layout': {
'title': 'Temperatur målinger'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
Ved brug af førnævnte csv fil, som indeholder logget data, læses værdierne. Derefter bruges kodestykket: for i in range(len(mylist)): til at konvertere strukturen af de førnævnte værdier, så de er konvertible med Dash. Dash er et python framework der er bruges til at lave grafer. Til sidst definer vi ud fra dash’ forudbestemte muligheder udseendet og lader dash danne grafen på en html side.