From ba78f028d075788201d74adb2cdd96bafaab5cf2 Mon Sep 17 00:00:00 2001 From: Matt Jones Date: Mon, 6 Jan 2025 18:19:17 -0600 Subject: [PATCH 1/2] feat: add ability to get the current tank's compressor status and fill level --- .../com/bigboxer23/eco_net/EcoNetAPI.java | 10 ++++----- .../bigboxer23/eco_net/IEcoNetConstants.java | 3 +++ .../bigboxer23/eco_net/data/Equipment.java | 10 +++++++++ .../bigboxer23/eco_net/data/TankStatus.java | 21 +++++++++++++++++++ .../com/bigboxer23/eco_net/EcoNetApiTest.java | 15 +++++++++++++ 5 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/bigboxer23/eco_net/data/TankStatus.java diff --git a/src/main/java/com/bigboxer23/eco_net/EcoNetAPI.java b/src/main/java/com/bigboxer23/eco_net/EcoNetAPI.java index a7ffe32..fade4a4 100644 --- a/src/main/java/com/bigboxer23/eco_net/EcoNetAPI.java +++ b/src/main/java/com/bigboxer23/eco_net/EcoNetAPI.java @@ -24,7 +24,7 @@ public class EcoNetAPI implements IEcoNetConstants { private static MqttAsyncClient mqttClient; - private List subscribers = new ArrayList<>(); + private final List subscribers = new ArrayList<>(); private final String userToken; private final String accountId; @@ -74,10 +74,10 @@ public Optional fetchUserData() { baseUrl + "/code/" + CLEAR_BLADE_SYSTEM_KEY + "/getUserDataForApp", OkHttpRequestBodyUtils.createBodyFromString(new JsonMapBuilder() .put("location_only", false) - .put("type", "com.econet.econetconsumerandroid") - .put("version", "6.0.0-375-01b4870e") + .put("type", TYPE) + .put("version", VERSION) .toJson()), - getHeaders(Collections.singletonMap("ClearBlade-UserToken", userToken)))) { + getHeaders(Collections.singletonMap(CLEAR_BLADE_USER_TOKEN, userToken)))) { Optional body = OkHttpUtil.getBody(response, UserData.class); if (body.isPresent() && !body.get().isSuccess()) { logger.error("fetchUserData: "); @@ -96,7 +96,7 @@ public Optional fetchEnergyUsage( baseUrl + "/code/" + CLEAR_BLADE_SYSTEM_KEY + "/dynamicAction", OkHttpRequestBodyUtils.createBodyFromJsonObject( new FetchUsageCommand(deviceId, serialNumber, day, month, year), FetchUsageCommand.class), - getHeaders(Collections.singletonMap("ClearBlade-UserToken", userToken)))) { + getHeaders(Collections.singletonMap(CLEAR_BLADE_USER_TOKEN, userToken)))) { Optional body = OkHttpUtil.getBody(response, EnergyResults.class); if (body.isPresent() && !body.get().isSuccess()) { logger.error("fetchEnergyUsage: " + body.get().getLogs()); diff --git a/src/main/java/com/bigboxer23/eco_net/IEcoNetConstants.java b/src/main/java/com/bigboxer23/eco_net/IEcoNetConstants.java index 730abac..6be56c7 100644 --- a/src/main/java/com/bigboxer23/eco_net/IEcoNetConstants.java +++ b/src/main/java/com/bigboxer23/eco_net/IEcoNetConstants.java @@ -6,6 +6,9 @@ public interface IEcoNetConstants { String baseUrl = "https://rheem.clearblade.com/api/v/1/"; String CLEAR_BLADE_SYSTEM_KEY = "e2e699cb0bb0bbb88fc8858cb5a401"; String CLEAR_BLADE_SYSTEM_SECRET = "E2E699CB0BE6C6FADDB1B0BC9A20"; + String TYPE = "com.econet.econetconsumerandroid"; + String VERSION = "6.0.0-375-01b4870e"; + String CLEAR_BLADE_USER_TOKEN = "ClearBlade-UserToken"; int TIMEOUT = 60000; int QOS = 2; } diff --git a/src/main/java/com/bigboxer23/eco_net/data/Equipment.java b/src/main/java/com/bigboxer23/eco_net/data/Equipment.java index c5a207f..a1b8e1c 100644 --- a/src/main/java/com/bigboxer23/eco_net/data/Equipment.java +++ b/src/main/java/com/bigboxer23/eco_net/data/Equipment.java @@ -26,4 +26,14 @@ public class Equipment { @Json(name = "@MODE") private Modes modes; + + @Json(name = "@RUNNING") + private String compressorStatus; + + @Json(name = "@HOTWATER") + private String tankStatusUrl; + + public float getTankStatus() { + return TankStatus.getTankStatus(tankStatusUrl); + } } diff --git a/src/main/java/com/bigboxer23/eco_net/data/TankStatus.java b/src/main/java/com/bigboxer23/eco_net/data/TankStatus.java new file mode 100644 index 0000000..25ee955 --- /dev/null +++ b/src/main/java/com/bigboxer23/eco_net/data/TankStatus.java @@ -0,0 +1,21 @@ +package com.bigboxer23.eco_net.data; + +import org.apache.commons.lang3.StringUtils; + +/** */ +public class TankStatus { + private static final String EMPTY = "ic_tank_zero_percent_v2.png.png"; + private static final String ONE_THIRD = "ic_tank_ten_percent_v2.png"; + private static final String TWO_THIRD = "ic_tank_fourty_percent_v2.png"; + private static final String FULL = "ic_tank_hundread_percent_v2.png"; + + public static float getTankStatus(String tankStatusUrl) { + return switch (StringUtils.defaultIfEmpty(tankStatusUrl, "")) { + case EMPTY -> 0.0f; + case ONE_THIRD -> .33f; + case TWO_THIRD -> .66f; + case FULL -> 1f; + default -> -1f; + }; + } +} diff --git a/src/test/java/com/bigboxer23/eco_net/EcoNetApiTest.java b/src/test/java/com/bigboxer23/eco_net/EcoNetApiTest.java index 7590f99..a9a7089 100644 --- a/src/test/java/com/bigboxer23/eco_net/EcoNetApiTest.java +++ b/src/test/java/com/bigboxer23/eco_net/EcoNetApiTest.java @@ -63,6 +63,21 @@ public void getUserData() { .get(0) .getSetpoint() .getValue()); + assertTrue(result.get() + .getResults() + .getLocations() + .get(0) + .getEquipments() + .get(0) + .getTankStatus() + >= 0); + assertNotNull(result.get() + .getResults() + .getLocations() + .get(0) + .getEquipments() + .get(0) + .getCompressorStatus()); } @Test From 3e74fe4d69f9114dd13613953bc16c81fa1fc51e Mon Sep 17 00:00:00 2001 From: Matt Jones Date: Mon, 6 Jan 2025 18:19:55 -0600 Subject: [PATCH 2/2] feat: add ability to get the current tank's compressor status and fill level --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 136abf3..d7795c5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.bigboxer23 econetapi-java - 1.0.4 + 1.0.5 econet-java https://github.com/bigboxer23/econetapi-java