In questo tutorial completerai la tua applicazione Internet of Things.
Le cose che restano da fare sono tre.
La prima è scrivere una funzione payload decoder, associata al tuo device, che permetta a Datacake di estrarre i tre valori float contenuti nel payload.
La seconda è configurare il database definendo i tre campi che serviranno a memorizzare i valori di temperatura umidità e indice di calore estratti dal payload.
La terza è creare una dashboard, cioè una sorta di cruscotto, per visualizzare in modo grafico e accattivante i dati ricevuti.
Nel video vedrai un modo veloce di fare queste tre ultime operazioni di configurazione.
Ovviamente Datacake è ricco di funzionalità per visualizzare i dati in modo accattivante e per realizzare elaborazioni di vario tipo, molto più di quanto abbiamo mostrato.
Ti invitiamo ad esplorare le sue funzionalità e ad arricchire la dashboard.
Purtroppo il payload decoder che abbiamo fatto generare per visualizzare meglio i dati su TTS non è immediatamente riciclabile come payload decoder Datacake.
Tra le due piattaforme, il formato del payload decoder è leggermente differente.
Se conosci il linguaggio JavaScript la trasformazione del decoder TTS nel decoder Datacake è molto facile.
Se non conosci il JavaScript puoi far generare la funzione da una IA.
La versione fornita a noi da ChatGPT è quella che segue.
function Decoder(input, port) {
// Verifica se il payload ha la lunghezza corretta (12 byte)
if (input.length !== 12) {
return {
errors: ['Errore nella lunghezza del payload!']
};
}
// Estrae i 3 valori float dal payload
var temperatura = extractFloat(input.slice(0, 4));
var umidita = extractFloat(input.slice(4, 8));
var heatIndex = extractFloat(input.slice(8, 12));
// Restituisce i valori decodificati
return [
{field: "TEMP", value: temperatura},
{field: "HUM", value: umidita},
{field: "HIC", value: heatIndex}
];
}
// Funzione per estrarre un numero float da un array di byte
function extractFloat(bytes) {
var bits = bytes[3]<<24 | bytes[2]<<16 | bytes[1]<<8 | bytes[0];
var sign = (bits>>>31 === 0) ? 1.0 : -1.0;
var e = bits>>>23 & 0xff;
var m = (e === 0) ? (bits & 0x7fffff)<<1 : (bits & 0x7fffff) | 0x800000;
var f = sign * m * Math.pow(2, e - 150);
return f;
}