1 package com.lasalle.beehoneyt;
9 import android.content.Context;
10 import android.os.Bundle;
11 import android.os.Handler;
12 import android.os.Message;
13 import android.util.Log;
14 import org.eclipse.paho.android.service.MqttAndroidClient;
15 import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;
16 import org.eclipse.paho.client.mqttv3.IMqttActionListener;
17 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
18 import org.eclipse.paho.client.mqttv3.IMqttToken;
19 import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
20 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
21 import org.eclipse.paho.client.mqttv3.MqttException;
22 import org.eclipse.paho.client.mqttv3.MqttMessage;
23 import org.json.JSONObject;
24 import org.json.JSONArray;
25 import org.json.JSONException;
26 import java.util.Iterator;
37 private static final String
TAG =
"CommunicationMQTT";
52 private String
serverUri =
"tcp://eu.thethings.network:1883";
55 private String
password =
"ttn-account-v2.vC-aqMRnLLzGkNjODWgy81kLqzxBPAT8_mE-L7U2C_w";
65 Log.v(TAG,
"CommunicationMQTT() clientId = " + clientId);
67 mqttAndroidClient =
new MqttAndroidClient(context, serverUri, clientId);
68 mqttAndroidClient.setCallback(
new MqttCallbackExtended()
71 public void connectComplete(
boolean b, String s)
73 Log.w(TAG,
"connectComplete() serverUri = " + s +
" connecte = " + mqttAndroidClient.isConnected());
74 Message msg = Message.obtain();
75 Bundle bundle =
new Bundle();
76 bundle.putInt(
"etat", TTN_CONNECTE);
78 handler.sendMessage(msg);
82 public void connectionLost(Throwable throwable)
84 Log.w(TAG,
"connectionLost()");
85 Message msg = Message.obtain();
86 Bundle b =
new Bundle();
87 b.putInt(
"etat", TTN_DECONNECTE);
89 handler.sendMessage(msg);
93 public void messageArrived(String topic, MqttMessage mqttMessage)
throws Exception
95 Log.w(TAG,
"messageArrived() topic = " + topic +
" message = " + mqttMessage.toString());
96 Message msg = Message.obtain();
97 Bundle b =
new Bundle();
98 b.putInt(
"etat", TTN_MESSAGE);
99 b.putString(
"topic", topic);
100 b.putString(
"message", mqttMessage.toString());
102 handler.sendMessage(msg);
106 public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken)
108 Log.w(TAG,
"deliveryComplete()");
123 mqttAndroidClient.setCallback(callback);
133 MqttConnectOptions mqttConnectOptions =
new MqttConnectOptions();
134 mqttConnectOptions.setAutomaticReconnect(
true);
135 mqttConnectOptions.setCleanSession(
false);
136 mqttConnectOptions.setUserName(username);
137 mqttConnectOptions.setPassword(password.toCharArray());
141 Log.d(TAG,
"connecter() serverUri = " + serverUri +
" clientId = " + clientId);
142 mqttAndroidClient.connect(mqttConnectOptions, null,
new IMqttActionListener()
145 public void onSuccess(IMqttToken asyncActionToken)
147 DisconnectedBufferOptions disconnectedBufferOptions =
new DisconnectedBufferOptions();
148 disconnectedBufferOptions.setBufferEnabled(
true);
149 disconnectedBufferOptions.setBufferSize(100);
150 disconnectedBufferOptions.setPersistBuffer(
false);
151 disconnectedBufferOptions.setDeleteOldestMessages(
false);
152 mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
153 Log.d(TAG,
"onSuccess() serverUri = " + serverUri +
" clientId = " + clientId);
157 public void onFailure(IMqttToken asyncActionToken, Throwable exception)
159 Log.d(TAG,
"onFailure() serverUri = " + serverUri +
" clientId = " + clientId +
" exception = " + exception.toString());
163 catch (MqttException ex)
165 ex.printStackTrace();
176 Log.w(TAG,
"reconnecter ()");
189 Log.d(TAG,
"deconnecter() serverUri = " + serverUri +
" clientId = " + clientId);
192 IMqttToken disconToken = mqttAndroidClient.disconnect();
193 disconToken.setActionCallback(
new IMqttActionListener()
196 public void onSuccess(IMqttToken asyncActionToken)
198 Log.d(TAG,
"onSuccess() serverUri = " + serverUri +
" clientId = " + clientId);
202 public void onFailure(IMqttToken asyncActionToken, Throwable exception)
204 Log.d(TAG,
"onFailure() serverUri = " + serverUri +
" clientId = " + clientId +
" exception = " + exception.toString());
208 catch (MqttException e)
221 Log.w(TAG,
"estConnecte() " + mqttAndroidClient.isConnected());
223 return mqttAndroidClient.isConnected();
234 if(mqttAndroidClient == null && !mqttAndroidClient.isConnected())
238 final String subTopic = clientId +
"/devices/" + topic +
"/up";
239 Log.w(TAG,
"souscrireTopic() topic = " + subTopic);
242 final boolean[] retour = {
false};
243 mqttAndroidClient.subscribe(subTopic, 0, null,
new IMqttActionListener()
246 public void onSuccess(IMqttToken asyncActionToken)
248 Log.w(TAG,
"onSuccess() topic = " + subTopic);
253 public void onFailure(IMqttToken asyncActionToken, Throwable exception)
255 Log.w(TAG,
"onFailure() topic = " + subTopic);
261 catch (MqttException ex)
263 Log.w(TAG,
"Erreur topic = " + subTopic);
264 ex.printStackTrace();
280 JSONObject json = null;
281 Iterator<String> it = null;
283 json =
new JSONObject(message);
284 int port = json.getInt(
"port");
289 String cle = it.next();
290 Log.i(TAG,
"decoderMessage() clé = " + cle);
291 Log.i(TAG,
"decoderMessage() valeur = " + json.getString(cle));
294 if (cle.equals(
"payload_fields"))
300 catch (JSONException e)
315 Log.i(TAG,
"decoderPayload() port = " + port );
335 JSONObject json = null;
336 json =
new JSONObject(payload);
338 Iterator<String> it = null;
342 String cle = it.next();
343 if (cle.equals(
"temperature"))
345 Log.i(TAG,
"decoderDonneInterieure() temperature = " + json.getString(cle));
348 else if (cle.equals(
"humidite"))
350 Log.i(TAG,
"decoderDonneInterieure() humidite = " + json.getString(cle));
355 catch (JSONException e)
369 JSONObject json = null;
370 json =
new JSONObject(payload);
372 Iterator<String> it = null;
374 while (it.hasNext()) {
375 String cle = it.next();
376 if (cle.equals(
"temperature"))
378 Log.i(TAG,
"decoderDonneExterieure() temperature = " + json.getString(cle));
381 else if (cle.equals(
"humidite"))
383 Log.i(TAG,
"decoderDonneExterieure() humidite = " + json.getString(cle));
386 else if (cle.equals(
"ensoleillement"))
388 Log.i(TAG,
"decoderDonneExterieure() ensoleillement = " + json.getString(cle));
391 else if (cle.equals(
"pression"))
393 Log.i(TAG,
"decoderDonneExterieure() pression = " + json.getString(cle));
396 else if (cle.equals(
"poids"))
398 double poids = json.getDouble(cle);
399 poids = poids * 0.01;
400 Log.i(TAG,
"decoderDonneExterieure() poids = " + json.getInt(cle));
406 catch (JSONException e)
422 JSONObject json = null;
423 json =
new JSONObject(message);
425 date = json.getJSONObject(
"metadata").getString(
"time");
426 date = date.substring(0, 10) +
" " + date.substring(11, 19);
427 Log.d(TAG,
"extraireHorodatage() time = " + json.getJSONObject(
"metadata").getString(
"time"));
428 Log.d(TAG,
"extraireHorodatage() horodatage = " + date);
431 catch (JSONException e)
static void afficherHumiditerExterieure(String message)
affichie l'humiditer exterieure dans le layout
void connecter()
connection au ttn
static void afficherTemperatureExterieure(String message)
affichie la Temperature exterieure dans le layout
static void decoderPayload(int port, String payload, Ruche ruche)
d'ecode le payload
static void afficherTemperatureInterieure(String message)
affichie la Temperature interieure dans le layout
static MqttAndroidClient mqttAndroidClient
static final int TTN_MESSAGE
void reconnecter()
reconnection au ttn
static void afficherPoids(int message)
affichie le poid dans le layout
static final int TTN_CONNECTE
String serverUri
lien vers TTN
void deconnecter()
deconetion du ttn
static void afficherEnsoleillement(String message)
affichie l'Ensoleillement dans le layout
static boolean souscrireTopic(String topic)
S'abone a un device.
static void decoderMessage(String message, Ruche ruche)
decode le message recu
static final int TTN_DECONNECTE
Déclaration de la classe CommunicationMQTT.
static void afficherHumiditeInterieure(String message)
affichie l'humiditer interieure dans le layout
CommunicationMQTT(Context context, final Handler handler)
Constructeur de la classe CommunicationMQTT.
Déclaration de la classe Ruche.
static void decoderDonneExterieure(String payload, Ruche ruche)
decode les donné de l'exterieure de la ruche
static void afficherPression(String message)
affichie la pression dans le layout
String password
mot de passe TTN
static void decoderDonneInterieure(String payload, Ruche ruche)
decode les donné de l'interieur de la ruche
static void setCallback(MqttCallbackExtended callback)
static String extraireHorodatage(String message)
extrait l'horodatage
static String clientId
Application ID.
static boolean estConnecte()
boolaine retourne si le ttn est connecter
String username
nom d'utilisateur
void setPoids(int Poids)
Mutateur set du poids de la ruche.
Déclaration de la classe RucheActivity.