Post on 04-Jul-2020
transcript
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
InternetofThingsPublish– Subscribe
MQTT
DimitrisSoukarasdsoukaras@di.uoa.gr
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
IoTApplications
http://scan.di.uoa.gr|Page2 |6/12/2016
� Devices� ProgrammingBoards,Sensors,Actuators
� Programminglanguages� Java,Android,Javascript,Python
� Messaging� MQTT,CoAP
� Scaledscenarios� Homeautomation,smartcities,industrialapplications
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
Publish-subscribe(1)
http://scan.di.uoa.gr |Page3 |6/12/2016
� Messagepatternήmessagequeueparadigmήmessageorientedmiddlewareήmessagingprotocolήconnectivityprotocol
� Ασύγχρονηεπικοινωνία• αποστολήδεδομένωνσεπραγματικόχρόνο
� Μικρόμέγεθοςμηνυμάτων• δεδομένααισθητήρων
� Χαμηλήκατανάλωσημπαταρίας• smartphone,embeddedboards
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
Publish-subscribe(2)
http://scan.di.uoa.gr |Page4 |6/12/2016
� Publish� Δημοσίευσημηνυμάτωνενόςσυγκεκριμένουtopicστονmessagebroker
� Subscribe� Εγγραφήσεσυγκεκριμένοtopicστονmessagebroker
� Broker� Πρόγραμμαδιαμεσολαβητήγιατηδιαχείρισημηνυμάτωνμεταξύετερογενώνmessagingπρωτοκόλλων.• Επικαιροποίηση• Μετασχηματισμός• Δρομολόγηση
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
MQTT(1)
http://scan.di.uoa.gr |Page5 |6/12/2016
� MQTelemetryTransport
� ΞεκίνησεαπότουςDrAndyStanford-Clarkτης IBMκαιArlenNipperτης Arcom (σημερινήEurotech) το1999
� ΧρησιμοποιήθηκεαπότοFacebookMessengerτο2011
� Ηέκδοση3.1.1έγινεδεκτήωςOASISstandardτο2014
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
MQTTJavaClient- Subscriber
http://scan.di.uoa.gr |Page6 |6/12/2016
� packagecom.anap.second;
importcom.sun.jmx.snmp.Timestamp;importorg.eclipse.paho.client.mqttv3.*;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
publicclassMainimplementsMqttCallback{
publicstaticvoidmain(String[]args){
Stringtopic="MQTTExample";int qos =2;Stringbroker="tcp://localhost:1883";StringclientId ="JavaSampleSubscriber";MemoryPersistence persistence=newMemoryPersistence();
try{
//ConnectclienttoMQTTBrokerMqttClient sampleClient =newMqttClient(broker,clientId,persistence);MqttConnectOptions connOpts =newMqttConnectOptions();connOpts.setCleanSession(true);
//SetcallbackMainmain=newMain();sampleClient.setCallback(main);
System.out.println("Connectingtobroker:"+broker);sampleClient.connect(connOpts);System.out.println("Connected");
//SubscribetoatopicSystem.out.println("Subscribingtotopic\""+topic+"\"qos "+qos);sampleClient.subscribe(topic,qos);
}catch(MqttException me){
System.out.println("reason"+me.getReasonCode());System.out.println("msg "+me.getMessage());System.out.println("loc "+me.getLocalizedMessage());System.out.println("cause"+me.getCause());System.out.println("excep "+me);me.printStackTrace();
}}
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
MQTTJavaClient– Subscriber(2)
http://scan.di.uoa.gr |Page7 |6/12/2016
� /***@seeMqttCallback#connectionLost(Throwable)*/publicvoidconnectionLost(Throwable cause){//Thismethodiscalledwhentheconnectiontotheserverislost.System.out.println("Connectionlost!"+cause);System.exit(1);
}
/***@seeMqttCallback#deliveryComplete(IMqttDeliveryToken)*/publicvoiddeliveryComplete(IMqttDeliveryToken token){//Calledwhendeliveryforamessagehasbeencompleted,andallacknowledgmentshavebeenreceived
}
/***@seeMqttCallback#messageArrived(String,MqttMessage)*/publicvoidmessageArrived(Stringtopic,MqttMessage message)throwsMqttException {//Thismethodiscalledwhenamessagearrivesfromtheserver.
Stringtime=newTimestamp(System.currentTimeMillis()).toString();System.out.println("Time:\t"+time+
"Topic:\t"+topic+"Message:\t"+newString(message.getPayload())+"QoS:\t"+message.getQos());
}}
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
MQTTJavaClient- Publisher
http://scan.di.uoa.gr |Page8 |6/12/2016
� packagecom.anap.second;
importorg.eclipse.paho.client.mqttv3.MqttClient;importorg.eclipse.paho.client.mqttv3.MqttConnectOptions;importorg.eclipse.paho.client.mqttv3.MqttException;importorg.eclipse.paho.client.mqttv3.MqttMessage;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
publicclassMain{
publicstaticvoidmain(String[]args){
Stringtopic="MQTTExample";Stringcontent="MessagefromMqttPublishSample";int qos =2;Stringbroker="tcp://localhost:1883";StringclientId ="JavaSamplePublisher";MemoryPersistence persistence=newMemoryPersistence();
try{
//ConnecttoMQTTBrokerMqttClient sampleClient =newMqttClient(broker,clientId,persistence);MqttConnectOptions connOpts =newMqttConnectOptions();connOpts.setCleanSession(true);System.out.println("Connectingtobroker:"+broker);sampleClient.connect(connOpts);System.out.println("Connected");
//PublishmessagetoMQTTBrokerSystem.out.println("Publishingmessage:"+content);MqttMessage message=newMqttMessage(content.getBytes());message.setQos(qos);sampleClient.publish(topic,message);System.out.println("Messagepublished");sampleClient.disconnect();System.out.println("Disconnected");System.exit(0);
}catch(MqttException me){
System.out.println("reason"+me.getReasonCode());System.out.println("msg "+me.getMessage());System.out.println("loc "+me.getLocalizedMessage());System.out.println("cause"+me.getCause());System.out.println("excep "+me);me.printStackTrace();
}}
}
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
MQTT– Mosquitto Broker
http://scan.di.uoa.gr |Page9 |6/12/2016
To Mosquitto Broker εκτελείται (αρχικές ρυθμίσεις) με την παρακάτω εντολή:
/{path}/{to}/mosquitto -c /{path}/{to}/mosquitto.conf
NATIONAL&KAPODISTRIANUNIVERSITYOFATHENS
Χρήσιμοισύνδεσμοι
http://scan.di.uoa.gr |Page10 |6/12/2016
� MQTThttp://mqtt.org/
� EclipsePaho clientjavadochttps://www.eclipse.org/paho/files/javadoc/org/eclipse/paho/client/mqttv3/package-summary.html
� EclipsePaho Javaclienthttps://eclipse.org/paho/clients/java/
� EclipsePaho AndroidClienthttps://eclipse.org/paho/clients/android/
� Mosquitto Broker downloadpagehttps://mosquitto.org/download/