diff --git a/app/src/main/java/ch/luria/mq1/MainActivity.java b/app/src/main/java/ch/luria/mq1/MainActivity.java
index a3bf4d3..cda6db4 100644
--- a/app/src/main/java/ch/luria/mq1/MainActivity.java
+++ b/app/src/main/java/ch/luria/mq1/MainActivity.java
@@ -61,11 +61,7 @@ public class MainActivity extends AppCompatActivity {
}
public void toggleButtonState(View view) {
- if (stateButton.isChecked()) {
- mService.doToggle("{\"state\":\"ON\"}");
- } else {
- mService.doToggle("{\"state\":\"OFF\"}");
- }
+ mService.doToggle(stateButton.isChecked());
}
private final ServiceConnection connection = new ServiceConnection() {
diff --git a/app/src/main/java/ch/luria/mq1/MqttService.java b/app/src/main/java/ch/luria/mq1/MqttService.java
index 10f7a2a..2299044 100644
--- a/app/src/main/java/ch/luria/mq1/MqttService.java
+++ b/app/src/main/java/ch/luria/mq1/MqttService.java
@@ -6,6 +6,7 @@ import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
+import com.hivemq.client.mqtt.MqttClientState;
import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient;
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client;
@@ -36,46 +37,38 @@ public class MqttService extends Service {
.serverHost("192.168.178.64")
.serverPort(1883)
.buildAsync();
- client.connectWith()
- .send()
- .whenComplete((connAck, throwable) -> {
- if (throwable != null) {
- // handle failure
- Log.i(TAG, "could not connect");
- } else {
- Log.i(TAG, "connect ok");
- subscribe();
- }
- });
}
}
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind");
+ connect();
return binder;
}
- public void doToggle(String what) {
- publishMessage("zigbee2mqtt/Ampoule Chambre Isaac/set", what);
- }
-
- private void sendMessage(String msg) {
- Intent intent = new Intent();
- intent.setAction("ch.luria.mq1");
- try {
- final JSONObject obj = new JSONObject(msg);
- String state = obj.getString("state");
- intent.putExtra("STATE", state);
- sendBroadcast(intent);
- } catch (JSONException e) {
- e.printStackTrace();
+ private void connect() {
+ if (client.getState() == MqttClientState.DISCONNECTED) {
+ Log.i(TAG, "connect()");
+ client.connectWith()
+ .send()
+ .whenComplete((connAck, throwable) -> {
+ if (throwable != null) {
+ // handle failure
+ Log.i(TAG, "could not connect - " + connAck.getReasonString());
+ } else {
+ Log.i(TAG, "connect ok");
+ subscribe();
+ }
+ });
+ } else {
+ Log.i(TAG, "connect() in state " + client.getState());
}
}
private void subscribe() {
client.subscribeWith()
- .topicFilter("zigbee2mqtt/Ampoule Chambre Isaac")
+ .topicFilter(getString(R.string.mqtt_base_topic) + "/" + getString(R.string.mqtt_room_address))
.callback(publish -> {
// Process the received message
String msg = new String(publish.getPayloadAsBytes()) + " from " + publish.getTopic();
@@ -93,42 +86,65 @@ public class MqttService extends Service {
getStatus();
}
});
-
}
- public void getStatus() {
- if (client != null) {
- client.publishWith()
- .topic("zigbee2mqtt/Ampoule Chambre Isaac/get")
- .payload("{\"state\":\"\"}".getBytes())
- .send()
- .whenComplete((mqtt3Publish, throwable) -> {
- if (throwable != null) {
- // handle failure to publish
- Log.i(TAG, "could not publish");
- } else {
- // handle successful publish, e.g. logging or incrementing a metric
- Log.i(TAG, "published");
- }
- });
+ private void sendMessage(String msg) {
+ Intent intent = new Intent();
+ intent.setAction("ch.luria.mq1");
+ try {
+ final JSONObject obj = new JSONObject(msg);
+ String state = obj.getString("state");
+ intent.putExtra("STATE", state);
+ sendBroadcast(intent);
+ } catch (JSONException e) {
+ e.printStackTrace();
}
}
private void publishMessage(String topic, String message) {
- client.publishWith()
- .topic(topic)
- .payload(message.getBytes())
- .send()
- .whenComplete((mqtt3Publish, throwable) -> {
- if (throwable != null) {
- // handle failure to publish
- Log.i(TAG, "could not publish");
- } else {
- // handle successful publish, e.g. logging or incrementing a metric
- Log.i(TAG, "published " + message + " on " + topic);
- getStatus();
- }
- });
+ if (client != null) {
+ if (client.getState() == MqttClientState.CONNECTED) {
+ client.publishWith()
+ .topic(topic)
+ .payload(message.getBytes())
+ .send()
+ .whenComplete((mqttPublish, throwable) -> {
+ if (throwable != null) {
+ // handle failure to publish
+ Log.i(TAG, "publishMessage(): could not publish: " + throwable);
+ } else {
+ // handle successful publish, e.g. logging or incrementing a metric
+ Log.i(TAG, "published " + message + " on " + topic);
+ getStatus();
+ }
+ });
+ } else {
+ Log.i(TAG, "publishMessage(): not connected");
+ }
+ } else {
+ Log.i(TAG, "publishMessage(): null client");
+ }
}
+ public void doToggle(boolean state) {
+ JSONObject obj = new JSONObject();
+ try {
+ obj.put("state", state ? "ON" : "OFF");
+ Log.i(TAG, "doToggle: " + obj);
+ publishMessage(getString(R.string.mqtt_base_topic) + "/" + getString(R.string.mqtt_room_address) + "/set", obj.toString());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void getStatus() {
+ JSONObject obj = new JSONObject();
+ try {
+ obj.put("state", "");
+ Log.i(TAG, "getStatus()");
+ publishMessage(getString(R.string.mqtt_base_topic) + "/" + getString(R.string.mqtt_room_address) + "/get", obj.toString());
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2cd4de7..3e03361 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,4 +3,6 @@
ALLUMEE
ETEINTE
Chambre d\'Isaac
+ zigbee2mqtt
+ Ampoule Chambre Isaac
\ No newline at end of file