Monitorování kvality ovzduší [MONAQ]
Malý backendový systém pro sběr, ukládání a zobrazování dat o kvalitě ovzduší ze senzorů využívajících MQTT. Tento projekt poskytuje rozhraní RESTful API pro obsluhu dat ze senzorů a je dostatečně flexibilní, aby podporoval libovolný frontend, v současné době implementovaný pomocí knihovny Streamlit.
Tento projekt vznikl v rámci dvoutýdenní "praxe" v Datovém centru ústeckého kraje s využitím datové platformy Portabo.
Note
Mějte na paměti, že tento projekt byl vytvořen během dvou týdnů, takže čas byl trochu tlačící. Některé části nebo kód mohly být napsány/udělány lépe.
- MQTT Integrace: Sbírá data ze senzorů kvality ovzduší pomocí protokolu MQTT.
- RESTful API: Poskytuje shromážděná data prostřednictvím rozhraní API založeného na FastAPI.
- UUkládání dat: Používá databázi MariaDB pro ukládání historických dat o kvalitě ovzduší.
- Analýza dat: Provadí vizualizaci a analýzu dat pomocí nástrojů Pandas a Plotly.
- Flexibilní frontend: Poskytuje flexibilní frontendové rozhraní s technologií Streamlit, které lze nahradit jakoukoli jinou technologií.
- Python: Základní jazyk pro backend.
- FastAPI: Pro vytváření rozhraní RESTful API.
- MariaDB: Pro ukládání databáze.
- Docker: Kontejnerizace aplikace.
- Paho-MQTT: Pro komunikaci MQTT.
- Pandas: Pro manipulaci s daty a jejich analýzu.
- Plotly: Pro vytváření interaktivních grafů.
- Streamlit: (Aktuální) Frontend framework.
- Základní znalost programování a Docker technologii.
- Docker a Docker Compose
- MariaDB (nepovinné)
-
Klonování GH Repa:
git clone https://github.com/DEPSTRCZ/MONAQ.git cd MONAQ
-
Konfigurace Docker-Compose:
Přejmenujte soubor
example-docker-compose.yml
nadocker-compose.yml
. Vyplňte všechny proměnné prostředí.Pokud chcete, odkomentujte část MariaDB pro server MariaDB, který lze použít. (Postupujte podle kroku 2.1)
Important
Vendor nemusí být povolen! Pouze shromažďuje data a ukládá je do DB. Pokud tento projekt nechcete opravdu použít a nemáte MQTT, nemusíte jej zapínat.
Note
Pro fungování frontendu je potřeba token MapBox api.
2.1. Nastavení vzorových dat pro databázi.:
- Připojte se k databázi.
- Spusťte/importujte soubor
sample-data.sql
.
To lze provést pomocí HeidiSQL, DBeaver (Nebo pomocí přiloženého PhpMyAdmin, který lze povolit v souboru
docker-compose.yml
.
docker-compose up --build
To je vše! Projekt by měl být k dispozici:
http://localhost:8002/getAllSensors
Načte všechny senzory z databáze spolu s jejich nejnovějšími daty.
{
"count": 2,
"sensors": [
{
"temperature": "28.00",
"updated_at": "2024-05-28T11:42:46",
"sensor_id": 1,
"co2": 852,
"humidity": "43.00",
"loc_lat": "0.000000",
"loc_long": "0.000000"
},
{
"temperature": "26.70",
"updated_at": "2024-05-29T12:12:58",
"sensor_id": 2,
"co2": 724,
"humidity": "40.00",
"loc_lat": "0.000000",
"loc_long": "0.000000"
}
]
}
http://localhost:8002/getSensor/{id}
Načte informace o zadaném senzoru.
{
"sensor_id": 1,
"times_posted": 1,
"last_update": "2024-06-20T15:15:36",
"records": [
{
"sensor_id": 1,
"id": 25423,
"co2": 1891,
"humidity": "36.00",
"loc_lat": "0.000000",
"loc_long": "0.000000",
"temperature": "28.50",
"updated_at": "2024-06-20T15:15:36"
}
]
}
http://localhost:8002/getQualityInfo/{id}
Stáhne informace o kvalitě ze zadaného senzoru. Včetně rozdílů.
{
"humidity": "36.0",
"temperature": "28.5",
"co2": 1915,
"delta_co2": 24,
"delta_humidity": "0.0",
"delta_temperature": "0.0"
}
Současný frontend je implementován pomocí knihovny Streamlit. BackEnd byl vytvořen převážně flexibilní. Měl by tedy fungovat s jakýmkoli backendem.