Problem Set #1: TH Sensor

alebo chytrý senzor na meranie teploty a vlhkosti

Ciele

  1. Naučiť sa pracovať s prototypovacou doskou RPi Pico 2 WH
  2. Naučiť sa programovať v jazyku MicroPython
  3. Osvojiť si SOLID princípy pri navrhovaní a programovaní mikrokontroléra
  4. Naučiť sa opísať správanie chytrého zariadenia pomocou stavového stroja
  5. Naučiť sa ukladať citlivé údaje šifrovane

Chytré zariadenia

THSensor: Illustration

Chytré zariadenia, či už senzory alebo akčné členy, sú koncové zariadenia každej IoT infraštruktúry. Jeden typ zariadení je zdrojom údajov (senzory) a druhý typ zariadení je možné na diaľku ovládať pomocou príkazov (akčné členy). Najčastejšie však ide o kombináciu oboch typov - aj senzory dostávajú príkazy (napr. na zmenu nastavení) a rovnako tak aj akčné členy posielajú informácie o svojom stave.

Vašou úlohou je vytvoriť chytré zariadenie v jazyku MicroPython, ktoré bude:

  • v pravidelných časoch odosielať namerané údaje,
  • vedieť prijímať zmeny konfigurácie na diaľku,
  • vedieť byť ovládané na diaľku,
  • obsahovať webové rozhranie na zmenu nastavení,
  • byť reprezentované ako stavový stroj,
  • komunikovať pomocou protokolu MQTT,
  • dbať na bezpečnosť,
  • byť napájané z batérie,
  • byť šetrné k zdrojom.

Zoznam komponentov

Chytré zariadenie sa bude skladať z týchto komponentov:

  • prototypovacia doska RPi Pico 2 WH
  • senzor teploty a vlhkosti DHT11/22
  • hodinový modul DS3231
  • tlačidlo na prebudenie zariadenia, vstup do konfigurácie a obnovenie továrenských nastavení (krátke a dlhé stlačenie)
  • stavová LED dióda NeoPixel (RGB) na signalizáciu aktuálneho stavu zariadenia

Diagram stavov zariadenia

Správanie celého chytrého zariadenia bude reprezentované pomocou stavového stroja. Diagram stavov sa nachádza na nasledujúcom obrázku:

THSensor: State diagram

Význam jednotlivých stavov je nasledovný:

  • Init - Vstupný stav, do ktorého sa zariadenie dostane po stlačení tlačidla alebo po alarme z hodinového modulu (RTC). Overí sa prítomnosť a platnosť súboru /data/settings.json a podľa toho, ako bolo zariadenie prebudené, sa rozhodne o ďalšom postupe: krátke stlačenie tlačidla otvorí Configuration, dlhé stlačenie spustí Factory Reset. Ak nastavenia chýbajú alebo sú poškodené, prejde sa do Configuration. V ostatných prípadoch (bežné prebudenie z RTC alarmu) sa pokračuje stavom Measurement.
  • Configuration - Zariadenie sa sprístupní používateľovi na zmenu nastavení prostredníctvom webového rozhrania (pozri Webové rozhranie). Používateľ tu zadá najmä parametre Wi-Fi siete a pripojenia k MQTT brokerovi.
  • Commissioning - Uvedenie zariadenia do prevádzky. Nastavenia zadané v predchádzajúcom stave sa overia a uložia do /data/settings.json (citlivé údaje šifrovane). Ak niektorá z týchto operácií zlyhá, zariadenie sa vráti späť do stavu Configuration, aby ich používateľ mohol opraviť. Po úspešnom dokončení sa zariadenie ukončí a pri ďalšom prebudení začne znova v stave Init.
  • Measurement - Odčítanie teploty a vlhkosti zo senzora DHT11/22 spolu s časovou značkou z hodinového modulu DS3231. Namerané hodnoty sa uložia do lokálnej pamäte. Kým počet uložených meraní nedosiahne hodnotu batch size, zariadenie prejde rovno do stavu Sleep a šetrí energiu. Po dosiahnutí tejto hodnoty sa pokračuje stavom Connect Network, aby sa dáta odoslali naraz. Ak sa meranie nepodarí, prechádza sa do stavu Error.
  • Connect Network - Pripojenie k Wi-Fi sieti podľa nastavení. Keďže ide o energeticky najnáročnejšiu činnosť, vykonáva sa iba vtedy, keď je čo odosielať. Pri neúspechu (sieť nie je dostupná, nesprávne prihlasovacie údaje, vypršanie časového limitu) sa prechádza do stavu Error.
  • Publish Data - Pripojenie k MQTT brokerovi, odoslanie nazbieraných meraní do témy data a aktualizácia stavu zariadenia v téme status (pozri Podpora MQTT protokolu). Po úspešnom odoslaní sa uložené merania vymažú a pokračuje sa stavom OTA. Pri chybe sa prechádza do stavu Error.
  • OTA - Zmeny zariadenia na diaľku (over-the-air). Keďže je zariadenie už pripojené k sieti a k MQTT brokerovi, je to vhodný okamih na spracovanie všetkého, čo sa mu za čas spánku nazbieralo. Zariadenie tu spracuje správy z tém set (zmena nastavení, teda aj konfigurácie zariadenia) a cmd (príkazy na vzdialené ovládanie) a prípadne stiahne novú verziu firmvéru. Keďže sú tieto správy odoslané s príznakom retain, zariadenie ich dostane hneď po prihlásení na odber, aj keď boli odoslané v čase, keď spalo (pozri MQTT témy). Po spracovaní každej takejto správy ju zariadenie vymaže z brokera - publikuje do rovnakej témy prázdnu správu s príznakom retain - aby ju nespracovalo znova pri ďalšom prebudení. Po skončení sa zariadenie uspí v stave Sleep, pri chybe prechádza do stavu Error.
  • Error - Spracovanie chýb, ktoré vznikli počas merania, pripájania alebo odosielania. Chyba sa zaznamená (napr. do logu a do témy status, ak je to možné) a zariadenie prejde do stavu Sleep, aby sa pri ďalšom prebudení pokúsilo o nový cyklus. Zariadenie sa tak nikdy nezasekne v cykle opakovaných pokusov, ktorý by vybil batériu.
  • Sleep - Koncový stav pravidelného cyklu. Zariadenie nastaví ďalší alarm na hodinovom module a prejde do úsporného režimu (deep sleep). Prebudí ho až RTC alarm alebo stlačenie tlačidla, čím sa celý cyklus začne znova stavom Init.
  • Service Terminal - Servisný režim určený pre vývojára a údržbu. Sprístupní terminál na priame ovládanie zariadenia a ladenie, bez spustenia bežného cyklu merania a odosielania. Po jeho ukončení sa zariadenie zastaví.
  • Factory Reset - Návrat do továrenského nastavenia. Vymažú sa všetky nastavenia a uložené údaje vrátane šifrovaných prihlasovacích údajov, takže pri ďalšom spustení zariadenie nenájde platný settings.json a začne stavom Configuration. Po dokončení sa zariadenie zastaví.

Podpora MQTT protokolu

Keďže je infraštruktúra Smart Department založená na komunikačnom protokole MQTT, aj naše chytré zariadenie bude komunikovať práve pomocou tohto protokolu. Samotná komunikácia však bude mať niekoľko pravidiel.

Konfigurácia

Pri konfigurácii vlastností protokolu MQTT zariadenia nás budú zaujímať nasledujúce vlastnosti:

  • adresa brokera
  • port brokera
  • podpora SSL/TLS
  • prefix témy
  • prihlasovacie údaje (prípadne certifikát pre overenie identity)

Všetky vlastnosti budú dostupné v skupine s názvom mqtt v súbore s nastaveniami /data/settings.json.

MQTT témy

Aby vaše chytré zariadenie vedelo komunikovať v infraštruktúre Smart Department pomocou protokolu MQTT, je potrebné komunikovať pomocou konkrétnych tém. Štruktúra každej témy je záväzná a vyzerá takto:

<prefix>/<type>/<id>/<operation>

Význam jednotlivých častí je nasledovný:

  • <prefix> - Zariadenie chceme vytvoriť univerzálne, aby vedelo komunikovať aj mimo infraštruktúry Smart Department. To zabezpečuje práve tento prefix. V infraštruktúre Smart Department identifikuje umiestnenie zariadenia (buď v konkrétnom laboratóriu, napr. kpi/caprica, alebo v konkrétnej domácnosti, napr. household/ab123cd). Dôležité je, že sa tento prefix použije pred každou témou.
  • <type> - Typ zariadenia, napr. thsensor pre naše chytré zariadenie.
  • <id> - Identifikátor zariadenia. Ak nejde o špeciálne označené zariadenie (napr. predné/zadné dvere), používajte svoj študentský identifikátor v tvare ab123cd.
  • <operation> - Definuje typ operácie. Pre naše zariadenie ide o tieto možnosti:
    • status - stav zariadenia; správa bude mať príznak retain
    • data - namerané dáta
    • set - zmena nastavení zariadenia; správa bude mať príznak retain, zariadenie ju po spracovaní vymaže z brokera
    • cmd - príkaz na vzdialené ovládanie; správa bude mať príznak retain, zariadenie ju po spracovaní vymaže z brokera

Webové rozhranie

Kostra projektu

Aktuálnu kostru projektu si môžete stiahnuť z tejto linky: 2026.9