Skip to content

Commit

Permalink
[phc] Fix OH3 bug and add support for multible commands (openhab#11554)
Browse files Browse the repository at this point in the history
* Remove advanced option in group-type

Signed-off-by: Jonas Hohaus <[email protected]>

* Add support for multiple commands in one message

Signed-off-by: Jonas Hohaus <[email protected]>
  • Loading branch information
gnlpfjh authored and andan67 committed Nov 5, 2022
1 parent 5b8a177 commit dd3ae23
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,9 @@ private void processReceivedBytes() {
byte sizeToggle = buffer.get();

// read length of command and check if makes sense
if ((sizeToggle < 1 || sizeToggle > 3) && ((sizeToggle & 0xFF) < 0x81 || (sizeToggle & 0xFF) > 0x83)) {
int size = (sizeToggle & 0x7F);

if (!isSizeToggleValid(sizeToggle, module)) {
if (logger.isDebugEnabled()) {
logger.debug("get invalid sizeToggle: {}", new String(HexUtils.byteToHex(sizeToggle)));
}
Expand All @@ -220,7 +222,6 @@ private void processReceivedBytes() {
}

// read toggle, size and command
int size = (sizeToggle & 0x7F);
boolean toggle = (sizeToggle & 0x80) == 0x80;

logger.debug("get toggle: {}", toggle);
Expand Down Expand Up @@ -270,6 +271,24 @@ private void processReceivedBytes() {
}
}

private boolean isSizeToggleValid(byte sizeToggle, byte module) {
int unsigned = sizeToggle & 0xFF;

if (unsigned > 0 && unsigned < 4) {
return true;
} else if (unsigned > 0x80 && unsigned < 0x84) {
return true;
} else if ((module & 0xE0) == 0x00) {
if (unsigned > 0 && unsigned < 16) {
return true;
} else if (unsigned > 0x80 && unsigned < 0x90) {
return true;
}
}

return false;
}

private int handleCrcFault(int faultCounter) throws InterruptedException {
if (faultCounter > 0) {
// Normally in this case we read the message repeatedly offset to the real -> skip one to 6 bytes
Expand Down Expand Up @@ -320,23 +339,31 @@ private void processReceivedMsg(byte module, boolean toggle, byte[] command) {

// EM command / update
} else {
if (((module & 0xE0) == 0x00)) {
if ((module & 0xE0) == 0x00) {
sendEmAcknowledge(module, toggle);
logger.debug("send acknowledge (modul, toggle) {} {}", module, toggle);

byte channel = (byte) ((command[0] >>> 4) & 0x0F);
for (byte cmdByte : command) {
byte channel = (byte) ((cmdByte >>> 4) & 0x0F);

OnOffType onOff = OnOffType.OFF;
OnOffType onOff = OnOffType.OFF;

if ((command[0] & 0x0F) == 2) {
onOff = OnOffType.ON;
}
byte cmd = (byte) (cmdByte & 0x0F);
if (cmd % 2 == 0) {
if (cmd == 2) {
onOff = OnOffType.ON;
} else {
logger.debug("Command {} isn't implemented for EM", cmd);
continue;
}
}

QueueObject qo = new QueueObject(PHCBindingConstants.CHANNELS_EM, module, channel, onOff);
QueueObject qo = new QueueObject(PHCBindingConstants.CHANNELS_EM, module, channel, onOff);

// put recognized message into queue
if (!receiveQueue.contains(qo)) {
receiveQueue.offer(qo);
// put recognized message into queue
if (!receiveQueue.contains(qo)) {
receiveQueue.offer(qo);
}
}

// ignore if message not from EM module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
</channels>
</channel-group-type>

<channel-group-type id="jrmTimeChannels" advanced="true">
<channel-group-type id="jrmTimeChannels">
<label>JRM time Channels</label>
<description>Time for shutter channels in seconds with an accuracy of 1/10 seconds.</description>
<channels>
Expand Down

0 comments on commit dd3ae23

Please sign in to comment.