]> git.basschouten.com Git - openhab-addons.git/commitdiff
[Konnected] Fixed null pointer exception on state update with missing state (#13329)
authorHaavar Valeur <github.com@haavar.com>
Mon, 29 Aug 2022 10:45:25 +0000 (03:45 -0700)
committerGitHub <noreply@github.com>
Mon, 29 Aug 2022 10:45:25 +0000 (12:45 +0200)
* Fixed null pointer exception on state update with missing state
* Added variable for state. Changed onvalue configuration type to integer.

Signed-off-by: Haavar Valeur <haavar@haavar.com>
bundles/org.openhab.binding.konnected/src/main/java/org/openhab/binding/konnected/internal/gson/KonnectedModuleGson.java
bundles/org.openhab.binding.konnected/src/main/java/org/openhab/binding/konnected/internal/handler/KonnectedHandler.java
bundles/org.openhab.binding.konnected/src/main/resources/OH-INF/thing/thing-types.xml

index 34e3459ca3368c283a72d616a80a9b289466f349..5b9fc7ff8414170e269c7cb246cde98bfab45f05 100644 (file)
@@ -29,7 +29,7 @@ public class KonnectedModuleGson {
     private String zone;
     private String temp;
     private String humi;
-    private String state;
+    private Integer state;
     @SerializedName("Auth_Token")
     private String authToken;
     private String momentary;
@@ -79,11 +79,11 @@ public class KonnectedModuleGson {
         this.humi = setHumi;
     }
 
-    public String getState() {
+    public Integer getState() {
         return state;
     }
 
-    public void setState(String setState) {
+    public void setState(Integer setState) {
         this.state = setState;
     }
 
index 9010e2a0f5ef9af96504dfcf13c25ff9a3e6cb08..3b7bbd3893c85d8fa6d939d90013f863e26c01f6 100644 (file)
@@ -94,7 +94,7 @@ public class KonnectedHandler extends BaseThingHandler {
                 int sendCommand = (OnOffType.OFF.compareTo((OnOffType) command));
                 logger.debug("The command being sent to zone {} for channel:{}  is {}", zone, channelUID.getAsString(),
                         sendCommand);
-                sendActuatorCommand(Integer.toString(sendCommand), zone, channelUID);
+                sendActuatorCommand(sendCommand, zone, channelUID);
             }
         } else if (command instanceof RefreshType) {
             // check to see if handler has been initialized before attempting to get state of pin, else wait one minute
@@ -137,9 +137,12 @@ public class KonnectedHandler extends BaseThingHandler {
                 // check if the itemType has been defined for the zone received
                 // check the itemType of the Zone, if Contact, send the State if Temp send Temp, etc.
                 if (channelType.contains(CHANNEL_SWITCH) || channelType.contains(CHANNEL_ACTUATOR)) {
-                    OnOffType onOffType = event.getState().equalsIgnoreCase(getOnState(channel)) ? OnOffType.ON
-                            : OnOffType.OFF;
-                    updateState(channelId, onOffType);
+                    Integer state = event.getState();
+                    logger.debug("The event state is: {}", state);
+                    if (state != null) {
+                        OnOffType onOffType = state == getOnState(channel) ? OnOffType.ON : OnOffType.OFF;
+                        updateState(channelId, onOffType);
+                    }
                 } else if (channelType.contains(CHANNEL_HUMIDITY)) {
                     // if the state is of type number then this means it is the humidity channel of the dht22
                     updateState(channelId, new QuantityType<>(Double.parseDouble(event.getHumi()), Units.PERCENT));
@@ -415,7 +418,7 @@ public class KonnectedHandler extends BaseThingHandler {
      * @param scommand the string command, either 0 or 1 to send to the actutor pin on the Konnected module
      * @param zone the zone to send the command to on the Konnected Module
      */
-    private void sendActuatorCommand(String scommand, String zone, ChannelUID channelId) {
+    private void sendActuatorCommand(Integer scommand, String zone, ChannelUID channelId) {
         try {
             Channel channel = getThing().getChannel(channelId.getId());
             if (!(channel == null)) {
@@ -429,7 +432,7 @@ public class KonnectedHandler extends BaseThingHandler {
 
                 // check to see if this is an On Command type, if so add the momentary, pause, times to the payload if
                 // they exist on the configuration.
-                if (scommand.equals(getOnState(channel))) {
+                if (scommand == getOnState(channel)) {
                     if (configuration.get(CHANNEL_ACTUATOR_TIMES) == null) {
                         logger.debug(
                                 "The times configuration was not set for channelID: {}, not adding it to the payload.",
@@ -522,12 +525,7 @@ public class KonnectedHandler extends BaseThingHandler {
         }
     }
 
-    private String getOnState(Channel channel) {
-        String config = (String) channel.getConfiguration().get(CHANNEL_ONVALUE);
-        if (config == null) {
-            return "1";
-        } else {
-            return config;
-        }
+    private int getOnState(Channel channel) {
+        return ((Number) channel.getConfiguration().get(CHANNEL_ONVALUE)).intValue();
     }
 }
index 64f74385c3febf060a6a483a1d0ab0c3a4857b4b..bb53cc9f94379b9bd66806d68e472cd941bd1a18 100644 (file)
@@ -37,7 +37,7 @@
                                        <option value="alarm_out">Alarm/Out</option>
                                </options>
                        </parameter>
-                       <parameter name="onvalue" type="text">
+                       <parameter name="onvalue" type="integer">
                                <label>On Value</label>
                                <description>The value that will be treated by the binding as the on value. For sensors that activate with a high
                                        value leave at the default of 1 and sensors that activate with a low value set to 0.</description>
                                        <option value="alarm_out">Alarm/Out</option>
                                </options>
                        </parameter>
-                       <parameter name="onvalue" type="text">
+                       <parameter name="onvalue" type="integer">
                                <label>On Value</label>
                                <description>The value that will be treated by the binding as an on command. For actuators that activate with a high
                                        command set to 1 and actuators that activate with a low value set to 0.</description>
                                        <option value="12">12</option>
                                </options>
                        </parameter>
-                       <parameter name="onvalue" type="text">
+                       <parameter name="onvalue" type="integer">
                                <label>On Value</label>
                                <description>The value that will be treated by the binding as the on value. For sensors that activate with a high
                                        value, leave at the default of 1 and sensors that activate with a low value set to 0.</description>
                                        <option value="alarm2_out2">Alarm2/Out2</option>
                                </options>
                        </parameter>
-                       <parameter name="onvalue" type="text">
+                       <parameter name="onvalue" type="integer">
                                <label>On Value</label>
                                <description>The value that will be treated by the binding as an on command. For actuators that activate with a high
                                        command set to 1 and actuators that activate with a low value set to 0.</description>