From bfa17206c3b3db9083da9aac919d3047aa367ef8 Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Fri, 22 Mar 2024 13:03:41 +1100 Subject: [PATCH 1/6] Fault find stream Signed-off-by: Matthew Skinner --- .../ipcamera/internal/handler/IpCameraHandler.java | 10 ++++------ .../binding/ipcamera/internal/onvif/OnvifCodec.java | 6 +++--- .../ipcamera/internal/onvif/OnvifConnection.java | 4 ++-- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java index 6a6650de9d5c8..4cae7e57c8009 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java @@ -1588,11 +1588,9 @@ void pollCameraRunnable() { sendHttpGET("/cgi-bin/eventManager.cgi?action=getEventIndexes&code=AudioMutation"); break; case REOLINK_THING: - if (cameraConfig.getNvrChannel() > 0) { - sendHttpGET("/api.cgi?cmd=GetAiState&channel=" + cameraConfig.getNvrChannel() + "&user=" - + cameraConfig.getUser() + "&password=" + cameraConfig.getPassword()); - sendHttpGET("/api.cgi?cmd=GetMdState&channel=" + cameraConfig.getNvrChannel() + "&user=" - + cameraConfig.getUser() + "&password=" + cameraConfig.getPassword()); + if (cameraConfig.getOnvifPort() == 0) { + sendHttpGET("/api.cgi?cmd=GetAiState&channel=" + cameraConfig.getNvrChannel() + reolinkAuth); + sendHttpGET("/api.cgi?cmd=GetMdState&channel=" + cameraConfig.getNvrChannel() + reolinkAuth); } else if (!snapshotPolling) { checkCameraConnection(); } @@ -1777,7 +1775,7 @@ private boolean supportsOnvifEvents() { case ONVIF_THING: return true; case REOLINK_THING: - if (cameraConfig.getNvrChannel() < 1) { + if (cameraConfig.getOnvifPort() > 0) { return true; } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java index 091213c95ae81..6d417be9e238f 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java @@ -65,11 +65,11 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob } if (evt instanceof IdleStateEvent) { IdleStateEvent e = (IdleStateEvent) evt; - logger.trace("IdleStateEvent received: {}", e.state()); + logger.info("IdleStateEvent received: {}", e.state()); onvifConnection.setIsConnected(false); ctx.close(); } else { - logger.trace("Other ONVIF netty channel event occurred: {}", evt); + logger.info("Other ONVIF netty channel event occurred: {}", evt); } } @@ -78,7 +78,7 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw if (ctx == null || cause == null) { return; } - logger.debug("Exception on ONVIF connection: {}", cause.getMessage()); + logger.info("Exception on ONVIF connection: {}", cause.getMessage()); ctx.close(); } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index e6cd9d10d8b94..549821c1cefab 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -269,7 +269,7 @@ private String getXml(RequestType requestType) { + mediaProfileTokens.get(mediaProfileIndex) + ""; case Renew: - return "PT1M"; + return "PT16S"; case GetConfigurations: return ""; case GetConfigurationOptions: @@ -568,7 +568,7 @@ public void sendOnvifRequest(RequestType requestType, String xAddr) { @Override public void initChannel(SocketChannel socketChannel) throws Exception { - socketChannel.pipeline().addLast("idleStateHandler", new IdleStateHandler(20, 20, 20)); + socketChannel.pipeline().addLast("idleStateHandler", new IdleStateHandler(0, 0, 20)); socketChannel.pipeline().addLast("HttpClientCodec", new HttpClientCodec()); socketChannel.pipeline().addLast("OnvifCodec", new OnvifCodec(getHandle())); } From 6d599bf94ed9d70600550509bbb44c42512b607a Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Sun, 24 Mar 2024 23:10:51 +1100 Subject: [PATCH 2/6] Fix connection issue Signed-off-by: Matthew Skinner --- .../ipcamera/internal/onvif/OnvifConnection.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index 549821c1cefab..5d05c9eb3ff10 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -583,27 +583,26 @@ public void operationComplete(@Nullable ChannelFuture future) { if (future == null) { return; } - if (future.isSuccess()) { + if (future.isDone() && future.isSuccess()) { Channel ch = future.channel(); ch.writeAndFlush(request); } else { // an error occurred if (future.isDone() && !future.isCancelled()) { Throwable cause = future.cause(); String msg = cause.getMessage(); - logger.debug("connect failed - cause {}", cause.getMessage()); + logger.debug("Connect failed - cause is: {}", cause.getMessage()); if (cause instanceof ConnectTimeoutException) { usingEvents = false;// Prevent Unsubscribe from being sent ipCameraHandler.cameraCommunicationError( "Camera timed out when trying to connect to the ONVIF port:" + port); } else if ((cause instanceof ConnectException) && msg != null - && msg.contains("Connection refused")) { + && msg.contains("Connection refused ConnectException")) { usingEvents = false;// Prevent Unsubscribe from being sent ipCameraHandler.cameraCommunicationError( "Camera refused to connect when using ONVIF to port:" + port); } - } - if (isConnected) { - disconnect(); + } else { + ipCameraHandler.cameraCommunicationError("Camera failed to connect due to being cancelled"); } } } From a635d7184deac688e253cd7b7e9e56bb3ca5664d Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Sun, 24 Mar 2024 23:33:08 +1100 Subject: [PATCH 3/6] Tidy up Signed-off-by: Matthew Skinner --- .../openhab/binding/ipcamera/internal/onvif/OnvifCodec.java | 6 +++--- .../binding/ipcamera/internal/onvif/OnvifConnection.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java index 6d417be9e238f..1e23ea10a3491 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java @@ -65,11 +65,11 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob } if (evt instanceof IdleStateEvent) { IdleStateEvent e = (IdleStateEvent) evt; - logger.info("IdleStateEvent received: {}", e.state()); + logger.debug("IdleStateEvent received: {}", e.state()); onvifConnection.setIsConnected(false); ctx.close(); } else { - logger.info("Other ONVIF netty channel event occurred: {}", evt); + logger.debug("Other ONVIF netty channel event occurred: {}", evt); } } @@ -78,7 +78,7 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw if (ctx == null || cause == null) { return; } - logger.info("Exception on ONVIF connection: {}", cause.getMessage()); + logger.debug("Exception on ONVIF connection: {}", cause.getMessage()); ctx.close(); } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index 5d05c9eb3ff10..72e42b4aeaee0 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -596,7 +596,7 @@ public void operationComplete(@Nullable ChannelFuture future) { ipCameraHandler.cameraCommunicationError( "Camera timed out when trying to connect to the ONVIF port:" + port); } else if ((cause instanceof ConnectException) && msg != null - && msg.contains("Connection refused ConnectException")) { + && msg.contains("Connection refused")) { usingEvents = false;// Prevent Unsubscribe from being sent ipCameraHandler.cameraCommunicationError( "Camera refused to connect when using ONVIF to port:" + port); From 9585703cdde5204fca3c5ce18596778cb1c875f0 Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Sun, 14 Apr 2024 20:04:01 +1000 Subject: [PATCH 4/6] add fixes for Hikvision and Reolink. Signed-off-by: Matthew Skinner --- .../ipcamera/internal/HikvisionHandler.java | 4 ++-- .../internal/handler/IpCameraHandler.java | 18 ++++++------------ .../ipcamera/internal/onvif/OnvifCodec.java | 6 +++--- .../internal/onvif/OnvifConnection.java | 2 ++ 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/HikvisionHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/HikvisionHandler.java index 4e49c4116b799..7216b486c53cc 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/HikvisionHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/HikvisionHandler.java @@ -178,11 +178,11 @@ public void channelRead(@Nullable ChannelHandlerContext ctx, @Nullable Object ms removeChannels.add(channel); } // start checking the input IO status - ipCameraHandler.lowPriorityRequests.set(0, + ipCameraHandler.lowPriorityRequests.add(0, "/ISAPI/System/IO/inputs/" + ipCameraHandler.cameraConfig.getNvrChannel() + "/status"); } else { // start checking the input IO status - ipCameraHandler.lowPriorityRequests.set(0, + ipCameraHandler.lowPriorityRequests.add(0, "/ISAPI/System/IO/inputs/" + ipCameraHandler.cameraConfig.getNvrChannel() + "/status"); } ipCameraHandler.removeChannels(removeChannels); diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java index 4cae7e57c8009..4262cbd3e63c6 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java @@ -1731,20 +1731,14 @@ public void initialize() { "[{ \"cmd\":\"GetAbility\", \"param\":{ \"User\":{ \"userName\":\"admin\" }}}]"); } if (snapshotUri.isEmpty()) { - if (cameraConfig.getNvrChannel() < 1) { - snapshotUri = "/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=openHAB" + reolinkAuth; - } else { - snapshotUri = "/cgi-bin/api.cgi?cmd=Snap&channel=" + (cameraConfig.getNvrChannel() - 1) - + "&rs=openHAB" + reolinkAuth; - } + // ReolinkHandler will change the snapshotUri in the response to /api.cgi?cmd=Login + snapshotUri = "/cgi-bin/api.cgi?cmd=Snap&channel=" + cameraConfig.getNvrChannel() + "&rs=openHAB" + + reolinkAuth; } + // channel numbers for snapshots start at 0, while the rtsp start at 1 if (rtspUri.isEmpty()) { - if (cameraConfig.getNvrChannel() < 1) { - rtspUri = "rtsp://" + cameraConfig.getIp() + ":554/h264Preview_01_main"; - } else { - rtspUri = "rtsp://" + cameraConfig.getIp() + ":554/h264Preview_0" + cameraConfig.getNvrChannel() - + "_main"; - } + rtspUri = "rtsp://" + cameraConfig.getIp() + ":554/h264Preview_0" + + (cameraConfig.getNvrChannel() + 1) + "_main"; } break; } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java index 1e23ea10a3491..6d417be9e238f 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java @@ -65,11 +65,11 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob } if (evt instanceof IdleStateEvent) { IdleStateEvent e = (IdleStateEvent) evt; - logger.debug("IdleStateEvent received: {}", e.state()); + logger.info("IdleStateEvent received: {}", e.state()); onvifConnection.setIsConnected(false); ctx.close(); } else { - logger.debug("Other ONVIF netty channel event occurred: {}", evt); + logger.info("Other ONVIF netty channel event occurred: {}", evt); } } @@ -78,7 +78,7 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw if (ctx == null || cause == null) { return; } - logger.debug("Exception on ONVIF connection: {}", cause.getMessage()); + logger.info("Exception on ONVIF connection: {}", cause.getMessage()); ctx.close(); } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index 72e42b4aeaee0..0055fc954ed1d 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -380,6 +380,8 @@ public void processReply(String message) { ipCameraHandler.rtspUri = rtspUri; } } + } else { + logger.info("Unhandled ONVIF reply is: {}", message); } } From 88b82f75ac84edf707dd844aa5949914118df43a Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Fri, 10 May 2024 14:57:47 +1000 Subject: [PATCH 5/6] fix onvif offline detection Signed-off-by: Matthew Skinner --- .../binding/ipcamera/internal/onvif/OnvifCodec.java | 12 +++++++++--- .../ipcamera/internal/onvif/OnvifConnection.java | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java index 6d417be9e238f..7c54ad978d1ef 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifCodec.java @@ -20,6 +20,7 @@ import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.LastHttpContent; import io.netty.handler.timeout.IdleStateEvent; import io.netty.util.CharsetUtil; @@ -46,6 +47,11 @@ public void channelRead(@Nullable ChannelHandlerContext ctx, @Nullable Object ms return; } try { + if (msg instanceof HttpResponse response) { + if (response.status().code() != 200) { + logger.trace("ONVIF replied with code {} message is {}", response.status().code(), msg); + } + } if (msg instanceof HttpContent content) { incomingMessage += content.content().toString(CharsetUtil.UTF_8); } @@ -65,11 +71,11 @@ public void userEventTriggered(@Nullable ChannelHandlerContext ctx, @Nullable Ob } if (evt instanceof IdleStateEvent) { IdleStateEvent e = (IdleStateEvent) evt; - logger.info("IdleStateEvent received: {}", e.state()); + logger.debug("IdleStateEvent received: {}", e.state()); onvifConnection.setIsConnected(false); ctx.close(); } else { - logger.info("Other ONVIF netty channel event occurred: {}", evt); + logger.debug("ONVIF netty channel event occurred: {}", evt); } } @@ -78,7 +84,7 @@ public void exceptionCaught(@Nullable ChannelHandlerContext ctx, @Nullable Throw if (ctx == null || cause == null) { return; } - logger.info("Exception on ONVIF connection: {}", cause.getMessage()); + logger.debug("Exception on ONVIF connection: {}", cause.getMessage()); ctx.close(); } } diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index 0055fc954ed1d..09cd466307285 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -381,7 +381,7 @@ public void processReply(String message) { } } } else { - logger.info("Unhandled ONVIF reply is: {}", message); + logger.trace("Unhandled ONVIF reply is: {}", message); } } From e2f0bfc5a9d18593f8b5ce1fff76952f0f479e75 Mon Sep 17 00:00:00 2001 From: Matthew Skinner Date: Sun, 19 May 2024 21:31:53 +1000 Subject: [PATCH 6/6] Improvements for ONVIF alarm streams. Signed-off-by: Matthew Skinner --- .../internal/handler/IpCameraHandler.java | 23 +++++-------------- .../internal/onvif/OnvifConnection.java | 11 ++++----- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java index 4262cbd3e63c6..0004c56957216 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/handler/IpCameraHandler.java @@ -61,6 +61,7 @@ import org.openhab.binding.ipcamera.internal.MyNettyAuthHandler; import org.openhab.binding.ipcamera.internal.ReolinkHandler; import org.openhab.binding.ipcamera.internal.onvif.OnvifConnection; +import org.openhab.binding.ipcamera.internal.onvif.OnvifConnection.RequestType; import org.openhab.binding.ipcamera.internal.servlet.CameraServlet; import org.openhab.core.OpenHAB; import org.openhab.core.library.types.DecimalType; @@ -1556,19 +1557,13 @@ void pollCameraRunnable() { // what needs to be done every poll// switch (thing.getThingTypeUID().getId()) { case GENERIC_THING: - if (!snapshotPolling) { - checkCameraConnection(); - } + checkCameraConnection(); break; case ONVIF_THING: - if (!snapshotPolling) { - checkCameraConnection(); - } + onvifCamera.sendOnvifRequest(RequestType.Renew, onvifCamera.subscriptionXAddr); break; case INSTAR_THING: - if (!snapshotPolling) { - checkCameraConnection(); - } + checkCameraConnection(); noMotionDetected(CHANNEL_MOTION_ALARM); noMotionDetected(CHANNEL_PIR_ALARM); noMotionDetected(CHANNEL_HUMAN_ALARM); @@ -1591,14 +1586,11 @@ void pollCameraRunnable() { if (cameraConfig.getOnvifPort() == 0) { sendHttpGET("/api.cgi?cmd=GetAiState&channel=" + cameraConfig.getNvrChannel() + reolinkAuth); sendHttpGET("/api.cgi?cmd=GetMdState&channel=" + cameraConfig.getNvrChannel() + reolinkAuth); - } else if (!snapshotPolling) { - checkCameraConnection(); + } else { + onvifCamera.sendOnvifRequest(RequestType.Renew, onvifCamera.subscriptionXAddr); } break; case DAHUA_THING: - if (!snapshotPolling) { - checkCameraConnection(); - } // Check for alarms, channel for NVRs appears not to work at filtering. if (streamIsStopped("/cgi-bin/eventManager.cgi?action=attach&codes=[All]")) { logger.info("The alarm stream was not running for camera {}, re-starting it now", @@ -1607,9 +1599,6 @@ void pollCameraRunnable() { } break; case DOORBIRD_THING: - if (!snapshotPolling) { - checkCameraConnection(); - } // Check for alarms, channel for NVRs appears not to work at filtering. if (streamIsStopped("/bha-api/monitor.cgi?ring=doorbell,motionsensor")) { logger.info("The alarm stream was not running for camera {}, re-starting it now", diff --git a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java index 09cd466307285..d65e2802978a5 100644 --- a/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java +++ b/bundles/org.openhab.binding.ipcamera/src/main/java/org/openhab/binding/ipcamera/internal/onvif/OnvifConnection.java @@ -128,7 +128,7 @@ public enum RequestType { @SuppressWarnings("unused") private String imagingXAddr = "http://" + ipAddress + "/onvif/device_service"; private String ptzXAddr = "http://" + ipAddress + "/onvif/ptz_service"; - private String subscriptionXAddr = "http://" + ipAddress + "/onvif/device_service"; + public String subscriptionXAddr = "http://" + ipAddress + "/onvif/device_service"; private boolean isConnected = false; private int mediaProfileIndex = 0; private String rtspUri = ""; @@ -269,7 +269,7 @@ private String getXml(RequestType requestType) { + mediaProfileTokens.get(mediaProfileIndex) + ""; case Renew: - return "PT16S"; + return "PT10S"; case GetConfigurations: return ""; case GetConfigurationOptions: @@ -310,8 +310,8 @@ public void processReply(String message) { logger.trace("ONVIF reply is: {}", message); if (message.contains("PullMessagesResponse")) { eventRecieved(message); - } else if (message.contains("RenewResponse")) { sendOnvifRequest(RequestType.PullMessages, subscriptionXAddr); + } else if (message.contains("RenewResponse")) { } else if (message.contains("GetSystemDateAndTimeResponse")) {// 1st to be sent. setIsConnected(true);// Instar profile T only cameras need this parseDateAndTime(message); @@ -570,7 +570,7 @@ public void sendOnvifRequest(RequestType requestType, String xAddr) { @Override public void initChannel(SocketChannel socketChannel) throws Exception { - socketChannel.pipeline().addLast("idleStateHandler", new IdleStateHandler(0, 0, 20)); + socketChannel.pipeline().addLast("idleStateHandler", new IdleStateHandler(0, 0, 18)); socketChannel.pipeline().addLast("HttpClientCodec", new HttpClientCodec()); socketChannel.pipeline().addLast("OnvifCodec", new OnvifCodec(getHandle())); } @@ -653,7 +653,7 @@ public void gotoPreset(int index) { public void eventRecieved(String eventMessage) { String topic = Helper.fetchXML(eventMessage, "Topic", "tns1:"); if (topic.isEmpty()) { - sendOnvifRequest(RequestType.Renew, subscriptionXAddr); + logger.debug("No ONVIF Events occured in the last 8 seconds"); return; } String dataName = Helper.fetchXML(eventMessage, "tt:Data", "Name=\""); @@ -783,7 +783,6 @@ public void eventRecieved(String eventMessage) { default: logger.debug("Please report this camera has an un-implemented ONVIF event. Topic: {}", topic); } - sendOnvifRequest(RequestType.Renew, subscriptionXAddr); } public boolean supportsPTZ() {