konqi / roborock-bridge

Bridge between a local mqtt broker and your roborock vaccuum through the vendor apis
MIT License
6 stars 2 forks source link

Problem running application #53

Open Michl7 opened 4 months ago

Michl7 commented 4 months ago

What do i do wrong?

pi@raspberrypi:~ $ sudo java -jar -Dspring.config.location="FTP/files/application.yaml" FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar
2024-05-29T22:56:53.096+01:00  INFO 28848 --- [           main] d.k.r.RoborockBridgeApplicationKt        : Starting RoborockBridgeApplicationKt v0.0.6-SNAPSHOT using Java 17.0.1 with PID 28848 (/home/pi/FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar started by root in /home/pi)
2024-05-29T22:56:53.117+01:00  INFO 28848 --- [           main] d.k.r.RoborockBridgeApplicationKt        : The following 1 profile is active: "bridge"
2024-05-29T22:56:58.253+01:00  INFO 28848 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-05-29T22:56:58.656+01:00  INFO 28848 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 371 ms. Found 5 JPA repository interfaces.
2024-05-29T22:57:01.139+01:00  INFO 28848 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-05-29T22:57:01.405+01:00  INFO 28848 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.2.13.Final
2024-05-29T22:57:01.415+01:00  INFO 28848 --- [           main] org.hibernate.cfg.Environment            : HHH000406: Using bytecode reflection optimizer
2024-05-29T22:57:02.801+01:00  INFO 28848 --- [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-05-29T22:57:02.935+01:00  INFO 28848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-05-29T22:57:03.776+01:00  INFO 28848 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:h2 user=SA
2024-05-29T22:57:03.785+01:00  INFO 28848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-05-29T22:57:07.981+01:00  INFO 28848 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-05-29T22:57:08.243+01:00  INFO 28848 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-05-29T22:57:09.069+01:00  INFO 28848 --- [           main] d.k.r.remote.RoborockCredentials         : clientId not configured. Using auto-generated clientId rqLJB4fibvxQtYz3uDqZwA==.
2024-05-29T22:57:12.133+01:00  INFO 28848 --- [           main] o.s.d.j.r.query.QueryEnhancerFactory     : Hibernate is in classpath; If applicable, HQL parser will be used.
2024-05-29T22:57:17.016+01:00 ERROR 28848 --- [           main] d.k.roborockbridge.bridge.BridgeMqtt     : Could not connect to tcp://192.168.202.201:1883. Unable to connect to server (32103) - java.net.ConnectException: Connection refused
2024-05-29T22:57:17.019+01:00  WARN 28848 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bridgeService' defined in URL [jar:file:/home/pi/FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar!/BOOT-INF/classes!/de/konqi/roborockbridge/BridgeService.class]: Unsatisfied dependency expressed through constructor parameter 5: Error creating bean with name 'bridgeMqtt': Invocation of init method failed
2024-05-29T22:57:17.022+01:00  WARN 28848 --- [           main] .s.c.a.CommonAnnotationBeanPostProcessor : Destroy method on bean with name 'roborockMqtt' threw an exception: kotlin.UninitializedPropertyAccessException: lateinit property mqttClient has not been initialized
2024-05-29T22:57:17.194+01:00  INFO 28848 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-05-29T22:57:17.200+01:00  INFO 28848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2024-05-29T22:57:17.207+01:00  INFO 28848 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2024-05-29T22:57:17.269+01:00  INFO 28848 --- [           main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-05-29T22:57:17.344+01:00 ERROR 28848 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bridgeService' defined in URL [jar:file:/home/pi/FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar!/BOOT-INF/classes!/de/konqi/roborockbridge/BridgeService.class]: Unsatisfied dependency expressed through constructor parameter 5: Error creating bean with name 'bridgeMqtt': Invocation of init method failed
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:801) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:950) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:738) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:440) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at de.konqi.roborockbridge.RoborockBridgeApplicationKt.main(RoborockBridgeApplication.kt:38) ~[classes!/:0.0.6-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bridgeMqtt': Invocation of init method failed
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:222) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:910) ~[spring-beans-6.0.13.jar!/:6.0.13]
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:788) ~[spring-beans-6.0.13.jar!/:6.0.13]
        ... 24 common frames omitted
Caused by: org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server
        at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]
        at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
        at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
        at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
        at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) ~[na:na]
        at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
        at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
        at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74) ~[org.eclipse.paho.client.mqttv3-1.2.5.jar!/:na]
        ... 2 common frames omitted
birnbeidla commented 4 months ago

Could not connect to tcp://192.168.202.201:1883. Unable to connect to server (32103) - java.net.ConnectException: Connection refused Caused by: org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server

2 log lines that could indicate connection issues with your mqtt server...

Michl7 commented 4 months ago

Hi, thx birnbeidla for pointing in the right direction. Somehow i was really blind and did not notice. I checked my mqtt broker and fixed the connection issue. Unfortunately now i get another error:

pi@raspberrypi:~ $ java -jar -Dspring.config.location="FTP/files/application.yaml" FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar
2024-06-01T07:21:32.029+01:00  INFO 8324 --- [           main] d.k.r.RoborockBridgeApplicationKt        : Starting RoborockBridgeApplicationKt v0.0.6-SNAPSHOT using Java 17.0.1 with PID 8324 (/home/pi/FTP/files/roborock-bridge-0.0.6-SNAPSHOT.jar started by pi in /home/pi)
2024-06-01T07:21:32.041+01:00  INFO 8324 --- [           main] d.k.r.RoborockBridgeApplicationKt        : The following 1 profile is active: "bridge"
2024-06-01T07:21:37.124+01:00  INFO 8324 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-06-01T07:21:37.519+01:00  INFO 8324 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 361 ms. Found 5 JPA repository interfaces.
2024-06-01T07:21:40.100+01:00  INFO 8324 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-06-01T07:21:40.382+01:00  INFO 8324 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.2.13.Final
2024-06-01T07:21:40.392+01:00  INFO 8324 --- [           main] org.hibernate.cfg.Environment            : HHH000406: Using bytecode reflection optimizer
2024-06-01T07:21:41.749+01:00  INFO 8324 --- [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-06-01T07:21:41.876+01:00  INFO 8324 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-06-01T07:21:42.690+01:00  INFO 8324 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:h2 user=SA
2024-06-01T07:21:42.697+01:00  INFO 8324 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-06-01T07:21:46.778+01:00  INFO 8324 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-06-01T07:21:47.051+01:00  INFO 8324 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-06-01T07:21:47.848+01:00  INFO 8324 --- [           main] d.k.r.remote.RoborockCredentials         : clientId not configured. Using auto-generated clientId rqLJB4fibvxQtYz3uDqZwA==.
2024-06-01T07:21:51.020+01:00  INFO 8324 --- [           main] o.s.d.j.r.query.QueryEnhancerFactory     : Hibernate is in classpath; If applicable, HQL parser will be used.
2024-06-01T07:21:54.800+01:00  INFO 8324 --- [           main] d.k.r.RoborockBridgeApplicationKt        : Started RoborockBridgeApplicationKt in 24.845 seconds (process running for 27.366)
2024-06-01T07:21:57.438+01:00  INFO 8324 --- [           main] d.k.roborockbridge.remote.rest.UserApi   : ok true
2024-06-01T07:21:57.826+01:00  INFO 8324 --- [           main] d.k.roborockbridge.bridge.BridgeMqtt     : Announcing new home with id '6133971'
2024-06-01T07:21:57.905+01:00  INFO 8324 --- [           main] d.k.roborockbridge.bridge.BridgeMqtt     : Announcing new robot with id '50XLKow9WZEjW4ssq6yexf'
2024-06-01T07:21:58.292+01:00  INFO 8324 --- [           main] d.k.roborockbridge.bridge.BridgeMqtt     : Announcing 6 rooms.
2024-06-01T07:21:58.702+01:00 ERROR 8324 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.web.client.RestClientException: Error while extracting response for type [de.konqi.roborockbridge.remote.rest.dto.user.UserApiResponseDto<java.util.List<? extends de.konqi.roborockbridge.remote.rest.dto.user.UserScenes>>] and content type [application/json]
        at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:118) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1132) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1115) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:865) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:785) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:685) ~[spring-web-6.0.13.jar!/:6.0.13]
        at de.konqi.roborockbridge.remote.rest.UserApi.getCleanupScenes(UserApi.kt:92) ~[classes!/:0.0.6-SNAPSHOT]
        at de.konqi.roborockbridge.BridgeService.init(BridgeService.kt:80) ~[classes!/:0.0.6-SNAPSHOT]
        at de.konqi.roborockbridge.BridgeService.worker(BridgeService.kt:116) ~[classes!/:0.0.6-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:348) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:233) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:165) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:174) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:445) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378) ~[spring-context-6.0.13.jar!/:6.0.13]
        at org.springframework.boot.context.event.EventPublishingRunListener.ready(EventPublishingRunListener.java:109) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplicationRunListeners.lambda$ready$6(SpringApplicationRunListeners.java:80) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplicationRunListeners.ready(SpringApplicationRunListeners.java:80) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.1.5.jar!/:3.1.5]
        at de.konqi.roborockbridge.RoborockBridgeApplicationKt.main(RoborockBridgeApplication.kt:38) ~[classes!/:0.0.6-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[roborock-bridge-0.0.6-SNAPSHOT.jar:0.0.6-SNAPSHOT]
Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auto_dry" (class de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup), not marked as ignorable (9 known properties: "mop_mode", "fan_power", "clean_order_mode", "repeat", "segs", "water_box_mode", "mop_template_id", "map_flag", "tid"])
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParam["action"]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneAction["items"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParamActionItem["param"]->de.konqi.roborockbridge.remote.rest.dto.user.DifferentiatingCleanupParams["data"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup["auto_dry"])
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:103) ~[spring-web-6.0.13.jar!/:6.0.13]
        ... 36 common frames omitted
Caused by: com.fasterxml.jackson.databind.JsonMappingException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auto_dry" (class de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup), not marked as ignorable (9 known properties: "mop_mode", "fan_power", "clean_order_mode", "repeat", "segs", "water_box_mode", "mop_template_id", "map_flag", "tid"])
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParam["action"]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneAction["items"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParamActionItem["param"]->de.konqi.roborockbridge.remote.rest.dto.user.DifferentiatingCleanupParams["data"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup["auto_dry"]) (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserApiResponseDto["result"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.UserScenes["param"])
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1853) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:572) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:359) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395) ~[spring-web-6.0.13.jar!/:6.0.13]
        ... 38 common frames omitted
Caused by: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auto_dry" (class de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup), not marked as ignorable (9 known properties: "mop_mode", "fan_power", "clean_order_mode", "repeat", "segs", "water_box_mode", "mop_template_id", "map_flag", "tid"])
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParam["action"]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneAction["items"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParamActionItem["param"]->de.konqi.roborockbridge.remote.rest.dto.user.DifferentiatingCleanupParams["data"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup["auto_dry"])
        at de.konqi.roborockbridge.utility.NestedJsonDeserializer.convert(NestedJsonDeserializer.kt:13) ~[classes!/:0.0.6-SNAPSHOT]
        at de.konqi.roborockbridge.utility.NestedJsonDeserializer.convert(NestedJsonDeserializer.kt:8) ~[classes!/:0.0.6-SNAPSHOT]
        at com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer.convertValue(StdDelegatingDeserializer.java:337) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer.deserialize(StdDelegatingDeserializer.java:174) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        ... 55 common frames omitted
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "auto_dry" (class de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup), not marked as ignorable (9 known properties: "mop_mode", "fan_power", "clean_order_mode", "repeat", "segs", "water_box_mode", "mop_template_id", "map_flag", "tid"])
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParam["action"]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneAction["items"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.UserSceneParamActionItem["param"]->de.konqi.roborockbridge.remote.rest.dto.user.DifferentiatingCleanupParams["data"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.user.ParamsForSegmentedCleanup["auto_dry"])
        at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1138) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2224) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1709) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1687) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:284) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:463) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:359) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4801) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2999) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at de.konqi.roborockbridge.remote.rest.dto.user.ActionItemParamDeserializer.deserialize(UserScenes.kt:169) ~[classes!/:0.0.6-SNAPSHOT]
        at de.konqi.roborockbridge.remote.rest.dto.user.ActionItemParamDeserializer.deserialize(UserScenes.kt:48) ~[classes!/:0.0.6-SNAPSHOT]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:359) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4825) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3772) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3740) ~[jackson-databind-2.15.3.jar!/:2.15.3]
        at de.konqi.roborockbridge.utility.NestedJsonDeserializer.convert(NestedJsonDeserializer.kt:11) ~[classes!/:0.0.6-SNAPSHOT]
        ... 60 common frames omitted

2024-06-01T07:21:58.793+01:00  INFO 8324 --- [           main] de.konqi.roborockbridge.BridgeService    : Shutting down bridge service
2024-06-01T07:21:58.800+01:00  WARN 8324 --- [           main] .s.c.a.CommonAnnotationBeanPostProcessor : Destroy method on bean with name 'roborockMqtt' threw an exception: kotlin.UninitializedPropertyAccessException: lateinit property mqttClient has not been initialized
2024-06-01T07:21:58.842+01:00  INFO 8324 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-06-01T07:21:58.850+01:00  INFO 8324 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2024-06-01T07:21:58.857+01:00  INFO 8324 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Also here my application.yaml if needed for analysis:

username: myRRmail   # your roborock account username (email address)
password: myRRpassword # your roborock account password
roborock-mqtt:
  app_secret_salt: TXdfu$jyZ#TZHsg4    # extracted from decompiled roborock app
  nonce_generation_salt: ThisIsASecret # just a random string for entropy
  endpoint: aAbBz0                     # 6 char string to use as an identifier
bridge-mqtt:
  url: tcp://192.168.202.201:1883            # connection url to your mqtt broker (use ssl:// for ssl)
  # If you don't use anonymous access to the broker, also set these
  username: myMQTTuser
  password: myMQTTpass
  client_id: rrmqtt       # how the client appears to your broker
  base_topic: rr          # everything th service does will be below this topic string
#capture-reader:
#  devices:
#    deviceId: deviceKey
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:h2
  jpa:
    hibernate:
      ddl-auto: update

Sorry if it is again a dumb thing, but i read the error multiple times and for me it just looks like the response from roborock was not interpretable for some reason.

birnbeidla commented 4 months ago

Now you got the same issue as me. I guess you also have a model that is different to the one konqi uses for testing and it has properties that are not supported.

Checkout my issue for details.

Michl7 commented 4 months ago

You are right i think, i have the relatively new RoboRock S8 MaxV Ultra.

konqi commented 3 months ago

@birnbeidla is absolutely correct - your robot has more properties than mine ;-) I could add those like @birnbeidla did, or make the service ignore extra props which would be more compatible in the future. I'll attempt to cook a version that does this and we can then see what happens. However the issue @birnbeidla currently has will probably affect you too, unless you do something different. 🤷🏻 Let's find out. I'll ping this Issue again when the new version is ready for testing.

Michl7 commented 3 months ago

Okay thanks, i tried to setup the things for decoding the protokol you described and hoped i can get you information of my robot. unfortunately i didn't get it working with the rooting of the virtual android device, i am not a real programmer and don't understand the errors i got. If you need data of my robot maybe we can get it working together?

konqi commented 3 months ago

We can do that too. Please create another issue with your error messages during setup, so that I have a chance to improve the instructions (don't forget to add a bit of information about the system you're working on, your OS, version, etc.)

From what I see in the other issue we're not on the protocol level, yet. Setting up the whole mitm thing will become interesting once we get mqtt errors on the roborock side. Regardless it's very interesting to see the amount of data even a virtual device transmits to roborock 🙈

Michl7 commented 3 months ago

okay will do that in the next days, didnt save the errors so i have to do it again for documentation.

konqi commented 3 months ago

I created a new release that shouldn't crash if there are more than the expected properties. You can give this version a go and see what happens.

Michl7 commented 3 months ago

Install it and it is working. I get data of my robot to my MQTT broker but i am stuck with the commands.

I work with openhab MQTT binding or node red and tried to send commands without any outcome. Do i have to format the message i send to the command topic any special?

val mqttActions = getActions("mqtt","mqtt:broker:MQTT_Broker")
mqttActions.publishMQTT("roborock/home/HOMEID/device/robiID/get","state")
konqi commented 3 months ago

Your configuration file above says your base topic is rr not roborock. Not sure which one is correct. Assuming you replace HOMEID and robiID with your actual values the command looks okay. I recommend playing around with mqtt-explorer where you can see the topic structure and can copy and paste things easily. I see three options for you:

  1. You can copy and paste the whole topic name and just add action to the end with payload start. This should trigger a cleanup with whatever is currently configured.
  2. If you have routines configured in the roborock app you can see those too and invoke them with <base-topic>/home/<homeId>/routine/<routineId>/action (no payload required).
  3. Or to see some action (but given a different robot mostly service crashes) you can start a cleanup in the roborock app and then start the bridge. It should detect that the robot is active and poll for updates.
Michl7 commented 3 months ago

Thanks for the ttip with this great tool. I see poth topics rr and roborock. In my YAML i have writen base topic roborock. so wich one is the right one? why are there even two?

Here a pic of my yaml + mqttexplorer: image

konqi commented 3 months ago

The easiest way to find out which topic is still active is to simply delete both topic trees, restart the bridge service and see which one is recreated. From your config file, I would say it's the roborock-one.

Michl7 commented 3 months ago

Tried today to start it up for checking the topics ang got following error:

pi@raspberrypi:~ $ sudo java -jar -Dspring.config.location="FTP/files/application.yaml" FTP/files/roborock-bridge-0.0.7-SNAPSHOT.jar                                                                                                                                                                                         2024-06-29T08:06:22.080+01:00  INFO 31606 --- [           main] d.k.r.RoborockBridgeApplicationKt        : Starting RoborockBridgeApplicationKt v0.0.7-SNAPSHOT using Java 17.0.1 with PID 31606 (/home/pi/FTP/files/roborock-bridge-0.0.7-SNAPSHOT.jar started by root in /home/pi)
2024-06-29T08:06:22.095+01:00  INFO 31606 --- [           main] d.k.r.RoborockBridgeApplicationKt        : The following 1 profile is active: "bridge"
2024-06-29T08:06:28.154+01:00  INFO 31606 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-06-29T08:06:28.568+01:00  INFO 31606 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 380 ms. Found 5 JPA repository interfaces.
2024-06-29T08:06:31.934+01:00  INFO 31606 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-06-29T08:06:32.230+01:00  INFO 31606 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-06-29T08:06:32.381+01:00  INFO 31606 --- [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
2024-06-29T08:06:33.554+01:00  INFO 31606 --- [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-06-29T08:06:33.707+01:00  INFO 31606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-06-29T08:06:34.451+01:00  INFO 31606 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:h2 user=SA
2024-06-29T08:06:34.459+01:00  INFO 31606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2024-06-29T08:06:38.620+01:00  INFO 31606 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2024-06-29T08:06:38.878+01:00  INFO 31606 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2024-06-29T08:06:42.667+01:00  INFO 31606 --- [           main] o.s.d.j.r.query.QueryEnhancerFactory     : Hibernate is in classpath; If applicable, HQL parser will be used.
2024-06-29T08:06:45.169+01:00  INFO 31606 --- [           main] d.k.r.remote.RoborockCredentials         : clientId not configured. Using auto-generated clientId rqLJB4fibvxQtYz3uDqZwA==.
2024-06-29T08:06:48.942+01:00  INFO 31606 --- [           main] d.k.r.RoborockBridgeApplicationKt        : Started RoborockBridgeApplicationKt in 29.482 seconds (process running for 32.541)
2024-06-29T08:06:51.713+01:00 ERROR 31606 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.web.client.RestClientException: Error while extracting response for type [de.konqi.roborockbridge.remote.rest.dto.user.UserApiResponseDto<de.konqi.roborockbridge.remote.rest.dto.user.UserHomeData>] and content type [application/json]
        at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:119) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1159) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1142) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:892) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:811) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:711) ~[spring-web-6.1.6.jar!/:6.1.6]
        at de.konqi.roborockbridge.remote.rest.UserApi.getUserHome(UserApi.kt:71) ~[!/:0.0.7-SNAPSHOT]
        at de.konqi.roborockbridge.BridgeService.init(BridgeService.kt:64) ~[!/:0.0.7-SNAPSHOT]
        at de.konqi.roborockbridge.BridgeService.worker(BridgeService.kt:116) ~[!/:0.0.7-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:365) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:237) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:168) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:451) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:384) ~[spring-context-6.1.6.jar!/:6.1.6]
        at org.springframework.boot.context.event.EventPublishingRunListener.ready(EventPublishingRunListener.java:109) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at org.springframework.boot.SpringApplicationRunListeners.lambda$ready$6(SpringApplicationRunListeners.java:80) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at org.springframework.boot.SpringApplicationRunListeners.ready(SpringApplicationRunListeners.java:80) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:348) ~[spring-boot-3.2.5.jar!/:3.2.5]
        at de.konqi.roborockbridge.RoborockBridgeApplicationKt.main(RoborockBridgeApplication.kt:38) ~[!/:0.0.7-SNAPSHOT]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91) ~[roborock-bridge-0.0.7-SNAPSHOT.jar:0.0.7-SNAPSHOT]
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53) ~[roborock-bridge-0.0.7-SNAPSHOT.jar:0.0.7-SNAPSHOT]
        at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58) ~[roborock-bridge-0.0.7-SNAPSHOT.jar:0.0.7-SNAPSHOT]
Caused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize Map key of type `java.lang.Integer` from String "filter_life": not a valid representation, problem: (java.lang.NumberFormatException) For input string: "filter_life"
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354) ~[spring-web-6.1.6.jar!/:6.1.6]
        at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:104) ~[spring-web-6.1.6.jar!/:6.1.6]
        ... 35 common frames omitted
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize Map key of type `java.lang.Integer` from String "filter_life": not a valid representation, problem: (java.lang.NumberFormatException) For input string: "filter_life"
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 3255] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserApiResponseDto["result"]->de.konqi.roborockbridge.remote.rest.dto.user.UserHomeData["devices"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.homedetail.Device["deviceStatus"])
        at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.DeserializationContext.weirdKeyException(DeserializationContext.java:1979) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdKey(DeserializationContext.java:1184) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer.deserializeKey(StdKeyDeserializer.java:139) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBind(MapDeserializer.java:541) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:451) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:32) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1419) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:359) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1419) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1419) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481) ~[jackson-databind-2.15.4.jar!/:2.15.4]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395) ~[spring-web-6.1.6.jar!/:6.1.6]
        ... 37 common frames omitted

2024-06-29T08:06:51.782+01:00  INFO 31606 --- [           main] de.konqi.roborockbridge.BridgeService    : Shutting down bridge service
2024-06-29T08:06:51.791+01:00  WARN 31606 --- [           main] .s.c.a.CommonAnnotationBeanPostProcessor : Destroy method on bean with name 'roborockMqtt' threw an exception: kotlin.UninitializedPropertyAccessException: lateinit property mqttClient has not been initialized
2024-06-29T08:06:51.900+01:00  INFO 31606 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-06-29T08:06:51.909+01:00  INFO 31606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2024-06-29T08:06:51.918+01:00  INFO 31606 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Looks like it has a problem with the filter life value:

Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize Map key of type `java.lang.Integer` from String "filter_life": not a valid representation, problem: (java.lang.NumberFormatException) For input string: "filter_life"
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 3255] (through reference chain: de.konqi.roborockbridge.remote.rest.dto.user.UserApiResponseDto["result"]->de.konqi.roborockbridge.remote.rest.dto.user.UserHomeData["devices"]->java.util.ArrayList[0]->de.konqi.roborockbridge.remote.rest.dto.homedetail.Device["deviceStatus"])
konqi commented 3 months ago

Actually, the issue is with the property key, not the value. All keys should be numbers (and they are for my robot). I believe I can make an adjustment for that, after all, all json-keys are strings by definition. I'll have to check if this causes bigger issues further down the line, so this will take some time.

konqi commented 1 month ago

The issue with

Cannot deserialize Map key of type java.lang.Integer

in that specific place should be fixed in v0.0.8.