https://github.com/piopoc/iot-simulator
https://github.com/piopoc/iot-simulator
bigquery cloudfunctions gcp pubsub
Last synced: 14 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/piopoc/iot-simulator
- Owner: Piopoc
- Created: 2024-11-17T18:49:17.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-13T17:09:08.000Z (10 months ago)
- Last Synced: 2025-03-13T18:28:00.854Z (10 months ago)
- Topics: bigquery, cloudfunctions, gcp, pubsub
- Language: Go
- Size: 24.4 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# IoT Data Viewer & Simulator



Questo progetto è una **web app sviluppata in Go** che permette di:
- visualizzare i dati storici dei dispositivi IoT memorizzati su **Google BigQuery**
- servire un’interfaccia HTML statica per la visualizzazione dei grafici
- eseguire query dinamiche sui dati in base a un `deviceID` e un intervallo temporale
> Il progetto è pensato per supportare scenari di simulazione e visualizzazione di dati IoT in ambienti Cloud.
---
## ⚙️ Architettura del progetto
La struttura del progetto è la seguente:
```
progetto/
├── dataViewer/
│ ├── main.go # Codice Go che gestisce le API REST e serve i file statici
│ ├── go.mod # Modulo Go
│ ├── go.sum
│ └── static/
│ └── index.html # Pagina HTML con grafici e logica frontend
├── README.md
└── .git/ # Repository Git
```
---
## 🛰 Schema architetturale
```
┌──────────────┐ HTTP GET /data/{ID_device}
│ Browser │ ────────────────────────────────▶ ┌────────────┐
│ (index.html) │ │ Server Go │
└──────┬───────┘ JSON response ◀──────────────┤ (main.go) │
│ └────┬───────┘
│ Serve static HTML │
│───────────────────────────────────────────────▶│
│
Query BigQuery
│
▼
┌─────────────────────────┐
│ Google BigQuery │
│ test_fcorradi.DataTable │
└─────────────────────────┘
```
---
## 💻 Tecnologie utilizzate
- **Go** (linguaggio backend)
- **Google BigQuery** (database per la storicizzazione dei dati)
- **HTML / JavaScript** (frontend statico)
- **Cloud SDK (client BigQuery)** per l'interazione con BigQuery
- **HTTP server integrato** (senza framework esterni)
---
## 🚀 Come eseguire il progetto
### Prerequisiti
- Go >= 1.18
- Credenziali Google Cloud configurate (eseguire `gcloud auth application-default login`)
### Avvio
```bash
git clone https://github.com/Piopoc/IoT-simulator.git
cd IoT-simulator/dataViewer
go run main.go
```
Il server partirà sulla porta `8080`. Accedi a:
```
http://localhost:8080/0000
http://localhost:8080/0001
http://localhost:8080/0002
http://localhost:8080/0003
http://localhost:8080/0004
```
---
## 🌐 API e routing
### Interfacce frontend
```
/0000, /0001, /0002, /0003, /0004
```
Servono la pagina `index.html`.
### API REST
```
/data/{ID_device}
/data/{ID_device}/update
```
Restituiscono un JSON con i dati BigQuery relativi al dispositivo.
---
## 🔍 Dettagli tecnici
- Parsing dell'URL per estrarre `ID_device`
- Query parametrica su BigQuery:
```sql
SELECT FORMAT_DATETIME('%Y-%m-%dT%H:%M:%S', Time_creation) AS Time_creation, ID_device, Data_value
FROM test_fcorradi.DataTable
WHERE ID_device = @deviceID AND Time_creation >= @initDate AND Time_creation <= @finalDate
ORDER BY Time_creation ASC
LIMIT 100
```
- `initDate` e `finalDate` hardcoded nel codice:
```
2024-10-02T09:27:21.301391 - 2024-10-25T19:42:32.894262
```
- Restituisce un array JSON:
```json
[
{
"ID_device": "0000",
"Time_creation": "2024-10-03T10:00:00",
"Data_value": "{...}"
},
...
]
```
---
## 📈 Possibili estensioni
- Consentire filtro dinamico via query string (es. `/data/0000?init=...&final=...`)
- Autenticazione / autorizzazione alle API
- Logging avanzato e metriche (es. Prometheus, Grafana)
- Frontend dinamico (React, Vue)
- Deployment su **Cloud Run** o simili
---
## 👨💻 Autore
Progetto sviluppato da **Filippo Corradi**
🎯 Contesto: simulazione e visualizzazione dati IoT in ambiente Cloud per studio e sperimentazione.
---
## 📌 Note
⚠️ **Attenzione:**
Il progetto richiede accesso a BigQuery e configurazione delle credenziali.
La query è limitata a **100 record** per ottimizzazione.
---
## 📝 License
MIT License