Skip to content

Hillgrove/Temp-Flow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

113 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌡️ Temp-Flow

.NET EF Core SQL Server Vue.js Python

Temp-Flow er et IoT-baseret overvågningssystem til indeklima. Raspberry Pi-enheder med Sense HAT-sensorer indsamler temperatur, luftfugtighed og lufttryk og sender dataene via UDP til en central backend. Backenden gemmer målingerne i en SQL Server-database og stiller dem til rådighed via en REST API. Et webbaseret frontend giver brugeren et overblik over rum og sensorer med realtidsdata og historiske grafer.


Indholdsfortegnelse


Funktioner

  • Indsamling af sensordata (temperatur, luftfugtighed, lufttryk) via Raspberry Pi Sense HAT
  • Realtidstransmission af sensordata over UDP
  • Automatisk oprettelse af sensorer i databasen ved første registrering
  • REST API med fuld CRUD for rum og sensorer
  • Tildeling af sensorer til rum
  • Historisk visning af sensordata grupperet pr. time
  • Sletning af sensordata ældre end et angivet antal dage
  • Webbaseret dashboard med temperaturgrafer (Chart.js)
  • Swagger/OpenAPI-dokumentation tilgængelig i alle miljøer
  • Emulator til lokal udvikling uden fysisk Sense HAT-hardware

Teknologier

Komponent Teknologi
Backend API ASP.NET Core 8, C#
Datalag Entity Framework Core 9, Repository-pattern
Database Microsoft SQL Server (MSSQL)
UDP-server .NET 8 konsol-applikation
Sensor-klient Python 3, Raspberry Pi Sense HAT
Frontend Vue.js 3, Bootstrap 5, Axios, Chart.js
API-dokumentation Swagger / OpenAPI (Swashbuckle)
Test xUnit, Selenium WebDriver

Arkitektur

flowchart LR
    RPI["Raspberry Pi / Sense HAT"]
    UDP["UDP-Server (port 65000)"]
    DB[("SQL Server")]
    API["REST API"]
    FE["Frontend (Vue.js)"]

    RPI -->|"UDP / JSON"| UDP
    UDP -->|"EF Core"| DB
    DB  -->|"EF Core"| API
    API -->|"HTTP / JSON"| FE
Loading
  1. Raspberry Pi-klienten (UDP_client.py) aflæser sensoren hvert minut og sender dataene som JSON over UDP.
  2. UDP-Serveren modtager pakken, opretter sensoren i databasen hvis den ikke kendes, og gemmer målingen.
  3. REST API'en udstiller endpoints til rum- og sensoradministration samt datahentning.
  4. Frontend kalder API'en og viser temperaturdata, afvigelse fra måltemperatur og historiske grafer.

Kom i gang

Forudsætninger

  • .NET 8 SDK
  • Microsoft SQL Server (lokal instans eller ekstern server)
  • Python 3.x (til Raspberry Pi-klienten)
  • En webbrowser med en lokal HTTP-server (f.eks. Live Server i VS Code) til frontend

Installation af backend

  1. Klon repositoriet:

    git clone <repository-url>
    cd Temp-Flow/Backend
  2. Åbn løsningen Backend.sln i Visual Studio eller byg via CLI:

    dotnet build

Databaseopsætning

Forbindelsesstrengen konfigureres i Backend/DataAccess/EnvironmentSecrets.cs. Opdater _dbConnectionString med din egen SQL Server-forbindelsesstreng:

private string _dbConnectionString = "Server=<server>;Database=<database>;User Id=<user>;Password=<password>;MultipleActiveResultSets=true;";

Kør EF Core-migrations for at oprette databaseskemaet:

cd Backend/DataAccess
dotnet ef database update

Start af services

Start UDP-Serveren (lytter pa port 65000):

cd Backend/UDP-Server
dotnet run

Start REST API'en:

cd Backend/REST_API
dotnet run

Swagger UI er tilgængelig på http://localhost:<port>/swagger.

Opsætning af Raspberry Pi-klient

  1. Installer afhængigheder (pa Raspberry Pi eller i virtuelt miljø):

    cd Raspberry_Pi
    pip install sense-hat
  2. Konfigurer UDP_client.py — sæt BROADCAST_IP til serverens IP-adresse og DEVELOPMENT_MODE = False ved kørsel pa rigtig hardware:

    DEVELOPMENT_MODE = False
    BROADCAST_IP = "<server-ip>"
    PORT = 65000
  3. Kør klienten:

    python UDP_client.py

    Under udvikling bruges DEVELOPMENT_MODE = True, som aktiverer den medfølgende SenseHat-emulator.

Kørsel af frontend

Åbn Frontend/-mappen med en lokal HTTP-server, f.eks. via Live Server i VS Code. API-base-URL'en konfigureres øverst i de enkelte JavaScript-filer:

const baseUrl = 'http://localhost:<port>/api/';

API-oversigt

Vis alle endpoints
MetodeEndpointBeskrivelse
GET/api/RoomsHent alle rum med sensorer og data
POST/api/RoomsOpret nyt rum
GET/api/Rooms/{id}Hent enkelt rum
PUT/api/Rooms/{id}Opdater rum
DELETE/api/Rooms/{id}Slet rum
POST/api/Rooms/{id}/addsensor/{sensorId}Tildel sensor til rum
GET/api/Rooms/{id}/data/recentNyeste sensordata for rum grupperet pr. time
GET/api/SensorsHent alle sensorer
GET/api/Sensors/{id}Hent enkelt sensor
GET/api/Sensors/{id}/dataHent alle data for sensor
GET/api/Sensors/{id}/grouped-by-hourSensordata grupperet pr. time
PUT/api/Sensors/{id}Opdater sensor
DELETE/api/Sensors/{id}Slet sensor
GET/api/SensorDataHent alle sensordata
GET/api/SensorData/{id}Hent enkelt sensordata-post
GET/api/SensorData/recent/{days}Hent data fra de seneste N dage
DELETE/api/SensorData/older-than/{days}Slet data ældre end N dage

Projektstruktur

Temp-Flow/
├── Backend/                        # .NET 8-løsning
│   ├── REST_API/                   # ASP.NET Core Web API
│   │   ├── Controllers/            # RoomsController, SensorsController, SensorDataController
│   │   └── Program.cs              # Konfiguration og DI-registrering
│   ├── UDP-Server/                 # Konsol-applikation til modtagelse af UDP-pakker
│   │   └── Program.cs              # Lytter pa port 65000 og gemmer data i databasen
│   ├── DataAccess/                 # Datalag
│   │   ├── Models/                 # Room, Sensor, SensorData
│   │   ├── DTOs/                   # Dataoverførselsobjekter
│   │   ├── Interfaces/             # IRoomRepository, ISensorRepository
│   │   ├── Repositories/          # Implementationer af repositories
│   │   └── AppDbContext.cs         # EF Core DbContext
│   ├── REST_APITests/              # Unit tests for API-controllers
│   └── DataAccessTests/            # Repository-tests og Selenium UI-tests
├── Frontend/                       # Webapplikation
│   ├── index.html                  # Dashboard
│   ├── rooms.html                  # Rumoversigt og administration
│   ├── sensors.html                # Sensorliste
│   ├── css/                        # Stylesheets
│   └── js/                         # Vue.js applikationslogik
└── Raspberry_Pi/                   # Python sensor-klient
    ├── UDP_client.py               # Sender sensordata via UDP
    └── sense_HAT_emulator.py       # SenseHat-emulator til lokal udvikling

Test

Projektet indeholder to testprojekter:

REST_APITests — Unit tests for API-controllers med mockede repositories:

cd Backend
dotnet test REST_APITests/

DataAccessTests — Tests af repository-laget samt Selenium-baserede UI-tests:

cd Backend
dotnet test DataAccessTests/

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages