Seite 1 von 1

Thing via Rule deaktivieren / HTTP Request Fehler

Verfasst: 25. Aug 2022 20:15
von curius
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.

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
Das hat soweit auch immer einwandfrei funktioniert...

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
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

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)
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

Re: Thing via Rule deaktivieren / HTTP Request Fehler

Verfasst: 26. Aug 2022 08:10
von Tokamak
Der Endpoint erwartet kein JSON, sondern einen String, un den sendest du ja auch.

Versuche es daher mit "text/plain" anstelle "application/json".

Re: Thing via Rule deaktivieren / HTTP Request Fehler

Verfasst: 26. Aug 2022 09:53
von curius
Hallo!

Besten Dank, das war der entscheidende Hinweis.
Es funktioniert jetzt wieder :)

Grüße
Christian