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.
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
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