Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 2 commits into from
Aug 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -79,11 +79,11 @@ public void setHumi(String setHumi) {
this.humi = setHumi;
}

public String getState() {
public Integer getState() {
return state;
}

public void setState(String setState) {
public void setState(Integer setState) {
this.state = setState;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public void handleCommand(ChannelUID channelUID, Command command) {
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
Expand Down Expand Up @@ -137,9 +137,12 @@ public void handleWebHookEvent(KonnectedModuleGson event) {
// 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));
Expand Down Expand Up @@ -415,7 +418,7 @@ private String updateKonnectedModule() throws KonnectedHttpRetryExceeded {
* @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)) {
Expand All @@ -429,7 +432,7 @@ private void sendActuatorCommand(String scommand, String zone, ChannelUID channe

// 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.",
Expand Down Expand Up @@ -522,12 +525,7 @@ private void sendSetSwitchState(String thingId, String payloadString) throws Kon
}
}

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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -122,7 +122,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 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>
Expand Down Expand Up @@ -171,7 +171,7 @@
<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>
Expand Down Expand Up @@ -206,7 +206,7 @@
<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>
Expand Down