[Konnected] Fixed null pointer exception on state update with missing state (#13329)

* 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>
This commit is contained in:
Haavar Valeur 2022-08-29 03:45:25 -07:00 committed by GitHub
parent 449d3518f6
commit 07e2b69e79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 20 deletions

View File

@ -29,7 +29,7 @@ public class KonnectedModuleGson {
private String zone; private String zone;
private String temp; private String temp;
private String humi; private String humi;
private String state; private Integer state;
@SerializedName("Auth_Token") @SerializedName("Auth_Token")
private String authToken; private String authToken;
private String momentary; private String momentary;
@ -79,11 +79,11 @@ public class KonnectedModuleGson {
this.humi = setHumi; this.humi = setHumi;
} }
public String getState() { public Integer getState() {
return state; return state;
} }
public void setState(String setState) { public void setState(Integer setState) {
this.state = setState; this.state = setState;
} }

View File

@ -94,7 +94,7 @@ public class KonnectedHandler extends BaseThingHandler {
int sendCommand = (OnOffType.OFF.compareTo((OnOffType) command)); int sendCommand = (OnOffType.OFF.compareTo((OnOffType) command));
logger.debug("The command being sent to zone {} for channel:{} is {}", zone, channelUID.getAsString(), logger.debug("The command being sent to zone {} for channel:{} is {}", zone, channelUID.getAsString(),
sendCommand); sendCommand);
sendActuatorCommand(Integer.toString(sendCommand), zone, channelUID); sendActuatorCommand(sendCommand, zone, channelUID);
} }
} else if (command instanceof RefreshType) { } else if (command instanceof RefreshType) {
// check to see if handler has been initialized before attempting to get state of pin, else wait one minute // 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 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. // 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)) { if (channelType.contains(CHANNEL_SWITCH) || channelType.contains(CHANNEL_ACTUATOR)) {
OnOffType onOffType = event.getState().equalsIgnoreCase(getOnState(channel)) ? OnOffType.ON Integer state = event.getState();
: OnOffType.OFF; logger.debug("The event state is: {}", state);
if (state != null) {
OnOffType onOffType = state == getOnState(channel) ? OnOffType.ON : OnOffType.OFF;
updateState(channelId, onOffType); updateState(channelId, onOffType);
}
} else if (channelType.contains(CHANNEL_HUMIDITY)) { } else if (channelType.contains(CHANNEL_HUMIDITY)) {
// if the state is of type number then this means it is the humidity channel of the dht22 // 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)); 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 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 * @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 { try {
Channel channel = getThing().getChannel(channelId.getId()); Channel channel = getThing().getChannel(channelId.getId());
if (!(channel == null)) { 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 // 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. // they exist on the configuration.
if (scommand.equals(getOnState(channel))) { if (scommand == getOnState(channel)) {
if (configuration.get(CHANNEL_ACTUATOR_TIMES) == null) { if (configuration.get(CHANNEL_ACTUATOR_TIMES) == null) {
logger.debug( logger.debug(
"The times configuration was not set for channelID: {}, not adding it to the payload.", "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) { private int getOnState(Channel channel) {
String config = (String) channel.getConfiguration().get(CHANNEL_ONVALUE); return ((Number) channel.getConfiguration().get(CHANNEL_ONVALUE)).intValue();
if (config == null) {
return "1";
} else {
return config;
}
} }
} }

View File

@ -37,7 +37,7 @@
<option value="alarm_out">Alarm/Out</option> <option value="alarm_out">Alarm/Out</option>
</options> </options>
</parameter> </parameter>
<parameter name="onvalue" type="text"> <parameter name="onvalue" type="integer">
<label>On Value</label> <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 <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> value leave at the default of 1 and sensors that activate with a low value set to 0.</description>
@ -122,7 +122,7 @@
<option value="alarm_out">Alarm/Out</option> <option value="alarm_out">Alarm/Out</option>
</options> </options>
</parameter> </parameter>
<parameter name="onvalue" type="text"> <parameter name="onvalue" type="integer">
<label>On Value</label> <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 <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> command set to 1 and actuators that activate with a low value set to 0.</description>
@ -171,7 +171,7 @@
<option value="12">12</option> <option value="12">12</option>
</options> </options>
</parameter> </parameter>
<parameter name="onvalue" type="text"> <parameter name="onvalue" type="integer">
<label>On Value</label> <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 <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> value, leave at the default of 1 and sensors that activate with a low value set to 0.</description>
@ -206,7 +206,7 @@
<option value="alarm2_out2">Alarm2/Out2</option> <option value="alarm2_out2">Alarm2/Out2</option>
</options> </options>
</parameter> </parameter>
<parameter name="onvalue" type="text"> <parameter name="onvalue" type="integer">
<label>On Value</label> <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 <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> command set to 1 and actuators that activate with a low value set to 0.</description>