From de0ff1811277504c0a3f31a1e32b65c3fae52b17 Mon Sep 17 00:00:00 2001 From: Rene Luria Date: Tue, 26 Apr 2022 15:34:41 +0200 Subject: [PATCH] no json in main activity --- .../main/java/ch/luria/mq1/MainActivity.java | 6 +- .../main/java/ch/luria/mq1/MqttService.java | 128 ++++++++++-------- app/src/main/res/values/strings.xml | 2 + 3 files changed, 75 insertions(+), 61 deletions(-) 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