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 TelegramBot from 'node-telegram-bot-api';
2
- import { ServerLogService } from '../log-service';
3
- import { TelegramMessageCallback } from './telegramMessageCalback';
4
- import { LogLevel } from '../../../models/logLevel';
5
- import { iTelegramSettings } from '../../config/iConfig';
6
- export class TelegramService {
7
- public static subscribedIDs: number[];
8
-
9
- private static token: string;
10
- private static active: boolean = false;
11
- private static bot: TelegramBot;
12
- private static allowedIDs: number[];
13
- private static settings: iTelegramSettings | undefined = undefined;
14
- private static restartTimeout: NodeJS.Timeout | undefined = undefined;
15
-
16
- private static callbacks: { [name: string]: TelegramMessageCallback } = {};
17
-
18
- public static addMessageCallback(pCallback: TelegramMessageCallback, reset: boolean = false): void {
19
- if (!reset) {
20
- TelegramService.callbacks[pCallback.name] = pCallback;
21
- }
22
- TelegramService.bot.onText(pCallback.identifier, (msg) => {
23
- if (!TelegramService.checkAuthorized(msg)) {
24
- return;
25
- }
26
- pCallback.callback(msg);
27
- });
28
- ServerLogService.writeLog(
29
- LogLevel.Debug,
30
- `Telegram Callback mit Namen ${pCallback.name} für Nachrichten mit "${pCallback.identifier}" hinzugefügt`,
31
- );
32
- }
33
-
34
- public static initialize(settings?: iTelegramSettings): void {
35
- if (!settings && this.settings === undefined) {
36
- this.active = false;
37
- return;
38
- }
39
-
40
- if (settings) {
41
- this.settings = settings;
42
- ServerLogService.telegramLevel = settings.logLevel;
43
- this.token = settings.telegramToken;
44
- this.allowedIDs = settings.allowedIDs;
45
- this.subscribedIDs = settings.subscribedIDs;
46
- }
47
-
48
- this.active = true;
49
- this.bot = new TelegramBot(this.token, { polling: true, webHook: false });
50
- this.bot.on('polling_error', (e) => {
51
- /*
52
- if (!this.reinitiliazeWithTimeout()) {
53
- return;
54
- }
55
- */
56
- ServerLogService.writeLog(LogLevel.Debug, `Telegram Polling Error: ${e.message}`);
57
- ServerLogService.writeLog(LogLevel.Trace, `Telegram Polling Error stack: ${e.stack}`);
58
- });
59
- TelegramService.addMessageCallback(
60
- new TelegramMessageCallback(
61
- 'helpCommand',
62
- /\/help/,
63
- async (m: TelegramBot.Message): Promise<boolean> => {
64
- if (m.from === undefined) return true;
65
- const message: string[] = [];
66
- message.push('Im folgenden ist eine Liste sämtlicher Kommandos:\n');
67
- for (const cName in TelegramService.callbacks) {
68
- const telegramCb: TelegramMessageCallback = TelegramService.callbacks[cName];
69
- message.push(
70
- `${telegramCb.identifier.toString().replace(/\//g, '').replace(/\\/g, '')} - ${telegramCb.helpMessage}`,
71
- );
72
- }
73
- TelegramService.sendMessage([m.from?.id], message.join('\n'));
74
- return true;
75
- },
76
- `Gibt eine Liste mit sämtlichen Kommandos aus`,
77
- ),
78
- );
79
- TelegramService.inform(`(Re-)Initialisierung abgeschlossen`);
80
- }
81
-
82
- public static publishCommands(): void {
83
- const commands: TelegramBot.BotCommand[] = [];
84
- for (const cName in TelegramService.callbacks) {
85
- const telegramCb: TelegramMessageCallback = TelegramService.callbacks[cName];
86
- const commandIdentifier: string = (
87
- telegramCb.identifierForCommandList !== undefined ? telegramCb.identifierForCommandList : telegramCb.identifier
88
- )
89
- .toString()
90
- .replace(/\//g, '')
91
- .replace(/\\/g, '');
92
- commands.push({ command: commandIdentifier, description: telegramCb.helpMessage });
93
- }
94
-
95
- ServerLogService.writeLog(LogLevel.Debug, `New Telegram Commands: "${JSON.stringify(commands)}"`);
96
- TelegramService.bot.setMyCommands(commands);
97
- }
98
-
99
- public static inform(message: string): void {
100
- this.sendMessage(this.subscribedIDs, message);
101
- }
102
-
103
- public static sendMessage(ids: number[], message: string): void {
104
- if (!TelegramService.active) {
105
- // We can't use Log Service here, as it might result in a recursion
106
- console.log(`Telegram message ${message} wasn't send as TelegramService is inactive`);
107
- return;
108
- }
109
-
110
- for (const id of ids) {
111
- this.bot.sendMessage(id, message).catch((r) => {
112
- ServerLogService.writeLog(LogLevel.Warn, `Send Telegram Message to ${id} failed: ${r}`);
113
- });
114
- }
115
- }
116
-
117
- public static checkAuthorized(msg: TelegramBot.Message): boolean {
118
- if (msg.from !== undefined && this.allowedIDs.includes(msg.from?.id)) {
119
- ServerLogService.writeLog(LogLevel.Debug, `Authorisierte Telegram Message erhalten: ${JSON.stringify(msg)}`);
120
- return true;
121
- }
122
-
123
- ServerLogService.writeLog(LogLevel.Alert, `Fremden Telegram Nutzer erkannt. Nachricht "${JSON.stringify(msg)}"`);
124
- TelegramService.sendMessage(
125
- [msg.chat.id],
126
- "Hello stranger,\nExcuse me, but you're not yet on the guest list.\nPlease contact our manager.\nHave a great day",
127
- );
128
- return false;
129
- }
130
-
131
- /*
132
- private static reinitialize(): void {
133
- ServerLogService.writeLog(LogLevel.Info, `Reinitialize Telegram Bot: Stop Polling`);
134
- this.bot
135
- .startPolling({ restart: true })
136
- .then(() => {
137
- this.restartTimeout = undefined;
138
- this.resetMessageCallbacks();
139
- ServerLogService.writeLog(LogLevel.Debug, `Reinitialization of Telegram finished.`);
140
- })
141
- .catch((e) => {
142
- ServerLogService.writeLog(LogLevel.Info, `Can't start polling: ${e}`);
143
- TelegramService.reinitiliazeWithTimeout(true);
144
- });
145
- }
146
-
147
- public static reinitiliazeWithTimeout(force: boolean = false): boolean {
148
- if (this.restartTimeout !== undefined && !force) {
149
- return false;
150
- } else if (force && this.restartTimeout !== undefined) {
151
- clearTimeout(this.restartTimeout);
152
- }
153
-
154
- this.restartTimeout = Utils.guardedTimeout(
155
- () => {
156
- this.reinitialize();
157
- },
158
- 10000,
159
- this,
160
- );
161
- return true;
162
- }
163
- */
164
-
165
- public static resetMessageCallbacks(): void {
166
- TelegramService.bot.clearTextListeners();
167
- for (const name in TelegramService.callbacks) {
168
- this.addMessageCallback(TelegramService.callbacks[name]);
169
- }
170
- }
171
- }
1
+ import TelegramBot from 'node-telegram-bot-api';
2
+ import { ServerLogService } from '../log-service';
3
+ import { TelegramMessageCallback } from './telegramMessageCalback';
4
+ import { LogLevel } from '../../../models/logLevel';
5
+ import { iTelegramSettings } from '../../config/iConfig';
6
+ export class TelegramService {
7
+ public static subscribedIDs: number[];
8
+
9
+ private static token: string;
10
+ private static active: boolean = false;
11
+ private static bot: TelegramBot;
12
+ private static allowedIDs: number[];
13
+ private static settings: iTelegramSettings | undefined = undefined;
14
+ private static restartTimeout: NodeJS.Timeout | undefined = undefined;
15
+
16
+ private static callbacks: { [name: string]: TelegramMessageCallback } = {};
17
+
18
+ public static addMessageCallback(pCallback: TelegramMessageCallback, reset: boolean = false): void {
19
+ if (!reset) {
20
+ TelegramService.callbacks[pCallback.name] = pCallback;
21
+ }
22
+ TelegramService.bot.onText(pCallback.identifier, (msg) => {
23
+ if (!TelegramService.checkAuthorized(msg)) {
24
+ return;
25
+ }
26
+ pCallback.callback(msg);
27
+ });
28
+ ServerLogService.writeLog(
29
+ LogLevel.Debug,
30
+ `Telegram Callback mit Namen ${pCallback.name} für Nachrichten mit "${pCallback.identifier}" hinzugefügt`,
31
+ );
32
+ }
33
+
34
+ public static initialize(settings?: iTelegramSettings): void {
35
+ if (!settings && this.settings === undefined) {
36
+ this.active = false;
37
+ return;
38
+ }
39
+
40
+ if (settings) {
41
+ this.settings = settings;
42
+ ServerLogService.telegramLevel = settings.logLevel;
43
+ this.token = settings.telegramToken;
44
+ this.allowedIDs = settings.allowedIDs;
45
+ this.subscribedIDs = settings.subscribedIDs;
46
+ }
47
+
48
+ this.active = true;
49
+ this.bot = new TelegramBot(this.token, { polling: true, webHook: false });
50
+ this.bot.on('polling_error', (e) => {
51
+ /*
52
+ if (!this.reinitiliazeWithTimeout()) {
53
+ return;
54
+ }
55
+ */
56
+ ServerLogService.writeLog(LogLevel.Debug, `Telegram Polling Error: ${e.message}`);
57
+ ServerLogService.writeLog(LogLevel.Trace, `Telegram Polling Error stack: ${e.stack}`);
58
+ });
59
+ TelegramService.addMessageCallback(
60
+ new TelegramMessageCallback(
61
+ 'helpCommand',
62
+ /\/help/,
63
+ async (m: TelegramBot.Message): Promise<boolean> => {
64
+ if (m.from === undefined) return true;
65
+ const message: string[] = [];
66
+ message.push('Im folgenden ist eine Liste sämtlicher Kommandos:\n');
67
+ for (const cName in TelegramService.callbacks) {
68
+ const telegramCb: TelegramMessageCallback = TelegramService.callbacks[cName];
69
+ message.push(
70
+ `${telegramCb.identifier.toString().replace(/\//g, '').replace(/\\/g, '')} - ${telegramCb.helpMessage}`,
71
+ );
72
+ }
73
+ TelegramService.sendMessage([m.from?.id], message.join('\n'));
74
+ return true;
75
+ },
76
+ `Gibt eine Liste mit sämtlichen Kommandos aus`,
77
+ ),
78
+ );
79
+ TelegramService.inform(`(Re-)Initialisierung abgeschlossen`);
80
+ }
81
+
82
+ public static publishCommands(): void {
83
+ const commands: TelegramBot.BotCommand[] = [];
84
+ for (const cName in TelegramService.callbacks) {
85
+ const telegramCb: TelegramMessageCallback = TelegramService.callbacks[cName];
86
+ const commandIdentifier: string = (
87
+ telegramCb.identifierForCommandList !== undefined ? telegramCb.identifierForCommandList : telegramCb.identifier
88
+ )
89
+ .toString()
90
+ .replace(/\//g, '')
91
+ .replace(/\\/g, '');
92
+ commands.push({ command: commandIdentifier, description: telegramCb.helpMessage });
93
+ }
94
+
95
+ ServerLogService.writeLog(LogLevel.Debug, `New Telegram Commands: "${JSON.stringify(commands)}"`);
96
+ TelegramService.bot.setMyCommands(commands);
97
+ }
98
+
99
+ public static inform(message: string): void {
100
+ this.sendMessage(this.subscribedIDs, message);
101
+ }
102
+
103
+ public static sendMessage(ids: number[], message: string): void {
104
+ if (!TelegramService.active) {
105
+ // We can't use Log Service here, as it might result in a recursion
106
+ console.log(`Telegram message ${message} wasn't send as TelegramService is inactive`);
107
+ return;
108
+ }
109
+
110
+ for (const id of ids) {
111
+ this.bot.sendMessage(id, message).catch((r) => {
112
+ ServerLogService.writeLog(LogLevel.Warn, `Send Telegram Message to ${id} failed: ${r}`);
113
+ });
114
+ }
115
+ }
116
+
117
+ public static checkAuthorized(msg: TelegramBot.Message): boolean {
118
+ if (msg.from !== undefined && this.allowedIDs.includes(msg.from?.id)) {
119
+ ServerLogService.writeLog(LogLevel.Debug, `Authorisierte Telegram Message erhalten: ${JSON.stringify(msg)}`);
120
+ return true;
121
+ }
122
+
123
+ ServerLogService.writeLog(LogLevel.Alert, `Fremden Telegram Nutzer erkannt. Nachricht "${JSON.stringify(msg)}"`);
124
+ TelegramService.sendMessage(
125
+ [msg.chat.id],
126
+ "Hello stranger,\nExcuse me, but you're not yet on the guest list.\nPlease contact our manager.\nHave a great day",
127
+ );
128
+ return false;
129
+ }
130
+
131
+ /*
132
+ private static reinitialize(): void {
133
+ ServerLogService.writeLog(LogLevel.Info, `Reinitialize Telegram Bot: Stop Polling`);
134
+ this.bot
135
+ .startPolling({ restart: true })
136
+ .then(() => {
137
+ this.restartTimeout = undefined;
138
+ this.resetMessageCallbacks();
139
+ ServerLogService.writeLog(LogLevel.Debug, `Reinitialization of Telegram finished.`);
140
+ })
141
+ .catch((e) => {
142
+ ServerLogService.writeLog(LogLevel.Info, `Can't start polling: ${e}`);
143
+ TelegramService.reinitiliazeWithTimeout(true);
144
+ });
145
+ }
146
+
147
+ public static reinitiliazeWithTimeout(force: boolean = false): boolean {
148
+ if (this.restartTimeout !== undefined && !force) {
149
+ return false;
150
+ } else if (force && this.restartTimeout !== undefined) {
151
+ clearTimeout(this.restartTimeout);
152
+ }
153
+
154
+ this.restartTimeout = Utils.guardedTimeout(
155
+ () => {
156
+ this.reinitialize();
157
+ },
158
+ 10000,
159
+ this,
160
+ );
161
+ return true;
162
+ }
163
+ */
164
+
165
+ public static resetMessageCallbacks(): void {
166
+ TelegramService.bot.clearTextListeners();
167
+ for (const name in TelegramService.callbacks) {
168
+ this.addMessageCallback(TelegramService.callbacks[name]);
169
+ }
170
+ }
171
+ }
@@ -1,11 +1,11 @@
1
- import TelegramBot from 'node-telegram-bot-api';
2
-
3
- export class TelegramMessageCallback {
4
- public constructor(
5
- public name: string,
6
- public identifier: RegExp,
7
- public callback: (message: TelegramBot.Message) => Promise<boolean>,
8
- public helpMessage: string,
9
- public identifierForCommandList?: RegExp,
10
- ) {}
11
- }
1
+ import TelegramBot from 'node-telegram-bot-api';
2
+
3
+ export class TelegramMessageCallback {
4
+ public constructor(
5
+ public name: string,
6
+ public identifier: RegExp,
7
+ public callback: (message: TelegramBot.Message) => Promise<boolean>,
8
+ public helpMessage: string,
9
+ public identifierForCommandList?: RegExp,
10
+ ) {}
11
+ }
@@ -1,83 +1,82 @@
1
- import { OwnSonosDevice, SonosService } from "/server/config/private/server/services/Sonos/sonos-service";
2
- import { ServerLogService } from "/server/config/private/server/services/log-service";
3
- import { LogLevel } from "/server/config/private/models/logLevel";
4
- import { TelegramService } from "/server/config/private/server/services/Telegram/telegram-service";
5
-
6
- export class MuellTonne {
7
- public static oneDay: number = 1000 * 60 * 60 * 24;
8
- public nextDate: Date | undefined = undefined;
9
- public dates: Date[] = [];
10
-
11
- public constructor(public name: string, public ownSonosDevice?: OwnSonosDevice) {
12
- }
13
-
14
- public sortDates(): void {
15
- this.dates = this.dates.sort((a, b) => a.getTime() - b.getTime());
16
- this.removePassedDates();
17
- ServerLogService.writeLog(
18
- LogLevel.Info,
19
- `Die "${this.name}" ist das nächste mal am ${this.nextDate.toLocaleDateString('de-DE')} zu leeren`,
20
- );
21
- }
22
-
23
- public removePassedDates(): void {
24
- const todayMidnight: number = new Date().setHours(0, 0, 0, 0);
25
- while (this.dates.length > 0 && this.dates[0].getTime() < todayMidnight) {
26
- this.dates.shift();
27
- }
28
- this.nextDate = this.dates[0];
29
- }
30
-
31
- public check(): void {
32
- this.removePassedDates();
33
- if (this.nextDate === undefined) {
34
- ServerLogService.writeLog(LogLevel.Alert, `Die Mülltonne mit dem Namen ${this.name} hat keine nächste Abholung!`);
35
- return;
36
- }
37
- const todayMidnight: number = new Date().setHours(0, 0, 0, 0);
38
- const tomorowMidnight: number = todayMidnight + MuellTonne.oneDay;
39
- const tomorowAfterMidnight: number = tomorowMidnight + MuellTonne.oneDay;
40
- const nextTimestamp: number = this.nextDate.getTime();
41
-
42
- const daysTilNextEvent: number = (nextTimestamp - todayMidnight) / MuellTonne.oneDay;
43
- ServerLogService.writeLog(
44
- LogLevel.Info,
45
- `Die Mülltonne mit dem Namen ${this.name} wird in ${daysTilNextEvent} Tagen das nächste Mal abgeholt.`,
46
- );
47
-
48
- if (nextTimestamp >= tomorowAfterMidnight) {
49
- ServerLogService.writeLog(
50
- LogLevel.Trace,
51
- `Die Mülltonne mit dem Namen ${this.name} wird erst nach Übermorgen abgeholt`,
52
- );
53
- return; // Es ist noch lange hin
54
- }
55
-
56
- if (nextTimestamp >= tomorowMidnight) {
57
- const message = `Die Mülltonne mit dem Namen ${this.name} wird morgen abgeholt!`;
58
- TelegramService.inform(message);
59
-
60
- if (this.ownSonosDevice) {
61
- SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
62
- }
63
- return;
64
- }
65
-
66
- if (nextTimestamp >= todayMidnight) {
67
- if (new Date().getHours() > 10) {
68
- const message = `Die Mülltonne mit dem Namen ${this.name} wurde heute abgeholt, Mülltonne zurückstellen!`;
69
- TelegramService.inform(message);
70
- if (this.ownSonosDevice) {
71
- SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
72
- }
73
- } else {
74
- const message = `Die Mülltonne mit dem Namen ${this.name} wird heute abgeholt!`;
75
- TelegramService.inform(message);
76
- if (this.ownSonosDevice) {
77
- SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
78
- }
79
- }
80
- return;
81
- }
82
- }
83
- }
1
+ import { OwnSonosDevice, SonosService } from '../Sonos/sonos-service';
2
+ import { ServerLogService } from '../log-service';
3
+ import { LogLevel } from '../../../models/logLevel';
4
+ import { TelegramService } from '../Telegram/telegram-service';
5
+
6
+ export class MuellTonne {
7
+ public static oneDay: number = 1000 * 60 * 60 * 24;
8
+ public nextDate: Date | undefined = undefined;
9
+ public dates: Date[] = [];
10
+
11
+ public constructor(public name: string, public ownSonosDevice?: OwnSonosDevice) {}
12
+
13
+ public sortDates(): void {
14
+ this.dates = this.dates.sort((a, b) => a.getTime() - b.getTime());
15
+ this.removePassedDates();
16
+ ServerLogService.writeLog(
17
+ LogLevel.Info,
18
+ `Die "${this.name}" ist das nächste mal am ${this.nextDate.toLocaleDateString('de-DE')} zu leeren`,
19
+ );
20
+ }
21
+
22
+ public removePassedDates(): void {
23
+ const todayMidnight: number = new Date().setHours(0, 0, 0, 0);
24
+ while (this.dates.length > 0 && this.dates[0].getTime() < todayMidnight) {
25
+ this.dates.shift();
26
+ }
27
+ this.nextDate = this.dates[0];
28
+ }
29
+
30
+ public check(): void {
31
+ this.removePassedDates();
32
+ if (this.nextDate === undefined) {
33
+ ServerLogService.writeLog(LogLevel.Alert, `Die Mülltonne mit dem Namen ${this.name} hat keine nächste Abholung!`);
34
+ return;
35
+ }
36
+ const todayMidnight: number = new Date().setHours(0, 0, 0, 0);
37
+ const tomorowMidnight: number = todayMidnight + MuellTonne.oneDay;
38
+ const tomorowAfterMidnight: number = tomorowMidnight + MuellTonne.oneDay;
39
+ const nextTimestamp: number = this.nextDate.getTime();
40
+
41
+ const daysTilNextEvent: number = (nextTimestamp - todayMidnight) / MuellTonne.oneDay;
42
+ ServerLogService.writeLog(
43
+ LogLevel.Info,
44
+ `Die Mülltonne mit dem Namen ${this.name} wird in ${daysTilNextEvent} Tagen das nächste Mal abgeholt.`,
45
+ );
46
+
47
+ if (nextTimestamp >= tomorowAfterMidnight) {
48
+ ServerLogService.writeLog(
49
+ LogLevel.Trace,
50
+ `Die Mülltonne mit dem Namen ${this.name} wird erst nach Übermorgen abgeholt`,
51
+ );
52
+ return; // Es ist noch lange hin
53
+ }
54
+
55
+ if (nextTimestamp >= tomorowMidnight) {
56
+ const message = `Die Mülltonne mit dem Namen ${this.name} wird morgen abgeholt!`;
57
+ TelegramService.inform(message);
58
+
59
+ if (this.ownSonosDevice) {
60
+ SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
61
+ }
62
+ return;
63
+ }
64
+
65
+ if (nextTimestamp >= todayMidnight) {
66
+ if (new Date().getHours() > 10) {
67
+ const message = `Die Mülltonne mit dem Namen ${this.name} wurde heute abgeholt, Mülltonne zurückstellen!`;
68
+ TelegramService.inform(message);
69
+ if (this.ownSonosDevice) {
70
+ SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
71
+ }
72
+ } else {
73
+ const message = `Die Mülltonne mit dem Namen ${this.name} wird heute abgeholt!`;
74
+ TelegramService.inform(message);
75
+ if (this.ownSonosDevice) {
76
+ SonosService.speakOnDevice(message, this.ownSonosDevice, 30);
77
+ }
78
+ }
79
+ return;
80
+ }
81
+ }
82
+ }