Exemple de MQTT: Temperatures¶
Es disposa d’una xarxa de sensors repartida pel territori que recullen les temperatures en l’indret on estan situades.
La xarxa usa el protocol MQTT per comunicar-se amb un servidor intermediari que implementa el model publicar-subscriure.
Cada sensor publica les temperatures recollides sota el tema «temperatura XXXXX» on XXXXX és el lloc on es recullen. Per exemple, si es recullen a Castelldefels, el tema serà «temperatura Castelldefels»
D’altra banda, hi haurà un programa informa que presentarà per pantalla les dades de temperatura dels municipis que s’hagin demanat en la comanda d’execució. El programa se subscriurà en els temes corresponents als municipis demanats i manitguts pel servidor intermediari.
L’esquema de l’aplicació es mostra en el següent diagrama:
L’aplicació constarà dels següents processos:
Un programa sensor que simularem mitjançant una funció aleatòria
random.uniform()
que anirà donant nombres dins d’un rang de temperatures indicat l’activar el programa.El programa informa s’apunta als temes indicats en la comanda que l’activa, i presenta periòdicament a pantalla l’actualització de cada tema (temperatures d’un indret)
Els programes es comuniquen via el protocol MQTT. Vegeu la nota Comunicació entre processos via MQTT sobre exercicis que usen aquest protocol.
Sensor¶
En el fitxer sensor.py
(mòdul sensor
) dissenyarem la següent funció:
- sensor.sensorTemperatura(intermediari='localhost', mesura='temperatura', indret='Barcelona', tmin=20.0, tmax=21.0)¶
- Parameters:
Un cop connectat amb el servidor intermediari ubicat a l’adreça d’internet intermediari, simula el recull de mesures mitjançant la generació de nombres aleatoris dins d’un rang de mesures tmin,`tmax`. Cada segon publica al servidor intermediari la nova mesura generada dins del tema mesura + indret.
També prepararem el mòdul per que pugui executar-se com un programa amb els seus paràmetres tal com s’indica a continuació.
Execució de sensor¶
Per executar el programa sensor escriurem:
python3 sensor.py localhost temperatura Barcelona 20 21
On els arguments de la línia corresponen per ordre als dels paràmetres de la funció sensor.sensorTemperatura()
Informa¶
Mòdul informa
:
- informa.informador(intermediari='localhost', nom='Tauler', mesura='temperatura', *llocs)¶
Note
Disposeu d’una solució en sensor.py
i informa.py