iobroker.bshb 0.2.1 → 0.2.3

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 (65) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -0
  3. package/admin/i18n/de/translations.json +3 -1
  4. package/admin/i18n/en/translations.json +3 -1
  5. package/admin/i18n/es/translations.json +3 -1
  6. package/admin/i18n/fr/translations.json +3 -1
  7. package/admin/i18n/it/translations.json +3 -1
  8. package/admin/i18n/nl/translations.json +3 -1
  9. package/admin/i18n/pl/translations.json +3 -1
  10. package/admin/i18n/pt/translations.json +3 -1
  11. package/admin/i18n/ru/translations.json +3 -1
  12. package/admin/i18n/zh-cn/translations.json +3 -1
  13. package/admin/jsonConfig.json +8 -0
  14. package/build/bshb-controller.js +166 -156
  15. package/build/bshb-controller.js.map +1 -1
  16. package/build/bshb-definition.js +99 -99
  17. package/build/bshb-logger.js +70 -69
  18. package/build/bshb-logger.js.map +1 -1
  19. package/build/client-cert.js +30 -28
  20. package/build/client-cert.js.map +1 -1
  21. package/build/controller/handler/bshb-air-purity-guardian-handler.js +110 -124
  22. package/build/controller/handler/bshb-air-purity-guardian-handler.js.map +1 -1
  23. package/build/controller/handler/bshb-climate-handler.js +162 -0
  24. package/build/controller/handler/bshb-climate-handler.js.map +1 -0
  25. package/build/controller/handler/bshb-device-handler.js +417 -409
  26. package/build/controller/handler/bshb-device-handler.js.map +1 -1
  27. package/build/controller/handler/bshb-device-status-update-handler.js +30 -0
  28. package/build/controller/handler/bshb-device-status-update-handler.js.map +1 -0
  29. package/build/controller/handler/bshb-general-update-handler.js +36 -39
  30. package/build/controller/handler/bshb-general-update-handler.js.map +1 -1
  31. package/build/controller/handler/bshb-handler.js +167 -149
  32. package/build/controller/handler/bshb-handler.js.map +1 -1
  33. package/build/controller/handler/bshb-intrusion-detection-handler.js +211 -0
  34. package/build/controller/handler/bshb-intrusion-detection-handler.js.map +1 -0
  35. package/build/controller/handler/bshb-messages-handler.js +52 -57
  36. package/build/controller/handler/bshb-messages-handler.js.map +1 -1
  37. package/build/controller/handler/bshb-motion-lights-handler.js +93 -107
  38. package/build/controller/handler/bshb-motion-lights-handler.js.map +1 -1
  39. package/build/controller/handler/bshb-open-door-window-handler.js +175 -179
  40. package/build/controller/handler/bshb-open-door-window-handler.js.map +1 -1
  41. package/build/controller/handler/bshb-room-handler.js +128 -0
  42. package/build/controller/handler/bshb-room-handler.js.map +1 -0
  43. package/build/controller/handler/bshb-scenario-handler.js +106 -127
  44. package/build/controller/handler/bshb-scenario-handler.js.map +1 -1
  45. package/build/controller/handler/bshb-water-alarm-handler.js +119 -138
  46. package/build/controller/handler/bshb-water-alarm-handler.js.map +1 -1
  47. package/build/definition/function.js +19 -19
  48. package/build/definition/roles.js +191 -170
  49. package/build/definition/roles.js.map +1 -1
  50. package/build/definition/states.js +270 -247
  51. package/build/definition/states.js.map +1 -1
  52. package/build/definition/units.js +52 -45
  53. package/build/definition/units.js.map +1 -1
  54. package/build/definition/write.js +23 -20
  55. package/build/definition/write.js.map +1 -1
  56. package/build/log-level.js +18 -18
  57. package/build/main.js +421 -411
  58. package/build/main.js.map +1 -1
  59. package/build/migration.js +69 -69
  60. package/build/utils.js +81 -67
  61. package/build/utils.js.map +1 -1
  62. package/io-package.json +27 -26
  63. package/package.json +20 -20
  64. package/build/controller/handler/bshb-intrusion-detection.js +0 -111
  65. package/build/controller/handler/bshb-intrusion-detection.js.map +0 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022 Christopher Holomek <holomekc.github@gmail.com>
3
+ Copyright (c) 2023 Christopher Holomek <holomekc.github@gmail.com>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -35,6 +35,15 @@ If you want to support the work I would appreciate a small donation. This is 100
35
35
 
36
36
  ## Changelog
37
37
 
38
+ ### 0.2.3
39
+ * (holomekc) Update to api version 3.2
40
+ * (holomekc) Add support for climate schedules with two options to activate them
41
+ * (holomekc) Update intrusion detection so that more information is shown
42
+ * (holomekc) Update intrusion detection and climate schedule switches stay active now
43
+
44
+ ### 0.2.2
45
+ * (holomekc) Support for rooms. Configuration to ignore server certificates. Allow ttesting controller 2 and can prevent issues in case certificates expire. Less secure though.
46
+
38
47
  ### 0.2.1
39
48
  * (holomekc) Support for additional services
40
49
 
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Kann nach dem Koppeln entfernt werden",
7
7
  "pairingDelay": "Verzögerung bei Kopplungsversuchen in ms",
8
8
  "pairingDelay-detail": "Wartezeit während des Kopplungsprozesses",
9
- "rateLimit": "Verzögerung zwischen Controller Aufrufen in ms"
9
+ "rateLimit": "Verzögerung zwischen Controller Aufrufen in ms",
10
+ "skipServerCertificateCheck": "Überprüfung des Serverzertifikats überspringen",
11
+ "skipServerCertificateCheck-detail": "Reduziert die Sicherheit der Verbindung. Nutzung auf eigene Gefahr."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Can be removed after pairing",
7
7
  "pairingDelay": "Delay during pairing attempts in ms",
8
8
  "pairingDelay-detail": "Time waiting during pairing process attempts",
9
- "rateLimit": "Delay between controller calls in ms"
9
+ "rateLimit": "Delay between controller calls in ms",
10
+ "skipServerCertificateCheck": "Skip server certificate check",
11
+ "skipServerCertificateCheck-detail": "Reduces the security of the connection. Use at your own risk."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Se puede quitar después del emparejamiento",
7
7
  "pairingDelay": "Retardo durante los intentos de emparejamiento en ms",
8
8
  "pairingDelay-detail": "Tiempo de espera durante los intentos de emparejamiento",
9
- "rateLimit": "Retraso entre llamadas del controlador en ms"
9
+ "rateLimit": "Retraso entre llamadas del controlador en ms",
10
+ "skipServerCertificateCheck": "Omitir la comprobación del certificado del servidor",
11
+ "skipServerCertificateCheck-detail": "Reduce la seguridad de la conexión. Utilícelo bajo su propia responsabilidad."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Peut être retiré après l'appairage",
7
7
  "pairingDelay": "Délai pendant les tentatives d'appairage en ms",
8
8
  "pairingDelay-detail": "Temps d'attente pendant les tentatives de pairage",
9
- "rateLimit": "Délai entre les appels du contrôleur en ms"
9
+ "rateLimit": "Délai entre les appels du contrôleur en ms",
10
+ "skipServerCertificateCheck": "Ignorer la vérification du certificat du serveur",
11
+ "skipServerCertificateCheck-detail": "Réduit la sécurité de la connexion. A utiliser à vos risques et périls."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Può essere rimosso dopo l'accoppiamento",
7
7
  "pairingDelay": "Ritardo durante i tentativi di accoppiamento in ms",
8
8
  "pairingDelay-detail": "Tempo di attesa durante i tentativi del processo di accoppiamento",
9
- "rateLimit": "Ritardo tra le chiamate del controllore in ms"
9
+ "rateLimit": "Ritardo tra le chiamate del controllore in ms",
10
+ "skipServerCertificateCheck": "Saltare la verifica del certificato del server",
11
+ "skipServerCertificateCheck-detail": "Riduce la sicurezza della connessione. Utilizzare a proprio rischio e pericolo."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Kan na het koppelen worden verwijderd",
7
7
  "pairingDelay": "Vertraging tijdens koppelingspogingen in ms",
8
8
  "pairingDelay-detail": "Tijd die wacht tijdens de koppelingspogingen",
9
- "rateLimit": "Vertraging tussen controlleroproepen in ms"
9
+ "rateLimit": "Vertraging tussen controlleroproepen in ms",
10
+ "skipServerCertificateCheck": "Controle servercertificaat overslaan",
11
+ "skipServerCertificateCheck-detail": "Vermindert de veiligheid van de verbinding. Gebruik op eigen risico."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Może być usunięty po sparowaniu.",
7
7
  "pairingDelay": "Opóźnienie podczas prób parowania w ms",
8
8
  "pairingDelay-detail": "Czas oczekiwania podczas prób parowania",
9
- "rateLimit": "Opóźnienie między wywołaniami kontrolera w ms"
9
+ "rateLimit": "Opóźnienie między wywołaniami kontrolera w ms",
10
+ "skipServerCertificateCheck": "Pomiń sprawdzanie certyfikatu serwera",
11
+ "skipServerCertificateCheck-detail": "Zmniejsza bezpieczeństwo połączenia. Używaj na własne ryzyko."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Pode ser removido após o emparelhamento",
7
7
  "pairingDelay": "Atraso durante as tentativas de emparelhamento em ms",
8
8
  "pairingDelay-detail": "Tempo de espera durante as tentativas do processo de emparelhamento",
9
- "rateLimit": "Atraso entre as chamadas do controlador em ms"
9
+ "rateLimit": "Atraso entre as chamadas do controlador em ms",
10
+ "skipServerCertificateCheck": "Ignorar certificado do servidor de verificação",
11
+ "skipServerCertificateCheck-detail": "Reduz a segurança da ligação. Utilização por sua conta e risco."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "Может быть удален после сопряжения",
7
7
  "pairingDelay": "Задержка при попытках сопряжения в мс",
8
8
  "pairingDelay-detail": "Время ожидания во время попыток сопряжения",
9
- "rateLimit": "Задержка между вызовами контроллера в мс"
9
+ "rateLimit": "Задержка между вызовами контроллера в мс",
10
+ "skipServerCertificateCheck": "Пропустить проверку сертификата сервера",
11
+ "skipServerCertificateCheck-detail": "Снижает безопасность соединения. Используйте на свой страх и риск."
10
12
  }
@@ -6,5 +6,7 @@
6
6
  "systemPassword-detail": "配对后即可移除",
7
7
  "pairingDelay": "配对尝试期间的延迟(毫秒",
8
8
  "pairingDelay-detail": "配对过程中的等待时间",
9
- "rateLimit": "控制器调用之间的延迟,单位为ms"
9
+ "rateLimit": "控制器调用之间的延迟,单位为ms",
10
+ "skipServerCertificateCheck": "跳过检查服务器证书",
11
+ "skipServerCertificateCheck-detail": "降低了连接的安全性。使用时风险自负。"
10
12
  }
@@ -42,6 +42,14 @@
42
42
  "min": 1000,
43
43
  "sm": 12,
44
44
  "md": 6
45
+ },
46
+ "skipServerCertificateCheck": {
47
+ "type": "checkbox",
48
+ "label": "skipServerCertificateCheck",
49
+ "help": "skipServerCertificateCheck-detail",
50
+ "newLine": true,
51
+ "sm": 12,
52
+ "md": 6
45
53
  }
46
54
  }
47
55
  }
@@ -1,157 +1,167 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BshbController = void 0;
4
- const bosch_smart_home_bridge_1 = require("bosch-smart-home-bridge");
5
- const bshb_logger_1 = require("./bshb-logger");
6
- const rxjs_1 = require("rxjs");
7
- const operators_1 = require("rxjs/operators");
8
- const utils_1 = require("./utils");
9
- const bshb_scenario_handler_1 = require("./controller/handler/bshb-scenario-handler");
10
- const bshb_device_handler_1 = require("./controller/handler/bshb-device-handler");
11
- const bshb_messages_handler_1 = require("./controller/handler/bshb-messages-handler");
12
- const bshb_open_door_window_handler_1 = require("./controller/handler/bshb-open-door-window-handler");
13
- const bshb_intrusion_detection_1 = require("./controller/handler/bshb-intrusion-detection");
14
- const bshb_general_update_handler_1 = require("./controller/handler/bshb-general-update-handler");
15
- const bshb_air_purity_guardian_handler_1 = require("./controller/handler/bshb-air-purity-guardian-handler");
16
- const bshb_motion_lights_handler_1 = require("./controller/handler/bshb-motion-lights-handler");
17
- const bshb_water_alarm_handler_1 = require("./controller/handler/bshb-water-alarm-handler");
18
- /**
19
- * This controller encapsulates bosch-smart-home-bridge and provides it to iobroker.bshb
20
- *
21
- * @author Christopher Holomek
22
- * @since 27.09.2019
23
- */
24
- class BshbController {
25
- /**
26
- * Create a new instance of {@link BshbController}
27
- *
28
- * @param bshb
29
- * instance of {@link Bshb}
30
- * @param clientCert
31
- * client certificate
32
- * @param clientPrivateKey
33
- * client private key
34
- */
35
- constructor(bshb, clientCert, clientPrivateKey) {
36
- this.bshb = bshb;
37
- this.clientName = 'ioBroker.bshb';
38
- this.$rateLimit = new rxjs_1.Subject();
39
- try {
40
- this.boschSmartHomeBridge = bosch_smart_home_bridge_1.BoschSmartHomeBridgeBuilder.builder()
41
- .withHost(bshb.config.host)
42
- .withClientCert(clientCert)
43
- .withClientPrivateKey(clientPrivateKey)
44
- .withLogger(new bshb_logger_1.BshbLogger(bshb))
45
- .build();
46
- this.handlers = [];
47
- this.handlers.push(new bshb_general_update_handler_1.BshbGeneralUpdateHandler(this.bshb, this.boschSmartHomeBridge));
48
- this.handlers.push(new bshb_scenario_handler_1.BshbScenarioHandler(this.bshb, this.boschSmartHomeBridge));
49
- this.handlers.push(new bshb_messages_handler_1.BshbMessagesHandler(this.bshb, this.boschSmartHomeBridge));
50
- this.handlers.push(new bshb_intrusion_detection_1.BshbIntrusionDetection(this.bshb, this.boschSmartHomeBridge));
51
- this.handlers.push(new bshb_air_purity_guardian_handler_1.BshbAirPurityGuardianHandler(this.bshb, this.boschSmartHomeBridge));
52
- this.handlers.push(new bshb_motion_lights_handler_1.BshbMotionLightsHandler(this.bshb, this.boschSmartHomeBridge));
53
- this.handlers.push(new bshb_water_alarm_handler_1.BshbWaterAlarmHandler(this.bshb, this.boschSmartHomeBridge));
54
- this.handlers.push(new bshb_device_handler_1.BshbDeviceHandler(this.bshb, this.boschSmartHomeBridge));
55
- this.handlers.push(new bshb_open_door_window_handler_1.BshbOpenDoorWindowHandler(this.bshb, this.boschSmartHomeBridge));
56
- this.$rateLimit.pipe((0, rxjs_1.concatMap)(data => {
57
- if (this.bshb.config.rateLimit === 0) {
58
- return (0, rxjs_1.of)(data);
59
- }
60
- return (0, rxjs_1.of)(data).pipe((0, operators_1.delay)(this.bshb.config.rateLimit));
61
- })).subscribe(fnc => {
62
- fnc();
63
- });
64
- }
65
- catch (e) {
66
- if (e instanceof Error) {
67
- throw utils_1.Utils.createError(bshb.log, e.message);
68
- }
69
- else {
70
- throw utils_1.Utils.createError(bshb.log, e);
71
- }
72
- }
73
- }
74
- getBshcClient() {
75
- return this.boschSmartHomeBridge.getBshcClient();
76
- }
77
- /**
78
- * Pair devices if needed
79
- *
80
- * @param systemPassword
81
- * system password of BSHC
82
- */
83
- pairDeviceIfNeeded(systemPassword) {
84
- let pairingDelay = 5000;
85
- if (this.bshb.config.pairingDelay && this.bshb.config.pairingDelay > 5000) {
86
- pairingDelay = this.bshb.config.pairingDelay;
87
- }
88
- // Retry pairIfNeeded logic. It is a bit more complicated compared to before because pairIfNeeded completes stream after attempts.
89
- // Community wants that it reconnects all the time. But pairIfNeeded might not be suitable because client may be paired already but
90
- // connection is broken. Then pairIfNeeded never goes back to test if client is paired and is stuck.
91
- // Here we retry the pairIfNeeded without attempts configured. So we try once. If something is not ok we wait
92
- // for pairing delay before we try again. We use takeUntil to make sure that we stop streams if adapter shuts-down
93
- // takeUntil must be last in pipe to prevent issues.
94
- return new rxjs_1.Observable(subscriber => {
95
- const retry = new rxjs_1.BehaviorSubject(true);
96
- retry.pipe((0, operators_1.catchError)(err => err.pipe((0, operators_1.delay)(pairingDelay))), (0, operators_1.tap)(() => {
97
- this.boschSmartHomeBridge.pairIfNeeded(this.clientName, this.bshb.config.identifier, systemPassword, pairingDelay, -1).pipe((0, operators_1.takeUntil)(this.bshb.alive)).subscribe({
98
- next: response => {
99
- // Everything is ok. We can stop all.
100
- subscriber.next(response);
101
- subscriber.complete();
102
- retry.complete();
103
- }, error: () => {
104
- // Something went wrong. Already logged by lib. We just wait and retry.
105
- (0, rxjs_1.timer)(pairingDelay).pipe((0, operators_1.takeUntil)(this.bshb.alive)).subscribe(() => {
106
- retry.next(true);
107
- });
108
- }
109
- });
110
- }), (0, operators_1.takeUntil)(this.bshb.alive)).subscribe(() => {
111
- // We do not care
112
- });
113
- });
114
- }
115
- /**
116
- * Start overall detection
117
- *
118
- * @return observable with no content
119
- */
120
- startDetection() {
121
- return (0, rxjs_1.concat)(...this.handlers.map(value => value.handleDetection())).pipe((0, rxjs_1.last)(undefined, void 0));
122
- }
123
- /**
124
- * Changes on a state which results in a call to bshc controller
125
- *
126
- * @param id
127
- * id of state which changed
128
- * @param state
129
- * state itself
130
- */
131
- setState(id, state) {
132
- this.$rateLimit.next(() => {
133
- for (let i = 0; i < this.handlers.length; i++) {
134
- let handled = this.handlers[i].sendUpdateToBshc(id, state);
135
- if (handled) {
136
- this.bshb.log.silly(`Handler "${this.handlers[i].constructor.name}" send message to controller with state id=${id} and value=${state.val}`);
137
- }
138
- }
139
- });
140
- }
141
- /**
142
- * Changes from bshc controller which results in updates on ioBroker state
143
- *
144
- * @param resultEntry
145
- * entry of changes which will be mapped to a state
146
- */
147
- setStateAck(resultEntry) {
148
- for (let i = 0; i < this.handlers.length; i++) {
149
- let handled = this.handlers[i].handleBshcUpdate(resultEntry);
150
- if (handled) {
151
- this.bshb.log.silly(`Handler "${this.handlers[i].constructor.name}" handled update form controller with result entry: ${JSON.stringify(resultEntry)} `);
152
- }
153
- }
154
- }
155
- }
156
- exports.BshbController = BshbController;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BshbController = void 0;
4
+ const bosch_smart_home_bridge_1 = require("bosch-smart-home-bridge");
5
+ const bshb_logger_1 = require("./bshb-logger");
6
+ const rxjs_1 = require("rxjs");
7
+ const operators_1 = require("rxjs/operators");
8
+ const utils_1 = require("./utils");
9
+ const bshb_scenario_handler_1 = require("./controller/handler/bshb-scenario-handler");
10
+ const bshb_device_handler_1 = require("./controller/handler/bshb-device-handler");
11
+ const bshb_messages_handler_1 = require("./controller/handler/bshb-messages-handler");
12
+ const bshb_open_door_window_handler_1 = require("./controller/handler/bshb-open-door-window-handler");
13
+ const bshb_intrusion_detection_handler_1 = require("./controller/handler/bshb-intrusion-detection-handler");
14
+ const bshb_general_update_handler_1 = require("./controller/handler/bshb-general-update-handler");
15
+ const bshb_air_purity_guardian_handler_1 = require("./controller/handler/bshb-air-purity-guardian-handler");
16
+ const bshb_motion_lights_handler_1 = require("./controller/handler/bshb-motion-lights-handler");
17
+ const bshb_water_alarm_handler_1 = require("./controller/handler/bshb-water-alarm-handler");
18
+ const bshb_room_handler_1 = require("./controller/handler/bshb-room-handler");
19
+ const bshb_device_status_update_handler_1 = require("./controller/handler/bshb-device-status-update-handler");
20
+ const bshb_climate_handler_1 = require("./controller/handler/bshb-climate-handler");
21
+ /**
22
+ * This controller encapsulates bosch-smart-home-bridge and provides it to iobroker.bshb
23
+ *
24
+ * @author Christopher Holomek
25
+ * @since 27.09.2019
26
+ */
27
+ class BshbController {
28
+ bshb;
29
+ boschSmartHomeBridge;
30
+ clientName = 'ioBroker.bshb';
31
+ $rateLimit = new rxjs_1.Subject();
32
+ handlers;
33
+ /**
34
+ * Create a new instance of {@link BshbController}
35
+ *
36
+ * @param bshb
37
+ * instance of {@link Bshb}
38
+ * @param clientCert
39
+ * client certificate
40
+ * @param clientPrivateKey
41
+ * client private key
42
+ */
43
+ constructor(bshb, clientCert, clientPrivateKey) {
44
+ this.bshb = bshb;
45
+ try {
46
+ this.boschSmartHomeBridge = bosch_smart_home_bridge_1.BoschSmartHomeBridgeBuilder.builder()
47
+ .withHost(bshb.config.host)
48
+ .withClientCert(clientCert)
49
+ .withClientPrivateKey(clientPrivateKey)
50
+ .withLogger(new bshb_logger_1.BshbLogger(bshb))
51
+ .withIgnoreCertificateCheck(this.bshb.config.skipServerCertificateCheck)
52
+ .build();
53
+ this.handlers = [];
54
+ this.handlers.push(new bshb_general_update_handler_1.BshbGeneralUpdateHandler(this.bshb, this.boschSmartHomeBridge));
55
+ this.handlers.push(new bshb_scenario_handler_1.BshbScenarioHandler(this.bshb, this.boschSmartHomeBridge));
56
+ this.handlers.push(new bshb_device_status_update_handler_1.BshbDeviceStatusUpdateHandler(this.bshb, this.boschSmartHomeBridge));
57
+ this.handlers.push(new bshb_messages_handler_1.BshbMessagesHandler(this.bshb, this.boschSmartHomeBridge));
58
+ this.handlers.push(new bshb_intrusion_detection_handler_1.BshbIntrusionDetectionHandler(this.bshb, this.boschSmartHomeBridge));
59
+ this.handlers.push(new bshb_air_purity_guardian_handler_1.BshbAirPurityGuardianHandler(this.bshb, this.boschSmartHomeBridge));
60
+ this.handlers.push(new bshb_motion_lights_handler_1.BshbMotionLightsHandler(this.bshb, this.boschSmartHomeBridge));
61
+ this.handlers.push(new bshb_water_alarm_handler_1.BshbWaterAlarmHandler(this.bshb, this.boschSmartHomeBridge));
62
+ this.handlers.push(new bshb_room_handler_1.BshbRoomHandler(this.bshb, this.boschSmartHomeBridge));
63
+ this.handlers.push(new bshb_device_handler_1.BshbDeviceHandler(this.bshb, this.boschSmartHomeBridge));
64
+ this.handlers.push(new bshb_open_door_window_handler_1.BshbOpenDoorWindowHandler(this.bshb, this.boschSmartHomeBridge));
65
+ this.handlers.push(new bshb_climate_handler_1.BshbClimateHandler(this.bshb, this.boschSmartHomeBridge));
66
+ this.$rateLimit.pipe((0, rxjs_1.concatMap)(data => {
67
+ if (this.bshb.config.rateLimit === 0) {
68
+ return (0, rxjs_1.of)(data);
69
+ }
70
+ return (0, rxjs_1.of)(data).pipe((0, operators_1.delay)(this.bshb.config.rateLimit));
71
+ })).subscribe(fnc => {
72
+ fnc();
73
+ });
74
+ }
75
+ catch (e) {
76
+ if (e instanceof Error) {
77
+ throw utils_1.Utils.createError(bshb.log, e.message);
78
+ }
79
+ else {
80
+ throw utils_1.Utils.createError(bshb.log, e);
81
+ }
82
+ }
83
+ }
84
+ getBshcClient() {
85
+ return this.boschSmartHomeBridge.getBshcClient();
86
+ }
87
+ /**
88
+ * Pair devices if needed
89
+ *
90
+ * @param systemPassword
91
+ * system password of BSHC
92
+ */
93
+ pairDeviceIfNeeded(systemPassword) {
94
+ let pairingDelay = 5000;
95
+ if (this.bshb.config.pairingDelay && this.bshb.config.pairingDelay > 5000) {
96
+ pairingDelay = this.bshb.config.pairingDelay;
97
+ }
98
+ // Retry pairIfNeeded logic. It is a bit more complicated compared to before because pairIfNeeded completes stream after attempts.
99
+ // Community wants that it reconnects all the time. But pairIfNeeded might not be suitable because client may be paired already but
100
+ // connection is broken. Then pairIfNeeded never goes back to test if client is paired and is stuck.
101
+ // Here we retry the pairIfNeeded without attempts configured. So we try once. If something is not ok we wait
102
+ // for pairing delay before we try again. We use takeUntil to make sure that we stop streams if adapter shuts-down
103
+ // takeUntil must be last in pipe to prevent issues.
104
+ return new rxjs_1.Observable(subscriber => {
105
+ const retry = new rxjs_1.BehaviorSubject(true);
106
+ retry.pipe((0, operators_1.catchError)(err => err.pipe((0, operators_1.delay)(pairingDelay))), (0, operators_1.tap)(() => {
107
+ this.boschSmartHomeBridge.pairIfNeeded(this.clientName, this.bshb.config.identifier, systemPassword, pairingDelay, -1).pipe((0, operators_1.takeUntil)(this.bshb.alive)).subscribe({
108
+ next: response => {
109
+ // Everything is ok. We can stop all.
110
+ subscriber.next(response);
111
+ subscriber.complete();
112
+ retry.complete();
113
+ }, error: () => {
114
+ // Something went wrong. Already logged by lib. We just wait and retry.
115
+ (0, rxjs_1.timer)(pairingDelay).pipe((0, operators_1.takeUntil)(this.bshb.alive)).subscribe(() => {
116
+ retry.next(true);
117
+ });
118
+ }
119
+ });
120
+ }), (0, operators_1.takeUntil)(this.bshb.alive)).subscribe(() => {
121
+ // We do not care
122
+ });
123
+ });
124
+ }
125
+ /**
126
+ * Start overall detection
127
+ *
128
+ * @return observable with no content
129
+ */
130
+ startDetection() {
131
+ return (0, rxjs_1.concat)(...this.handlers.map(value => value.handleDetection())).pipe((0, rxjs_1.last)(undefined, void 0));
132
+ }
133
+ /**
134
+ * Changes on a state which results in a call to bshc controller
135
+ *
136
+ * @param id
137
+ * id of state which changed
138
+ * @param state
139
+ * state itself
140
+ */
141
+ setState(id, state) {
142
+ this.$rateLimit.next(() => {
143
+ for (let i = 0; i < this.handlers.length; i++) {
144
+ let handled = this.handlers[i].sendUpdateToBshc(id, state);
145
+ if (handled) {
146
+ this.bshb.log.silly(`Handler "${this.handlers[i].constructor.name}" send message to controller with state id=${id} and value=${state.val}`);
147
+ }
148
+ }
149
+ });
150
+ }
151
+ /**
152
+ * Changes from bshc controller which results in updates on ioBroker state
153
+ *
154
+ * @param resultEntry
155
+ * entry of changes which will be mapped to a state
156
+ */
157
+ setStateAck(resultEntry) {
158
+ for (let i = 0; i < this.handlers.length; i++) {
159
+ let handled = this.handlers[i].handleBshcUpdate(resultEntry);
160
+ if (handled) {
161
+ this.bshb.log.silly(`Handler "${this.handlers[i].constructor.name}" handled update form controller with result entry: ${JSON.stringify(resultEntry)} `);
162
+ }
163
+ }
164
+ }
165
+ }
166
+ exports.BshbController = BshbController;
157
167
  //# sourceMappingURL=bshb-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bshb-controller.js","sourceRoot":"","sources":["../src/bshb-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bshb-controller.js","sourceRoot":"","sources":["../src/bshb-controller.ts"],"names":[],"mappings":"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"}