Thing via Rule deaktivieren / HTTP Request Fehler
Verfasst: 25. Aug 2022 20:15
Hallo!
Ich habe nach dem Update von openHAB 3.1 auf openHAB 3.3 ein Problem mit meiner Rule zum Deaktivieren eines Things.
Konkret geht es um einen iRobot Staubsaugerroboter. Das Problem dabei ist, dass die Beleuchtung der Bedienelemente immer aktiviert ist, sobald eine Verbindung zum Roboter besteht => diese leuchtet somit rund um die Uhr, weil der Roboter ja bei openHAB online ist
Aus diesem Grund habe ich unter openHAB 3.1 eine Rule erstellt, mit welcher ich anhand eines Buttons das Thing für den Roboter mittels HTTP Request deaktivieren konnte.
Das hat soweit auch immer einwandfrei funktioniert...
Nach dem Update auf openHAB 3.3 habe ich nun folgende Fehlermeldung erhalten:
Hab dann daraufhin die Basic Authentification in den Einstellungen erlaubt (API-Sicherheit) und bekomme jetzt aber immer einen HTTP Error => HTTP 415 Unsupported Media Type
Hat jemand eine Idee was an meinem Code nicht stimmt bzw. was sich diesbezüglich von openHAB 3.1 auf 3.3 geändert hat?
Besten Dank!
Grüße
Christian
Ich habe nach dem Update von openHAB 3.1 auf openHAB 3.3 ein Problem mit meiner Rule zum Deaktivieren eines Things.
Konkret geht es um einen iRobot Staubsaugerroboter. Das Problem dabei ist, dass die Beleuchtung der Bedienelemente immer aktiviert ist, sobald eine Verbindung zum Roboter besteht => diese leuchtet somit rund um die Uhr, weil der Roboter ja bei openHAB online ist

Aus diesem Grund habe ich unter openHAB 3.1 eine Rule erstellt, mit welcher ich anhand eines Buttons das Thing für den Roboter mittels HTTP Request deaktivieren konnte.
Code: Alles auswählen
rule "Saugi starten"
when
Item Roomba_Power changed
then
if (Roomba_Power.state == ON) {
sendHttpPutRequest("http://<user>:<kennwort>@openhab:8080/rest/things/irobot:roomba:saugi/enable", "application/json", 'true')
}
else
sendHttpPutRequest("http://<user>:<kennwort>@openhab:8080/rest/things/irobot:roomba:saugi/enable", "application/json", 'false')
end
Nach dem Update auf openHAB 3.3 habe ich nun folgende Fehlermeldung erhalten:
Code: Alles auswählen
2022-08-25 20:08:06.746 [WARN ] [ore.io.rest.auth.internal.AuthFilter] - Unauthorized API request from 192.168.1.90: Basic authentication with username/password is not allowed
2022-08-25 20:08:06.749 [ERROR] [enhab.core.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.ExecutionException: org.eclipse.jetty.client.HttpResponseException: HTTP protocol violation: Authentication challenge without WWW-Authenticate header
Code: Alles auswählen
2022-08-25 20:00:13.431 [WARN ] [s.impl.WebApplicationExceptionMapper] - javax.ws.rs.ClientErrorException: HTTP 415 Unsupported Media Type
at org.apache.cxf.jaxrs.utils.SpecExceptions.toHttpException(SpecExceptions.java:117)
at org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException(ExceptionUtils.java:168)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod(JAXRSUtils.java:565)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:182)
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:79)
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:265)
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:225)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:298)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(AbstractHTTPServlet.java:234)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:273)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)
at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:74)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
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:1624)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:294)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:90)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:829)
Besten Dank!
Grüße
Christian