PDA

Visualizza la versione completa : Problema con MQTT


conemil
16-07-2014, 11:44
Salve, mi sto
confrontando per la prima volta con il protocollo MQTT.
Ho trovato molto
materiale utile in rete, come ad esempio il codice dei comandi
scritto in C. Ho notato però che non è completo, ovvero mancano
delle funzioni. Questo non è un problema, a parte per la funziona
che “praticamente” invia il pacchetto al server. Faccio un
esempio:
int mqtt_disconnect(mqtt_broker_handle_t* broker) {

uint8_t packet[] = {

MQTT_MSG_DISCONNECT, // Message Type, DUP flag, QoS level, Retain

0x00 // Remaining length

};

// Send the packet
if(broker->send(broker->socket_info, packet, sizeof(packet)) < sizeof(packet)) {

return -1;

}

return 1;

}


Questa è la
funzione per disconnettersi dal server. La mia domanda è:
la funzione sotto il commento “//send the packet”, da quel che ho capito si incarica
di inviare il messaggio di disconnessione al server, ma non ho
trovato da nessuna parte come è scritta. Qualcuno mi può aiutare?
Grazie a chiunque risponderà.

M.A.W. 1968
16-07-2014, 13:35
Purtroppo hai omesso dei dati essenziali. Di che codice specifico stai parlando? Dove hai trovato codesta implementazione? Sei sicuro che il codice sia incompleto, e se sì, per quale motivo?

Le risorse primarie relative a MQTT, che presumibilmente conosci già a menadito, includono il sito ufficiale (http://mqtt.org/), la documentazione su IBM DeveloperWorks (http://www.ibm.com/developerworks/) e una serie di implementazioni opensource, presumibilmente complete, come ad esempio Paho (http://www.eclipse.org/paho/).

Personalmente ho implementato da zero il firmware necessario per tre distinte piattaforme embedded target molto diffuse, usando un unico ambiente di sviluppo commerciale (IAR) e basandomi unicamente sulla specifica pubblicata, ma trattandosi di un progetto lavorativo relativamente recente non posso fornire in alcun modo né sorgenti né ulteriori dettagli. Comunque trattasi di un protocollo decisamente elementare, a livello di SNAP o poco più, e sono certo che in rete esistano numerose implementazioni valide, simili al già citato Paho che - all'epoca - avevo distrattamente guardato prima di iniziare lo sviluppo.

conemil
16-07-2014, 14:15
Ti ringrazio per la risposta.
Ho trovato questo pezzo di codice a questo link:
https://github.com/menudoproblema/libemqtt
è un codice C per sistemi embedded (da quanto è scritto almeno), ma ho il sospetto che certe funzioni siano inserite nelle librerie che sono citate all'inizio, e non specificate, quindi non saprei come gestire il "send" in senso pratico, cioè io ho un comando scritto e funzionante, ma non so come far comunicare il client col server, so che la connessione è d tipo TCP/IP ma non ho mai avuto a che fare con codice di comunicazione via internet. Tu conosci qualcosa di già scritto open source? Grazie mille

M.A.W. 1968
16-07-2014, 15:03
Prova a guardare sul già segnalto sito di Paho: offrono i sorgenti completi per vari tipi di implementazione, sia basati su OS mainstream che per ambienti embedded (in particolare FreeRTOS). In generale, MQTT è comunque orientato a reti non TCP(IP, es. mesh BlueTooth.

conemil
16-07-2014, 15:12
Ti riferisci a questi?
http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.embedded-c.git/log/
Perché mi sembrano scritti in un linguaggio che non conosco, mi sembra XML. Altrimenti mi potresti dare il link preciso?
Comunque visto che tu sembri molto esperto, ti faccio un'altra domanda a riguardo. Il server dovremo costituirlo nell'azienda in cui lavoro, quindi mi hanno chiesto un paio di informazioni che serviranno ai miei colleghi per formarlo.
Il server può solo gestire la comunicazione MQTT o può essere anche un server già esistente che fa pure altre cose?
Può essere raggiunto attraverso un sottodominio (del tipo www.azienda.it/sezioneMQTT/server (http://www.azienda.it/sezioneMQTT/server)) o deve avere obbligatoriamente un dominio a se stante (del tipo "www.azienda.it").

Grazie ancora una volta

M.A.W. 1968
16-07-2014, 15:54
I sorgenti sono scritti in C, ma per la ocnsultazione e il download ti occorre un client GIT, come questi (http://git-scm.com/downloads/guis). Non c'è un package preconfezionato, nel caso di Eclipse/Paho, ma si tratta di snippet da adeguare al sistema target.

Riguardo al server, nulla osta all'uso di un server già esistente che eroga altri servizi, ma la valutazione va fatta caso per caso. Riguardo al sottodominio non dovrebbero esserci limitazioni consistenti; dal punto di vista ingegneristico, è comunque ragionevole prevedere una fase di test su una macchina separata e dedicata, onde evitare ogni possibile interferenza con un server già "di produzione".

conemil
16-07-2014, 16:03
Ah ok, ecco perché non riuscivo a scaricarli! Grazie davvero, anche per le altre risposte, ti devo un favore ;)

Loading