Distribuirani sistem za prikupljanje i obradu podataka od senzora temperature.
- .NET 8 SDK
- Docker
dotnet-efalat:dotnet tool install --global dotnet-ef --version 8.0.0
git clone git@github.com:ljubogdan/mini-scada.git
cd mini-scadaOvi fajlovi nisu na GitHub-u
src/IngestionService/appsettings.Development.json
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Port=5432;Database=miniscada..." na diskordu je
},
"AesKey": na diskordu je
}src/SensorClient/appsettings.Development.json
{
"ServerUrl": "http://localhost:5000",
"AesKey": na diskordu je
}AES ključ mora biti isti u oba fajla.
sudo docker compose up --build dotnet ef database update \
--project src/Shared/Shared.csproj \
--startup-project src/IngestionService/IngestionService.csprojdotnet run --project src/SensorClient/SensorClient.csprojIli direktno iz foldera sa projektom:
dotnet run -- \
Sensor:Id=44444444-4444-4444-4444-444444444444 \
Sensor:Name=Pera
Na isti način se u komandnoj liniji mogu proslediti svi ostali parametri senzora.
Na mašini klijenta promeni ServerUrl u appsettings.Development.json:
"ServerUrl": "http://<IP_SERVERA>:5000"Pritisni Enter u terminalu gde radi SensorClient - šalje istu poruku ponovo. Server treba da vrati 409 Conflict.
curl -X POST http://localhost:5000/api/sensors/00000000-0000-0000-0000-000000000001/block| Servis | Status | Opis |
|---|---|---|
| IngestionService | Završen (Student 1) | Prima podatke od senzora, upisuje u bazu |
| SensorClient | Završen (Student 1) | Simulira senzore, šalje šifrovane poruke |
| ConsensusService | Student 2 | BFT konsenzus svaki minut |
| NotificationService | Završen (Student 3) | SignalR alarmi u realnom vremenu |
Student 2:
src/ConsensusService/- implementirati BFT algoritam- Fault tolerance - praćenje 5 aktivnih senzora, zamena neaktivnih
- Reports API -
/api/reportsza istorijske podatke
Student 3:
- Kubernetes manifesti
- AES-256 enkripcija svakе poruke
- RSA-2048 digitalni potpis (senzor potpisuje, server verifikuje)
- Anti-replay zaštita - MessageId mora rasti, poruke starije od 30s se odbijaju
- Tajne (lozinke, ključevi) nisu u repozitorijumu