matterbridge-roborock-vacuum-plugin-regions 1.1.1-jb.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/.github/workflows/build.yml +56 -0
  2. package/.github/workflows/coverage.yml +59 -0
  3. package/.github/workflows/publish.yml +37 -0
  4. package/.tarignore +5 -0
  5. package/CHANGELOG.md +62 -0
  6. package/LICENSE +202 -0
  7. package/README.md +135 -0
  8. package/README_CLEANMODE.md +29 -0
  9. package/README_DEV.md +75 -0
  10. package/README_REPORT_ISSUE.md +34 -0
  11. package/README_SUPPORTED.md +67 -0
  12. package/dist/behaviorFactory.js +26 -0
  13. package/dist/behaviors/BehaviorDeviceGeneric.js +22 -0
  14. package/dist/behaviors/roborock.vacuum/default/default.js +183 -0
  15. package/dist/behaviors/roborock.vacuum/default/initalData.js +143 -0
  16. package/dist/behaviors/roborock.vacuum/default/runtimes.js +21 -0
  17. package/dist/behaviors/roborock.vacuum/smart/initalData.js +18 -0
  18. package/dist/behaviors/roborock.vacuum/smart/runtimes.js +11 -0
  19. package/dist/behaviors/roborock.vacuum/smart/smart.js +119 -0
  20. package/dist/clientManager.js +17 -0
  21. package/dist/helper.js +76 -0
  22. package/dist/index.js +4 -0
  23. package/dist/initialData/getBatteryStatus.js +24 -0
  24. package/dist/initialData/getOperationalStates.js +82 -0
  25. package/dist/initialData/getSupportedAreas.js +120 -0
  26. package/dist/initialData/getSupportedCleanModes.js +17 -0
  27. package/dist/initialData/getSupportedRunModes.js +11 -0
  28. package/dist/initialData/getSupportedScenes.js +26 -0
  29. package/dist/initialData/index.js +6 -0
  30. package/dist/model/CloudMessageModel.js +1 -0
  31. package/dist/model/DockingStationStatus.js +26 -0
  32. package/dist/model/ExperimentalFeatureSetting.js +30 -0
  33. package/dist/model/RoomMap.js +19 -0
  34. package/dist/model/roomIndexMap.js +21 -0
  35. package/dist/notifyMessageTypes.js +9 -0
  36. package/dist/platform.js +312 -0
  37. package/dist/platformRunner.js +90 -0
  38. package/dist/roborockCommunication/RESTAPI/roborockAuthenticateApi.js +213 -0
  39. package/dist/roborockCommunication/RESTAPI/roborockIoTApi.js +95 -0
  40. package/dist/roborockCommunication/Zenum/additionalPropCode.js +4 -0
  41. package/dist/roborockCommunication/Zenum/authenticateResponseCode.js +7 -0
  42. package/dist/roborockCommunication/Zenum/dockType.js +4 -0
  43. package/dist/roborockCommunication/Zenum/operationStatusCode.js +44 -0
  44. package/dist/roborockCommunication/Zenum/vacuumAndDockErrorCode.js +68 -0
  45. package/dist/roborockCommunication/Zmodel/apiResponse.js +1 -0
  46. package/dist/roborockCommunication/Zmodel/authenticateFlowState.js +1 -0
  47. package/dist/roborockCommunication/Zmodel/authenticateResponse.js +1 -0
  48. package/dist/roborockCommunication/Zmodel/baseURL.js +1 -0
  49. package/dist/roborockCommunication/Zmodel/batteryMessage.js +1 -0
  50. package/dist/roborockCommunication/Zmodel/device.js +1 -0
  51. package/dist/roborockCommunication/Zmodel/deviceModel.js +28 -0
  52. package/dist/roborockCommunication/Zmodel/deviceSchema.js +1 -0
  53. package/dist/roborockCommunication/Zmodel/deviceStatus.js +22 -0
  54. package/dist/roborockCommunication/Zmodel/dockInfo.js +6 -0
  55. package/dist/roborockCommunication/Zmodel/home.js +1 -0
  56. package/dist/roborockCommunication/Zmodel/homeInfo.js +1 -0
  57. package/dist/roborockCommunication/Zmodel/map.js +1 -0
  58. package/dist/roborockCommunication/Zmodel/mapInfo.js +29 -0
  59. package/dist/roborockCommunication/Zmodel/messageResult.js +7 -0
  60. package/dist/roborockCommunication/Zmodel/multipleMap.js +1 -0
  61. package/dist/roborockCommunication/Zmodel/networkInfo.js +1 -0
  62. package/dist/roborockCommunication/Zmodel/product.js +1 -0
  63. package/dist/roborockCommunication/Zmodel/room.js +1 -0
  64. package/dist/roborockCommunication/Zmodel/roomInfo.js +22 -0
  65. package/dist/roborockCommunication/Zmodel/scene.js +16 -0
  66. package/dist/roborockCommunication/Zmodel/userData.js +1 -0
  67. package/dist/roborockCommunication/Zmodel/vacuumError.js +27 -0
  68. package/dist/roborockCommunication/broadcast/abstractClient.js +55 -0
  69. package/dist/roborockCommunication/broadcast/client/LocalNetworkClient.js +174 -0
  70. package/dist/roborockCommunication/broadcast/client/LocalNetworkUDPClient.js +129 -0
  71. package/dist/roborockCommunication/broadcast/client/MQTTClient.js +139 -0
  72. package/dist/roborockCommunication/broadcast/client.js +1 -0
  73. package/dist/roborockCommunication/broadcast/clientRouter.js +82 -0
  74. package/dist/roborockCommunication/broadcast/listener/abstractConnectionListener.js +1 -0
  75. package/dist/roborockCommunication/broadcast/listener/abstractMessageHandler.js +1 -0
  76. package/dist/roborockCommunication/broadcast/listener/abstractMessageListener.js +1 -0
  77. package/dist/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.js +26 -0
  78. package/dist/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.js +11 -0
  79. package/dist/roborockCommunication/broadcast/listener/implementation/connectionStateListener.js +43 -0
  80. package/dist/roborockCommunication/broadcast/listener/implementation/generalSyncMessageListener.js +28 -0
  81. package/dist/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.js +27 -0
  82. package/dist/roborockCommunication/broadcast/listener/implementation/syncMessageListener.js +33 -0
  83. package/dist/roborockCommunication/broadcast/listener/index.js +1 -0
  84. package/dist/roborockCommunication/broadcast/messageProcessor.js +148 -0
  85. package/dist/roborockCommunication/broadcast/model/contentMessage.js +1 -0
  86. package/dist/roborockCommunication/broadcast/model/dps.js +1 -0
  87. package/dist/roborockCommunication/broadcast/model/headerMessage.js +1 -0
  88. package/dist/roborockCommunication/broadcast/model/messageContext.js +37 -0
  89. package/dist/roborockCommunication/broadcast/model/protocol.js +28 -0
  90. package/dist/roborockCommunication/broadcast/model/requestMessage.js +38 -0
  91. package/dist/roborockCommunication/broadcast/model/responseMessage.js +14 -0
  92. package/dist/roborockCommunication/helper/chunkBuffer.js +17 -0
  93. package/dist/roborockCommunication/helper/cryptoHelper.js +23 -0
  94. package/dist/roborockCommunication/helper/messageDeserializer.js +98 -0
  95. package/dist/roborockCommunication/helper/messageSerializer.js +84 -0
  96. package/dist/roborockCommunication/helper/nameDecoder.js +66 -0
  97. package/dist/roborockCommunication/helper/sequence.js +16 -0
  98. package/dist/roborockCommunication/index.js +13 -0
  99. package/dist/roborockService.js +494 -0
  100. package/dist/runtimes/handleCloudMessage.js +110 -0
  101. package/dist/runtimes/handleHomeDataMessage.js +57 -0
  102. package/dist/runtimes/handleLocalMessage.js +169 -0
  103. package/dist/rvc.js +51 -0
  104. package/dist/settings.js +1 -0
  105. package/dist/share/function.js +93 -0
  106. package/dist/share/runtimeHelper.js +17 -0
  107. package/dist/tests/testData/mockData.js +359 -0
  108. package/eslint.config.js +80 -0
  109. package/jest.config.js +22 -0
  110. package/jest.setup.js +2 -0
  111. package/logo.png +0 -0
  112. package/matterbridge-roborock-vacuum-plugin.config.json +46 -0
  113. package/matterbridge-roborock-vacuum-plugin.schema.json +293 -0
  114. package/misc/status.md +119 -0
  115. package/package.json +111 -0
  116. package/prettier.config.js +49 -0
  117. package/screenshot/IMG_1.PNG +0 -0
  118. package/screenshot/IMG_2.PNG +0 -0
  119. package/screenshot/IMG_3.PNG +0 -0
  120. package/screenshot/IMG_4.PNG +0 -0
  121. package/screenshot/IMG_5.PNG +0 -0
  122. package/screenshot/IMG_6.PNG +0 -0
  123. package/screenshot/IMG_7.PNG +0 -0
  124. package/src/behaviorFactory.ts +41 -0
  125. package/src/behaviors/BehaviorDeviceGeneric.ts +31 -0
  126. package/src/behaviors/roborock.vacuum/default/default.ts +238 -0
  127. package/src/behaviors/roborock.vacuum/default/initalData.ts +152 -0
  128. package/src/behaviors/roborock.vacuum/default/runtimes.ts +23 -0
  129. package/src/behaviors/roborock.vacuum/smart/initalData.ts +20 -0
  130. package/src/behaviors/roborock.vacuum/smart/runtimes.ts +15 -0
  131. package/src/behaviors/roborock.vacuum/smart/smart.ts +159 -0
  132. package/src/clientManager.ts +23 -0
  133. package/src/helper.ts +97 -0
  134. package/src/index.ts +16 -0
  135. package/src/initialData/getBatteryStatus.ts +26 -0
  136. package/src/initialData/getOperationalStates.ts +94 -0
  137. package/src/initialData/getSupportedAreas.ts +162 -0
  138. package/src/initialData/getSupportedCleanModes.ts +22 -0
  139. package/src/initialData/getSupportedRunModes.ts +14 -0
  140. package/src/initialData/getSupportedScenes.ts +32 -0
  141. package/src/initialData/index.ts +6 -0
  142. package/src/model/CloudMessageModel.ts +11 -0
  143. package/src/model/DockingStationStatus.ts +41 -0
  144. package/src/model/ExperimentalFeatureSetting.ts +77 -0
  145. package/src/model/RoomMap.ts +38 -0
  146. package/src/model/roomIndexMap.ts +26 -0
  147. package/src/notifyMessageTypes.ts +8 -0
  148. package/src/platform.ts +424 -0
  149. package/src/platformRunner.ts +103 -0
  150. package/src/roborockCommunication/RESTAPI/roborockAuthenticateApi.ts +302 -0
  151. package/src/roborockCommunication/RESTAPI/roborockIoTApi.ts +107 -0
  152. package/src/roborockCommunication/Zenum/additionalPropCode.ts +3 -0
  153. package/src/roborockCommunication/Zenum/authenticateResponseCode.ts +6 -0
  154. package/src/roborockCommunication/Zenum/dockType.ts +3 -0
  155. package/src/roborockCommunication/Zenum/operationStatusCode.ts +43 -0
  156. package/src/roborockCommunication/Zenum/vacuumAndDockErrorCode.ts +68 -0
  157. package/src/roborockCommunication/Zmodel/apiResponse.ts +3 -0
  158. package/src/roborockCommunication/Zmodel/authenticateFlowState.ts +6 -0
  159. package/src/roborockCommunication/Zmodel/authenticateResponse.ts +5 -0
  160. package/src/roborockCommunication/Zmodel/baseURL.ts +5 -0
  161. package/src/roborockCommunication/Zmodel/batteryMessage.ts +16 -0
  162. package/src/roborockCommunication/Zmodel/device.ts +50 -0
  163. package/src/roborockCommunication/Zmodel/deviceModel.ts +27 -0
  164. package/src/roborockCommunication/Zmodel/deviceSchema.ts +8 -0
  165. package/src/roborockCommunication/Zmodel/deviceStatus.ts +30 -0
  166. package/src/roborockCommunication/Zmodel/dockInfo.ts +9 -0
  167. package/src/roborockCommunication/Zmodel/home.ts +13 -0
  168. package/src/roborockCommunication/Zmodel/homeInfo.ts +5 -0
  169. package/src/roborockCommunication/Zmodel/map.ts +20 -0
  170. package/src/roborockCommunication/Zmodel/mapInfo.ts +54 -0
  171. package/src/roborockCommunication/Zmodel/messageResult.ts +75 -0
  172. package/src/roborockCommunication/Zmodel/multipleMap.ts +8 -0
  173. package/src/roborockCommunication/Zmodel/networkInfo.ts +7 -0
  174. package/src/roborockCommunication/Zmodel/product.ts +9 -0
  175. package/src/roborockCommunication/Zmodel/room.ts +4 -0
  176. package/src/roborockCommunication/Zmodel/roomInfo.ts +30 -0
  177. package/src/roborockCommunication/Zmodel/scene.ts +44 -0
  178. package/src/roborockCommunication/Zmodel/userData.ts +26 -0
  179. package/src/roborockCommunication/Zmodel/vacuumError.ts +35 -0
  180. package/src/roborockCommunication/broadcast/abstractClient.ts +80 -0
  181. package/src/roborockCommunication/broadcast/client/LocalNetworkClient.ts +218 -0
  182. package/src/roborockCommunication/broadcast/client/LocalNetworkUDPClient.ts +157 -0
  183. package/src/roborockCommunication/broadcast/client/MQTTClient.ts +174 -0
  184. package/src/roborockCommunication/broadcast/client.ts +19 -0
  185. package/src/roborockCommunication/broadcast/clientRouter.ts +104 -0
  186. package/src/roborockCommunication/broadcast/listener/abstractConnectionListener.ts +6 -0
  187. package/src/roborockCommunication/broadcast/listener/abstractMessageHandler.ts +11 -0
  188. package/src/roborockCommunication/broadcast/listener/abstractMessageListener.ts +5 -0
  189. package/src/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.ts +33 -0
  190. package/src/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.ts +16 -0
  191. package/src/roborockCommunication/broadcast/listener/implementation/connectionStateListener.ts +57 -0
  192. package/src/roborockCommunication/broadcast/listener/implementation/generalSyncMessageListener.ts +38 -0
  193. package/src/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.ts +37 -0
  194. package/src/roborockCommunication/broadcast/listener/implementation/syncMessageListener.ts +50 -0
  195. package/src/roborockCommunication/broadcast/listener/index.ts +3 -0
  196. package/src/roborockCommunication/broadcast/messageProcessor.ts +184 -0
  197. package/src/roborockCommunication/broadcast/model/contentMessage.ts +5 -0
  198. package/src/roborockCommunication/broadcast/model/dps.ts +19 -0
  199. package/src/roborockCommunication/broadcast/model/headerMessage.ts +7 -0
  200. package/src/roborockCommunication/broadcast/model/messageContext.ts +53 -0
  201. package/src/roborockCommunication/broadcast/model/protocol.ts +28 -0
  202. package/src/roborockCommunication/broadcast/model/requestMessage.ts +51 -0
  203. package/src/roborockCommunication/broadcast/model/responseMessage.ts +19 -0
  204. package/src/roborockCommunication/helper/chunkBuffer.ts +18 -0
  205. package/src/roborockCommunication/helper/cryptoHelper.ts +30 -0
  206. package/src/roborockCommunication/helper/messageDeserializer.ts +119 -0
  207. package/src/roborockCommunication/helper/messageSerializer.ts +101 -0
  208. package/src/roborockCommunication/helper/nameDecoder.ts +78 -0
  209. package/src/roborockCommunication/helper/sequence.ts +18 -0
  210. package/src/roborockCommunication/index.ts +25 -0
  211. package/src/roborockService.ts +657 -0
  212. package/src/runtimes/handleCloudMessage.ts +134 -0
  213. package/src/runtimes/handleHomeDataMessage.ts +67 -0
  214. package/src/runtimes/handleLocalMessage.ts +209 -0
  215. package/src/rvc.ts +97 -0
  216. package/src/settings.ts +1 -0
  217. package/src/share/function.ts +103 -0
  218. package/src/share/runtimeHelper.ts +23 -0
  219. package/src/tests/behaviors/roborock.vacuum/default/default.test.ts +134 -0
  220. package/src/tests/behaviors/roborock.vacuum/smart/runtimes.test.ts +64 -0
  221. package/src/tests/behaviors/roborock.vacuum/smart/smart.test.ts +215 -0
  222. package/src/tests/helper.test.ts +162 -0
  223. package/src/tests/initialData/getSupportedAreas.test.ts +181 -0
  224. package/src/tests/model/DockingStationStatus.test.ts +39 -0
  225. package/src/tests/platformRunner.test.ts +188 -0
  226. package/src/tests/platformRunner2.test.ts +228 -0
  227. package/src/tests/platformRunner3.test.ts +46 -0
  228. package/src/tests/roborockCommunication/RESTAPI/roborockAuthenticateApi.test.ts +144 -0
  229. package/src/tests/roborockCommunication/RESTAPI/roborockIoTApi.test.ts +106 -0
  230. package/src/tests/roborockCommunication/broadcast/client/LocalNetworkClient.test.ts +189 -0
  231. package/src/tests/roborockCommunication/broadcast/client/MQTTClient.test.ts +208 -0
  232. package/src/tests/roborockCommunication/broadcast/clientRouter.test.ts +168 -0
  233. package/src/tests/roborockCommunication/broadcast/listener/implementation/chainedConnectionListener.test.ts +59 -0
  234. package/src/tests/roborockCommunication/broadcast/listener/implementation/chainedMessageListener.test.ts +46 -0
  235. package/src/tests/roborockCommunication/broadcast/listener/implementation/simpleMessageListener.test.ts +71 -0
  236. package/src/tests/roborockCommunication/broadcast/listener/implementation/syncMessageListener.test.ts +86 -0
  237. package/src/tests/roborockCommunication/broadcast/messageProcessor.test.ts +126 -0
  238. package/src/tests/roborockService.setSelectedAreas.test.ts +61 -0
  239. package/src/tests/roborockService.test.ts +517 -0
  240. package/src/tests/roborockService2.test.ts +69 -0
  241. package/src/tests/roborockService3.test.ts +133 -0
  242. package/src/tests/roborockService4.test.ts +76 -0
  243. package/src/tests/roborockService5.test.ts +79 -0
  244. package/src/tests/runtimes/handleCloudMessage.test.ts +200 -0
  245. package/src/tests/runtimes/handleHomeDataMessage.test.ts +54 -0
  246. package/src/tests/runtimes/handleLocalMessage.test.ts +227 -0
  247. package/src/tests/testData/mockData.ts +370 -0
  248. package/src/tests/testData/mockHomeData-a187.json +286 -0
  249. package/tsconfig.jest.json +21 -0
  250. package/tsconfig.json +37 -0
  251. package/tsconfig.production.json +19 -0
  252. package/tslint.json +9 -0
  253. package/web-for-testing/README.md +47 -0
  254. package/web-for-testing/nodemon.json +7 -0
  255. package/web-for-testing/package-lock.json +6600 -0
  256. package/web-for-testing/package.json +36 -0
  257. package/web-for-testing/src/app.ts +194 -0
  258. package/web-for-testing/tsconfig-ext.json +19 -0
  259. package/web-for-testing/tsconfig.json +23 -0
  260. package/web-for-testing/views/index.ejs +172 -0
  261. package/web-for-testing/watch.mjs +93 -0
@@ -0,0 +1,95 @@
1
+ import axios from 'axios';
2
+ import crypto from 'node:crypto';
3
+ import { debugStringify } from 'matterbridge/logger';
4
+ export class RoborockIoTApi {
5
+ logger;
6
+ api;
7
+ constructor(userdata, logger) {
8
+ this.logger = logger;
9
+ this.api = axios.create({ baseURL: userdata.rriot.r.a });
10
+ this.api.interceptors.request.use((config) => {
11
+ try {
12
+ const timestamp = Math.floor(Date.now() / 1000);
13
+ const nonce = crypto
14
+ .randomBytes(6)
15
+ .toString('base64')
16
+ .substring(0, 6)
17
+ .replace(/[+/]/g, (m) => (m === '+' ? 'X' : 'Y'));
18
+ const url = this.api ? new URL(this.api.getUri(config)).pathname : '';
19
+ const data = [userdata.rriot.u, userdata.rriot.s, nonce, timestamp, crypto.createHash('md5').update(url).digest('hex'), '', ''].join(':');
20
+ const hmac = crypto.createHmac('sha256', userdata.rriot.h).update(data).digest('base64');
21
+ config.headers['Authorization'] = `Hawk id="${userdata.rriot.u}", s="${userdata.rriot.s}", ts="${timestamp}", nonce="${nonce}", mac="${hmac}"`;
22
+ }
23
+ catch (error) {
24
+ this.logger.error(`Failed to initialize RESTAPI ${error ? debugStringify(error) : 'undefined'}`);
25
+ }
26
+ return config;
27
+ });
28
+ }
29
+ async getHome(homeId) {
30
+ const result = await this.api.get(`user/homes/${homeId}`);
31
+ const apiResponse = result.data;
32
+ if (apiResponse.result) {
33
+ return apiResponse.result;
34
+ }
35
+ else {
36
+ this.logger.error('Failed to retrieve the home data');
37
+ return undefined;
38
+ }
39
+ }
40
+ async getHomev2(homeId) {
41
+ const result = await this.api.get('v2/user/homes/' + homeId);
42
+ const apiResponse = result.data;
43
+ if (apiResponse.result) {
44
+ return apiResponse.result;
45
+ }
46
+ else {
47
+ this.logger.error('Failed to retrieve the home data');
48
+ return undefined;
49
+ }
50
+ }
51
+ async getHomev3(homeId) {
52
+ const result = await this.api.get('v3/user/homes/' + homeId);
53
+ const apiResponse = result.data;
54
+ if (apiResponse.result) {
55
+ return apiResponse.result;
56
+ }
57
+ else {
58
+ this.logger.error('Failed to retrieve the home data');
59
+ return undefined;
60
+ }
61
+ }
62
+ async getScenes(homeId) {
63
+ const result = await this.api.get('user/scene/home/' + homeId);
64
+ const apiResponse = result.data;
65
+ if (apiResponse.result) {
66
+ return apiResponse.result;
67
+ }
68
+ else {
69
+ this.logger.error('Failed to retrieve scene');
70
+ return undefined;
71
+ }
72
+ }
73
+ async startScene(sceneId) {
74
+ const result = await this.api.post(`user/scene/${sceneId}/execute`);
75
+ const apiResponse = result.data;
76
+ if (apiResponse.result) {
77
+ return apiResponse.result;
78
+ }
79
+ else {
80
+ this.logger.error('Failed to execute scene');
81
+ return undefined;
82
+ }
83
+ }
84
+ async getCustom(url) {
85
+ const result = await this.api.get(url);
86
+ const apiResponse = result.data;
87
+ if (apiResponse.result) {
88
+ return apiResponse.result;
89
+ }
90
+ else {
91
+ this.logger.error('Failed to execute scene');
92
+ return undefined;
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,4 @@
1
+ export var AdditionalPropCode;
2
+ (function (AdditionalPropCode) {
3
+ AdditionalPropCode[AdditionalPropCode["map_change"] = 4] = "map_change";
4
+ })(AdditionalPropCode || (AdditionalPropCode = {}));
@@ -0,0 +1,7 @@
1
+ export var AuthenticateResponseCode;
2
+ (function (AuthenticateResponseCode) {
3
+ AuthenticateResponseCode[AuthenticateResponseCode["Success"] = 200] = "Success";
4
+ AuthenticateResponseCode[AuthenticateResponseCode["AccountNotFound"] = 2008] = "AccountNotFound";
5
+ AuthenticateResponseCode[AuthenticateResponseCode["InvalidCode"] = 2018] = "InvalidCode";
6
+ AuthenticateResponseCode[AuthenticateResponseCode["RateLimited"] = 9002] = "RateLimited";
7
+ })(AuthenticateResponseCode || (AuthenticateResponseCode = {}));
@@ -0,0 +1,4 @@
1
+ export var DockType;
2
+ (function (DockType) {
3
+ DockType[DockType["qrevo_curv_dock"] = 17] = "qrevo_curv_dock";
4
+ })(DockType || (DockType = {}));
@@ -0,0 +1,44 @@
1
+ export var OperationStatusCode;
2
+ (function (OperationStatusCode) {
3
+ OperationStatusCode[OperationStatusCode["Unknown"] = 0] = "Unknown";
4
+ OperationStatusCode[OperationStatusCode["Initiating"] = 1] = "Initiating";
5
+ OperationStatusCode[OperationStatusCode["Sleeping"] = 2] = "Sleeping";
6
+ OperationStatusCode[OperationStatusCode["Idle"] = 3] = "Idle";
7
+ OperationStatusCode[OperationStatusCode["RemoteControl"] = 4] = "RemoteControl";
8
+ OperationStatusCode[OperationStatusCode["Cleaning"] = 5] = "Cleaning";
9
+ OperationStatusCode[OperationStatusCode["ReturningDock"] = 6] = "ReturningDock";
10
+ OperationStatusCode[OperationStatusCode["ManualMode"] = 7] = "ManualMode";
11
+ OperationStatusCode[OperationStatusCode["Charging"] = 8] = "Charging";
12
+ OperationStatusCode[OperationStatusCode["ChargingError"] = 9] = "ChargingError";
13
+ OperationStatusCode[OperationStatusCode["Paused"] = 10] = "Paused";
14
+ OperationStatusCode[OperationStatusCode["SpotCleaning"] = 11] = "SpotCleaning";
15
+ OperationStatusCode[OperationStatusCode["InError"] = 12] = "InError";
16
+ OperationStatusCode[OperationStatusCode["ShuttingDown"] = 13] = "ShuttingDown";
17
+ OperationStatusCode[OperationStatusCode["Updating"] = 14] = "Updating";
18
+ OperationStatusCode[OperationStatusCode["ReturnToDock"] = 15] = "ReturnToDock";
19
+ OperationStatusCode[OperationStatusCode["GoTo"] = 16] = "GoTo";
20
+ OperationStatusCode[OperationStatusCode["ZoneClean"] = 17] = "ZoneClean";
21
+ OperationStatusCode[OperationStatusCode["RoomClean"] = 18] = "RoomClean";
22
+ OperationStatusCode[OperationStatusCode["EmptyingDustContainer"] = 22] = "EmptyingDustContainer";
23
+ OperationStatusCode[OperationStatusCode["WashingTheMop"] = 23] = "WashingTheMop";
24
+ OperationStatusCode[OperationStatusCode["WashingTheMop2"] = 25] = "WashingTheMop2";
25
+ OperationStatusCode[OperationStatusCode["GoingToWashTheMop"] = 26] = "GoingToWashTheMop";
26
+ OperationStatusCode[OperationStatusCode["InCall"] = 28] = "InCall";
27
+ OperationStatusCode[OperationStatusCode["Mapping"] = 29] = "Mapping";
28
+ OperationStatusCode[OperationStatusCode["SOMETHING_NEED_TO_FIGUREOUT"] = 30] = "SOMETHING_NEED_TO_FIGUREOUT";
29
+ OperationStatusCode[OperationStatusCode["Patrol"] = 32] = "Patrol";
30
+ OperationStatusCode[OperationStatusCode["FullyCharged"] = 100] = "FullyCharged";
31
+ OperationStatusCode[OperationStatusCode["DeviceOffline"] = 101] = "DeviceOffline";
32
+ OperationStatusCode[OperationStatusCode["Locked"] = 103] = "Locked";
33
+ OperationStatusCode[OperationStatusCode["AirDryingStopping"] = 202] = "AirDryingStopping";
34
+ OperationStatusCode[OperationStatusCode["RobotStatusMopping"] = 6301] = "RobotStatusMopping";
35
+ OperationStatusCode[OperationStatusCode["CleanMopCleaning"] = 6302] = "CleanMopCleaning";
36
+ OperationStatusCode[OperationStatusCode["CleanMopMopping"] = 6303] = "CleanMopMopping";
37
+ OperationStatusCode[OperationStatusCode["RoomMopping"] = 6304] = "RoomMopping";
38
+ OperationStatusCode[OperationStatusCode["RoomCleanMopCleaning"] = 6305] = "RoomCleanMopCleaning";
39
+ OperationStatusCode[OperationStatusCode["RoomCleanMopMopping"] = 6306] = "RoomCleanMopMopping";
40
+ OperationStatusCode[OperationStatusCode["ZoneMopping"] = 6307] = "ZoneMopping";
41
+ OperationStatusCode[OperationStatusCode["ZoneCleanMopCleaning"] = 6308] = "ZoneCleanMopCleaning";
42
+ OperationStatusCode[OperationStatusCode["ZoneCleanMopMopping"] = 6309] = "ZoneCleanMopMopping";
43
+ OperationStatusCode[OperationStatusCode["BackToDockWashingDuster"] = 6310] = "BackToDockWashingDuster";
44
+ })(OperationStatusCode || (OperationStatusCode = {}));
@@ -0,0 +1,68 @@
1
+ export var VacuumErrorCode;
2
+ (function (VacuumErrorCode) {
3
+ VacuumErrorCode[VacuumErrorCode["None"] = 0] = "None";
4
+ VacuumErrorCode[VacuumErrorCode["LidarBlocked"] = 1] = "LidarBlocked";
5
+ VacuumErrorCode[VacuumErrorCode["BumperStuck"] = 2] = "BumperStuck";
6
+ VacuumErrorCode[VacuumErrorCode["WheelsSuspended"] = 3] = "WheelsSuspended";
7
+ VacuumErrorCode[VacuumErrorCode["CliffSensorError"] = 4] = "CliffSensorError";
8
+ VacuumErrorCode[VacuumErrorCode["MainBrushJammed"] = 5] = "MainBrushJammed";
9
+ VacuumErrorCode[VacuumErrorCode["SideBrushJammed"] = 6] = "SideBrushJammed";
10
+ VacuumErrorCode[VacuumErrorCode["WheelsJammed"] = 7] = "WheelsJammed";
11
+ VacuumErrorCode[VacuumErrorCode["RobotTrapped"] = 8] = "RobotTrapped";
12
+ VacuumErrorCode[VacuumErrorCode["NoDustbin"] = 9] = "NoDustbin";
13
+ VacuumErrorCode[VacuumErrorCode["StrainerError"] = 10] = "StrainerError";
14
+ VacuumErrorCode[VacuumErrorCode["CompassError"] = 11] = "CompassError";
15
+ VacuumErrorCode[VacuumErrorCode["LowBattery"] = 12] = "LowBattery";
16
+ VacuumErrorCode[VacuumErrorCode["ChargingError"] = 13] = "ChargingError";
17
+ VacuumErrorCode[VacuumErrorCode["BatteryError"] = 14] = "BatteryError";
18
+ VacuumErrorCode[VacuumErrorCode["WallSensorDirty"] = 15] = "WallSensorDirty";
19
+ VacuumErrorCode[VacuumErrorCode["RobotTilted"] = 16] = "RobotTilted";
20
+ VacuumErrorCode[VacuumErrorCode["SideBrushError"] = 17] = "SideBrushError";
21
+ VacuumErrorCode[VacuumErrorCode["FanError"] = 18] = "FanError";
22
+ VacuumErrorCode[VacuumErrorCode["DockNotConnectedToPower"] = 19] = "DockNotConnectedToPower";
23
+ VacuumErrorCode[VacuumErrorCode["OpticalFlowSensorDirt"] = 20] = "OpticalFlowSensorDirt";
24
+ VacuumErrorCode[VacuumErrorCode["VerticalBumperPressed"] = 21] = "VerticalBumperPressed";
25
+ VacuumErrorCode[VacuumErrorCode["DockLocatorError"] = 22] = "DockLocatorError";
26
+ VacuumErrorCode[VacuumErrorCode["ReturnToDockFail"] = 23] = "ReturnToDockFail";
27
+ VacuumErrorCode[VacuumErrorCode["NogoZoneDetected"] = 24] = "NogoZoneDetected";
28
+ VacuumErrorCode[VacuumErrorCode["CameraError"] = 25] = "CameraError";
29
+ VacuumErrorCode[VacuumErrorCode["WallSensorError"] = 26] = "WallSensorError";
30
+ VacuumErrorCode[VacuumErrorCode["VibrariseJammed"] = 27] = "VibrariseJammed";
31
+ VacuumErrorCode[VacuumErrorCode["RobotOnCarpet"] = 28] = "RobotOnCarpet";
32
+ VacuumErrorCode[VacuumErrorCode["FilterBlocked"] = 29] = "FilterBlocked";
33
+ VacuumErrorCode[VacuumErrorCode["InvisibleWallDetected"] = 30] = "InvisibleWallDetected";
34
+ VacuumErrorCode[VacuumErrorCode["CannotCrossCarpet"] = 31] = "CannotCrossCarpet";
35
+ VacuumErrorCode[VacuumErrorCode["InternalError"] = 32] = "InternalError";
36
+ VacuumErrorCode[VacuumErrorCode["CleanAutoEmptyDock"] = 34] = "CleanAutoEmptyDock";
37
+ VacuumErrorCode[VacuumErrorCode["AutoEmptyDockVoltage"] = 35] = "AutoEmptyDockVoltage";
38
+ VacuumErrorCode[VacuumErrorCode["MoppingRollerJammed"] = 36] = "MoppingRollerJammed";
39
+ VacuumErrorCode[VacuumErrorCode["MoppingRollerNotLowered"] = 37] = "MoppingRollerNotLowered";
40
+ VacuumErrorCode[VacuumErrorCode["ClearWaterBoxHoare"] = 38] = "ClearWaterBoxHoare";
41
+ VacuumErrorCode[VacuumErrorCode["DirtyWaterBoxHoare"] = 39] = "DirtyWaterBoxHoare";
42
+ VacuumErrorCode[VacuumErrorCode["SinkStrainerHoare"] = 40] = "SinkStrainerHoare";
43
+ VacuumErrorCode[VacuumErrorCode["ClearWaterTankEmpty"] = 41] = "ClearWaterTankEmpty";
44
+ VacuumErrorCode[VacuumErrorCode["ClearBrushInstalledProperly"] = 42] = "ClearBrushInstalledProperly";
45
+ VacuumErrorCode[VacuumErrorCode["ClearBrushPositioningError"] = 43] = "ClearBrushPositioningError";
46
+ VacuumErrorCode[VacuumErrorCode["FilterScreenException"] = 44] = "FilterScreenException";
47
+ VacuumErrorCode[VacuumErrorCode["MoppingRollerJammed2"] = 45] = "MoppingRollerJammed2";
48
+ VacuumErrorCode[VacuumErrorCode["UpWaterException"] = 48] = "UpWaterException";
49
+ VacuumErrorCode[VacuumErrorCode["DrainWaterException"] = 49] = "DrainWaterException";
50
+ VacuumErrorCode[VacuumErrorCode["TemperatureProtection"] = 51] = "TemperatureProtection";
51
+ VacuumErrorCode[VacuumErrorCode["CleanCarouselException"] = 52] = "CleanCarouselException";
52
+ VacuumErrorCode[VacuumErrorCode["CleanCarouselWaterFull"] = 53] = "CleanCarouselWaterFull";
53
+ VacuumErrorCode[VacuumErrorCode["WaterCarriageDrop"] = 54] = "WaterCarriageDrop";
54
+ VacuumErrorCode[VacuumErrorCode["CheckCleanCarouse"] = 55] = "CheckCleanCarouse";
55
+ VacuumErrorCode[VacuumErrorCode["AudioError"] = 56] = "AudioError";
56
+ })(VacuumErrorCode || (VacuumErrorCode = {}));
57
+ export var DockErrorCode;
58
+ (function (DockErrorCode) {
59
+ DockErrorCode[DockErrorCode["None"] = 0] = "None";
60
+ DockErrorCode[DockErrorCode["DuctBlockage"] = 34] = "DuctBlockage";
61
+ DockErrorCode[DockErrorCode["WaterEmpty"] = 38] = "WaterEmpty";
62
+ DockErrorCode[DockErrorCode["WasteWaterTankFull"] = 39] = "WasteWaterTankFull";
63
+ DockErrorCode[DockErrorCode["MaintenanceBrushJammed"] = 42] = "MaintenanceBrushJammed";
64
+ DockErrorCode[DockErrorCode["DirtyTankLatchOpen"] = 44] = "DirtyTankLatchOpen";
65
+ DockErrorCode[DockErrorCode["NoDustbin"] = 46] = "NoDustbin";
66
+ DockErrorCode[DockErrorCode["CleaningTankFullOrBlocked"] = 53] = "CleaningTankFullOrBlocked";
67
+ })(DockErrorCode || (DockErrorCode = {}));
68
+ export const SUPPORTED_ATTACHMENTS = ['WATERTANK', 'MOP'];
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ export var DeviceModel;
2
+ (function (DeviceModel) {
3
+ DeviceModel["Q5"] = "roborock.vacuum.a34";
4
+ DeviceModel["Q5_PRO"] = "roborock.vacuum.a72";
5
+ DeviceModel["S5"] = "roborock.vacuum.s5";
6
+ DeviceModel["S5_MAX"] = "roborock.vacuum.s5e";
7
+ DeviceModel["S6"] = "roborock.vacuum.s6";
8
+ DeviceModel["S6_MAXV"] = "roborock.vacuum.a10";
9
+ DeviceModel["S6_PURE"] = "roborock.vacuum.a08";
10
+ DeviceModel["Q7"] = "roborock.vacuum.a40";
11
+ DeviceModel["Q7_PLUS"] = "roborock.vacuum.axx";
12
+ DeviceModel["Q7_MAX"] = "roborock.vacuum.a38";
13
+ DeviceModel["S7"] = "roborock.vacuum.a15";
14
+ DeviceModel["S7_MAXV"] = "roborock.vacuum.a27";
15
+ DeviceModel["S7_MAXV_ULTRA"] = "roborock.vacuum.a65";
16
+ DeviceModel["S7_PRO_ULTRA"] = "roborock.vacuum.a62";
17
+ DeviceModel["Q8_MAX"] = "roborock.vacuum.a73";
18
+ DeviceModel["S8"] = "roborock.vacuum.a51";
19
+ DeviceModel["S8_PRO_ULTRA"] = "roborock.vacuum.a70";
20
+ DeviceModel["S8_MAXV_ULTRA"] = "roborock.vacuum.a97";
21
+ DeviceModel["QREVO_MASTER"] = "roborock.vacuum.a117";
22
+ DeviceModel["QREVO_CURV"] = "roborock.vacuum.a135";
23
+ DeviceModel["QREVO_S"] = "roborock.vacuum.a104";
24
+ DeviceModel["QREVO_PRO"] = "roborock.vacuum.a101";
25
+ DeviceModel["QREVO_MAXV"] = "roborock.vacuum.a87";
26
+ DeviceModel["QREVO_EDGE_5V1"] = "roborock.vacuum.a187";
27
+ DeviceModel["QREVO_EDGE_5AE"] = "roborock.vacuum.xxxx";
28
+ })(DeviceModel || (DeviceModel = {}));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { DockInfo } from './dockInfo.js';
2
+ import { VacuumError } from './vacuumError.js';
3
+ export class DeviceStatus {
4
+ errorStatus;
5
+ message;
6
+ constructor(message) {
7
+ this.message = message[0];
8
+ this.errorStatus = new VacuumError(this.message.error_code, this.message.dock_error_status);
9
+ }
10
+ getBattery() {
11
+ return this.message.battery;
12
+ }
13
+ getVacuumErrorCode() {
14
+ return this.message.error_code;
15
+ }
16
+ getDockInfo() {
17
+ return new DockInfo(this.message.dock_type);
18
+ }
19
+ getDockErrorCode() {
20
+ return this.message.dock_error_status;
21
+ }
22
+ }
@@ -0,0 +1,6 @@
1
+ export class DockInfo {
2
+ dockType;
3
+ constructor(dockType) {
4
+ this.dockType = dockType;
5
+ }
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import decodeComponent from '../helper/nameDecoder.js';
2
+ export class MapInfo {
3
+ maps = [];
4
+ allRooms = [];
5
+ constructor(multimap) {
6
+ this.maps = multimap.map_info.map((mapInfo) => {
7
+ const rooms = mapInfo.rooms?.map((room) => ({
8
+ id: room.id,
9
+ globalId: parseInt(room.iot_name_id),
10
+ iot_name_id: room.iot_name_id,
11
+ tag: room.tag,
12
+ displayName: room.iot_name,
13
+ mapId: mapInfo.mapFlag,
14
+ })) ?? [];
15
+ this.allRooms.push(...rooms);
16
+ return {
17
+ id: mapInfo.mapFlag,
18
+ name: decodeComponent(mapInfo.name),
19
+ rooms,
20
+ };
21
+ });
22
+ }
23
+ getById(id) {
24
+ return this.maps.find((m) => m.id === id)?.name;
25
+ }
26
+ getByName(name) {
27
+ return this.maps.find((m) => m.name?.toLowerCase() === name.toLowerCase())?.id;
28
+ }
29
+ }
@@ -0,0 +1,7 @@
1
+ export var CarpetCleanMode;
2
+ (function (CarpetCleanMode) {
3
+ CarpetCleanMode[CarpetCleanMode["Avoid"] = 0] = "Avoid";
4
+ CarpetCleanMode[CarpetCleanMode["Ignore"] = 2] = "Ignore";
5
+ CarpetCleanMode[CarpetCleanMode["Cross"] = 3] = "Cross";
6
+ CarpetCleanMode[CarpetCleanMode["DynamicLift"] = 200] = "DynamicLift";
7
+ })(CarpetCleanMode || (CarpetCleanMode = {}));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import decodeComponent from '../helper/nameDecoder.js';
2
+ export class RoomInfo {
3
+ rooms = [];
4
+ constructor(roomInfo, roomData) {
5
+ this.rooms = roomData
6
+ .map((entry) => {
7
+ return { id: entry[0], globalId: entry[1] };
8
+ })
9
+ .map((entry) => {
10
+ return {
11
+ id: entry.id,
12
+ room: roomInfo.find((el) => el.id == entry.globalId),
13
+ };
14
+ })
15
+ .map((entry) => {
16
+ return {
17
+ id: entry.id,
18
+ name: decodeComponent(entry.room?.name)?.toLowerCase(),
19
+ };
20
+ });
21
+ }
22
+ }
@@ -0,0 +1,16 @@
1
+ export class Scene {
2
+ id;
3
+ name;
4
+ param;
5
+ enabled;
6
+ extra;
7
+ type;
8
+ }
9
+ export class SceneItem {
10
+ id;
11
+ type;
12
+ name;
13
+ entityId;
14
+ param;
15
+ finishDpIds;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import { DockErrorCode, VacuumErrorCode } from '../Zenum/vacuumAndDockErrorCode.js';
2
+ export class VacuumError {
3
+ vacuumErrorCode;
4
+ dockErrorCode;
5
+ constructor(errorCode, dockErrorCode) {
6
+ this.vacuumErrorCode = errorCode;
7
+ this.dockErrorCode = dockErrorCode;
8
+ }
9
+ hasError() {
10
+ return this.vacuumErrorCode != 0 || this.dockErrorCode != 0;
11
+ }
12
+ isStuck() {
13
+ return this.vacuumErrorCode === VacuumErrorCode.RobotTrapped;
14
+ }
15
+ isBatteryLow() {
16
+ return this.vacuumErrorCode === VacuumErrorCode.LowBattery;
17
+ }
18
+ isBinFull() {
19
+ return this.vacuumErrorCode === VacuumErrorCode.CleanAutoEmptyDock || this.dockErrorCode == DockErrorCode.DuctBlockage;
20
+ }
21
+ isCleanWaterEmpty() {
22
+ return this.vacuumErrorCode === VacuumErrorCode.ClearWaterTankEmpty || this.dockErrorCode == DockErrorCode.WaterEmpty;
23
+ }
24
+ isWasteWaterFull() {
25
+ return this.dockErrorCode == DockErrorCode.WasteWaterTankFull;
26
+ }
27
+ }
@@ -0,0 +1,55 @@
1
+ import { MessageDeserializer } from '../helper/messageDeserializer.js';
2
+ import { MessageSerializer } from '../helper/messageSerializer.js';
3
+ import { ChainedConnectionListener } from './listener/implementation/chainedConnectionListener.js';
4
+ import { ChainedMessageListener } from './listener/implementation/chainedMessageListener.js';
5
+ import { SyncMessageListener } from './listener/implementation/syncMessageListener.js';
6
+ import { ConnectionStateListener } from './listener/implementation/connectionStateListener.js';
7
+ export class AbstractClient {
8
+ isInDisconnectingStep = false;
9
+ retryCount = 0;
10
+ connectionListeners = new ChainedConnectionListener();
11
+ messageListeners = new ChainedMessageListener();
12
+ serializer;
13
+ deserializer;
14
+ context;
15
+ connected = false;
16
+ logger;
17
+ syncMessageListener;
18
+ constructor(logger, context) {
19
+ this.context = context;
20
+ this.serializer = new MessageSerializer(this.context, logger);
21
+ this.deserializer = new MessageDeserializer(this.context, logger);
22
+ this.syncMessageListener = new SyncMessageListener(logger);
23
+ this.messageListeners.register(this.syncMessageListener);
24
+ this.logger = logger;
25
+ }
26
+ initializeConnectionStateListener() {
27
+ const connectionStateListener = new ConnectionStateListener(this.logger, this, this.clientName, this.shouldReconnect);
28
+ this.connectionListeners.register(connectionStateListener);
29
+ }
30
+ async get(duid, request) {
31
+ return new Promise((resolve, reject) => {
32
+ this.syncMessageListener.waitFor(request.messageId, request, (response) => resolve(response), reject);
33
+ this.send(duid, request);
34
+ })
35
+ .then((result) => {
36
+ return result;
37
+ })
38
+ .catch((error) => {
39
+ this.logger.error(error.message);
40
+ return undefined;
41
+ });
42
+ }
43
+ registerDevice(duid, localKey, pv, nonce) {
44
+ this.context.registerDevice(duid, localKey, pv, nonce);
45
+ }
46
+ registerConnectionListener(listener) {
47
+ this.connectionListeners.register(listener);
48
+ }
49
+ registerMessageListener(listener) {
50
+ this.messageListeners.register(listener);
51
+ }
52
+ isConnected() {
53
+ return this.connected;
54
+ }
55
+ }