Miniprojekty

Cílem miniprojektů je vytvořit komplexní IoT aplikaci, na které bude možné experimentálně ověřit probírané technologie a postupy.

Miniprojekty je možné odevzdat do konce 14. týdne (24.5. 2024), preferujeme dřívější odevzdání :-)
Miniprojekty by měly být odevzdány prostřednictvím fakultního gitlabu, případně jiné služby, např. GitHub. Vždy he třeba, aby byl projekt dostupný, v případě fakultního repozitáře bude mít nastavenou viditelnost buď internal nebo public. Do BRUTE pak nahrajte do příslušného miniprojektu (MP01, MP02, …) textový soubor s linkem na implementaci miniprojektu, případně doplňující informace.

Zadání 1. miniprojektu

Navrhněte Flask aplikaci pro sledování teploty s pomocí knihovny Bootstrap a template enginu Jinja. Projekt vytvořte s pomocí virtuálního prostředí (viz cv01) a následně jej nahrajte na fakultní Gitlab. Do BRUTE následně nahrajte odkaz na tento repozitář, který bude mít nastavenou viditelnost buď internal nebo public.

  • V aplikaci budou existovat tři stránky: přihlašovací formulář, registrační formulář, dashboard.
  • Aplikace bude využívat dědičnost šablon pro navbar a tělo stránky.
  • V navbaru bude uveden: název stránky, název přihlášeného uživatele (zatím libovolný text, který se bude předávat šablon jako proměnná), tlačítko pro odhlášení.
  • Na stránce dashboard vytvořte layout z komponent knihovny Bootstrap. V layoutu musí být zohledněna oblast pro:
    • výpis poslední naměřené hodnoty s časem zápisu,
    • výpis tabulky X posledních naměřených hodnot s časem zápisu a ovládacím prvkem pro proměnnou X,
    • ovládací prvek pro smazání Y prvních (nejstarších) hodnot,
    • další komponenty dle vašeho uvážení (např. graf průběhu teploty v závislosti na čase, zobrazení počtu dat, apod.)
  • Naměřené hodnoty simulujte Python slovníkovým seznamem definovaným v serverové aplikaci (alespoň 5 záznamů {“timestamp”: value, “temp”: value}).

Zadání 2. miniprojektu

Implementujte do stávající Flask aplikace REST API

  • URI endpointy pro API oddělte od ostatních endpointů do vlastního api_routes.py souboru.
  • Endopointy budou mít prefix /api/<api endpoint>.

Funkce API:

  • Vložení hodnoty {“timestamp”: value, “temp”: value} pomocí vhodně zvolené metody. Hodnotu timestamp můžete generovat automaticky na serveru.
  • Získání poslední hodnoty {“timestamp”: value, “temp”: value}.
  • Získání posledních X naměřených hodnot.
  • Smazání nejstarších Y naměřených hodnot.
  • Další funkce dle vašeho uvážení

Odevzdání:

  • Ukázat funkční aplikaci na cvičení,
  • Nahrát na fakultní GitLab (commit již existujícího projektu),
  • Do brute nahrát url na commit.

Zadání 3. miniprojektu

Rozšiřte svou aplikaci o SQLite databázi. Hodnoty místo slovníkového seznamu ukládejte do tabulky v databázi. Dokončete systém přihlašování a registrace uživatelů.

  • Unordered List ItemDatabáze bude mít alespoň 2 tabulky: data, users
  • V tabulce data se budou nacházet (zatím nasimulované - náhodné) hodnoty teploty (datový typ = REAL) a timesptamp ve standardním formátu.
  • V tabulce data se budou nacházet záznamy uživatelů. Heslo uživatele nesmí být ve formě otevřeného textu - použijte libovolný šifrovací mechanizmus (např. sha256)
  • Pro práci s databází použijte modul sqlite3 nebo flask-SQLAlchemy
  • Nezapomeňte otestovat funkčnost přístupu k databázi jak prostřednictvím webové aplikace, tak i vašeho API

V tuto chvíli by měla být vaše aplikace hotová a pro budoucí úkoly by nemělo být nutné aplikaci nijak upravovat.

Odevzdání:

  • Ukázat funkční aplikaci na cvičení,
  • Nahrát na fakultní GitLab (commit již existujícího projektu),
  • Do brute nahrát url na commit.

Zadání 4. miniprojektu

Naprogramujte Raspberry Pi Pico tak, aby s intervalem 20 sekund vygenerovalo náhodnou hodnotu datového typu Real (simulace měření teploty). Tuto hodnotu zapište na sériové rozhraní, odkud to flask aplikace přečte a zapíše do databáze.

Data by měla být dostupná pomocí REST API, nebo UI, které jsou naprogramované na vašem webovém serveru.

BONUS:

  • Vyzkoušejte obousměrnou komunikaci. Např. pomocí webového rozhraní měnte periodu generování dat v rpi
  • Implementujte kontrolu komunikace - pokud po 20 sekundách nepříjde nová hodnota, zobrazte na webu varování.

Zadání 5. miniprojektu

Rozšiřte svou IoT platformu o podporu MQTT komunikace přes internet. Vytvořte program pro Raspberry Pi Pico W který se přípojí k dostupné Wi-Fi sítí pomocí které bude Pico publikovat zprávy s daty (timestamp, teplota) do MQTT topicu. Z tohoto topicu bude Flask aplikace odebírat zprávy nad kterými provede kontrolu, zda jsou ve správném formátu. Pokud budou data správně formátovaná, pak se uloží do databáze a budou dostupna skrze webové rozhraní i REST API.

MQTT komunikace NENAHRAZUJE UART komunikaci. Bude možné posílat data jak prostřednictvím MQTT, tak i UART.

Bonus:

  • Vytvořte obousměrnou komunikaci tak, aby bylo možné měnit periodu odesílání dat z Raspberry Pi
  • Do webového rozhraní implemetujte indikaci komunikace na rozhraní. Na webovém rozhraní bude zobrazeno, jaké komunikační rozhraní je aktivní (UART, MQTT) a kdy z daného rozhraní přišla poslední data

Zadání 6. miniprojektu

courses/b0b37nsi/miniprojects/start.txt · Last modified: 2024/04/03 12:37 by spicajak