Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

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