Scrivi il Payload Decoder per decodificare i dati su The Things Stack

Come hai visto nel tutorial precedente, la console TTS permette di monitorare in tempo reale i pacchetti LoRaWan ricevuti dal tuo device.

Nella finestra che mostra il log dei pacchetti ricevuti vengono mostrate tutte le informazioni utili, tra cui l’identificativo DeviceEUI del tuo Arduino, il contenuto del payload e il valore del livello del segnale radio.

Relativamente al payload, come hai visto dal tutorial in cui hai effettuato i test di connessione e trasmissione, il contenuto del payload viene mostrato sotto forma di sequenza di valori di 1 byte ciascuno in formato esadecimale.

Il formato esadecimale ti permette in teoria di ricavare i valori di tipo float andando ad eseguire i relativi calcoli di conversione, ma non è sicuramente questo il modo più comodo per verificare il contenuto del payload.

In questo tutorial vedrai come inserire nella configurazione del device sul sistema TTS una funzione scritta in linguaggio JavaScript per decodificare i valori contenuti nel payload.



Il codice del payload decoder è il seguente:

function decodeUplink(input) {
  // Verifica se il payload ha la lunghezza corretta (12 byte)
  if (input.bytes.length !== 12) {
    return {
      errors: ['Errore nella lunghezza del payload!']
    };
  }

  // Estrae i 3 valori float dal payload
  const temperatura = extractFloat(input.bytes.slice(0, 4));
  const umidita = extractFloat(input.bytes.slice(4, 8));
  const heatIndex = extractFloat(input.bytes.slice(8, 12));

  // Restituisce i valori decodificati
  return {
    data: {
      temperatura: temperatura,
      umidita: umidita,
      heatIndex: heatIndex
    }
  };
}

// Funzione per estrarre un numero float da un array di byte
function extractFloat(bytes) {
  // Converte l'array di byte in un array di numeri interi senza segno
  const intBytes = bytes.map(b => b & 0xFF);
  
  // Crea un DataView per accedere ai byte come float a 32 bit
  const dataView = new DataView(new Uint8Array(intBytes).buffer);
  
  // Legge il valore float a 32 bit dall'inizio del DataView
  return dataView.getFloat32(0, true);
}

Non approfondiremo ulteriormente il codice JavaScript.

Se non conosci questo linguaggio, puoi inserire il codice in un assistente IA come ChatGPT e chiedere di illustrarti il suo funzionamento e chiarire il significato di determinate istruzioni.

Questo codice è stato generato da una IA e per i nostri scopi è sufficiente.