EDIT: Http response code 415 is “Unsupported Media Type”, OH3 openhab.log confirms this:
2021-01-30 18:40:04.725 [ERROR] [rg.apache.cxf.jaxrs.utils.JAXRSUtils] - No message body reader has been found for class java.lang.String, ContentType: application/octet-stream
2021-01-30 18:40:04.726 [WARN ] [s.impl.WebApplicationExceptionMapper] - javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1382)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processRequestBodyParameter(JAXRSUtils.java:877)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:822)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:214)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:78)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:216)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:301)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:220)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:276)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544)
at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:494)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
at java.base/java.lang.Thread.run(Thread.java:834)
Cyril, I don’t understand latest GH commit. Clear widgets if less than 6, does that mean we have to have 6 widgets on each screen? And does widgets = buttons?
@rastus_rob : yes widgets = buttons.
It’s simply a fix for the case you have less “widgets” (or “buttons”) when you update your sitemap (for example if you comment an item). In this particular case, the last widgets was still displayed. Now it’s correctly cleared.
These are the first 3 log entries when starting OH3:
2021-02-05 18:38:35.340 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Australia/Lindeman'.
2021-02-05 18:38:35.346 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'en_AU'.
2021-02-05 18:38:36.598 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.xxx.xxx:xxxx/rest/sitemaps/events/subscribe's Observer
And the http stuff when starting in serial monitor:
DEBUG (function httpRequest): HTTP request to http://192.168.xxx.xxx:xxxx/rest/services/org.eclipse.smarthome.i18n/config
[D][HTTPClient.cpp:276] beginInternal(): host: 192.168.xxx.xxx port: xxxx url: /rest/services/org.eclipse.smarthome.i18n/config
[D][HTTPClient.cpp:1025] connect(): connected to 192.168.xxx.xxx:xxxx
[D][HTTPClient.cpp:1158] handleHeaderResponse(): code: 401
ERROR: HTTP code 401
[D][HTTPClient.cpp:361] disconnect(): still data in buffer (63), clean up.
[D][HTTPClient.cpp:370] disconnect(): tcp stop
DEBUG (function setTimeZone): Could not get OpenHAB timezone
[D][HTTPClient.cpp:276] beginInternal(): host: 192.168.xxx.xxx port: xxxx url: /rest/sitemaps/events/subscribe
[D][HTTPClient.cpp:1025] connect(): connected to 192.168.xxx.xxx:xxxx
[D][HTTPClient.cpp:1158] handleHeaderResponse(): code: 200
[D][WiFiClient.cpp:509] connected(): Disconnected: RES: 0, ERR: 128
[D][HTTPClient.cpp:1295] writeToStreamDataBlock(): connection closed or file end (written: 351).
[D][HTTPClient.cpp:383] disconnect(): tcp is closed
EDIT: perhaps could try and get OH version up top and then do initialization based on that. Just a thought.