Completa la configurazione del device su Datacake aggiungendo il payload decoder e configura il database

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;
  }