[neohub] check for connection refused (#12906)
Signed-off-by: Andrew Fiddian-Green <software@whitebear.ch>
This commit is contained in:
parent
52bb4b3715
commit
e24ca5708b
|
@ -39,7 +39,15 @@ Before the binding can communicate with the hub, the following Configuration Par
|
|||
| portNumber | Port number of the NeoHub (Default=4242) |
|
||||
| pollingInterval | Time (seconds) between polling requests to the NeoHub (Min=4, Max=60, Default=60) |
|
||||
| socketTimeout | Time (seconds) to allow for TCP socket connections to the hub to succeed (Min=4, Max=20, Default=5) |
|
||||
| preferLegacyApi | Prefer if the binding should use the legacy API; this only works so long as the legacy API is still supported; otherwise the binding will switch to the new API anyway (Default=false) |
|
||||
| preferLegacyApi | ADVANCED: Prefer the binding to use older API calls; if these are not supported, it switches to the new calls (Default=false) |
|
||||
|
||||
## Connection Refused Errors
|
||||
|
||||
From early 2022 Heatmiser introduced NeoHub firmware that has the ability to enable / disable the NeoHub `portNumber` 4242.
|
||||
If this port is disabled the OpenHAB binding cannot connect and the binding will report a *"Connection Refused"* warning in the log.
|
||||
In prior firmware versions the port was always enabled.
|
||||
But in the new firmware the port is initially enabled on power up but if no communication occurs for 48 hours it is automatically disabled.
|
||||
Alternatively the Heatmiser mobile App has a setting (Settings | System | API Access | Legacy API Enable | On) whereby the port can be permanently enabled.
|
||||
|
||||
## Thing Configuration for "NeoStat" and "NeoPlug"
|
||||
|
||||
|
|
|
@ -157,6 +157,7 @@ public class NeoHubBindingConstants {
|
|||
public static final String CMD_CODE_TIMER = "{\"TIMER_%s\":\"%s\"}";
|
||||
public static final String CMD_CODE_MANUAL = "{\"MANUAL_%s\":\"%s\"}";
|
||||
public static final String CMD_CODE_READ_DCB = "{\"READ_DCB\":100}";
|
||||
public static final String CMD_CODE_FIRMWARE = "{\"FIRMWARE\":0}";
|
||||
|
||||
/*
|
||||
* note: from NeoHub rev2.6 onwards the INFO command is "deprecated" and it
|
||||
|
|
|
@ -58,6 +58,8 @@ import com.google.gson.JsonSyntaxException;
|
|||
@NonNullByDefault
|
||||
public class NeoHubHandler extends BaseBridgeHandler {
|
||||
|
||||
private static final String SEE_README = "See documentation chapter \"Connection Refused Errors\"";
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(NeoHubHandler.class);
|
||||
|
||||
private final Map<String, Boolean> connectionStates = new HashMap<>();
|
||||
|
@ -140,9 +142,26 @@ public class NeoHubHandler extends BaseBridgeHandler {
|
|||
logger.debug("hub '{}' preferLegacyApi={}", getThing().getUID(), config.preferLegacyApi);
|
||||
}
|
||||
|
||||
socket = new NeoHubSocket(config.hostName, config.portNumber, config.socketTimeout);
|
||||
NeoHubSocket socket = this.socket = new NeoHubSocket(config.hostName, config.portNumber, config.socketTimeout);
|
||||
this.config = config;
|
||||
|
||||
/*
|
||||
* Try to 'ping' the hub, and if there is a 'connection refused', it is probably due to the mobile App |
|
||||
* Settings | Legacy API Enable switch not being On, so go offline and log a warning message.
|
||||
*/
|
||||
try {
|
||||
socket.sendMessage(CMD_CODE_FIRMWARE);
|
||||
} catch (IOException e) {
|
||||
String error = e.getMessage();
|
||||
if (error != null && error.toLowerCase().startsWith("connection refused")) {
|
||||
logger.warn("CONNECTION REFUSED!! (hub '{}') => {}", getThing().getUID(), SEE_README);
|
||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, SEE_README);
|
||||
return;
|
||||
}
|
||||
} catch (NeoHubException e) {
|
||||
// NeoHubException won't actually occur here
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("hub '{}' start background polling..", getThing().getUID());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue