Dalla pagina "Dispositivi" clicca sul bottone "Claim di un dispositivo"
Clicca sul link "Non hai un ID dispositivo?", poi su continua
L'ID Dispositivo verrà mostrato sullo schermo e il file della chiave privata verrà scaricato automaticamente dal browser con il nome <id_dispositivo>.der
La connessione verso Trackle Cloud è reciprocamente autenticata utilizzando coppie di chiavi pubbliche / private in formato RPK (Raw Public Key).
La chiave privata del dispositivo ottenuta al passaggio precedente deve essere memorizzata sul dispositivo e deve essere essere mantenuta segreta. Trackle Cloud memorizza la chiave pubblica di ogni dispositivo.
Per quanto riguarda il cloud, la chiave privata del cloud viene mantenuta segreta, mentre tutti i dispositivi conoscono la chiave pubblica del cloud. La chiave pubblica del cloud non è un segreto.
Trackle.setDeviceId()
Configura l'ID univoco del dispositivo (DeviceID) ottenuto dalla Console. L'ID dispositivo deve essere un numero di 12 byte che identifica univocamente il dispositivo.
Trackle.setKeys()
Configura la chiave privata per questo dispositivo. Non è necessario impostare la chiave pubblica del cloud in quanto è già codificata nella libreria.
Per ottenere l'array esadecimale dal file .der della chiave privata scaricata dalla Console è possibile usare questo comando su sistemi unix:
cat private_key.der | xxd -i
// ID univoco del dispositivocharDEVICE_ID[13] = {0xd1,0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06};// chiave privata del dispositivoconstuint8_tPRIVATE_KEY[PRIVATE_KEY_LENGTH] = {0x30,0x77,0x02,0x01,0x01,0x04, ... };trackleSetDeviceId(trackle_s, DEVICE_ID);trackleSetKeys(trackle_s, PRIVATE_KEY);
// ID univoco del dispositivocharDEVICE_ID[13] = {0xd1,0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06};// chiave privata del dispositivoconstuint8_tPRIVATE_KEY[PRIVATE_KEY_LENGTH] = {0x30,0x77,0x02,0x01,0x01,0x04, ... };trackle.setDeviceId(DEVICE_ID);trackle.setKeys(PRIVATE_KEY);
Comunicazione
Trackle Library si collega al Cloud attraverso il protocollo di comunicazione CoAP (IETF RFC 7252), acronimo di Constrained Application Protocol. CoAP è un protocollo leggero, appositamente progettato per dispositivi IoT con capacità di elaborazione limitate che comunicano su reti con banda disponibile ridotta.
CoAP utilizza UDP come protocollo di trasporto predefinito (ogni messaggio CoAP viene inviato all'interno di un datagram UDP) e implementa le funzionalità software per garantire l'invio, la ricezione e l'ordinamento dei pacchetti (ACK e messageId). La sicurezza della comunicazione è assicurata dall’implementazione dello standard DTLS (Datagram Transport Layer Security), un protocollo progettato per proteggere la privacy dei dati e prevenire intercettazioni e manomissioni.
Per permettere ad un client di comunicare con il cloud è necessario implementare le callback che definiscono come creare e distruggere un socket UDP e come inviare e ricevere dati su quel socket UDP. La libreria si occupa di cifrare la comunicazione e di mantenere il canale sempre attivo.
Trackle.setConnectCallback()
Imposta una callback che crea il socket UDP verso il cloud e ritorna il risultato.
Imposta una callback che legge il socket UDP e ritorna il numero di byte ricevuti.
intreceive_cb_udp(unsignedchar*buf,uint32_t buflen,void*tmp){size_t res =recvfrom(cloud_socket, (char*)buf, buflen,0, (struct sockaddr *)NULL,NULL);// on timeout error, set bytes received to 0if ((int)res <0&& errno ==11) { res =0; }return (int)res;}trackleSetReceiveCallback(trackle_s, receive_cb_udp);
intreceive_cb_udp(unsignedchar*buf,uint32_t buflen,void*tmp){size_t res =recvfrom(cloud_socket, (char*)buf, buflen,0, (structsockaddr*)NULL,NULL); // on timeout error, set bytes received to 0if ((int)res <0&& errno ==11) { res =0; }return (int)res;}trackle.setReceiveCallback(receive_cb_udp);
Trackle.setRandomCallback
Imposta una callback per la generazione di un numero random. Se non definita viene utilizzata la funziona rand() che ritorna un numero pseudo-casuale.
Se l'hardware utilizzato dispone di metodi più sicuri per la generazione di un numero random, è possibile configurarli attraverso questa callback.
Connessione
Dopo aver implementato la gestione del socket il client può tentare la connessione al cloud.
Trackle.connect()
Tenta la connessione al cloud. Restituisce il valore 0 se non ci sono errori, un valore <0 in caso di errore.
Trackle.connected()
Ritorna true se il dispositivo è connesso al cloud, altrimenti false .
Trackle.loop()
Esegue il background loop che si occupa della comunicazione bidirezionale tra dispositivo e cloud di mantenere il canale attivo. Se non viene chiamata abbastanza frequentemente, la connessione con il Cloud verrà persa.
Trackle.loop() è una funzione che blocca l'esecuzione del firmware per alcuni millisecondi. Più frequentemente viene chiamata, più il tempo di esecuzione si riduce e più il dispositivo risponde con velocità .
Permette di specificare una lista di componenti utilizzati ed inviarli al cloud. Questa informazione può essere utile per monitorare in modo più dettagliato le risorse e le funzionalità disponibili sul dispositivo.