OH3: IPCam binding leads to exception in basicUI

I migrated to OH3 and since then I try to get my ipcam going. But going to the page with the picture, I get the following exception in the logfile:

2020-12-23 23:11:26.011 [WARN ] [org.eclipse.jetty.server.HttpChannel] - /basicui/app

java.lang.NullPointerException: null

	at org.openhab.ui.basic.internal.render.VideoRenderer.renderWidget(VideoRenderer.java:64) ~[?:?]

	at org.openhab.ui.basic.internal.render.PageRenderer.renderWidget(PageRenderer.java:195) ~[?:?]

	at org.openhab.ui.basic.internal.render.PageRenderer.processChildren(PageRenderer.java:161) ~[?:?]

	at org.openhab.ui.basic.internal.render.PageRenderer.processChildren(PageRenderer.java:182) ~[?:?]

	at org.openhab.ui.basic.internal.render.PageRenderer.processPage(PageRenderer.java:125) ~[?:?]

	at org.openhab.ui.basic.internal.servlet.WebAppServlet.service(WebAppServlet.java:203) ~[?:?]

	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ~[bundleFile:3.1.0]

	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544) ~[bundleFile:9.4.20.v20190813]

	at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[bundleFile:?]

	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307) ~[bundleFile:9.4.20.v20190813]

	at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293) ~[bundleFile:?]

	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[bundleFile:9.4.20.v20190813]

	at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80) ~[bundleFile:?]

	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.Server.handle(Server.java:494) ~[bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) [bundleFile:9.4.20.v20190813]

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918) [bundleFile:9.4.20.v20190813]

	at java.lang.Thread.run(Thread.java:834) [?:?]

When I go to the local url/port as defined in the thing (for me: http://192.168.1.50:8081/snapshots.mjpeg), I get a picture without any problem. What’s wrong here?

Thanks,
Boby

What exactly are you doing when it happens? Are u using basicUI and opening a sitemap you created? What is the contents of the sitemap?

Have you tried the new oh3 widget for cameras to use in the new UI pages?

Yes, I try to include the video picture in a sitemap created through the GUI in the basicUI.
The sitemap is very, very simple:

Group icon="door" label="Gartentor" {
    Switch icon="door" mappings=[ON="Ă–FFNEN"] label="Gartentor []" item=Gartentor_oeffnen
    Video icon="camera" url="http://192.168.1.50:8081/snapshots.mjpeg" label="Videobild"
}

The sitemap is fine until I enter the “Video”…line. Then it throws the exception.
I installed a completely new instance of OH3 to exclude migration problems, so the problem has to sit somewhere else. Thank you!

The new UI isn’t even better:
image
Also tried various mime types, no luck.

Turned on the trace, maybe you can see something which explains the behaviour?

2020-12-25 20:37:25.985 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:37:25.988 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/cgi-bin/hi3510/param.cgi?cmd=getaudioalarmattr

2020-12-25 20:37:26.000 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var aa_enable="0";

var aa_value="50";

var aa_time="0";

:

2020-12-25 20:37:34.005 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/cgi-bin/hi3510/param.cgi?cmd=getmdattr

2020-12-25 20:37:34.005 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:37:34.015 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var m1_enable="1";

var m1_x="774";

var m1_y="228";

var m1_w="379";

var m1_h="450";

var m1_sensitivity="50";

var m1_threshold="0";

var m2_enable="0";

var m2_x="1680";

var m2_y="0";

var m2_w="240";

var m2_h="240";

var m2_sensitivity="50";

var m2_threshold="0";

var m3_enable="0";

var m3_x="0";

var m3_y="840";

var m3_w="240";

var m3_h="240";

var m3_sensitivity="50";

var m3_threshold="0";

var m4_enable="0";

var m4_x="1680";

var m4_y="840";

var m4_w="240";

var m4_h="240";

var m4_sensitivity="50";

var m4_threshold="0";

:

2020-12-25 20:37:42.007 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:37:42.010 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/param.cgi?cmd=getinfrared

2020-12-25 20:37:42.018 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var infraredstat="auto";

:

2020-12-25 20:37:50.003 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:37:50.004 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/param.cgi?cmd=getoverlayattr&-region=1

2020-12-25 20:37:50.021 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var show_1="1";

var place_1="0";

var x_1="0";

var y_1="0";

var name_1="IN-9008FullHD";

:

2020-12-25 20:37:58.008 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:37:58.011 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/param.cgi?cmd=getpirattr

2020-12-25 20:37:58.019 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var pir_enable="0";

var pir_flag="0";

:

2020-12-25 20:38:06.013 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:38:06.013 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/param.cgi?cmd=getioattr

2020-12-25 20:38:06.030 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var io_enable="0";

var io_flag="1";

:

==> /var/log/openhab/events.log <==

2020-12-25 20:38:05.930 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'LokaleZeit_DatumundZeit' changed from 2020-12-25T20:37:05.899+0100 to 2020-12-25T20:38:05.907+0100

==> /var/log/openhab/openhab.log <==

2020-12-25 20:38:14.016 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:38:14.020 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/cgi-bin/hi3510/param.cgi?cmd=getaudioalarmattr

2020-12-25 20:38:14.031 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var aa_enable="0";

var aa_value="50";

var aa_time="0";

:

2020-12-25 20:38:22.019 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/tmpfs/snap.jpg

2020-12-25 20:38:22.020 [TRACE] [era.internal.handler.IpCameraHandler] - Sending camera: GET: http://192.168.1.82:80/cgi-bin/hi3510/param.cgi?cmd=getmdattr

2020-12-25 20:38:22.029 [TRACE] [era.internal.handler.IpCameraHandler] - HTTP Result back from camera is 	:var m1_enable="1";

var m1_x="774";

var m1_y="228";

var m1_w="379";

var m1_h="450";

var m1_sensitivity="50";

var m1_threshold="0";

var m2_enable="0";

var m2_x="1680";

var m2_y="0";

var m2_w="240";

var m2_h="240";

var m2_sensitivity="50";

var m2_threshold="0";

var m3_enable="0";

var m3_x="0";

var m3_y="840";

var m3_w="240";

var m3_h="240";

var m3_sensitivity="50";

var m3_threshold="0";

var m4_enable="0";

var m4_x="1680";

var m4_y="840";

var m4_w="240";

var m4_h="240";

var m4_sensitivity="50";

var m4_threshold="0";

:

==> SKIPED: 4 <==

==> SKIPED: 27 <==

The address provided by the item looks fine:
image

There may be a bug with the video element, try using the webview element instead. I don’t think this is a binding issue as I have seen multiple people comment now on the video element so this may need an issue raised in GitHub to be looked at.

LOL…guess what: WebView causes an exception :rofl:

What about if you use a sitemap file? I don’t have issues and I use my old sitemap file and don’t use the new UI to store the sitemap.
I am pretty sure it is not the binding as it uses Netty and not Jetty that is in the logs, so it will be the framework having an issue or you have a syntax issue.

Here’s what I am using with HTML files via webview

Thanks, but I want to get rid of files completely - even if this means that some things won’t work right now. The long-term advantages of database based sitemaps, files, things etc. are too good :slight_smile:

Som3times we need to narrow the fault down and report it for the issue to be fixed. Up to you if u use it as a temp workaround or not. Basicui allows you to select which sitemap to use so u can use both and flick between them.

1 Like

I have the same issue. I tested it with a sitemap file and it worked fine. Thus I believe there is an issue with sitemaps generated by the new UI.

If I define the image element like this (Image url="http://192.168.178.46:54321/ipcamera.jpg) the sitemap is saved without an error, but I don’t see the image in the sitemap.

If I add refresh=2000 then I get directly the following errors:

2020-12-28 13:44:45.308 [ERROR] [omponents.UIComponentSitemapProvider] - Cannot build sitemap page_1267511f53

    java.lang.ClassCastException: class java.math.BigDecimal cannot be cast to class java.lang.Integer (java.math.BigDecimal and java.lang.Integer are in module java.base of loader 'bootstrap')

    	at org.openhab.core.model.sitemap.sitemap.impl.ImageImpl.eSet(ImageImpl.java:229) ~[bundleFile:?]

    	at org.openhab.core.ui.internal.components.UIComponentSitemapProvider.setWidgetPropertyFromComponentConfig(UIComponentSitemapProvider.java:286) ~[bundleFile:?]

Sounds like you have narrowed it down enough to open a GitHub issue for it to be looked into.