hoffmation-base 0.1.1 → 0.1.5

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 (113) hide show
  1. package/.eslintrc.js +27 -27
  2. package/.github/workflows/npm-publish.yml +50 -0
  3. package/.prettierrc.js +9 -9
  4. package/LICENSE +21 -21
  5. package/index.js +1 -1
  6. package/models/connectionCallbacks.ts +13 -13
  7. package/models/daytime.ts +3 -3
  8. package/models/deviceConfig.ts +8 -8
  9. package/models/dimmerSettings.ts +5 -5
  10. package/models/iTemperaturDataPoint.ts +9 -9
  11. package/models/lampSettings.ts +5 -5
  12. package/models/ledSettings.ts +19 -19
  13. package/models/logLevel.ts +9 -9
  14. package/models/persistence/BasicRoomInfo.ts +3 -3
  15. package/models/persistence/DailyMovementCount.ts +3 -3
  16. package/models/persistence/RoomDetailInfo.ts +4 -4
  17. package/models/persistence/temperaturDataPoint.ts +12 -12
  18. package/models/persistence/todaysCount.ts +3 -3
  19. package/models/rooms/RoomBase.ts +357 -357
  20. package/models/rooms/RoomSettings/RoomSettings.ts +159 -159
  21. package/models/rooms/RoomSettings/hmIPRoomSettings.ts +53 -53
  22. package/models/rooms/RoomSettings/iRoomDefaultSettings.ts +17 -17
  23. package/models/rooms/RoomSettings/readme.md +17 -17
  24. package/models/rooms/RoomSettings/zigbeeRoomSettings.ts +51 -51
  25. package/models/rooms/iRoomImportEnforcer.ts +3 -3
  26. package/models/rooms/readme.md +11 -11
  27. package/models/temperaturSettings.ts +22 -22
  28. package/models/timeCallback.ts +90 -90
  29. package/package.json +1 -1
  30. package/server/config/config-readme.md +19 -19
  31. package/server/config/iConfig.ts +53 -53
  32. package/server/config/private/mainConfig.json +64 -64
  33. package/server/devices/DeviceInfo.ts +66 -66
  34. package/server/devices/Griffe.ts +31 -31
  35. package/server/devices/Heizgruppen.ts +91 -91
  36. package/server/devices/Rollos.ts +48 -48
  37. package/server/devices/deviceUpdater.ts +72 -72
  38. package/server/devices/devices.ts +189 -189
  39. package/server/devices/groups/fensterGroup.ts +175 -175
  40. package/server/devices/groups/heatGroup.ts +32 -32
  41. package/server/devices/groups/lampenGroup.ts +88 -88
  42. package/server/devices/groups/praesenzGroup.ts +182 -182
  43. package/server/devices/groups/smokeGroup.ts +16 -16
  44. package/server/devices/groups/sonosGroup.ts +33 -33
  45. package/server/devices/groups/tasterGroup.ts +48 -48
  46. package/server/devices/groups/waterGroup.ts +16 -16
  47. package/server/devices/hmIPDevices/Fenster.ts +114 -114
  48. package/server/devices/hmIPDevices/FensterPosition.ts +5 -5
  49. package/server/devices/hmIPDevices/TuerPosition.ts +4 -4
  50. package/server/devices/hmIPDevices/hmIpBewegung.ts +126 -126
  51. package/server/devices/hmIPDevices/hmIpDevice.ts +90 -90
  52. package/server/devices/hmIPDevices/hmIpDeviceType.ts +14 -14
  53. package/server/devices/hmIPDevices/hmIpGriff.ts +143 -143
  54. package/server/devices/hmIPDevices/hmIpHeizgruppe.ts +172 -172
  55. package/server/devices/hmIPDevices/hmIpHeizung.ts +69 -69
  56. package/server/devices/hmIPDevices/hmIpLampe.ts +119 -119
  57. package/server/devices/hmIPDevices/hmIpPraezenz.ts +99 -99
  58. package/server/devices/hmIPDevices/hmIpRoll.ts +133 -133
  59. package/server/devices/hmIPDevices/hmIpTaster.ts +82 -73
  60. package/server/devices/hmIPDevices/hmIpTherm.ts +19 -19
  61. package/server/devices/hmIPDevices/hmIpTuer.ts +115 -115
  62. package/server/devices/hmIPDevices/hmIpWippe.ts +55 -55
  63. package/server/devices/iDeviceUpdater.ts +4 -4
  64. package/server/devices/iIoBrokerDevice.ts +44 -44
  65. package/server/devices/iTaster.ts +6 -0
  66. package/server/devices/{hmIPDevices/hmIpTaste.ts → taste.ts} +84 -72
  67. package/server/devices/wledDevice.ts +124 -124
  68. package/server/devices/zigbee/ZigbeeActuator.ts +113 -113
  69. package/server/devices/zigbee/zigbeeAquaraVibra.ts +171 -171
  70. package/server/devices/zigbee/zigbeeAquaraWater.ts +94 -94
  71. package/server/devices/zigbee/zigbeeBlitzShp.ts +77 -77
  72. package/server/devices/zigbee/zigbeeDevice.ts +115 -115
  73. package/server/devices/zigbee/zigbeeDeviceType.ts +13 -13
  74. package/server/devices/zigbee/zigbeeHeimanSmoke.ts +99 -99
  75. package/server/devices/zigbee/zigbeeIkeaSteckdose.ts +31 -31
  76. package/server/devices/zigbee/zigbeeIlluActuator.ts +37 -37
  77. package/server/devices/zigbee/zigbeeIlluDimmer.ts +165 -165
  78. package/server/devices/zigbee/zigbeeIlluLampe.ts +33 -33
  79. package/server/devices/zigbee/zigbeeIlluLedRGBCCT.ts +137 -137
  80. package/server/ioBroker/connection.ts +1655 -1655
  81. package/server/ioBroker/ioBroker.main.ts +99 -99
  82. package/server/ioBroker/socketIOAuthInfo.ts +5 -5
  83. package/server/ioBroker/socketIOConnectOptions.ts +6 -6
  84. package/server/ioBroker/socketIOLogging.ts +29 -29
  85. package/server/ioBroker/socketIOVisCommand.ts +11 -11
  86. package/server/services/HTTPSOptions.ts +14 -14
  87. package/server/services/Sonos/OwnSonosDevices.ts +9 -0
  88. package/server/services/Sonos/mp3-server.ts +75 -75
  89. package/server/services/Sonos/polly-service.ts +100 -100
  90. package/server/services/Sonos/sonos-service.ts +194 -199
  91. package/server/services/Telegram/telegram-Commands.ts +237 -215
  92. package/server/services/Telegram/telegram-service.ts +171 -171
  93. package/server/services/Telegram/telegramMessageCalback.ts +11 -11
  94. package/server/services/calendar/muell-tonne.ts +82 -83
  95. package/server/services/calendar/m/303/274ll-service.ts +147 -146
  96. package/server/services/dbo/persist.ts +125 -125
  97. package/server/services/https-service.ts +71 -71
  98. package/server/services/log-service.ts +69 -69
  99. package/server/services/news-service.ts +81 -81
  100. package/server/services/settings-service.ts +15 -15
  101. package/server/services/time-callback-service.ts +223 -223
  102. package/server/services/utils/ringstorage.ts +24 -24
  103. package/server/services/utils/utils.ts +52 -52
  104. package/server/services/weather/weather-alert.ts +7 -7
  105. package/server/services/weather/weather-current.ts +26 -26
  106. package/server/services/weather/weather-daily.ts +22 -22
  107. package/server/services/weather/weather-feelsLike.ts +6 -6
  108. package/server/services/weather/weather-hourly.ts +17 -17
  109. package/server/services/weather/weather-item.ts +6 -6
  110. package/server/services/weather/weather-minutes.ts +4 -4
  111. package/server/services/weather/weather-service.ts +277 -277
  112. package/server/services/weather/weather-temp.ts +8 -8
  113. package/tsconfig.json +58 -58
@@ -1,171 +1,171 @@
1
- import { LogLevel } from '../../../models/logLevel';
2
- import { DeviceInfo } from '../DeviceInfo';
3
- import { ZigbeeDevice } from './zigbeeDevice';
4
- import { ZigbeeDeviceType } from './zigbeeDeviceType';
5
- import { ServerLogService } from '../../services/log-service';
6
- import { SonosService } from '../../services/Sonos/sonos-service';
7
- import { Utils } from '../../services/utils/utils';
8
- import { PollyService } from '../../services/Sonos/polly-service';
9
-
10
- export class ZigbeeAquaraVibra extends ZigbeeDevice {
11
- public sensitivity: string = '';
12
- public tiltAngle: number = 0;
13
- public tiltAngleX: number = 0;
14
- public tiltAngleXAbs: number = 0;
15
- public tiltAngleY: number = 0;
16
- public tiltAngleYAbs: number = 0;
17
- public tiltAngleZ: number = 0;
18
- public tilt: boolean = false;
19
- public vibration: boolean = false;
20
- public vibrationBlockedTimeStamp: number = 0;
21
- private _idSensitivity: string = '';
22
- private _vibrationBlocked: boolean = false;
23
- private _alarmMessage: string;
24
- // TODO Set Sensitivity
25
-
26
- public constructor(pInfo: DeviceInfo) {
27
- super(pInfo, ZigbeeDeviceType.ZigbeeAquaraVibra);
28
- this._alarmMessage = `Alarm bei ${this.info.customName}. Ich wiederhole: Alarm bei ${this.info.customName}`;
29
- PollyService.preloadTTS(this._alarmMessage);
30
- this._idSensitivity = `${this.info.fullID}.sensitivity`;
31
- }
32
-
33
- public set vibrationBlocked(pVal: boolean) {
34
- ServerLogService.writeLog(
35
- LogLevel.Debug,
36
- `${pVal ? 'Dea' : 'A'}ktiviere Vibrationsalarm für ${this.info.customName}`,
37
- );
38
- if (pVal) {
39
- this.vibrationBlockedTimeStamp = new Date().getTime();
40
- }
41
- this._vibrationBlocked = pVal;
42
- }
43
-
44
- public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
45
- ServerLogService.writeLog(
46
- LogLevel.DeepTrace,
47
- `Stecker Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
48
- );
49
- super.update(idSplit, state, initial, true);
50
- switch (idSplit[3]) {
51
- case 'sensitivity':
52
- ServerLogService.writeLog(
53
- LogLevel.Trace,
54
- `Vibrationssensor Update für ${this.info.customName} auf Sensitivity: ${state.val}`,
55
- );
56
- this.tiltAngleZ = state.val as number;
57
- break;
58
- case 'tilt_angle_z':
59
- ServerLogService.writeLog(
60
- LogLevel.Trace,
61
- `Vibrationssensor Update für ${this.info.customName} auf Winkel Z: ${state.val}`,
62
- );
63
- this.tiltAngleZ = state.val as number;
64
- break;
65
- case 'tilt_angle_y':
66
- ServerLogService.writeLog(
67
- LogLevel.Trace,
68
- `Vibrationssensor Update für ${this.info.customName} auf Winkel Y: ${state.val}`,
69
- );
70
- this.tiltAngleY = state.val as number;
71
- break;
72
- case 'tilt_angle_x':
73
- ServerLogService.writeLog(
74
- LogLevel.Trace,
75
- `Vibrationssensor Update für ${this.info.customName} auf Winkel X: ${state.val}`,
76
- );
77
- this.tiltAngleX = state.val as number;
78
- break;
79
- case 'vibration':
80
- ServerLogService.writeLog(
81
- LogLevel.Trace,
82
- `Vibrationssensor Update für ${this.info.customName} auf Vibration erkannt: ${state.val}`,
83
- );
84
- this.vibration = state.val as boolean;
85
- if (this.vibration) {
86
- Utils.guardedTimeout(
87
- () => {
88
- this.alarmCheck();
89
- },
90
- 8500,
91
- this,
92
- );
93
- }
94
- break;
95
- case 'tilt_angle_y_abs':
96
- ServerLogService.writeLog(
97
- LogLevel.Trace,
98
- `Vibrationssensor Update für ${this.info.customName} auf absoluten Winkel Y: ${state.val}`,
99
- );
100
- this.tiltAngleYAbs = state.val as number;
101
- break;
102
- case 'tilt_angle_X_abs':
103
- ServerLogService.writeLog(
104
- LogLevel.Trace,
105
- `Vibrationssensor Update für ${this.info.customName} auf absoluten Winkel X: ${state.val}`,
106
- );
107
- this.tiltAngleXAbs = state.val as number;
108
- break;
109
- case 'tilt_angle':
110
- ServerLogService.writeLog(
111
- LogLevel.Trace,
112
- `Vibrationssensor Update für ${this.info.customName} auf Winkel: ${state.val}`,
113
- );
114
- this.tiltAngle = state.val as number;
115
- break;
116
- case 'tilt':
117
- ServerLogService.writeLog(
118
- LogLevel.Trace,
119
- `Vibrationssensor Update für ${this.info.customName} auf Winkel: ${state.val}`,
120
- );
121
- this.tilt = state.val as boolean;
122
- break;
123
- }
124
- }
125
-
126
- public setSensitivity(pVal: number): void {
127
- let result = 'high';
128
- switch (pVal) {
129
- case 0:
130
- result = 'low';
131
- break;
132
- case 1:
133
- result = 'medium';
134
- break;
135
- }
136
- if (this._idSensitivity === '') {
137
- ServerLogService.writeLog(LogLevel.Error, `Keine Switch ID für "${this.info.customName}" bekannt.`);
138
- return;
139
- }
140
-
141
- if (!this.ioConn) {
142
- ServerLogService.writeLog(LogLevel.Error, `Keine Connection für "${this.info.customName}" bekannt.`);
143
- return;
144
- }
145
-
146
- ServerLogService.writeLog(
147
- LogLevel.Debug,
148
- `Vibration Sensitivität schalten: "${this.info.customName}" Wert: ${result}`,
149
- );
150
- this.ioConn.setState(this._idSensitivity, result, (err) => {
151
- if (err) {
152
- console.log(`Stecker schalten ergab Fehler: ${err}`);
153
- }
154
- });
155
- }
156
-
157
- private alarmCheck(): void {
158
- ServerLogService.writeLog(
159
- LogLevel.Debug,
160
- `Alarmcheck für ${this.info.customName} Alarmblock Wert: ${this._vibrationBlocked}`,
161
- );
162
- if (this._vibrationBlocked) {
163
- ServerLogService.writeLog(LogLevel.Debug, `Fenster offen, ignoriere Vibrationsalarm bei ${this.info.customName}`);
164
- return;
165
- }
166
-
167
- const message = this._alarmMessage;
168
- SonosService.speakOnAll(message);
169
- ServerLogService.writeLog(LogLevel.Alert, message);
170
- }
171
- }
1
+ import { LogLevel } from '../../../models/logLevel';
2
+ import { DeviceInfo } from '../DeviceInfo';
3
+ import { ZigbeeDevice } from './zigbeeDevice';
4
+ import { ZigbeeDeviceType } from './zigbeeDeviceType';
5
+ import { ServerLogService } from '../../services/log-service';
6
+ import { SonosService } from '../../services/Sonos/sonos-service';
7
+ import { Utils } from '../../services/utils/utils';
8
+ import { PollyService } from '../../services/Sonos/polly-service';
9
+
10
+ export class ZigbeeAquaraVibra extends ZigbeeDevice {
11
+ public sensitivity: string = '';
12
+ public tiltAngle: number = 0;
13
+ public tiltAngleX: number = 0;
14
+ public tiltAngleXAbs: number = 0;
15
+ public tiltAngleY: number = 0;
16
+ public tiltAngleYAbs: number = 0;
17
+ public tiltAngleZ: number = 0;
18
+ public tilt: boolean = false;
19
+ public vibration: boolean = false;
20
+ public vibrationBlockedTimeStamp: number = 0;
21
+ private _idSensitivity: string = '';
22
+ private _vibrationBlocked: boolean = false;
23
+ private _alarmMessage: string;
24
+ // TODO Set Sensitivity
25
+
26
+ public constructor(pInfo: DeviceInfo) {
27
+ super(pInfo, ZigbeeDeviceType.ZigbeeAquaraVibra);
28
+ this._alarmMessage = `Alarm bei ${this.info.customName}. Ich wiederhole: Alarm bei ${this.info.customName}`;
29
+ PollyService.preloadTTS(this._alarmMessage);
30
+ this._idSensitivity = `${this.info.fullID}.sensitivity`;
31
+ }
32
+
33
+ public set vibrationBlocked(pVal: boolean) {
34
+ ServerLogService.writeLog(
35
+ LogLevel.Debug,
36
+ `${pVal ? 'Dea' : 'A'}ktiviere Vibrationsalarm für ${this.info.customName}`,
37
+ );
38
+ if (pVal) {
39
+ this.vibrationBlockedTimeStamp = new Date().getTime();
40
+ }
41
+ this._vibrationBlocked = pVal;
42
+ }
43
+
44
+ public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
45
+ ServerLogService.writeLog(
46
+ LogLevel.DeepTrace,
47
+ `Stecker Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
48
+ );
49
+ super.update(idSplit, state, initial, true);
50
+ switch (idSplit[3]) {
51
+ case 'sensitivity':
52
+ ServerLogService.writeLog(
53
+ LogLevel.Trace,
54
+ `Vibrationssensor Update für ${this.info.customName} auf Sensitivity: ${state.val}`,
55
+ );
56
+ this.tiltAngleZ = state.val as number;
57
+ break;
58
+ case 'tilt_angle_z':
59
+ ServerLogService.writeLog(
60
+ LogLevel.Trace,
61
+ `Vibrationssensor Update für ${this.info.customName} auf Winkel Z: ${state.val}`,
62
+ );
63
+ this.tiltAngleZ = state.val as number;
64
+ break;
65
+ case 'tilt_angle_y':
66
+ ServerLogService.writeLog(
67
+ LogLevel.Trace,
68
+ `Vibrationssensor Update für ${this.info.customName} auf Winkel Y: ${state.val}`,
69
+ );
70
+ this.tiltAngleY = state.val as number;
71
+ break;
72
+ case 'tilt_angle_x':
73
+ ServerLogService.writeLog(
74
+ LogLevel.Trace,
75
+ `Vibrationssensor Update für ${this.info.customName} auf Winkel X: ${state.val}`,
76
+ );
77
+ this.tiltAngleX = state.val as number;
78
+ break;
79
+ case 'vibration':
80
+ ServerLogService.writeLog(
81
+ LogLevel.Trace,
82
+ `Vibrationssensor Update für ${this.info.customName} auf Vibration erkannt: ${state.val}`,
83
+ );
84
+ this.vibration = state.val as boolean;
85
+ if (this.vibration) {
86
+ Utils.guardedTimeout(
87
+ () => {
88
+ this.alarmCheck();
89
+ },
90
+ 8500,
91
+ this,
92
+ );
93
+ }
94
+ break;
95
+ case 'tilt_angle_y_abs':
96
+ ServerLogService.writeLog(
97
+ LogLevel.Trace,
98
+ `Vibrationssensor Update für ${this.info.customName} auf absoluten Winkel Y: ${state.val}`,
99
+ );
100
+ this.tiltAngleYAbs = state.val as number;
101
+ break;
102
+ case 'tilt_angle_X_abs':
103
+ ServerLogService.writeLog(
104
+ LogLevel.Trace,
105
+ `Vibrationssensor Update für ${this.info.customName} auf absoluten Winkel X: ${state.val}`,
106
+ );
107
+ this.tiltAngleXAbs = state.val as number;
108
+ break;
109
+ case 'tilt_angle':
110
+ ServerLogService.writeLog(
111
+ LogLevel.Trace,
112
+ `Vibrationssensor Update für ${this.info.customName} auf Winkel: ${state.val}`,
113
+ );
114
+ this.tiltAngle = state.val as number;
115
+ break;
116
+ case 'tilt':
117
+ ServerLogService.writeLog(
118
+ LogLevel.Trace,
119
+ `Vibrationssensor Update für ${this.info.customName} auf Winkel: ${state.val}`,
120
+ );
121
+ this.tilt = state.val as boolean;
122
+ break;
123
+ }
124
+ }
125
+
126
+ public setSensitivity(pVal: number): void {
127
+ let result = 'high';
128
+ switch (pVal) {
129
+ case 0:
130
+ result = 'low';
131
+ break;
132
+ case 1:
133
+ result = 'medium';
134
+ break;
135
+ }
136
+ if (this._idSensitivity === '') {
137
+ ServerLogService.writeLog(LogLevel.Error, `Keine Switch ID für "${this.info.customName}" bekannt.`);
138
+ return;
139
+ }
140
+
141
+ if (!this.ioConn) {
142
+ ServerLogService.writeLog(LogLevel.Error, `Keine Connection für "${this.info.customName}" bekannt.`);
143
+ return;
144
+ }
145
+
146
+ ServerLogService.writeLog(
147
+ LogLevel.Debug,
148
+ `Vibration Sensitivität schalten: "${this.info.customName}" Wert: ${result}`,
149
+ );
150
+ this.ioConn.setState(this._idSensitivity, result, (err) => {
151
+ if (err) {
152
+ console.log(`Stecker schalten ergab Fehler: ${err}`);
153
+ }
154
+ });
155
+ }
156
+
157
+ private alarmCheck(): void {
158
+ ServerLogService.writeLog(
159
+ LogLevel.Debug,
160
+ `Alarmcheck für ${this.info.customName} Alarmblock Wert: ${this._vibrationBlocked}`,
161
+ );
162
+ if (this._vibrationBlocked) {
163
+ ServerLogService.writeLog(LogLevel.Debug, `Fenster offen, ignoriere Vibrationsalarm bei ${this.info.customName}`);
164
+ return;
165
+ }
166
+
167
+ const message = this._alarmMessage;
168
+ SonosService.speakOnAll(message);
169
+ ServerLogService.writeLog(LogLevel.Alert, message);
170
+ }
171
+ }
@@ -1,94 +1,94 @@
1
- import { LogLevel } from '../../../models/logLevel';
2
- import { DeviceInfo } from '../DeviceInfo';
3
- import { ZigbeeDevice } from './zigbeeDevice';
4
- import { ZigbeeDeviceType } from './zigbeeDeviceType';
5
- import { ServerLogService } from '../../services/log-service';
6
- import { SonosService } from '../../services/Sonos/sonos-service';
7
- import { Utils } from '../../services/utils/utils';
8
- import { PollyService } from '../../services/Sonos/polly-service';
9
-
10
- export class ZigbeeAquaraWater extends ZigbeeDevice {
11
- public water: boolean = false;
12
- private _roomName: string = '';
13
- public iAlarm: NodeJS.Timeout | undefined = undefined;
14
- private _messageAlarmFirst: string = '';
15
- private _messageAlarm: string = '';
16
- private _messageAlarmEnd: string = '';
17
-
18
- public set roomName(val: string) {
19
- this._roomName = val;
20
- this._messageAlarmFirst = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
21
- this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
22
- this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
23
- PollyService.preloadTTS(this._messageAlarmFirst);
24
- PollyService.preloadTTS(this._messageAlarm);
25
- PollyService.preloadTTS(this._messageAlarmEnd);
26
- }
27
-
28
- public constructor(pInfo: DeviceInfo) {
29
- super(pInfo, ZigbeeDeviceType.ZigbeeAquaraWater);
30
- this._messageAlarmFirst = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
31
- this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
32
- this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
33
- }
34
-
35
- public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
36
- ServerLogService.writeLog(
37
- LogLevel.DeepTrace,
38
- `Water Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
39
- );
40
- super.update(idSplit, state, initial, true);
41
- switch (idSplit[3]) {
42
- case 'detected':
43
- ServerLogService.writeLog(LogLevel.Debug, `Wasser Update für ${this.info.customName} auf Wasser: ${state.val}`);
44
- const newVal: boolean = state.val === true;
45
- if (this.water === true && !newVal) {
46
- this.stopAlarm();
47
- } else if (newVal) {
48
- this.startAlarm();
49
- }
50
- this.water = newVal;
51
- break;
52
- }
53
- }
54
-
55
- private startAlarm(): void {
56
- if (this.iAlarm !== undefined) {
57
- clearInterval(this.iAlarm);
58
- }
59
- this.iAlarm = Utils.guardedInterval(
60
- () => {
61
- this.alarm();
62
- },
63
- 15000,
64
- this,
65
- );
66
- this.alarm(true);
67
- }
68
-
69
- public stopAlarm(quiet: boolean = false): void {
70
- if (this.iAlarm) {
71
- clearInterval(this.iAlarm);
72
- }
73
- if (quiet) {
74
- return;
75
- }
76
- const message = this._messageAlarmEnd;
77
- Utils.guardedNewThread(() => {
78
- ServerLogService.writeLog(LogLevel.Alert, message);
79
- });
80
- Utils.guardedNewThread(() => {
81
- SonosService.speakOnAll(message);
82
- });
83
- }
84
-
85
- private alarm(first: boolean = false): void {
86
- const message = first ? this._messageAlarmFirst : this._messageAlarm;
87
- Utils.guardedNewThread(() => {
88
- ServerLogService.writeLog(LogLevel.Alert, message);
89
- });
90
- Utils.guardedNewThread(() => {
91
- SonosService.speakOnAll(message, 80);
92
- });
93
- }
94
- }
1
+ import { LogLevel } from '../../../models/logLevel';
2
+ import { DeviceInfo } from '../DeviceInfo';
3
+ import { ZigbeeDevice } from './zigbeeDevice';
4
+ import { ZigbeeDeviceType } from './zigbeeDeviceType';
5
+ import { ServerLogService } from '../../services/log-service';
6
+ import { SonosService } from '../../services/Sonos/sonos-service';
7
+ import { Utils } from '../../services/utils/utils';
8
+ import { PollyService } from '../../services/Sonos/polly-service';
9
+
10
+ export class ZigbeeAquaraWater extends ZigbeeDevice {
11
+ public water: boolean = false;
12
+ private _roomName: string = '';
13
+ public iAlarm: NodeJS.Timeout | undefined = undefined;
14
+ private _messageAlarmFirst: string = '';
15
+ private _messageAlarm: string = '';
16
+ private _messageAlarmEnd: string = '';
17
+
18
+ public set roomName(val: string) {
19
+ this._roomName = val;
20
+ this._messageAlarmFirst = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
21
+ this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
22
+ this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
23
+ PollyService.preloadTTS(this._messageAlarmFirst);
24
+ PollyService.preloadTTS(this._messageAlarm);
25
+ PollyService.preloadTTS(this._messageAlarmEnd);
26
+ }
27
+
28
+ public constructor(pInfo: DeviceInfo) {
29
+ super(pInfo, ZigbeeDeviceType.ZigbeeAquaraWater);
30
+ this._messageAlarmFirst = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
31
+ this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
32
+ this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
33
+ }
34
+
35
+ public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
36
+ ServerLogService.writeLog(
37
+ LogLevel.DeepTrace,
38
+ `Water Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
39
+ );
40
+ super.update(idSplit, state, initial, true);
41
+ switch (idSplit[3]) {
42
+ case 'detected':
43
+ ServerLogService.writeLog(LogLevel.Debug, `Wasser Update für ${this.info.customName} auf Wasser: ${state.val}`);
44
+ const newVal: boolean = state.val === true;
45
+ if (this.water === true && !newVal) {
46
+ this.stopAlarm();
47
+ } else if (newVal) {
48
+ this.startAlarm();
49
+ }
50
+ this.water = newVal;
51
+ break;
52
+ }
53
+ }
54
+
55
+ private startAlarm(): void {
56
+ if (this.iAlarm !== undefined) {
57
+ clearInterval(this.iAlarm);
58
+ }
59
+ this.iAlarm = Utils.guardedInterval(
60
+ () => {
61
+ this.alarm();
62
+ },
63
+ 15000,
64
+ this,
65
+ );
66
+ this.alarm(true);
67
+ }
68
+
69
+ public stopAlarm(quiet: boolean = false): void {
70
+ if (this.iAlarm) {
71
+ clearInterval(this.iAlarm);
72
+ }
73
+ if (quiet) {
74
+ return;
75
+ }
76
+ const message = this._messageAlarmEnd;
77
+ Utils.guardedNewThread(() => {
78
+ ServerLogService.writeLog(LogLevel.Alert, message);
79
+ });
80
+ Utils.guardedNewThread(() => {
81
+ SonosService.speakOnAll(message);
82
+ });
83
+ }
84
+
85
+ private alarm(first: boolean = false): void {
86
+ const message = first ? this._messageAlarmFirst : this._messageAlarm;
87
+ Utils.guardedNewThread(() => {
88
+ ServerLogService.writeLog(LogLevel.Alert, message);
89
+ });
90
+ Utils.guardedNewThread(() => {
91
+ SonosService.speakOnAll(message, 80);
92
+ });
93
+ }
94
+ }