Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)

De binefa.com
Salta a la navegació Salta a la cerca

Dins de la vostra Carpetes compartides 2n de DAM. Curs 2020-2021, feu una carpeta anomenada 3rT_dam2021-Cognom1Cognom2Nom. Dins d'aquesta carpeta feu subcarpetes amb noms ex3.1, ex3.2, ... A dins, haureu de posar el vostre arxiu pdf explicatiu i els codis necessaris per a desenvolupar cada exercici.

ex3.1) Exercici d'introducció a les bases de dades temporals. Ús de l'InfluxDB 2.0[modifica]

Flux NodeRED d'escriptura d'una dada aleatòria a InfluxDB a l'organització Clot al bucket aleatori/v1

Codi Flux per a la graficació a Grafana:

from(bucket: "aleatori/v1")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)

Expliqueu com es poden emmagatzemar dades a InfluxDB 2.0 emprant NodeRED i com es poden visualitzar emprant el mateix servei web d'InfluxDB 2.0

ex3.2) Visualització a Grafana de les dades emmagatzemades a una base de dades temporal[modifica]

  • Visualitzeu a Grafana les dades de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir missatgeria MQTT amb un broker públic. Gestioneu les dades amb NodeRED emmagatzemant-les a una base de dades temporal InfluxDB v2.0. Visualitzeu les dades a un panell de gràfiques emprant Grafana.
  • Visualitzeu a Grafana les dades de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir missatgeria MQTT amb un broker local (a la vostra màquina base o màquina virtual). Gestioneu les dades amb NodeRED emmagatzemant-les a una base de dades temporal InfluxDB v2.0. Visualitzeu les dades a un panell de gràfiques emprant Grafana.

ex3.3) Pont d'HTTP a MQTT[modifica]

  • Mitjançant navegador web encén i/o apaga qualsevol led de la placa IoT-02 connectada a un broker MQTT. Feu servir com a pont el NodeRED.
  • Mitjançant curl al terminal encén i/o apaga qualsevol led de la placa IoT-02 connectada a un broker MQTT. Feu servir com a pont el NodeRED.

ex3.4) Presa de contacte amb FreeRTOS[modifica]

Fent servir la placa IoT-02 feu un programa amb dues tasques. Una tasca farà que el led groc faci pampallugues (500ms encés i 500ms apagat). Una altra tasca llegirà el botó I35, fent que quan estigui premut el cicle del led groc sigui de 100ms encés i 100ms apagat.

ex3.5) Presa de contacte amb LoRaWAN[modifica]

Expliqueu com donar-vos d'alta a The Things Network i com heu adjuntat la vostra placa IoT-02 com a una aplicació d'aquest servei.

A un NodeRED funcionant des del terminal (no com a servei. Precisament, com ho fem a classe) dóna errors d'execució al fer servir els nodes instal·lats com a node-red-contrib-ttn (nodes oficials de TheThingsNetwork o TTN). També es veu que des de fa dos anys no s'ha fet manteniment d'aquests nodes. Degut a això es tractaran les trames emeses pels dispositius LoRaWAN com a missatges MQTT.

A una aplicació anomenada dam2021-cognom1_cognom2_nom afegiu-hi un dispositiu anomenat dam2021-cognom1_cognom2_nom-0001. Al NodeRED caldrà introduir aquestes dades:

Broker: eu.thethings.network

Port: 1883

Security / Username: dam2021-cognom1_cognom2_nom (el nom de l'aplicació a TTN)

Security / Password: ttn-account-v2.LVh3FzICF-3yhHe__no__es__la__que__toca__yPaQ3kEJ9uiCNkyPkGM (default key d'ACCESS KEYS)

Tema (Topic): dam2021-Cognom1Cognom2Nom/devices/dam2021-cognom1_cognom2_nom-0001/up (tema de pujada o uplink)


El missatge arriba com a text, es converteix a json i hi ha els temes: app_id, dev_id, hardware_serial, port, counter, payload_raw (codificat en base 64) i metadata. Dins de metadata: time, frequency, modulation, data_rate, airtime, coding_rate i gateways. Dins de gateways: les passarel·les que han captat el missatge LoRa començant per 0. I dins de cada passarel·la: gtw_id, timestamp. time, channel, rssi, snr, rf_chain, latitude, longitude i altitude.

ex3.5.1) Poseu en marxa una aplicació fent servir OTAA[modifica]

Exemple de microprogramari per a la placa IoT-02 de comunicació LoRaWAN amb OTAA

Codi de NodeRED per a rebre missatges LoRaWAN amb OTAA

ex3.5.2) Poseu en marxa una aplicació fent servir ABP[modifica]

Feu un nou dispositiu anomenat dam2021-Cognom1Cognom2Nom-0002. Quan canvieu d'OTAA a ABP desactiveu la casella Frame Counter Check.

ex3.5.2.1) Exemple bàsic de comunicació LoRaWAN amb ABP[modifica]

Exemple bàsic de microprogramari per a la placa IoT-02 de comunicació LoRaWAN amb ABP

Codi de NodeRED per a rebre missatges LoRaWAN amb ABP

ex3.5.2.2) Exemple de comunicació LoRaWAN amb ABP trametent un nombre real[modifica]

Exemple de microprogramari per a la placa IoT-02 de comunicació LoRaWAN amb ABP trametent un nombre real

ex3.5.2.3) Exemple de comunicació LoRaWAN amb ABP trametent tres nombres reals[modifica]

Exemple de microprogramari per a la placa IoT-02 de comunicació LoRaWAN amb ABP trametent tres nombres reals

Codi de NodeRED per a rebre tres nombres reals LoRaWAN amb ABP

ex3.5.3) Desxifreu els 3 floats des de NodeRED[modifica]

Desxifreu els 3 floats des de NodeRED, fent servir l'aplicació ABP dam2021-Cognom1Cognom2Nom-0002

ex3.5.4) Tramesa del nivell de l'LDR fent servir ABP[modifica]

Expliqueu un microprogramari mínim per a la placa IoT-02 que tramet les dades llegides a la fotoresistència (LDR). Expliqueu un flux mínim de NodeRED per a capturar les dades rebudes emprant LoRaWAN fent servir ABP.

ex3.5.5) Tramesa del nivell de l'LDR fent servir OTAA[modifica]

Expliqueu un microprogramari mínim per a la placa IoT-02 que tramet les dades llegides a la fotoresistència (LDR). Expliqueu un flux mínim de NodeRED per a capturar les dades rebudes emprant LoRaWAN fent servir OTAA.

ex3.6) Ús de LoRaWAN per la tramesa de dades[modifica]

ex3.6.1) Tramesa OTAA d'un conjunt de dades llegides als sensors de la placa IoT-02[modifica]

Emprant OTAA, visualitzeu a Grafana les dades de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir LoRaWAN trametent al rerefons de The Things Network, NodeRED emmagatzemarà les dades rebudes mitjançant LoRaWAN a una base de dades temporal. Visualitzeu les dades mitjançant el visualitzador web Grafana.

ex3.6.2) Tramesa ABP d'un conjunt de dades llegides als sensors de la placa IoT-02[modifica]

Emprant ABP, visualitzeu a Grafana les dades de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir LoRaWAN trametent al rerefons de The Things Network, NodeRED emmagatzemarà les dades rebudes mitjançant LoRaWAN a una base de dades temporal. Visualitzeu les dades mitjançant el visualitzador web Grafana.

ex3.7) ZeroTier[modifica]

Ús de ZeroTier: Configuració d'una VPN emprant ZeroTier

ex3.8) Ascensor[modifica]

ex3.8.1) Des del mòbil[modifica]

Feu les modificacions necessàries a ascensor.xml per a controlar l'ascensor des del vostre telèfon mòbil (Feu servir una aplicació com MQTT Dash o una de pròpia feta per vosaltres). (Snap! sense SSL)

Exemple dús d'MQTT amb sòcols web

Més exemples d'interacció entre la placa IoT-02 i sòcols web: Nodes sensors (motes) i passarel·les (gateways)

ex3.8.2) Des de la placa IoT-02[modifica]

Aprofiteu els canvis realitzats abans per a canviar de pis des dels botons de la vostra placa IoT-02 i que cada led correspongui a un pis (Per exemple, assigneu, quan arribi l'ascensor: planta 0 -> verd, planta 1 -> groc, planta 2 -> vermell. I mentre canvia de pis el led blanc fa pampallugues).

ex3.9) Examen del curs 2018-2019[modifica]

Examen 18-19 Feu fins a la pregunta 16.

Ajuda: Codi UDP per a la placa IoT-02

ex3.10) Tasca de connexió a MQTT fent servir FreeRTOS[modifica]

Aprofiteu l'enunciat de l'exercici 3.4: Fent servir la placa IoT-02 feu un programa amb dues tasques. Una tasca farà que el led groc faci pampallugues (500ms encés i 500ms apagat). Una altra tasca llegirà el botó I35, fent que quan estigui premut el cicle del led groc sigui de 100ms encés i 100ms apagat.

ex3.10.1) Connexió a WiFi i un broker MQTT[modifica]

Afegiu una tasca per a fer connexió a WiFi i MQTT. Us podeu basar en el codi present a IoT-02_mqtts_freeRTOS_json_12. Afegiu-hi també un #define USING_WIFI per saber si cal que funcionin totes aquelles funcions que tenen relació amb la wifi. Feu servir també una variable booleana bSocConnectat (que serà certa quan hi hagi connexió i falsa quan no s'hagi establert la connexió o s'hagi perdut -quan es perd la IP que s'autollegeix és 0.0.0.0-).

ex3.10.2) Publicació[modifica]

Si bSocConnectat és certa, publica el canvi d'estat del botó quan es prem I35.

ex3.10.3) Subscripció[modifica]

Quan feu la connexió a MQTT, afegiu una subscripció al tema /MAC/led (essent MAC la MAC de la vostra placa). Si rebeu per aquest tema un '1', 'On','on' o 'ON' s'ha d'encendre el led blanc. Si rebeu '0', 'Off', 'off' o 'OFF' s'apaga el led blanc.

ex3.11) Teleprogramació de la placa IoT-02 fent servir OTA[modifica]

És un recull de la pràctica feta a classe:

  • Teleprogramació des de la xarxa local
  • Teleprogramació des de l'ordinador a la vora (edge)
  • Teleprogramació des de l'ordinador al núvol (cloud)

ex3.12) OpenMPI[modifica]

ex3.12.1) Instal·lació de l'OpenMPI

sudo apt install openmpi-common openmpi-bin libopenmpi3 libopenmpi-dev

ex3.12.2) Presa de contacte. Compilació:

mpiCC helloWorld02.cpp -o helloWorld02

Execució:

mpirun -np 2 helloWorld02

Per a executar més processos:

 mpirun -np 4 helloWorld02

Si dóna problemes per manca d'osques (slots):

mpirun -np 4 --oversubscribe helloWorld02

o fem un arxiu my-localhost:

cat my-hostfile 

localhost slots=4

i es pot executar:

mpirun -np 4 --hostfile my-hostfile helloWorld02