]> git.basschouten.com Git - openhab-addons.git/commitdiff
[yioremote] BugFix sendIRCode action (#9574)
authormiloit <MichaelLoercher@web.de>
Thu, 31 Dec 2020 11:21:49 +0000 (12:21 +0100)
committerGitHub <noreply@github.com>
Thu, 31 Dec 2020 11:21:49 +0000 (12:21 +0100)
* Corrected sendIRCode handler

Signed-off-by: Michael Loercher <MichaelLoercher@web.de>
* Update YIOremoteDockHandler.java

Updating IR receiver switch handler so it's running now

Solved issue during triggering channel while it was disposed

Signed-off-by: Michael Loercher <MichaelLoercher@web.de>
* Update YIOremoteDockHandler.java

Signed-off-by: Michael Loercher <MichaelLoercher@web.de>
bundles/org.openhab.binding.yioremote/src/main/java/org/openhab/binding/yioremote/internal/YIOremoteDockHandler.java

index 41767b87763cc3f2bd1479da91e7c25703d51928..e89dab3244e88241b51fccfb68491508b0e602c7 100644 (file)
@@ -44,7 +44,6 @@ import org.openhab.core.thing.binding.BaseThingHandler;
 import org.openhab.core.thing.binding.ThingHandlerService;
 import org.openhab.core.types.Command;
 import org.openhab.core.types.State;
-import org.openhab.core.types.UnDefType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -117,8 +116,6 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                     recievedJson = convertStringToJsonObject(receivedMessage);
                     if (recievedJson.size() > 0) {
                         if (decodeReceivedMessage(recievedJson)) {
-                            triggerChannel(getChannelUuid(GROUP_OUTPUT, STATUS_STRING_CHANNEL));
-                            updateChannelString(GROUP_OUTPUT, STATUS_STRING_CHANNEL, receivedStatus);
                             switch (yioRemoteDockActualStatus) {
                                 case CONNECTION_ESTABLISHED:
                                 case AUTHENTICATION_PROCESS:
@@ -127,6 +124,12 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                                 case COMMUNICATION_ERROR:
                                     reconnectWebsocket();
                                     break;
+                                case AUTHENTICATION_COMPLETE:
+                                case CHECK_PONG:
+                                case SEND_PING:
+                                    updateChannelString(GROUP_OUTPUT, STATUS_STRING_CHANNEL, receivedStatus);
+                                    triggerChannel(getChannelUuid(GROUP_OUTPUT, STATUS_STRING_CHANNEL));
+                                    break;
                                 default:
                                     break;
                             }
@@ -202,6 +205,7 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                 } else {
                     irCodeReceivedHandler.setCode("");
                 }
+
                 logger.debug("ir_receive message {}", irCodeReceivedHandler.getCode());
                 heartBeat = true;
                 success = true;
@@ -266,6 +270,8 @@ public class YIOremoteDockHandler extends BaseThingHandler {
         if (RECEIVER_SWITCH_CHANNEL.equals(channelUID.getIdWithoutGroup())) {
             switch (yioRemoteDockActualStatus) {
                 case AUTHENTICATION_COMPLETE:
+                case SEND_PING:
+                case CHECK_PONG:
                     if (command == OnOffType.ON) {
                         logger.debug("YIODOCKRECEIVERSWITCH ON procedure: Switching IR Receiver on");
                         sendMessage(YioRemoteMessages.IR_RECEIVER_ON, "");
@@ -283,12 +289,20 @@ public class YIOremoteDockHandler extends BaseThingHandler {
     }
 
     public void sendIRCode(@Nullable String irCode) {
-        if (irCode != null && yioRemoteDockActualStatus.equals(YioRemoteDockHandleStatus.AUTHENTICATION_COMPLETE)) {
-            if (irCode.matches("[0-9]?[0-9][;]0[xX][0-9a-fA-F]+[;][0-9]+[;][0-9]")) {
-                sendMessage(YioRemoteMessages.IR_SEND, irCode);
+        if (irCode != null) {
+            if (yioRemoteDockActualStatus.equals(YioRemoteDockHandleStatus.AUTHENTICATION_COMPLETE)
+                    || yioRemoteDockActualStatus.equals(YioRemoteDockHandleStatus.SEND_PING)
+                    || yioRemoteDockActualStatus.equals(YioRemoteDockHandleStatus.CHECK_PONG)) {
+                if (irCode.matches("[0-9]?[0-9][;]0[xX][0-9a-fA-F]+[;][0-9]+[;][0-9]")) {
+                    sendMessage(YioRemoteMessages.IR_SEND, irCode);
+                } else {
+                    logger.warn("Wrong ir code format {}", irCode);
+                }
             } else {
-                logger.warn("Wrong ir code format {}", irCode);
+                logger.debug("Wrong Dock Statusfor sending  {}", irCode);
             }
+        } else {
+            logger.warn("No ir code {}", irCode);
         }
     }
 
@@ -312,6 +326,8 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                 if (authenticationOk) {
                     yioRemoteDockActualStatus = YioRemoteDockHandleStatus.AUTHENTICATION_COMPLETE;
                     updateStatus(ThingStatus.ONLINE);
+                    updateState(STATUS_STRING_CHANNEL, StringType.EMPTY);
+                    updateState(RECEIVER_SWITCH_CHANNEL, OnOffType.OFF);
                     webSocketPollingJob = scheduler.scheduleWithFixedDelay(this::pollingWebsocketJob, 0, 60,
                             TimeUnit.SECONDS);
                 } else {
@@ -323,7 +339,6 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                 yioRemoteDockActualStatus = YioRemoteDockHandleStatus.COMMUNICATION_ERROR;
                 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
                         "Connection lost no ping from YIO DOCK");
-                updateState(GROUP_OUTPUT, STATUS_STRING_CHANNEL, UnDefType.UNDEF);
                 break;
         }
     }
@@ -367,7 +382,6 @@ public class YIOremoteDockHandler extends BaseThingHandler {
                 yioRemoteDockActualStatus = YioRemoteDockHandleStatus.COMMUNICATION_ERROR;
                 updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
                         "Connection lost no ping from YIO DOCK");
-                updateState(GROUP_OUTPUT, STATUS_STRING_CHANNEL, UnDefType.UNDEF);
                 break;
         }
     }
@@ -456,7 +470,7 @@ public class YIOremoteDockHandler extends BaseThingHandler {
             case IR_SEND:
                 irCodeSendHandler.setCode(messagePayload);
                 yioremoteDockwebSocketClient.sendMessage(irCodeSendMessageHandler.getIRcodeSendMessageString());
-                logger.debug("sending heartBeat message: {}", irCodeSendMessageHandler.getIRcodeSendMessageString());
+                logger.debug("sending IR code: {}", irCodeSendMessageHandler.getIRcodeSendMessageString());
                 break;
         }
     }