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:

../../../../_images/temperatures.svg

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:
  • intermediari (str) – adreça d’internet on es troba el servidor broker.

  • mesura (str) – nom de la mesura a realitzar

  • indret (str) – nom del lloc on s’efectúa la mesura

  • tmin (float) – mesura mínima

  • tmax (float) – mesura màxima

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:

class informa.Tauler(nom)

Bases: object

__init__(nom)
__str__()

Return str(self).

informa.informador(intermediari='localhost', nom='Tauler', mesura='temperatura', *llocs)

Note

Disposeu d’una solució en sensor.py i informa.py