π AttivitΓ DomoApp
Suddivisione delle attivitΓ per gruppo β Progetto Domotica I.I.S. Volta Frosinone
DomoApp Γ¨ un'applicazione di domotica che i ragazzi dovranno sviluppare lavorando in gruppi. Ogni gruppo si occupa di un'area funzionale specifica. La scheda ElioKit (basata su ESP32-S3) viene controllata tramite comandi MQTT inviati dall'applicazione. L'SDK Java mette a disposizione metodi pronti per interagire con sensori, LED, buzzer, fotocamera e audio della scheda.
ποΈ Architettura del Progetto
Il sistema Γ¨ composto da tre elementi principali:
- Scheda ElioKit (ESP32-S3) β il dispositivo fisico con sensori, LED, buzzer, speaker, fotocamera. Comunica via MQTT.
- Broker MQTT (Mosquitto) β il server di messaggistica che fa da ponte tra l'app e la scheda.
- Applicazione Web (Spring Boot) β l'interfaccia utente che i ragazzi del Gruppo 4 svilupperanno, che invia comandi e riceve dati dalla scheda.
βββββββββββββββββββ MQTT ββββββββββββββββ MQTT βββββββββββββββββββ
β App Web (Java) β βββββββββββββββΆ β Broker β βββββββββββββββ β Scheda ElioKit β
β Spring Boot β βββββββββββββββ β Mosquitto β βββββββββββββββΆ β ESP32-S3 β
βββββββββββββββββββ ββββββββββββββββ βββββββββββββββββββ
Gruppo 4 Gruppi 1, 2, 3 (logica)
π΄ Gruppo 1 β Sicurezza
GRUPPO 1Il Gruppo 1 si occupa delle funzionalitΓ di sicurezza della casa: rilevamento terremoti, allarmi fumo/incendio e sorveglianza tramite rilevamento del movimento con scatto foto automatico.
π AttivitΓ 1.1 β Allarme Terremoto
Obiettivo
Rilevare un evento sismico analizzando i dati del giroscopio e dell'accelerometro della scheda. Quando viene rilevato un movimento anomalo (vibrazione), attivare un segnale di allarme composto da bip sonori e luci rosse lampeggianti. L'allarme si disattiva automaticamente quando il movimento cessa.
Passi per lo sviluppo
- Leggere i dati del giroscopio β Utilizzare il metodo SDK per leggere i valori degli assi X, Y, Z dal sensore giroscopico. Il metodo restituisce i dati in formato JSON.
- Definire una soglia di attivazione β Stabilire un valore soglia (ad esempio, accelerazione > 1.5g o variazione angolare > 50Β°/s) oltre il quale il sistema considera il movimento come "anomalo". Sperimentare con la scheda per trovare il valore migliore.
- Polling periodico β Implementare un loop (o un timer schedulato) che legge i valori del giroscopio ogni 100-200 ms per avere una rilevazione reattiva.
- Attivare l'allarme sonoro β Quando la soglia viene superata, utilizzare il metodo SDK per attivare il buzzer con una frequenza allarmante (es. 2000 Hz, durata 300 ms, ripetuto).
- Attivare le luci rosse lampeggianti β Accendere i LED in rosso (R=255, G=0, B=0), spegnere dopo 300 ms, riaccendere dopo 300 ms, creando un effetto lampeggiante.
- Disattivare l'allarme β Quando le letture del giroscopio tornano sotto la soglia per almeno 2-3 secondi consecutivi, spegnere buzzer e LED.
Suggerimenti tecnici
- Usare un filtro a media mobile (media degli ultimi N campioni) per evitare falsi positivi da singoli picchi isolati.
- Testare l'allarme scuotendo fisicamente la scheda e osservando la pagina Test MQTT per vedere i valori raw del giroscopio.
- Prevedere un comando MQTT per abilitare/disabilitare il monitoraggio sismico dall'app web.
π₯ AttivitΓ 1.2 β Allarme Fumo / Incendio
Obiettivo
Monitorare la qualitΓ dell'aria rilevata dal sensore della scheda. Quando i livelli indicano la presenza di fumo o gas, attivare un allarme con bip sonori e luci rosse lampeggianti. L'allarme si disattiva quando la qualitΓ dell'aria torna ai livelli normali.
Passi per lo sviluppo
- Leggere i dati del sensore di qualitΓ dell'aria β Utilizzare il metodo SDK appropriato per ottenere i valori del sensore ambientale. I dati includono indicatori di qualitΓ dell'aria (TVOC, eCO2, ecc.).
- Definire le soglie di allarme β Stabilire i livelli critici: ad esempio, TVOC > 500 ppb o eCO2 > 1000 ppm. Consultare le specifiche del sensore per i range normali.
- Polling periodico β Leggere il sensore ogni 1-2 secondi. La qualitΓ dell'aria cambia piΓΉ lentamente rispetto alle vibrazioni, quindi un intervallo piΓΉ lungo Γ¨ sufficiente.
- Attivare l'allarme β Come per il terremoto: buzzer con bip intermittenti + LED rossi lampeggianti.
- Livelli di gravitΓ β Implementare almeno 2 livelli: attenzione (LED arancioni, bip lento) e pericolo (LED rossi, bip veloce).
- Disattivare l'allarme β Quando i valori scendono sotto la soglia per almeno 10 secondi consecutivi.
Suggerimenti tecnici
- Il sensore potrebbe necessitare di un breve periodo di riscaldamento (warm-up) dopo l'accensione. Le prime letture potrebbero non essere accurate.
- Implementare un log storico dei valori letti, utile per il debug e per visualizzarli nell'app web (Gruppo 4).
- Prevedere un comando per impostare le soglie da remoto, così il Gruppo 4 potrà inserire un pannello di configurazione.
πΈ AttivitΓ 1.3 β Rilevamento Movimento con Foto e Notifica WhatsApp
Obiettivo
Quando viene rilevato un movimento in casa, la scheda deve scattare 3 foto in rapida successione e inviare un segnale di allarme via WhatsApp utilizzando le API GREEN-API.
Passi per lo sviluppo
- Rilevare il movimento β Utilizzare i dati del giroscopio/accelerometro (come nell'attivitΓ 1.1) oppure, se disponibile, un sensore PIR. Definire una soglia specifica per il "movimento in casa" (diversa da quella sismica).
- Scattare 3 foto β Al rilevamento, invocare il metodo SDK per scattare una foto. Ripetere 3 volte con un breve intervallo (es. 500 ms tra uno scatto e l'altro) per catturare sequenze dell'evento.
- Configurare GREEN-API β Registrarsi su green-api.com e ottenere le credenziali (ID istanza e token). GREEN-API permette di inviare messaggi WhatsApp tramite chiamate HTTP REST.
- Inviare la notifica WhatsApp β Effettuare una chiamata HTTP POST all'endpoint GREEN-API per inviare un messaggio contenente:
- Testo di allarme: "β οΈ ALLARME: Movimento rilevato in casa! Ora: HH:MM:SS"
- Le 3 foto scattate come allegati (inviarle come file o come URL se vengono salvate su un server)
- Anti-spam β Implementare un cooldown di almeno 30-60 secondi tra un allarme e l'altro per evitare invii multipli ravvicinati.
Esempio chiamata GREEN-API
// Endpoint per inviare messaggio di testo
POST https://api.green-api.com/waInstance{ID}/sendMessage/{TOKEN}
Content-Type: application/json
{
"chatId": "39XXXXXXXXXX@c.us",
"message": "β οΈ ALLARME: Movimento rilevato in casa!\nOra: 14:35:22\nFoto in arrivo..."
}
// Endpoint per inviare un file/immagine
POST https://api.green-api.com/waInstance{ID}/sendFileByUrl/{TOKEN}
Content-Type: application/json
{
"chatId": "39XXXXXXXXXX@c.us",
"urlFile": "https://url-della-foto.jpg",
"fileName": "allarme_foto_1.jpg",
"caption": "Foto 1 - Movimento rilevato"
}
Suggerimenti tecnici
- Salvare le credenziali GREEN-API in un file di configurazione, non hardcoded nel sorgente.
- Per inviare le foto via GREEN-API come URL, Γ¨ necessario prima caricarle su un server accessibile (o usare l'endpoint
sendFileByUploadper invio diretto). - Testare il flusso completo: movimento β foto β invio β ricezione su WhatsApp.
π Gruppo 2 β Gestione Luci
GRUPPO 2Il Gruppo 2 si occupa del sistema di illuminazione intelligente: accensione automatica basata sulla luminositΓ ambientale, programmazione oraria, attivazione su movimento e scelta del colore.
π‘ AttivitΓ 2.1 β Accensione Automatica (Sensore di LuminositΓ )
Obiettivo
Le luci si accendono automaticamente quando il sensore rileva che la luminositΓ ambientale Γ¨ bassa (ad esempio al tramonto o in una stanza buia), e si spengono quando la luminositΓ torna sopra la soglia.
Passi per lo sviluppo
- Leggere il sensore di luminositΓ β Utilizzare il metodo SDK per ottenere il valore di lux dall'ambiente. Il sensore restituisce un valore numerico (piΓΉ alto = piΓΉ luce).
- Definire la soglia di attivazione β Sperimentare con il sensore: ad esempio, soglia = 100 lux. Sotto questa soglia β luci accese; sopra β luci spente.
- Isteresi β Per evitare sfarfallio (luci che si accendono e spengono continuamente al confine della soglia), usare due soglie: accensione sotto 80 lux, spegnimento sopra 120 lux.
- Polling β Leggere il sensore ogni 2-5 secondi. Non serve una frequenza alta perchΓ© la luminositΓ cambia lentamente.
- Accendere i LED β Quando la soglia viene superata, accendere tutti i LED con un colore bianco caldo (es. R=255, G=200, B=100) o il colore scelto dall'utente (vedi attivitΓ 2.4).
- Spegnere i LED β Quando la luminositΓ risale, spegnere i LED con una transizione graduale (opzionale ma elegante).
Suggerimenti tecnici
- Esporre la soglia come parametro configurabile dall'app web, così il Gruppo 4 può creare uno slider nell'interfaccia.
- Inviare un messaggio MQTT con il valore di luminositΓ corrente, utile per il Gruppo 4 per visualizzare un grafico.
β° AttivitΓ 2.2 β Timer Luci (Programmazione Oraria)
Obiettivo
Permettere all'utente di impostare un orario di accensione e un orario di spegnimento delle luci. Ad esempio: accensione alle 18:30, spegnimento alle 23:00.
Passi per lo sviluppo
- Ricevere i parametri via MQTT β Definire un topic MQTT (es.
domoapp/luci/timer) sul quale l'app invia un payload JSON:{ "accensione": "18:30", "spegnimento": "23:00", "colore": { "r": 255, "g": 200, "b": 100 }, "attivo": true } - Gestire l'orologio β La scheda deve conoscere l'ora corrente. Verificare se la scheda si sincronizza via NTP all'avvio, oppure ricevere l'ora dal server.
- Confronto orario β Ogni minuto, confrontare l'ora corrente con gli orari impostati. Se l'ora corrente Γ¨ compresa nel range β luci accese; altrimenti β spente.
- Gestire il caso "a cavallo della mezzanotte" β Se accensione=22:00 e spegnimento=06:00, il range attraversa la mezzanotte. Gestire questo caso speciale.
- Persistenza β Salvare le impostazioni del timer in modo che sopravvivano a un riavvio della scheda (opzionale, ma utile).
πΆ AttivitΓ 2.3 β Accensione Luci su Movimento
Obiettivo
Le luci si accendono automaticamente quando viene rilevato un movimento (ad esempio, una persona entra in una stanza). Dopo un periodo di inattivitΓ , le luci si spengono.
Passi per lo sviluppo
- Rilevare il movimento β Utilizzare l'accelerometro/giroscopio come trigger di prossimitΓ . In alternativa, se si scatta una foto periodica, usare un confronto rudimentale tra due frame successivi.
- Accendere le luci β All'evento di movimento, accendere i LED immediatamente.
- Timeout di spegnimento β Avviare un timer (es. 2 minuti). Se non viene rilevato ulteriore movimento entro il timeout, spegnere le luci.
- Reset del timer β Se viene rilevato nuovo movimento mentre le luci sono accese, resettare il countdown del timeout.
- Timeout configurabile β L'utente deve poter impostare la durata del timeout dall'app web (30 sec, 1 min, 2 min, 5 minβ¦).
Suggerimenti tecnici
- Questa funzionalitΓ puΓ² entrare in conflitto con l'accensione automatica (attivitΓ 2.1) e il timer (attivitΓ 2.2). Definire delle prioritΓ : ad esempio, il timer manuale ha la prioritΓ piΓΉ alta, poi il movimento, poi la luminositΓ .
π¨ AttivitΓ 2.4 β Scelta Colore delle Luci
Obiettivo
L'utente puΓ² scegliere il colore delle luci tramite l'app web. Il colore scelto viene applicato a tutte le modalitΓ di accensione (automatica, timer, movimento).
Passi per lo sviluppo
- Definire il topic MQTT per il colore β Ad esempio
domoapp/luci/colorecon payload:{ "r": 255, "g": 100, "b": 50 } - Applicare il colore β Quando si riceve il comando, memorizzare i valori RGB e utilizzarli come colore predefinito ogni volta che i LED vengono accesi.
- Colori predefiniti β Offrire una palette di colori preimpostati: bianco caldo, bianco freddo, rosso relax, blu notte, verde natura, ecc. Definire i valori RGB per ciascuno.
- Anteprima β Quando l'utente seleziona un colore dall'app, accendere momentaneamente i LED con quel colore per 3 secondi come anteprima.
- Effetti (bonus) β Implementare effetti speciali: rainbow (scorrimento colori), pulsazione lenta, disco (colori random veloci).
Suggerimenti tecnici
- Coordinarsi con il Gruppo 4 per il color picker nell'interfaccia web: l'ideale Γ¨ un widget HTML5
<input type="color">che restituisce valori esadecimali da convertire in RGB. - Memorizzare l'ultimo colore scelto in modo persistente per non perderlo al riavvio.
π£ Gruppo 3 β Intrattenimento
GRUPPO 3Il Gruppo 3 si occupa delle funzionalitΓ di intrattenimento domestico: radio in streaming, sveglia programmabile, timer con segnale acustico/visivo e invio di messaggi vocali alla casa.
π» AttivitΓ 3.1 β Radio in Streaming
Obiettivo
Permettere l'ascolto della radio in streaming dalla scheda ElioKit, con tutti i controlli: cambio stazione, regolazione volume, accensione e spegnimento.
Passi per lo sviluppo
- Lista stazioni radio β Creare un elenco di URL di stream radio (formato MP3/AAC). Esempi:
// Stazioni radio italiane in streaming RTL 102.5: http://streamingv2.shoutcast.com/rtl1025 Radio Deejay: https://streamcdnm10-dd782ed59e2a4e86aabf6fc508674b59.msvdn.net/live/S97044836/chunklist.m3u8 RDS: http://stream.rds.it/rds Radio 105: http://icecast.unitedradio.it/Radio105.mp3 - Avviare la radio β Utilizzare il metodo SDK per avviare lo streaming audio passando l'URL della stazione selezionata.
- Cambio stazione β Fermare lo stream corrente e avviarne uno nuovo con l'URL della nuova stazione.
- Regolazione volume β Utilizzare il metodo SDK per impostare il volume (range 0-100).
- Accensione / Spegnimento β Un comando per avviare lo streaming e uno per fermarlo.
- Topic MQTT β Definire topic dedicati:
domoapp/radio/playβ con payload:{ "url": "http://...", "stazione": "RTL 102.5" }domoapp/radio/stopdomoapp/radio/volumeβ con payload:{ "volume": 75 }
Suggerimenti tecnici
- Alcuni stream richiedono headers HTTP specifici; verificare che l'SDK li supporti.
- Gestire l'errore di stream non disponibile e notificarlo all'app web.
- Inviare lo stato corrente (in riproduzione / stazione / volume) su un topic di risposta, utile al Gruppo 4 per aggiornare l'interfaccia.
β° AttivitΓ 3.2 β Sveglia
Obiettivo
Implementare una sveglia programmabile: l'utente imposta un orario di sveglia, il numero di ripetizioni del suono e puΓ² spegnerla manualmente.
Passi per lo sviluppo
- Ricevere i parametri via MQTT β Topic:
domoapp/sveglia/impostacon payload:{ "ora": "07:30", "ripetizioni": 5, "suono": "buzzer", "attiva": true } - Controllo orario β Verificare ogni 30 secondi se l'ora corrente corrisponde all'ora della sveglia impostata.
- Attivazione della sveglia β Quando scatta:
- Emettere un bip con il buzzer (es. 1000 Hz per 500 ms, pausa 500 ms, ripetere)
- Accendere i LED con un effetto "sunrise" (da spento β giallo chiaro β bianco brillante, gradualmente)
- Ripetere il ciclo per il numero di volte impostato
- Spegnimento manuale β L'utente puΓ² inviare un comando
domoapp/sveglia/stopper fermare la sveglia prima che completi tutte le ripetizioni. - Snooze (bonus) β Posticipare la sveglia di 5 minuti con un comando
domoapp/sveglia/snooze.
Suggerimenti tecnici
- Prevedere piΓΉ sveglie (ad esempio un array di sveglie), ciascuna con i propri parametri.
- Considerare l'opzione di usare un suono MP3 al posto del buzzer, sfruttando il sistema audio della scheda.
β±οΈ AttivitΓ 3.3 β Timer
Obiettivo
L'utente imposta un timer (conto alla rovescia). Alla scadenza, la scheda emette un bip e i LED si accendono di blu ogni 2 secondi. L'utente puΓ² disattivare il timer in qualsiasi momento.
Passi per lo sviluppo
- Ricevere il timer via MQTT β Topic:
domoapp/timer/impostacon payload:{ "durata_secondi": 300, "attivo": true } - Countdown β Avviare un countdown interno. Opzionalmente, pubblicare ogni secondo il tempo rimanente su
domoapp/timer/statoperchΓ© il Gruppo 4 possa mostrare il countdown nell'interfaccia. - Alla scadenza:
- Emettere un bip col buzzer (es. 1500 Hz, 200 ms)
- Accendere i LED blu (R=0, G=0, B=255) per 1 secondo
- Spegnere per 1 secondo
- Ripetere il ciclo fino alla disattivazione
- Disattivazione β Topic:
domoapp/timer/stop. Ferma il bip e spegne i LED. - Timer multipli (bonus) β Supportare piΓΉ timer contemporanei, ognuno con il proprio nome e durata.
Suggerimenti tecnici
- Pubblicare aggiornamenti sul topic di stato per consentire al Gruppo 4 di mostrare una barra di progresso o countdown nell'interfaccia.
- Gestire correttamente il caso in cui il timer viene reimpostato mentre uno Γ¨ giΓ attivo (cancellare il precedente e avviarne uno nuovo).
π£οΈ AttivitΓ 3.4 β Messaggio Vocale alla Casa
Obiettivo
L'utente scrive un messaggio di testo nell'app web e la scheda ElioKit lo riproduce come messaggio vocale attraverso lo speaker, utilizzando il sistema di Text-to-Speech (TTS).
Passi per lo sviluppo
- Ricevere il testo via MQTT β Topic:
domoapp/messaggio/inviacon payload:{ "testo": "Ciao ragazzi, la cena Γ¨ pronta!", "voce": "Bianca", "volume": 80 } - Invocare il TTS β Utilizzare il metodo SDK per inviare il testo al sistema Text-to-Speech della scheda. Il TTS converte il testo in audio e lo riproduce sullo speaker.
- Impostare il volume β Prima di riprodurre, impostare il volume desiderato.
- Feedback β Pubblicare un messaggio di conferma su
domoapp/messaggio/stato(es.{ "stato": "in_riproduzione" }, poi{ "stato": "completato" }). - Coda messaggi β Se arrivano piΓΉ messaggi, metterli in coda e riprodurli uno alla volta.
Suggerimenti tecnici
- Il TTS potrebbe dipendere da un servizio cloud (es. AWS Polly). Verificare che la scheda sia connessa a Internet.
- Definire un limite di lunghezza del messaggio (es. max 200 caratteri) per evitare abusi.
- Coordinare con il Gruppo 4 per il campo di input nell'interfaccia, includendo la selezione della voce se disponibile.
π΅ Gruppo 4 β Applicazione Web (Spring Boot)
GRUPPO 4Il Gruppo 4 Γ¨ responsabile dello sviluppo dell'applicazione web con Spring Boot che funge da pannello di controllo centralizzato per tutte le funzionalitΓ implementate dagli altri gruppi. L'app comunica con la scheda ElioKit tramite MQTT.
ποΈ AttivitΓ 4.1 β Architettura dell'Applicazione
Obiettivo
Progettare e realizzare la struttura base dell'applicazione web con Spring Boot, integrando un client MQTT per comunicare con la scheda.
Passi per lo sviluppo
- Creare il progetto Spring Boot β Usare Spring Initializr con le dipendenze:
spring-boot-starter-webβ per le API REST e le pagine webspring-boot-starter-thymeleafβ per il templating HTML (o usare un frontend separato in React/Vue)spring-integration-mqttβ per la connessione MQTTspring-boot-starter-websocketβ per aggiornamenti real-time verso il browser
- Configurare il client MQTT β In
application.properties:mqtt.broker.url=tcp://INDIRIZZO_BROKER:1883 mqtt.client.id=domoapp-webapp mqtt.username= mqtt.password= mqtt.default.topic=domoapp/# - Creare il servizio MQTT β Una classe
@Serviceche:- Si connette al broker all'avvio
- Sottoscrive i topic di risposta dalla scheda
- Fornisce metodi per pubblicare comandi
- Notifica i controller via eventi quando arrivano messaggi
- WebSocket per il real-time β Configurare WebSocket (con SockJS + STOMP) per inviare aggiornamenti live al browser quando arrivano dati dalla scheda.
- Struttura del progetto:
src/main/java/com/domoapp/ βββ DomoAppApplication.java // Main βββ config/ β βββ MqttConfig.java // Configurazione MQTT β βββ WebSocketConfig.java // Configurazione WebSocket βββ service/ β βββ MqttService.java // Invio/ricezione MQTT β βββ SicurezzaService.java // Logica Gruppo 1 β βββ LuciService.java // Logica Gruppo 2 β βββ IntrattenimentoService.java // Logica Gruppo 3 βββ controller/ β βββ DashboardController.java // Pagina principale β βββ SicurezzaController.java // API Gruppo 1 β βββ LuciController.java // API Gruppo 2 β βββ IntrattenimentoController.java // API Gruppo 3 βββ model/ βββ AllarmeConfig.java βββ LuciConfig.java βββ RadioConfig.java βββ TimerConfig.java
π₯οΈ AttivitΓ 4.2 β FunzionalitΓ da Integrare nell'Interfaccia
Obiettivo
Creare le pagine web e le API REST per controllare tutte le funzionalitΓ implementate dagli altri gruppi.
Pagine da realizzare
- Dashboard β Pagina principale con panoramica dello stato della casa: allarmi attivi, luci accese, radio in riproduzione, timer attivi. Utilizzare card o widget aggiornati in tempo reale via WebSocket.
- Pannello Sicurezza (Gruppo 1):
- Toggle ON/OFF per monitoraggio terremoto
- Toggle ON/OFF per monitoraggio fumo
- Toggle ON/OFF per sorveglianza movimento
- Slider per regolare le soglie di sensibilitΓ
- Visualizzazione ultime 3 foto scattate
- Log degli allarmi recenti con timestamp
- Pannello Luci (Gruppo 2):
- Toggle ON/OFF luci manuali
- Toggle per modalitΓ automatica (sensore luminositΓ )
- Impostazione orario accensione/spegnimento (2 input time)
- Toggle per accensione su movimento
- Color picker per scegliere il colore
- Palette colori predefiniti
- Indicatore luminositΓ ambientale corrente
- Pannello Intrattenimento (Gruppo 3):
- Player radio con lista stazioni, play/stop, slider volume
- Impostazione sveglia: input orario, numero ripetizioni, ON/OFF
- Timer: input durata, start/stop, countdown in tempo reale
- Campo testo per messaggio vocale con pulsante "Invia"
API REST da esporre
// ββ Sicurezza ββ
POST /api/sicurezza/terremoto/toggle // { "attivo": true }
POST /api/sicurezza/fumo/toggle // { "attivo": true }
POST /api/sicurezza/sorveglianza/toggle // { "attivo": true }
GET /api/sicurezza/allarmi // Lista allarmi recenti
GET /api/sicurezza/foto // Ultime foto scattate
// ββ Luci ββ
POST /api/luci/toggle // { "accese": true }
POST /api/luci/colore // { "r": 255, "g": 100, "b": 50 }
POST /api/luci/auto // { "attivo": true, "soglia": 100 }
POST /api/luci/timer // { "accensione": "18:30", "spegnimento": "23:00" }
POST /api/luci/movimento // { "attivo": true, "timeout": 120 }
// ββ Intrattenimento ββ
POST /api/radio/play // { "url": "http://...", "stazione": "RTL" }
POST /api/radio/stop
POST /api/radio/volume // { "volume": 75 }
POST /api/sveglia/imposta // { "ora": "07:30", "ripetizioni": 5 }
POST /api/sveglia/stop
POST /api/timer/imposta // { "durata_secondi": 300 }
POST /api/timer/stop
POST /api/messaggio/invia // { "testo": "...", "voce": "Bianca" }
Suggerimenti tecnici
- Design responsive β L'app deve funzionare su desktop e mobile. Usare un framework CSS come Bootstrap 5 o Tailwind CSS.
- Coordinamento con i gruppi β Concordare i topic MQTT e i formati dei payload JSON con ogni gruppo. Documentare ogni contratto in modo chiaro.
- WebSocket β Utilizzare STOMP over WebSocket per ricevere aggiornamenti in tempo reale: stato allarmi, valore luminositΓ , countdown timer, stato radio.
- Gestione errori β Mostrare notifiche toast quando un'operazione fallisce o quando la scheda non risponde.
- Autenticazione (bonus) β Aggiungere un login base per proteggere l'accesso al pannello di controllo.