mypyllant-component
mypyllant-component copied to clipboard
Bad request, Client Response Code 400
Before submitting a new issue
- [x] I redownloaded the latest release and restarted Home Assistant
- [x] I've checked known issues
- [x] I've enabled debug logs and attached the relevant logs to this ticket
Problem description
If I try to send a command towards the api (e.g. to set the zone operation mode), I get error code 400. Could it be bad authentication or a NULL parameter?
Logs
Logger: homeassistant.components.automation.heizung_heizung_ausschalten
Quelle: components/automation/__init__.py:666
Integration: Automatisierung (Dokumentation, Probleme)
Erstmals aufgetreten: 21:55:29 (2 Vorkommnisse)
Zuletzt protokolliert: 21:59:42
While executing automation automation.heizung_heizung_ausschalten
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/automation/__init__.py", line 666, in async_trigger
return await self.action_script.async_run(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1600, in async_run
return await asyncio.shield(run.async_run())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 435, in async_run
await self._async_step(log_exceptions=False)
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 487, in _async_step
self._handle_exception(
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 512, in _handle_exception
raise exception
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 485, in _async_step
await getattr(self, handler)()
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 723, in _async_call_service_step
response_data = await self._async_run_long_action(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 685, in _async_run_long_action
return long_task.result()
^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2319, in async_call
response_data = await coro
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/core.py", line 2356, in _execute_service
return await target(service_call)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 905, in entity_service_call
single_response = await _handle_entity_call(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 975, in _handle_entity_call
result = await task
^^^^^^^^^^
File "/config/custom_components/mypyllant/climate.py", line 564, in set_zone_operating_mode
await self.coordinator.api.set_zone_operating_mode(
File "/usr/local/lib/python3.12/site-packages/myPyllant/api.py", line 481, in set_zone_operating_mode
await self.aiohttp_session.patch(
File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 691, in _request
await raise_for_status(resp)
File "/usr/local/lib/python3.12/site-packages/myPyllant/http_client.py", line 49, in on_raise_for_status
raise e
File "/usr/local/lib/python3.12/site-packages/myPyllant/http_client.py", line 46, in on_raise_for_status
response.raise_for_status()
File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 1060, in raise_for_status
raise ClientResponseError(
aiohttp.client_exceptions.ClientResponseError: 400, message='Bad Request, response was: {"stackTrace":[{"classLoaderName":"app","methodName":"build","fileName":"ProblemBuilder.java","lineNumber":83,"className":"org.zalando.problem.ProblemBuilder","nativeMethod":false},{"classLoaderName":"app","methodName":"handle","fileName":"ReactiveHttpExceptionHandler.java","lineNumber":78,"className":"com.vaillantgroup.iot.facade.rest.error.ReactiveHttpExceptionHandler","nativeMethod":false},{"moduleName":"java.base","moduleVersion":"19.0.2","methodName":"invoke","lineNumber":-1,"className":"jdk.internal.reflect.DirectMethodHandleAccessor","nativeMethod":false},{"moduleName":"java.base","moduleVersion":"19.0.2","methodName":"invoke","lineNumber":-1,"className":"java.lang.reflect.Method","nativeMethod":false},{"classLoaderName":"app","methodName":"lambda$invoke$0","fileName":"InvocableHandlerMethod.java","lineNumber":145,"className":"org.springframework.web.reactive.result.method.InvocableHandlerMethod","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"MonoFlatMap.java","lineNumber":132,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"signal","fileName":"MonoZip.java","lineNumber":293,"className":"reactor.core.publisher.MonoZip$ZipCoordinator","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"MonoZip.java","lineNumber":474,"className":"reactor.core.publisher.MonoZip$ZipInner","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"MonoPeekTerminal.java","lineNumber":180,"className":"reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"Operators.java","lineNumber":2545,"className":"reactor.core.publisher.Operators$ScalarSubscription","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"MonoPeekTerminal.java","lineNumber":139,"className":"reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"MonoZip.java","lineNumber":466,"className":"reactor.core.publisher.MonoZip$ZipInner","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"MonoPeekTerminal.java","lineNumber":152,"className":"reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"subscribe","fileName":"MonoJust.java","lineNumber":55,"className":"reactor.core.publisher.MonoJust","nativeMethod":false},{"classLoaderName":"app","methodName":"subscribe","fileName":"InternalMonoOperator.java","lineNumber":64,"className":"reactor.core.publisher.InternalMonoOperator","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"MonoZip.java","lineNumber":216,"className":"reactor.core.publisher.MonoZip$ZipCoordinator","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"MonoFlatMap.java","lineNumber":194,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"MonoFlatMap.java","lineNumber":194,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"request","fileName":"FluxContextWrite.java","lineNumber":136,"className":"reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"set","fileName":"Operators.java","lineNumber":2341,"className":"reactor.core.publisher.Operators$MultiSubscriptionSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"FluxOnErrorResume.java","lineNumber":74,"className":"reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"FluxContextWrite.java","lineNumber":101,"className":"reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"MonoFlatMap.java","lineNumber":117,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"onSubscribe","fileName":"MonoFlatMap.java","lineNumber":117,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"subscribe","fileName":"MonoZip.java","lineNumber":125,"className":"reactor.core.publisher.MonoZip","nativeMethod":false},{"classLoaderName":"app","methodName":"subscribe","fileName":"Mono.java","lineNumber":4495,"className":"reactor.core.publisher.Mono","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxOnErrorResume.java","lineNumber":103,"className":"reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxOnAssembly.java","lineNumber":544,"className":"reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"MonoFlatMap.java","lineNumber":180,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxContextWrite.java","lineNumber":121,"className":"reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxDoFinally.java","lineNumber":119,"className":"reactor.core.publisher.FluxDoFinally$DoFinallySubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxMap.java","lineNumber":265,"className":"reactor.core.publisher.FluxMap$MapConditionalSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onError","fileName":"FluxPeekFuseable.java","lineNumber":903,"className":"reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxPeekFuseable.java","lineNumber":849,"className":"reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxSwitchIfEmpty.java","lineNumber":74,"className":"reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxOnErrorResume.java","lineNumber":79,"className":"reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"MonoFlatMap.java","lineNumber":158,"className":"reactor.core.publisher.MonoFlatMap$FlatMapMain","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxContextWrite.java","lineNumber":107,"className":"reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxMapFuseable.java","lineNumber":299,"className":"reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onNext","fileName":"FluxFilterFuseable.java","lineNumber":337,"className":"reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"completePossiblyEmpty","fileName":"Operators.java","lineNumber":2071,"className":"reactor.core.publisher.Operators$BaseFluxToMonoOperator","nativeMethod":false},{"classLoaderName":"app","methodName":"onComplete","fileName":"MonoCollect.java","lineNumber":145,"className":"reactor.core.publisher.MonoCollect$CollectSubscriber","nativeMethod":false},{"classLoaderName":"app","methodName":"onAllDataRead","fileName":"AbstractListenerReadPublisher.java","lineNumber":484,"className":"org.springframework.http.server.reactive.AbstractListenerReadPublisher$State","nativeMethod":false},{"classLoaderName":"app","methodName":"onAllDataRead","fileName":"AbstractListenerReadPublisher.java","lineNumber":134,"className":"org.springframework.http.server.reactive.AbstractListenerReadPublisher","nativeMethod":false},{"classLoaderName":"app","methodName":"onAllDataRead","fileName":"ServletServerHttpRequest.java","lineNumber":352,"className":"org.springframework.http.server.reactive.ServletServerHttpRequest$RequestBodyPublisher$RequestBodyPublisherReadListener","nativeMethod":false},{"classLoaderName":"app","methodName":"asyncDispatch","fileName":"CoyoteAdapter.java","lineNumber":205,"className":"org.apache.catalina.connector.CoyoteAdapter","nativeMethod":false},{"classLoaderName":"app","methodName":"dispatch","fileName":"AbstractProcessor.java","lineNumber":242,"className":"org.apache.coyote.AbstractProcessor","nativeMethod":false},{"classLoaderName":"app","methodName":"process","fileName":"AbstractProcessorLight.java","lineNumber":50,"className":"org.apache.coyote.AbstractProcessorLight","nativeMethod":false},{"classLoaderName":"app","methodName":"process","fileName":"AbstractProtocol.java","lineNumber":894,"className":"org.apache.coyote.AbstractProtocol$ConnectionHandler","nativeMethod":false},{"classLoaderName":"app","methodName":"doRun","fileName":"NioEndpoint.java","lineNumber":1740,"className":"org.apache.tomcat.util.net.NioEndpoint$SocketProcessor","nativeMethod":false},{"classLoaderName":"app","methodName":"run","fileName":"SocketProcessorBase.java","lineNumber":52,"className":"org.apache.tomcat.util.net.SocketProcessorBase","nativeMethod":false},{"classLoaderName":"app","methodName":"runWorker","fileName":"ThreadPoolExecutor.java","lineNumber":1191,"className":"org.apache.tomcat.util.threads.ThreadPoolExecutor","nativeMethod":false},{"classLoaderName":"app","methodName":"run","fileName":"ThreadPoolExecutor.java","lineNumber":659,"className":"org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker","nativeMethod":false},{"classLoaderName":"app","methodName":"run","fileName":"TaskThread.java","lineNumber":61,"className":"org.apache.tomcat.util.threads.TaskThread$WrappingRunnable","nativeMethod":false},{"moduleName":"java.base","moduleVersion":"19.0.2","methodName":"run","lineNumber":-1,"className":"java.lang.Thread","nativeMethod":false}],"type":"about:blank","title":"Bad Request","status":"BAD_REQUEST","detail":"Validation failed for argument at index 2 in method: public default reactor.core.publisher.Mono<org.springframework.http.ResponseEntity<com.vaillantgroup.systemcontrol.tliv2.model.rest.AcceptedResponseRest>> com.vaillantgroup.systemcontrol.tliv2.rest.HeatingApi.v2SetHeatingOperationMode(java.lang.String,java.lang.Integer,reactor.core.publisher.Mono<com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest>,org.springframework.web.server.ServerWebExchange), with 1 error(s): [Field error in object \'modifyHeatingOperationModeRequestRestMono\' on field \'operationMode\': rejected value [null]; codes [NotNull.modifyHeatingOperationModeRequestRestMono.operationMode,NotNull.operationMode,NotNull.com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest$OperationModeEnum,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [modifyHeatingOperationModeRequestRestMono.operationMode,operationMode]; arguments []; default message [operationMode]]; default message [must not be null]] ","parameters":{},"message":"Bad Request: Validation failed for argument at index 2 in method: public default reactor.core.publisher.Mono<org.springframework.http.ResponseEntity<com.vaillantgroup.systemcontrol.tliv2.model.rest.AcceptedResponseRest>> com.vaillantgroup.systemcontrol.tliv2.rest.HeatingApi.v2SetHeatingOperationMode(java.lang.String,java.lang.Integer,reactor.core.publisher.Mono<com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest>,org.springframework.web.server.ServerWebExchange), with 1 error(s): [Field error in object \'modifyHeatingOperationModeRequestRestMono\' on field \'operationMode\': rejected value [null]; codes [NotNull.modifyHeatingOperationModeRequestRestMono.operationMode,NotNull.operationMode,NotNull.com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest$OperationModeEnum,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [modifyHeatingOperationModeRequestRestMono.operationMode,operationMode]; arguments []; default message [operationMode]]; default message [must not be null]] ","suppressed":[],"localizedMessage":"Bad Request: Validation failed for argument at index 2 in method: public default reactor.core.publisher.Mono<org.springframework.http.ResponseEntity<com.vaillantgroup.systemcontrol.tliv2.model.rest.AcceptedResponseRest>> com.vaillantgroup.systemcontrol.tliv2.rest.HeatingApi.v2SetHeatingOperationMode(java.lang.String,java.lang.Integer,reactor.core.publisher.Mono<com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest>,org.springframework.web.server.ServerWebExchange), with 1 error(s): [Field error in object \'modifyHeatingOperationModeRequestRestMono\' on field \'operationMode\': rejected value [null]; codes [NotNull.modifyHeatingOperationModeRequestRestMono.operationMode,NotNull.operationMode,NotNull.com.vaillantgroup.systemcontrol.tliv2.model.rest.ModifyHeatingOperationModeRequestRest$OperationModeEnum,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [modifyHeatingOperationModeRequestRestMono.operationMode,operationMode]; arguments []; default message [operationMode]]; default message [must not be null]] "}', url=URL('https://api.vaillant-group.com/service-connected-control/end-user-app-api/v1/systems/5ed6ef15-7d13-4562-8f2b-f4c30e744e10/tli/zones/0/heating-operation-mode')