@impact0815/node-red-contrib-home-connect 0.0.0-stage → 0.2.0

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 (52) hide show
  1. package/BUILD-INFO.json +23 -0
  2. package/CHANGELOG.md +52 -0
  3. package/LICENSE +21 -0
  4. package/NOTICE +19 -0
  5. package/README.de.md +326 -0
  6. package/README.md +325 -2
  7. package/SECURITY.md +47 -0
  8. package/docs/API-COVERAGE.md +59 -0
  9. package/docs/ARCHITECTURE.md +95 -0
  10. package/docs/DASHBOARD.de.md +121 -0
  11. package/docs/DASHBOARD.md +121 -0
  12. package/docs/FIRST-PUSH.md +42 -0
  13. package/docs/LOCAL-LAN.de.md +150 -0
  14. package/docs/LOCAL-LAN.md +150 -0
  15. package/docs/MESSAGE-API.md +111 -0
  16. package/docs/RELEASE.md +78 -0
  17. package/docs/TROUBLESHOOTING.de.md +230 -0
  18. package/docs/TROUBLESHOOTING.md +230 -0
  19. package/docs/images/README.md +10 -0
  20. package/docs/images/dashboard-details-en.png +0 -0
  21. package/docs/images/dashboard-overview-en.png +0 -0
  22. package/docs/official-api-contract.json +418 -0
  23. package/examples/01-first-steps-device-list.json +148 -0
  24. package/examples/02-events.json +165 -0
  25. package/examples/03-safe-read-write.json +155 -0
  26. package/examples/04-local-read-only.json +214 -0
  27. package/examples/dashboard-dishwasher-washer-oven.json +628 -0
  28. package/examples/dashboard-screenshot-simulated.json +405 -0
  29. package/examples/demo-home-connect-flowfuse-1.34.1-scriptless.json +390 -0
  30. package/lib/client.js +600 -0
  31. package/lib/constants.js +66 -0
  32. package/lib/dashboard-i18n.js +255 -0
  33. package/lib/device-label.js +39 -0
  34. package/lib/errors.js +51 -0
  35. package/lib/health.js +525 -0
  36. package/lib/local-client.js +1014 -0
  37. package/lib/local-crypto.js +122 -0
  38. package/lib/local-diagnostics.js +115 -0
  39. package/lib/local-profile.js +706 -0
  40. package/lib/local-trace.js +103 -0
  41. package/lib/oauth.js +23 -0
  42. package/lib/rate-limiter.js +186 -0
  43. package/lib/simulator.js +290 -0
  44. package/lib/sse.js +58 -0
  45. package/lib/validation.js +194 -0
  46. package/lib/websocket-transport.js +374 -0
  47. package/nodes/home-connect.html +795 -0
  48. package/nodes/home-connect.js +699 -0
  49. package/nodes/locales/de/home-connect.html +19 -0
  50. package/nodes/locales/de/home-connect.json +10 -0
  51. package/nodes/locales/en-US/home-connect.json +10 -0
  52. package/package.json +71 -4
@@ -0,0 +1,418 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "source": "Official Home Connect Swagger 2.0 specifications supplied with the project review",
4
+ "specifications": [
5
+ {
6
+ "file": "hcsdk-simulation.yaml",
7
+ "sha256": "5942f5ca450a46fa9a6f53ff6d13627972040f105dcd786efddcf9a44ce376a3",
8
+ "swagger": "2.0",
9
+ "host": "simulator.home-connect.com",
10
+ "basePath": "/api",
11
+ "consumes": [
12
+ "application/vnd.bsh.sdk.v1+json"
13
+ ],
14
+ "produces": [
15
+ "application/vnd.bsh.sdk.v1+json"
16
+ ],
17
+ "operations": [
18
+ {
19
+ "method": "GET",
20
+ "path": "/api/homeappliances",
21
+ "operationId": "get_home_appliances"
22
+ },
23
+ {
24
+ "method": "GET",
25
+ "path": "/api/homeappliances/{haId}",
26
+ "operationId": "get_specific_appliance"
27
+ },
28
+ {
29
+ "method": "GET",
30
+ "path": "/api/homeappliances/{haId}/programs",
31
+ "operationId": "get_all_programs"
32
+ },
33
+ {
34
+ "method": "GET",
35
+ "path": "/api/homeappliances/{haId}/programs/available",
36
+ "operationId": "get_available_programs"
37
+ },
38
+ {
39
+ "method": "GET",
40
+ "path": "/api/homeappliances/{haId}/programs/available/{programkey}",
41
+ "operationId": "get_available_program"
42
+ },
43
+ {
44
+ "method": "GET",
45
+ "path": "/api/homeappliances/{haId}/programs/active",
46
+ "operationId": "get_active_program"
47
+ },
48
+ {
49
+ "method": "PUT",
50
+ "path": "/api/homeappliances/{haId}/programs/active",
51
+ "operationId": "start_program"
52
+ },
53
+ {
54
+ "method": "DELETE",
55
+ "path": "/api/homeappliances/{haId}/programs/active",
56
+ "operationId": "stop_program"
57
+ },
58
+ {
59
+ "method": "GET",
60
+ "path": "/api/homeappliances/{haId}/programs/active/options",
61
+ "operationId": "get_active_program_options"
62
+ },
63
+ {
64
+ "method": "PUT",
65
+ "path": "/api/homeappliances/{haId}/programs/active/options",
66
+ "operationId": "set_active_program_options"
67
+ },
68
+ {
69
+ "method": "GET",
70
+ "path": "/api/homeappliances/{haId}/programs/active/options/{optionkey}",
71
+ "operationId": "get_active_program_option"
72
+ },
73
+ {
74
+ "method": "PUT",
75
+ "path": "/api/homeappliances/{haId}/programs/active/options/{optionkey}",
76
+ "operationId": "set_active_program_option"
77
+ },
78
+ {
79
+ "method": "GET",
80
+ "path": "/api/homeappliances/{haId}/programs/selected",
81
+ "operationId": "get_selected_program"
82
+ },
83
+ {
84
+ "method": "PUT",
85
+ "path": "/api/homeappliances/{haId}/programs/selected",
86
+ "operationId": "set_selected_program"
87
+ },
88
+ {
89
+ "method": "GET",
90
+ "path": "/api/homeappliances/{haId}/programs/selected/options",
91
+ "operationId": "get_selected_program_options"
92
+ },
93
+ {
94
+ "method": "PUT",
95
+ "path": "/api/homeappliances/{haId}/programs/selected/options",
96
+ "operationId": "set_selected_program_options"
97
+ },
98
+ {
99
+ "method": "GET",
100
+ "path": "/api/homeappliances/{haId}/programs/selected/options/{optionkey}",
101
+ "operationId": "get_selected_program_option"
102
+ },
103
+ {
104
+ "method": "PUT",
105
+ "path": "/api/homeappliances/{haId}/programs/selected/options/{optionkey}",
106
+ "operationId": "set_selected_program_option"
107
+ },
108
+ {
109
+ "method": "GET",
110
+ "path": "/api/homeappliances/{haId}/images",
111
+ "operationId": "get_images"
112
+ },
113
+ {
114
+ "method": "GET",
115
+ "path": "/api/homeappliances/{haId}/images/{imagekey}",
116
+ "operationId": "get_image"
117
+ },
118
+ {
119
+ "method": "GET",
120
+ "path": "/api/homeappliances/{haId}/settings",
121
+ "operationId": "get_settings"
122
+ },
123
+ {
124
+ "method": "PUT",
125
+ "path": "/api/homeappliances/{haId}/settings",
126
+ "operationId": "set_settings"
127
+ },
128
+ {
129
+ "method": "GET",
130
+ "path": "/api/homeappliances/{haId}/settings/{settingkey}",
131
+ "operationId": "get_setting"
132
+ },
133
+ {
134
+ "method": "PUT",
135
+ "path": "/api/homeappliances/{haId}/settings/{settingkey}",
136
+ "operationId": "set_setting"
137
+ },
138
+ {
139
+ "method": "GET",
140
+ "path": "/api/homeappliances/{haId}/status",
141
+ "operationId": "get_status"
142
+ },
143
+ {
144
+ "method": "GET",
145
+ "path": "/api/homeappliances/{haId}/status/{statuskey}",
146
+ "operationId": "get_status_value"
147
+ },
148
+ {
149
+ "method": "GET",
150
+ "path": "/api/homeappliances/events",
151
+ "operationId": "get_all_events"
152
+ },
153
+ {
154
+ "method": "GET",
155
+ "path": "/api/homeappliances/{haId}/events",
156
+ "operationId": "get_events"
157
+ }
158
+ ],
159
+ "oauth": {
160
+ "type": "oauth2",
161
+ "flow": "accessCode",
162
+ "authorizationUrl": "https://simulator.home-connect.com/security/oauth/authorize",
163
+ "tokenUrl": "https://simulator.home-connect.com/security/oauth/token"
164
+ }
165
+ },
166
+ {
167
+ "file": "hcsdk-production.yaml",
168
+ "sha256": "a0704118d429eb1a7becf9d624068a2c48ce8d7c0a2250128be2487ff0758c57",
169
+ "swagger": "2.0",
170
+ "host": "api.home-connect.com",
171
+ "basePath": "/api",
172
+ "consumes": [
173
+ "application/vnd.bsh.sdk.v1+json"
174
+ ],
175
+ "produces": [
176
+ "application/vnd.bsh.sdk.v1+json"
177
+ ],
178
+ "operations": [
179
+ {
180
+ "method": "GET",
181
+ "path": "/api/homeappliances",
182
+ "operationId": "get_home_appliances"
183
+ },
184
+ {
185
+ "method": "GET",
186
+ "path": "/api/homeappliances/{haId}",
187
+ "operationId": "get_specific_appliance"
188
+ },
189
+ {
190
+ "method": "GET",
191
+ "path": "/api/homeappliances/{haId}/programs",
192
+ "operationId": "get_all_programs"
193
+ },
194
+ {
195
+ "method": "GET",
196
+ "path": "/api/homeappliances/{haId}/programs/available",
197
+ "operationId": "get_available_programs"
198
+ },
199
+ {
200
+ "method": "GET",
201
+ "path": "/api/homeappliances/{haId}/programs/available/{programkey}",
202
+ "operationId": "get_available_program"
203
+ },
204
+ {
205
+ "method": "GET",
206
+ "path": "/api/homeappliances/{haId}/programs/active",
207
+ "operationId": "get_active_program"
208
+ },
209
+ {
210
+ "method": "PUT",
211
+ "path": "/api/homeappliances/{haId}/programs/active",
212
+ "operationId": "start_program"
213
+ },
214
+ {
215
+ "method": "DELETE",
216
+ "path": "/api/homeappliances/{haId}/programs/active",
217
+ "operationId": "stop_program"
218
+ },
219
+ {
220
+ "method": "GET",
221
+ "path": "/api/homeappliances/{haId}/programs/active/options",
222
+ "operationId": "get_active_program_options"
223
+ },
224
+ {
225
+ "method": "PUT",
226
+ "path": "/api/homeappliances/{haId}/programs/active/options",
227
+ "operationId": "set_active_program_options"
228
+ },
229
+ {
230
+ "method": "GET",
231
+ "path": "/api/homeappliances/{haId}/programs/active/options/{optionkey}",
232
+ "operationId": "get_active_program_option"
233
+ },
234
+ {
235
+ "method": "PUT",
236
+ "path": "/api/homeappliances/{haId}/programs/active/options/{optionkey}",
237
+ "operationId": "set_active_program_option"
238
+ },
239
+ {
240
+ "method": "GET",
241
+ "path": "/api/homeappliances/{haId}/programs/selected",
242
+ "operationId": "get_selected_program"
243
+ },
244
+ {
245
+ "method": "PUT",
246
+ "path": "/api/homeappliances/{haId}/programs/selected",
247
+ "operationId": "set_selected_program"
248
+ },
249
+ {
250
+ "method": "GET",
251
+ "path": "/api/homeappliances/{haId}/programs/selected/options",
252
+ "operationId": "get_selected_program_options"
253
+ },
254
+ {
255
+ "method": "PUT",
256
+ "path": "/api/homeappliances/{haId}/programs/selected/options",
257
+ "operationId": "set_selected_program_options"
258
+ },
259
+ {
260
+ "method": "GET",
261
+ "path": "/api/homeappliances/{haId}/programs/selected/options/{optionkey}",
262
+ "operationId": "get_selected_program_option"
263
+ },
264
+ {
265
+ "method": "PUT",
266
+ "path": "/api/homeappliances/{haId}/programs/selected/options/{optionkey}",
267
+ "operationId": "set_selected_program_option"
268
+ },
269
+ {
270
+ "method": "GET",
271
+ "path": "/api/homeappliances/{haId}/images",
272
+ "operationId": "get_images"
273
+ },
274
+ {
275
+ "method": "GET",
276
+ "path": "/api/homeappliances/{haId}/images/{imagekey}",
277
+ "operationId": "get_image"
278
+ },
279
+ {
280
+ "method": "GET",
281
+ "path": "/api/homeappliances/{haId}/settings",
282
+ "operationId": "get_settings"
283
+ },
284
+ {
285
+ "method": "PUT",
286
+ "path": "/api/homeappliances/{haId}/settings",
287
+ "operationId": "set_settings"
288
+ },
289
+ {
290
+ "method": "GET",
291
+ "path": "/api/homeappliances/{haId}/settings/{settingkey}",
292
+ "operationId": "get_setting"
293
+ },
294
+ {
295
+ "method": "PUT",
296
+ "path": "/api/homeappliances/{haId}/settings/{settingkey}",
297
+ "operationId": "set_setting"
298
+ },
299
+ {
300
+ "method": "GET",
301
+ "path": "/api/homeappliances/{haId}/status",
302
+ "operationId": "get_status"
303
+ },
304
+ {
305
+ "method": "GET",
306
+ "path": "/api/homeappliances/{haId}/status/{statuskey}",
307
+ "operationId": "get_status_value"
308
+ },
309
+ {
310
+ "method": "GET",
311
+ "path": "/api/homeappliances/{haId}/commands",
312
+ "operationId": "get_available_commands"
313
+ },
314
+ {
315
+ "method": "PUT",
316
+ "path": "/api/homeappliances/{haId}/commands",
317
+ "operationId": "put_commands"
318
+ },
319
+ {
320
+ "method": "PUT",
321
+ "path": "/api/homeappliances/{haId}/commands/{commandkey}",
322
+ "operationId": "put_command"
323
+ },
324
+ {
325
+ "method": "GET",
326
+ "path": "/api/homeappliances/events",
327
+ "operationId": "get_all_events"
328
+ },
329
+ {
330
+ "method": "GET",
331
+ "path": "/api/homeappliances/{haId}/events",
332
+ "operationId": "get_events"
333
+ },
334
+ {
335
+ "method": "GET",
336
+ "path": "/api/homeappliances/{haId}/map/maps",
337
+ "operationId": "get_maps"
338
+ },
339
+ {
340
+ "method": "GET",
341
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}",
342
+ "operationId": "get_map"
343
+ },
344
+ {
345
+ "method": "GET",
346
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/occupancyGrid",
347
+ "operationId": "get_map_occupancy_grid"
348
+ },
349
+ {
350
+ "method": "GET",
351
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/layout",
352
+ "operationId": "get_map_layout"
353
+ },
354
+ {
355
+ "method": "GET",
356
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/cleaningStatus",
357
+ "operationId": "get_map_cleaning_status"
358
+ },
359
+ {
360
+ "method": "GET",
361
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/cleaningStatus/objects",
362
+ "operationId": "get_map_detected_objects"
363
+ },
364
+ {
365
+ "method": "GET",
366
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/cleaningStatus/objects/{objectId}",
367
+ "operationId": "get_map_detected_object"
368
+ },
369
+ {
370
+ "method": "GET",
371
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/rooms",
372
+ "operationId": "get_map_rooms"
373
+ },
374
+ {
375
+ "method": "GET",
376
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/rooms/{roomId}",
377
+ "operationId": "get_map_room"
378
+ },
379
+ {
380
+ "method": "GET",
381
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/zones",
382
+ "operationId": "get_map_zones"
383
+ },
384
+ {
385
+ "method": "GET",
386
+ "path": "/api/homeappliances/{haId}/map/maps/{mapId}/zones/{zoneId}",
387
+ "operationId": "get_map_zone"
388
+ },
389
+ {
390
+ "method": "GET",
391
+ "path": "/api/homeappliances/{haId}/map/robot/position",
392
+ "operationId": "get_map_robot_position"
393
+ },
394
+ {
395
+ "method": "GET",
396
+ "path": "/api/homeappliances/{haId}/map/config/restrictions",
397
+ "operationId": "get_map_config_restrictions"
398
+ },
399
+ {
400
+ "method": "GET",
401
+ "path": "/api/homeappliances/{haId}/map/cleaningSummary",
402
+ "operationId": "get_map_cleaning_summaries"
403
+ },
404
+ {
405
+ "method": "GET",
406
+ "path": "/api/homeappliances/{haId}/map/cleaningSummary/{counter}",
407
+ "operationId": "get_map_cleaning_summary"
408
+ }
409
+ ],
410
+ "oauth": {
411
+ "type": "oauth2",
412
+ "flow": "accessCode",
413
+ "authorizationUrl": "https://api.home-connect.com/security/oauth/authorize",
414
+ "tokenUrl": "https://api.home-connect.com/security/oauth/token"
415
+ }
416
+ }
417
+ ]
418
+ }
@@ -0,0 +1,148 @@
1
+ [
2
+ {
3
+ "id": "hc-list-flow",
4
+ "type": "tab",
5
+ "label": "Home Connect 01 – Geräteliste",
6
+ "disabled": false,
7
+ "info": "Einfachster Start: lokale Testgeräte automatisch erkennen. Keine Zugangsdaten erforderlich."
8
+ },
9
+ {
10
+ "id": "hc-list-note",
11
+ "type": "comment",
12
+ "z": "hc-list-flow",
13
+ "name": "1. Deployen 2. Knopf links klicken 3. Debug-Fenster öffnen",
14
+ "info": "Der integrierte Simulator führt keine externen Zugriffe aus. Für Production später eine eigene deployte und autorisierte Verbindung auswählen. Outputs include health/warnings (home-connect-health/v1). No firmware data or undocumented endpoint is used.",
15
+ "x": 310,
16
+ "y": 40,
17
+ "wires": []
18
+ },
19
+ {
20
+ "id": "hc-list-config",
21
+ "type": "home-connect-config",
22
+ "name": "Home Connect – integrierter Simulator",
23
+ "environment": "builtin-simulator",
24
+ "redirectUri": "http://localhost:1880/home-connect/oauth/callback",
25
+ "scope": "IdentifyAppliance",
26
+ "language": "de-DE",
27
+ "allowWrite": false,
28
+ "requestTimeout": 15000,
29
+ "maxRequestsPerDay": 900,
30
+ "minimumRequestInterval": 250
31
+ },
32
+ {
33
+ "id": "hc-list-inject",
34
+ "type": "inject",
35
+ "z": "hc-list-flow",
36
+ "name": "Geräteliste laden",
37
+ "props": [
38
+ {
39
+ "p": "payload"
40
+ }
41
+ ],
42
+ "repeat": "",
43
+ "crontab": "",
44
+ "once": true,
45
+ "onceDelay": 1,
46
+ "topic": "",
47
+ "payload": "",
48
+ "payloadType": "date",
49
+ "x": 140,
50
+ "y": 100,
51
+ "wires": [
52
+ [
53
+ "hc-list-discover"
54
+ ]
55
+ ]
56
+ },
57
+ {
58
+ "id": "hc-list-discover",
59
+ "type": "home-connect-discover",
60
+ "z": "hc-list-flow",
61
+ "name": "Alle Geräte erkennen",
62
+ "connection": "hc-list-config",
63
+ "mode": "all",
64
+ "haId": "",
65
+ "x": 370,
66
+ "y": 100,
67
+ "wires": [
68
+ [
69
+ "hc-list-summary",
70
+ "hc-list-debug-raw"
71
+ ],
72
+ [
73
+ "hc-list-debug-error"
74
+ ]
75
+ ]
76
+ },
77
+ {
78
+ "id": "hc-list-summary",
79
+ "type": "function",
80
+ "z": "hc-list-flow",
81
+ "name": "Einfache Geräteliste",
82
+ "func": "msg.payload=(msg.payload||[]).map(entry=>({name:entry.appliance?.name,brand:entry.appliance?.brand,type:entry.appliance?.type,vib:entry.appliance?.vib,connected:entry.appliance?.connected,health:entry.health,warnings:entry.warnings,haId:entry.appliance?.haId}));\nreturn msg;",
83
+ "outputs": 1,
84
+ "timeout": 0,
85
+ "noerr": 0,
86
+ "initialize": "",
87
+ "finalize": "",
88
+ "libs": [],
89
+ "x": 610,
90
+ "y": 80,
91
+ "wires": [
92
+ [
93
+ "hc-list-debug-simple"
94
+ ]
95
+ ]
96
+ },
97
+ {
98
+ "id": "hc-list-debug-simple",
99
+ "type": "debug",
100
+ "z": "hc-list-flow",
101
+ "name": "Geräteliste (einfach)",
102
+ "active": true,
103
+ "tosidebar": true,
104
+ "console": false,
105
+ "tostatus": false,
106
+ "complete": "payload",
107
+ "targetType": "msg",
108
+ "statusVal": "",
109
+ "statusType": "auto",
110
+ "x": 870,
111
+ "y": 80,
112
+ "wires": []
113
+ },
114
+ {
115
+ "id": "hc-list-debug-raw",
116
+ "type": "debug",
117
+ "z": "hc-list-flow",
118
+ "name": "Vollständige Capabilities",
119
+ "active": false,
120
+ "tosidebar": true,
121
+ "console": false,
122
+ "tostatus": false,
123
+ "complete": "payload",
124
+ "targetType": "msg",
125
+ "statusVal": "",
126
+ "statusType": "auto",
127
+ "x": 630,
128
+ "y": 130,
129
+ "wires": []
130
+ },
131
+ {
132
+ "id": "hc-list-debug-error",
133
+ "type": "debug",
134
+ "z": "hc-list-flow",
135
+ "name": "Fehler",
136
+ "active": true,
137
+ "tosidebar": true,
138
+ "console": false,
139
+ "tostatus": false,
140
+ "complete": "payload",
141
+ "targetType": "msg",
142
+ "statusVal": "",
143
+ "statusType": "auto",
144
+ "x": 610,
145
+ "y": 180,
146
+ "wires": []
147
+ }
148
+ ]