From e0511a6ea78377b70def180c295db247e2174e67 Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 10:11:59 +0100 Subject: [PATCH 1/9] Patched classes AdvancedStatusInfo and BaseStatusInfo AdvancedStatusInfo - Patch array.length < 46 BaseStatusInfo - Patch autoMode for Beok devices - Added log to constructor --- .gitignore | 1 + .../blapi/dev/hysen/AdvancedStatusInfo.java | 21 ++++++++++--------- .../mob41/blapi/dev/hysen/BaseStatusInfo.java | 20 +++++++++++++++++- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 3fe9858..060b3f5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .classpath .project .settings/ +/bin/ diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java b/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java index dab44ad..fca37d7 100644 --- a/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java +++ b/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java @@ -32,16 +32,17 @@ protected AdvancedStatusInfo(byte[] payload) { this.min = payload[20]; this.sec = payload[21]; this.dayofweek = payload[22]; - - for (int i = 0; i < 6; i++) { - this.periods[i] = new Period(i, payload); - this.weekday[i] = this.periods[i]; - - } - - for (int i = 6; i <= 7; i++) { - this.periods[i] = new Period(i, payload); - this.weekend[i - 6] = this.periods[i]; + if (payload.length>=46) { + for (int i = 0; i < 6; i++) { + this.periods[i] = new Period(i, payload); + this.weekday[i] = this.periods[i]; + + } + + for (int i = 6; i <= 7; i++) { + this.periods[i] = new Period(i, payload); + this.weekend[i - 6] = this.periods[i]; + } } } diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java index 274ccf9..c8e5188 100644 --- a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java +++ b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java @@ -1,5 +1,8 @@ package com.github.mob41.blapi.dev.hysen; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Base set of status codes * @@ -8,6 +11,10 @@ * @author alpapad */ public class BaseStatusInfo { + /** + * The specific logger for this class + */ + protected static final Logger log = LoggerFactory.getLogger(BaseStatusInfo.class); // remote_lock protected final boolean remoteLock; protected final boolean power; @@ -44,14 +51,25 @@ public class BaseStatusInfo { // external_temp protected final double externalTemp; + private static String bytesToString(byte[] hashInBytes) { + + StringBuilder sb = new StringBuilder(); + for (byte b : hashInBytes) { + sb.append(String.format("%04d ", b)); + } + return sb.toString(); + + } + protected BaseStatusInfo(byte[] payload) { + log.debug("payload: {}",bytesToString(payload)); this.remoteLock = byteToBool((byte) (payload[3] & 0x1)); this.power = byteToBool((byte) (payload[4] & 1)); this.active = byteToBool((byte) ((payload[4] >> 4) & 1)); this.manualTemp = byteToBool((byte) ((payload[4] >> 6) & 1)); this.roomTemp = (payload[5] & 0xff) / 2.0; this.thermostatTemp = (payload[6] & 0xff) / 2.0; - this.autoMode = byteToBool((byte) (payload[7] & 15)); + this.autoMode = (byte)(payload[7] & 15) != 0; this.loopMode = LoopMode.fromValue((byte) (((payload[7] >> 4)) - 1)); this.sensorControl = SensorControl.fromValue(payload[8]); this.osv = payload[9]; From aab1060fc7afda2c2c17c0b48f37128dbcaf87bd Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 16:57:13 +0100 Subject: [PATCH 2/9] JDK11 Patch --- settings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/settings.xml b/settings.xml index 70317d3..c135f8b 100644 --- a/settings.xml +++ b/settings.xml @@ -41,7 +41,8 @@ true - gpg2 + + C:\Program Files (x86)\GnuPG\bin\gpg.exe ${env.CI_KEY_NAME} ${env.CI_KEY_PASSPHRASE} From 798ccf0a30701f6dc22761c8f111c3c051672fdc Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 17:02:29 +0100 Subject: [PATCH 3/9] JDK11 Patch --- pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pom.xml b/pom.xml index f7862f2..77e48fd 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,21 @@ 1.7.22 test + + javax.xml.bind + jaxb-api + 2.3.0 + + + com.sun.xml.bind + jaxb-core + 2.3.0 + + + com.sun.xml.bind + jaxb-impl + 2.3.0 + From a513dbd8f71f8147ec1992369ac42cab1f24c878 Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 17:04:13 +0100 Subject: [PATCH 4/9] Update settings.xml --- settings.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/settings.xml b/settings.xml index c135f8b..6e7b17e 100644 --- a/settings.xml +++ b/settings.xml @@ -41,11 +41,10 @@ true - - C:\Program Files (x86)\GnuPG\bin\gpg.exe + gpg2 ${env.CI_KEY_NAME} ${env.CI_KEY_PASSPHRASE} - \ No newline at end of file + From d4e67139cd41dfe3611279faae1499370c86ab68 Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 19:23:43 +0100 Subject: [PATCH 5/9] JDK11 pom.xml patch --- pom.xml | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 77e48fd..7001829 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,7 @@ org.apache.maven.plugins maven-source-plugin - 2.2.1 + 3.2.0 attach-sources @@ -130,7 +130,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.1.1 attach-javadocs @@ -143,7 +143,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.5 + 1.6 sign-artifacts @@ -154,18 +154,11 @@ - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - html - xml - - - - + + org.jacoco + jacoco-maven-plugin + 0.8.6-SNAPSHOT + From d7c81e846a30868706f4490f3bbb937b9f190747 Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 19:38:48 +0100 Subject: [PATCH 6/9] Rollback to jdk8 --- .travis.yml | 3 + pom.xml | 174 +++++++++++++++++++++++++--------------------------- 2 files changed, 86 insertions(+), 91 deletions(-) diff --git a/.travis.yml b/.travis.yml index a6133a7..40d138d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ language: java +jdk: +- openjdk8 + install: true before_install: diff --git a/pom.xml b/pom.xml index 7001829..88785b6 100644 --- a/pom.xml +++ b/pom.xml @@ -39,10 +39,10 @@ http://github.com/mob41/broadlink-java-api - - MIT License - http://www.opensource.org/licenses/mit-license.php - + + MIT License + http://www.opensource.org/licenses/mit-license.php + @@ -55,26 +55,26 @@ - scm:git:git://github.com/mob41/broadlink-java-api.git - scm:git:ssh://github.com:mob41/broadlink-java-api.git - http://github.com/mob41/broadlink-java-api/tree/master + scm:git:git://github.com/mob41/broadlink-java-api.git + scm:git:ssh://github.com:mob41/broadlink-java-api.git + http://github.com/mob41/broadlink-java-api/tree/master - + - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + UTF-8 - 1.8 - 1.8 + 1.8 + 1.8 @@ -85,82 +85,74 @@ test - org.slf4j - slf4j-api - 1.7.22 + org.slf4j + slf4j-api + 1.7.22 + + + org.slf4j + slf4j-simple + 1.7.22 + test - - org.slf4j - slf4j-simple - 1.7.22 - test - - - javax.xml.bind - jaxb-api - 2.3.0 - - - com.sun.xml.bind - jaxb-core - 2.3.0 - - - com.sun.xml.bind - jaxb-impl - 2.3.0 - - + - - - org.apache.maven.plugins - maven-source-plugin - 3.2.0 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.1.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - - org.jacoco - jacoco-maven-plugin - 0.8.6-SNAPSHOT - - + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + html + xml + + + + + - + 1.0.1 From 21c06fa7ea624bc2ea00523fb4eab0d49c815a66 Mon Sep 17 00:00:00 2001 From: molpie Date: Fri, 10 Jan 2020 19:40:41 +0100 Subject: [PATCH 7/9] No spaces --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 40d138d..b452d95 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: java jdk: -- openjdk8 +- openjdk8 install: true From 92d0c7549429b5082c044c7b19729d9e3e0ce975 Mon Sep 17 00:00:00 2001 From: molinaro Date: Wed, 24 Jun 2020 17:52:53 +0200 Subject: [PATCH 8/9] Patch payload and manage rtdOpen field --- pom.xml | 144 +++++++++--------- .../blapi/dev/hysen/AdvancedStatusInfo.java | 42 +++-- .../mob41/blapi/dev/hysen/BaseStatusInfo.java | 26 +++- .../github/mob41/blapi/dev/hysen/Period.java | 16 +- .../blapi/pkt/cmd/hysen/BaseHysenCommand.java | 27 ++-- 5 files changed, 149 insertions(+), 106 deletions(-) diff --git a/pom.xml b/pom.xml index 88785b6..f7862f2 100644 --- a/pom.xml +++ b/pom.xml @@ -39,10 +39,10 @@ http://github.com/mob41/broadlink-java-api - - MIT License - http://www.opensource.org/licenses/mit-license.php - + + MIT License + http://www.opensource.org/licenses/mit-license.php + @@ -55,26 +55,26 @@ - scm:git:git://github.com/mob41/broadlink-java-api.git - scm:git:ssh://github.com:mob41/broadlink-java-api.git - http://github.com/mob41/broadlink-java-api/tree/master + scm:git:git://github.com/mob41/broadlink-java-api.git + scm:git:ssh://github.com:mob41/broadlink-java-api.git + http://github.com/mob41/broadlink-java-api/tree/master - + - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + UTF-8 - 1.8 - 1.8 + 1.8 + 1.8 @@ -85,61 +85,61 @@ test - org.slf4j - slf4j-api - 1.7.22 - - - org.slf4j - slf4j-simple - 1.7.22 - test + org.slf4j + slf4j-api + 1.7.22 + + org.slf4j + slf4j-simple + 1.7.22 + test + - + - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + org.codehaus.mojo cobertura-maven-plugin 2.7 @@ -151,8 +151,8 @@ - + - + 1.0.1 diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java b/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java index fca37d7..2e7f280 100644 --- a/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java +++ b/src/main/java/com/github/mob41/blapi/dev/hysen/AdvancedStatusInfo.java @@ -27,23 +27,33 @@ public class AdvancedStatusInfo extends BaseStatusInfo { protected AdvancedStatusInfo(byte[] payload) { super(payload); + if ((payload[19]>=0)&&(payload[19]<24)) + this.hour = payload[19]; + else + this.hour = 0; + if ((payload[20]>=0)&&(payload[20]<60)) + this.min = payload[20]; + else + this.min = 0; + if ((payload[21]>=0)&&(payload[21]<60)) + this.sec = payload[21]; + else + this.sec = 0; + if ((payload[22]>0)&&(payload[22]<=7)) + this.dayofweek = payload[22]; + else + this.dayofweek = 1; + for (int i = 0; i < 6; i++) { + this.periods[i] = new Period(i, payload); + this.weekday[i] = this.periods[i]; - this.hour = payload[19]; - this.min = payload[20]; - this.sec = payload[21]; - this.dayofweek = payload[22]; - if (payload.length>=46) { - for (int i = 0; i < 6; i++) { - this.periods[i] = new Period(i, payload); - this.weekday[i] = this.periods[i]; - - } - - for (int i = 6; i <= 7; i++) { - this.periods[i] = new Period(i, payload); - this.weekend[i - 6] = this.periods[i]; - } } + + for (int i = 6; i <= 7; i++) { + this.periods[i] = new Period(i, payload); + this.weekend[i - 6] = this.periods[i]; + } + } public short getHour() { @@ -76,7 +86,7 @@ public Period[] getPeriods() { @Override public String toString() { - return "StatusInfo [remote lock=" + remoteLock + ",\n power=" + power + ",\n active=" + active + return "StatusInfo [remote lock=" + remoteLock + ",\n power=" + power + ",\n active=" + active + ",\n rtd_open=" + rtdOpen + ",\n manual temperature=" + manualTemp + ",\n room temp=" + roomTemp + ",\n thermostat temp=" + thermostatTemp + ",\n auto_mode=" + autoMode + ",\n loop_mode=" + loopMode + ",\n SensorControl=" + sensorControl + ",\n osv=" + osv + ",\n dif=" + dif + ",\n svh=" + svh + ",\n svl=" + svl diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java index c8e5188..2a16ab8 100644 --- a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java +++ b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseStatusInfo.java @@ -19,6 +19,7 @@ public class BaseStatusInfo { protected final boolean remoteLock; protected final boolean power; protected final boolean active; + protected final boolean rtdOpen; // temp_manual protected final boolean manualTemp; // room_temp @@ -51,6 +52,16 @@ public class BaseStatusInfo { // external_temp protected final double externalTemp; + private String bytesToHex(byte[] hashInBytes) { + + StringBuilder sb = new StringBuilder(); + for (byte b : hashInBytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + + } + private static String bytesToString(byte[] hashInBytes) { StringBuilder sb = new StringBuilder(); @@ -61,11 +72,19 @@ private static String bytesToString(byte[] hashInBytes) { } + private static byte[] toIndexArray(byte[] array) { + byte index[] = new byte[array.length]; + for(byte i = 0;i> 4) & 1)); + this.rtdOpen = byteToBool((byte) ((payload[4] >> 5) & 1)); this.manualTemp = byteToBool((byte) ((payload[4] >> 6) & 1)); this.roomTemp = (payload[5] & 0xff) / 2.0; this.thermostatTemp = (payload[6] & 0xff) / 2.0; @@ -81,7 +100,6 @@ protected BaseStatusInfo(byte[] payload) { tempAdj = (32767 - tempAdj); } this.roomTempAdjustment = tempAdj; - this.antiFreezing = AntiFreezing.fromValue(payload[15]); this.powerOnMemory = PowerOnMemory.fromValue(payload[16]); this.fac = payload[17]; @@ -99,6 +117,10 @@ public boolean getPower() { public boolean getActive() { return active; } + + public boolean getRtdOpen() { + return rtdOpen; + } public boolean getManualTemp() { return manualTemp; @@ -261,7 +283,7 @@ public double getExternalTemp() { @Override public String toString() { - return "BaseStatusInfo [\nremote lock=" + remoteLock + ",\n power=" + power + ",\n active=" + active + return "BaseStatusInfo [\nremote lock=" + remoteLock + ",\n power=" + power + ",\n active=" + active + ",\n rtd_open=" + rtdOpen + ",\n manual temp=" + manualTemp + ",\n room temp=" + roomTemp + ",\n thermostat temp=" + thermostatTemp + ",\n auto_mode=" + autoMode + ",\n loop_mode=" + loopMode + ",\n sensor=" + sensorControl + ",\n osv=" + osv + ",\n dif=" + dif + ",\n svh=" + svh + ",\n svl=" + svl diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/Period.java b/src/main/java/com/github/mob41/blapi/dev/hysen/Period.java index 157566a..4e047ef 100644 --- a/src/main/java/com/github/mob41/blapi/dev/hysen/Period.java +++ b/src/main/java/com/github/mob41/blapi/dev/hysen/Period.java @@ -13,9 +13,19 @@ public class Period { private final double temp; protected Period(int offset, byte[] payload) { - this.startHour = payload[2 * offset + 23]; - this.startMinute = payload[2 * offset + 24]; - this.temp = payload[offset + 39] / 2.0; + int iStartHour = 2 * offset + 23; + int iStartMin = 2 * offset + 24; + int iTemp = offset + 39; + if ((iStartHour34) { + log.debug(this.getClass().getSimpleName() + " received encrypted bytes: " + + DatatypeConverter.printHexBinary(data)); + + int err = data[0x22] | (data[0x23] << 8); + + if (err == 0) { + byte[] pl = device.decryptFromDeviceMessage(data); + log.debug(this.getClass().getSimpleName() + " received bytes (decrypted): " + + DatatypeConverter.printHexBinary(pl)); + return Arrays.copyOfRange(pl, 2, pl.length); + } else { + log.warn(this.getClass().getSimpleName() + " received an error: " + Integer.toHexString(err) + " / " + err); + } } return null; } From 702b71455a9a2d5d84619e5614ebaee4ea62ac77 Mon Sep 17 00:00:00 2001 From: molinaro Date: Mon, 12 Oct 2020 19:04:55 +0200 Subject: [PATCH 9/9] Resolved java.lang.NegativeArraySizeException --- .../java/com/github/mob41/blapi/BLDevice.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/mob41/blapi/BLDevice.java b/src/main/java/com/github/mob41/blapi/BLDevice.java index da60a5f..195be8e 100644 --- a/src/main/java/com/github/mob41/blapi/BLDevice.java +++ b/src/main/java/com/github/mob41/blapi/BLDevice.java @@ -939,14 +939,16 @@ protected byte[] decryptFromDeviceMessage(byte[] encData) throws Exception { * The ending position to be picked * @return The bytes array picked with length (end - start) */ - public static byte[] subbytes(byte[] data, int start, int end) { - byte[] out = new byte[end - start]; - - int outi = 0; - for (int i = start; i < end; i++, outi++) { - out[outi] = data[i]; - } - + public static byte[] subbytes(byte[] data, int start, int end) { + byte[] out = null; + if ((end-start)>0) { + out = new byte[end - start]; + + int outi = 0; + for (int i = start; i < end; i++, outi++) { + out[outi] = data[i]; + } + } return out; }