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,223 +1,223 @@
1
- import { TimeCallback, TimeCallbackType } from '../../models/timeCallback';
2
- import { getSunrise, getSunset } from 'sunrise-sunset-js';
3
- import { ServerLogService } from './log-service';
4
- import { LogLevel } from '../../models/logLevel';
5
- import { Devices } from '../devices/devices';
6
- import { Utils } from './utils/utils';
7
- import { SettingsService } from './settings-service';
8
- import { iTimePair } from '../config/iConfig';
9
-
10
- export enum TimeOfDay {
11
- BeforeSunrise = 1,
12
- Daylight = 2,
13
- AfterSunset = 3,
14
- Night = 4,
15
- }
16
-
17
- export class SunTimeOffsets {
18
- public constructor(
19
- public sunrise: number = 0,
20
- public sunset: number = 0,
21
- public minimumHours: number = 6,
22
- public minimumMinutes: number = 24,
23
- public maximumHours: number = 22,
24
- public maximumMinutes: number = 30,
25
- ) {}
26
-
27
- public getNextMinimumSunrise(): Date {
28
- const today: Date = new Date(new Date().setHours(this.minimumHours, this.minimumMinutes));
29
- if (today > new Date()) {
30
- return today;
31
- }
32
- return new Date(today.getTime() + 24 * 60 * 60 * 1000);
33
- }
34
-
35
- public getNextMaximumSunset(): Date {
36
- const today = new Date(new Date().setHours(this.maximumHours, this.maximumMinutes));
37
- if (today > new Date()) {
38
- return today;
39
- }
40
- return new Date(today.getTime() + 24 * 60 * 60 * 1000);
41
- }
42
- }
43
-
44
- export class TimeCallbackService {
45
- private static _todaySunRise: Date;
46
- private static _todaySunSet: Date;
47
- private static _nextSunRise: Date;
48
- private static _nextSunSet: Date;
49
- private static _callbacks: TimeCallback[] = [];
50
- private static _iCheck: NodeJS.Timeout;
51
- private static _lastCheck: Date = new Date(0);
52
-
53
- public static dayType(pOffset: SunTimeOffsets): TimeOfDay {
54
- const now: Date = new Date();
55
-
56
- const hours = now.getHours();
57
- const minutes = now.getMinutes();
58
-
59
- const nightEnd: iTimePair = SettingsService.settings.timeSettings.nightEnd;
60
- const nightStart: iTimePair = SettingsService.settings.timeSettings.nightStart;
61
-
62
- if (nightStart.hours < nightEnd.hours) {
63
- if (
64
- (hours < nightEnd.hours && hours > nightStart.hours) ||
65
- (hours === nightEnd.hours && minutes < nightEnd.minutes) ||
66
- (hours === nightStart.hours && minutes > nightStart.minutes)
67
- ) {
68
- return TimeOfDay.Night;
69
- }
70
- } else {
71
- if (
72
- hours > nightStart.hours ||
73
- hours < nightEnd.hours ||
74
- (hours === nightStart.hours && minutes >= nightStart.minutes) ||
75
- (hours === nightEnd.hours && minutes <= nightEnd.minutes)
76
- ) {
77
- return TimeOfDay.Night;
78
- }
79
- }
80
-
81
- let sunset: Date = new Date(TimeCallbackService._todaySunSet.getTime() + pOffset.sunset * 60 * 1000);
82
- const maximumSunset: Date = pOffset.getNextMaximumSunset();
83
- if (maximumSunset < sunset && maximumSunset.getDate() === sunset.getDate()) {
84
- ServerLogService.writeLog(
85
- LogLevel.Trace,
86
- `Maximum Sunset vor nächstem Sunset: Sunset ${sunset.toLocaleString()}\t\t${maximumSunset.toLocaleString()}`,
87
- );
88
- sunset = maximumSunset;
89
- }
90
- if (now > sunset) {
91
- return TimeOfDay.AfterSunset;
92
- }
93
- const minimumSunrise: Date = pOffset.getNextMinimumSunrise();
94
- let sunrise: Date = new Date(TimeCallbackService._todaySunRise.getTime() + pOffset.sunset * 60 * 1000);
95
- if (minimumSunrise > sunrise && minimumSunrise.getDate() === sunrise.getDate()) {
96
- ServerLogService.writeLog(
97
- LogLevel.Trace,
98
- `Minimum Sunset nach aktuellem Sunrise: Sunset ${sunrise.toLocaleString()}\t\t${minimumSunrise.toLocaleString()}`,
99
- );
100
- sunrise = minimumSunrise;
101
- }
102
- if (now > sunrise) {
103
- return TimeOfDay.Daylight;
104
- }
105
- return TimeOfDay.BeforeSunrise;
106
- }
107
-
108
- public static darkOutsideOrNight(dayType: TimeOfDay): boolean {
109
- switch (dayType) {
110
- case TimeOfDay.Night:
111
- case TimeOfDay.BeforeSunrise:
112
- case TimeOfDay.AfterSunset:
113
- return true;
114
- default:
115
- return false;
116
- }
117
- }
118
-
119
- public static get nextSunRise(): Date {
120
- return TimeCallbackService._nextSunRise;
121
- }
122
-
123
- public static get nextSunSet(): Date {
124
- return TimeCallbackService._nextSunSet;
125
- }
126
-
127
- public static init(): void {
128
- const dailyRecalc: TimeCallback = new TimeCallback(
129
- 'Midnight Recalc',
130
- TimeCallbackType.TimeOfDay,
131
- () => {
132
- TimeCallbackService.recalcSunTimes();
133
- Devices.midnightReset();
134
- },
135
- 0,
136
- 0,
137
- 0,
138
- );
139
-
140
- const daily3oClockRecalc: TimeCallback = new TimeCallback(
141
- 'Daily3oClockRecalc',
142
- TimeCallbackType.TimeOfDay,
143
- () => {
144
- Devices.resetPraesenzCount();
145
- },
146
- 0,
147
- 3,
148
- 0,
149
- );
150
-
151
- TimeCallbackService.recalcSunTimes();
152
- TimeCallbackService.addCallback(dailyRecalc);
153
- TimeCallbackService.addCallback(daily3oClockRecalc);
154
- this._iCheck = Utils.guardedInterval(TimeCallbackService.performCheck, 60000);
155
- }
156
-
157
- public static addCallback(pCallback: TimeCallback): void {
158
- TimeCallbackService._callbacks.push(pCallback);
159
- }
160
-
161
- public static performCheck(): void {
162
- ServerLogService.writeLog(LogLevel.Trace, `Perform TimeCallBackCheck`);
163
- const now: Date = new Date();
164
- for (const tc of TimeCallbackService._callbacks) {
165
- if (tc.nextToDo === undefined || tc.nextToDo < tc.lastDone) {
166
- tc.recalcNextToDo(now);
167
- }
168
-
169
- if (tc.nextToDo === undefined) {
170
- continue;
171
- }
172
-
173
- if (tc.nextToDo < now && tc.nextToDo > TimeCallbackService._lastCheck) {
174
- tc.cFunction();
175
- tc.lastDone = now;
176
- tc.nextToDo = undefined;
177
- }
178
- }
179
-
180
- if (TimeCallbackService._nextSunRise < now) {
181
- const tomorow: Date = new Date(new Date().setHours(2, 0, 0, 0) + 24 * 60 * 60 * 1000);
182
- TimeCallbackService.updateSunRise(tomorow);
183
- }
184
- if (TimeCallbackService._nextSunSet < now) {
185
- const tomorow: Date = new Date(new Date().setHours(2, 0, 0, 0) + 24 * 60 * 60 * 1000);
186
- TimeCallbackService.updateSunSet(tomorow);
187
- }
188
-
189
- TimeCallbackService._lastCheck = now;
190
- }
191
-
192
- public static recalcSunTimes(): void {
193
- TimeCallbackService._todaySunRise = getSunrise(51.529556852253826, 7.097266042276687, new Date());
194
-
195
- TimeCallbackService._todaySunSet = getSunset(51.529556852253826, 7.097266042276687, new Date());
196
- TimeCallbackService.updateSunSet();
197
- TimeCallbackService.updateSunRise();
198
- ServerLogService.writeLog(
199
- LogLevel.Info,
200
- `Nächster Sonnenaufgang um ${TimeCallbackService.nextSunRise.toLocaleTimeString('de-DE')}
201
- Nächster Sonnenuntergang um ${TimeCallbackService._nextSunSet.toLocaleTimeString('de-DE')}`,
202
- );
203
- }
204
-
205
- public static removeCallback(pCallback: TimeCallback): void {
206
- for (let i: number = 0; i < TimeCallbackService._callbacks.length; i++) {
207
- const cb: TimeCallback = TimeCallbackService._callbacks[i];
208
- if (cb.name !== pCallback.name) {
209
- continue;
210
- }
211
- TimeCallbackService._callbacks.splice(i, 1);
212
- return;
213
- }
214
- }
215
-
216
- public static updateSunRise(pDay: Date = new Date()): void {
217
- TimeCallbackService._nextSunRise = getSunrise(51.529556852253826, 7.097266042276687, pDay);
218
- }
219
-
220
- public static updateSunSet(pDay: Date = new Date()): void {
221
- TimeCallbackService._nextSunSet = getSunset(51.529556852253826, 7.097266042276687, pDay);
222
- }
223
- }
1
+ import { TimeCallback, TimeCallbackType } from '../../models/timeCallback';
2
+ import { getSunrise, getSunset } from 'sunrise-sunset-js';
3
+ import { ServerLogService } from './log-service';
4
+ import { LogLevel } from '../../models/logLevel';
5
+ import { Devices } from '../devices/devices';
6
+ import { Utils } from './utils/utils';
7
+ import { SettingsService } from './settings-service';
8
+ import { iTimePair } from '../config/iConfig';
9
+
10
+ export enum TimeOfDay {
11
+ BeforeSunrise = 1,
12
+ Daylight = 2,
13
+ AfterSunset = 3,
14
+ Night = 4,
15
+ }
16
+
17
+ export class SunTimeOffsets {
18
+ public constructor(
19
+ public sunrise: number = 0,
20
+ public sunset: number = 0,
21
+ public minimumHours: number = 6,
22
+ public minimumMinutes: number = 24,
23
+ public maximumHours: number = 22,
24
+ public maximumMinutes: number = 30,
25
+ ) {}
26
+
27
+ public getNextMinimumSunrise(): Date {
28
+ const today: Date = new Date(new Date().setHours(this.minimumHours, this.minimumMinutes));
29
+ if (today > new Date()) {
30
+ return today;
31
+ }
32
+ return new Date(today.getTime() + 24 * 60 * 60 * 1000);
33
+ }
34
+
35
+ public getNextMaximumSunset(): Date {
36
+ const today = new Date(new Date().setHours(this.maximumHours, this.maximumMinutes));
37
+ if (today > new Date()) {
38
+ return today;
39
+ }
40
+ return new Date(today.getTime() + 24 * 60 * 60 * 1000);
41
+ }
42
+ }
43
+
44
+ export class TimeCallbackService {
45
+ private static _todaySunRise: Date;
46
+ private static _todaySunSet: Date;
47
+ private static _nextSunRise: Date;
48
+ private static _nextSunSet: Date;
49
+ private static _callbacks: TimeCallback[] = [];
50
+ private static _iCheck: NodeJS.Timeout;
51
+ private static _lastCheck: Date = new Date(0);
52
+
53
+ public static dayType(pOffset: SunTimeOffsets): TimeOfDay {
54
+ const now: Date = new Date();
55
+
56
+ const hours = now.getHours();
57
+ const minutes = now.getMinutes();
58
+
59
+ const nightEnd: iTimePair = SettingsService.settings.timeSettings.nightEnd;
60
+ const nightStart: iTimePair = SettingsService.settings.timeSettings.nightStart;
61
+
62
+ if (nightStart.hours < nightEnd.hours) {
63
+ if (
64
+ (hours < nightEnd.hours && hours > nightStart.hours) ||
65
+ (hours === nightEnd.hours && minutes < nightEnd.minutes) ||
66
+ (hours === nightStart.hours && minutes > nightStart.minutes)
67
+ ) {
68
+ return TimeOfDay.Night;
69
+ }
70
+ } else {
71
+ if (
72
+ hours > nightStart.hours ||
73
+ hours < nightEnd.hours ||
74
+ (hours === nightStart.hours && minutes >= nightStart.minutes) ||
75
+ (hours === nightEnd.hours && minutes <= nightEnd.minutes)
76
+ ) {
77
+ return TimeOfDay.Night;
78
+ }
79
+ }
80
+
81
+ let sunset: Date = new Date(TimeCallbackService._todaySunSet.getTime() + pOffset.sunset * 60 * 1000);
82
+ const maximumSunset: Date = pOffset.getNextMaximumSunset();
83
+ if (maximumSunset < sunset && maximumSunset.getDate() === sunset.getDate()) {
84
+ ServerLogService.writeLog(
85
+ LogLevel.Trace,
86
+ `Maximum Sunset vor nächstem Sunset: Sunset ${sunset.toLocaleString()}\t\t${maximumSunset.toLocaleString()}`,
87
+ );
88
+ sunset = maximumSunset;
89
+ }
90
+ if (now > sunset) {
91
+ return TimeOfDay.AfterSunset;
92
+ }
93
+ const minimumSunrise: Date = pOffset.getNextMinimumSunrise();
94
+ let sunrise: Date = new Date(TimeCallbackService._todaySunRise.getTime() + pOffset.sunset * 60 * 1000);
95
+ if (minimumSunrise > sunrise && minimumSunrise.getDate() === sunrise.getDate()) {
96
+ ServerLogService.writeLog(
97
+ LogLevel.Trace,
98
+ `Minimum Sunset nach aktuellem Sunrise: Sunset ${sunrise.toLocaleString()}\t\t${minimumSunrise.toLocaleString()}`,
99
+ );
100
+ sunrise = minimumSunrise;
101
+ }
102
+ if (now > sunrise) {
103
+ return TimeOfDay.Daylight;
104
+ }
105
+ return TimeOfDay.BeforeSunrise;
106
+ }
107
+
108
+ public static darkOutsideOrNight(dayType: TimeOfDay): boolean {
109
+ switch (dayType) {
110
+ case TimeOfDay.Night:
111
+ case TimeOfDay.BeforeSunrise:
112
+ case TimeOfDay.AfterSunset:
113
+ return true;
114
+ default:
115
+ return false;
116
+ }
117
+ }
118
+
119
+ public static get nextSunRise(): Date {
120
+ return TimeCallbackService._nextSunRise;
121
+ }
122
+
123
+ public static get nextSunSet(): Date {
124
+ return TimeCallbackService._nextSunSet;
125
+ }
126
+
127
+ public static init(): void {
128
+ const dailyRecalc: TimeCallback = new TimeCallback(
129
+ 'Midnight Recalc',
130
+ TimeCallbackType.TimeOfDay,
131
+ () => {
132
+ TimeCallbackService.recalcSunTimes();
133
+ Devices.midnightReset();
134
+ },
135
+ 0,
136
+ 0,
137
+ 0,
138
+ );
139
+
140
+ const daily3oClockRecalc: TimeCallback = new TimeCallback(
141
+ 'Daily3oClockRecalc',
142
+ TimeCallbackType.TimeOfDay,
143
+ () => {
144
+ Devices.resetPraesenzCount();
145
+ },
146
+ 0,
147
+ 3,
148
+ 0,
149
+ );
150
+
151
+ TimeCallbackService.recalcSunTimes();
152
+ TimeCallbackService.addCallback(dailyRecalc);
153
+ TimeCallbackService.addCallback(daily3oClockRecalc);
154
+ this._iCheck = Utils.guardedInterval(TimeCallbackService.performCheck, 60000);
155
+ }
156
+
157
+ public static addCallback(pCallback: TimeCallback): void {
158
+ TimeCallbackService._callbacks.push(pCallback);
159
+ }
160
+
161
+ public static performCheck(): void {
162
+ ServerLogService.writeLog(LogLevel.Trace, `Perform TimeCallBackCheck`);
163
+ const now: Date = new Date();
164
+ for (const tc of TimeCallbackService._callbacks) {
165
+ if (tc.nextToDo === undefined || tc.nextToDo < tc.lastDone) {
166
+ tc.recalcNextToDo(now);
167
+ }
168
+
169
+ if (tc.nextToDo === undefined) {
170
+ continue;
171
+ }
172
+
173
+ if (tc.nextToDo < now && tc.nextToDo > TimeCallbackService._lastCheck) {
174
+ tc.cFunction();
175
+ tc.lastDone = now;
176
+ tc.nextToDo = undefined;
177
+ }
178
+ }
179
+
180
+ if (TimeCallbackService._nextSunRise < now) {
181
+ const tomorow: Date = new Date(new Date().setHours(2, 0, 0, 0) + 24 * 60 * 60 * 1000);
182
+ TimeCallbackService.updateSunRise(tomorow);
183
+ }
184
+ if (TimeCallbackService._nextSunSet < now) {
185
+ const tomorow: Date = new Date(new Date().setHours(2, 0, 0, 0) + 24 * 60 * 60 * 1000);
186
+ TimeCallbackService.updateSunSet(tomorow);
187
+ }
188
+
189
+ TimeCallbackService._lastCheck = now;
190
+ }
191
+
192
+ public static recalcSunTimes(): void {
193
+ TimeCallbackService._todaySunRise = getSunrise(51.529556852253826, 7.097266042276687, new Date());
194
+
195
+ TimeCallbackService._todaySunSet = getSunset(51.529556852253826, 7.097266042276687, new Date());
196
+ TimeCallbackService.updateSunSet();
197
+ TimeCallbackService.updateSunRise();
198
+ ServerLogService.writeLog(
199
+ LogLevel.Info,
200
+ `Nächster Sonnenaufgang um ${TimeCallbackService.nextSunRise.toLocaleTimeString('de-DE')}
201
+ Nächster Sonnenuntergang um ${TimeCallbackService._nextSunSet.toLocaleTimeString('de-DE')}`,
202
+ );
203
+ }
204
+
205
+ public static removeCallback(pCallback: TimeCallback): void {
206
+ for (let i: number = 0; i < TimeCallbackService._callbacks.length; i++) {
207
+ const cb: TimeCallback = TimeCallbackService._callbacks[i];
208
+ if (cb.name !== pCallback.name) {
209
+ continue;
210
+ }
211
+ TimeCallbackService._callbacks.splice(i, 1);
212
+ return;
213
+ }
214
+ }
215
+
216
+ public static updateSunRise(pDay: Date = new Date()): void {
217
+ TimeCallbackService._nextSunRise = getSunrise(51.529556852253826, 7.097266042276687, pDay);
218
+ }
219
+
220
+ public static updateSunSet(pDay: Date = new Date()): void {
221
+ TimeCallbackService._nextSunSet = getSunset(51.529556852253826, 7.097266042276687, pDay);
222
+ }
223
+ }
@@ -1,24 +1,24 @@
1
- export class ringStorage {
2
- private storage: string[] = [];
3
- private pointer: number = 0;
4
-
5
- public constructor(private maxSize: number = 10) {}
6
-
7
- public add(text: string): void {
8
- this.pointer = (this.pointer + 1) % this.maxSize;
9
- this.storage[this.pointer] = text;
10
- }
11
-
12
- public readAmount(amount: number): string[] {
13
- const result: string[] = [];
14
- amount = Math.max(amount, this.maxSize);
15
- let pos = this.pointer;
16
- while (amount > 0) {
17
- result.push(this.storage[pos]);
18
- // Um negative Modulo zu umgehen.
19
- pos = (((pos - 1) % this.maxSize) + this.maxSize) % this.maxSize;
20
- amount--;
21
- }
22
- return result;
23
- }
24
- }
1
+ export class ringStorage {
2
+ private storage: string[] = [];
3
+ private pointer: number = 0;
4
+
5
+ public constructor(private maxSize: number = 10) {}
6
+
7
+ public add(text: string): void {
8
+ this.pointer = (this.pointer + 1) % this.maxSize;
9
+ this.storage[this.pointer] = text;
10
+ }
11
+
12
+ public readAmount(amount: number): string[] {
13
+ const result: string[] = [];
14
+ amount = Math.max(amount, this.maxSize);
15
+ let pos = this.pointer;
16
+ while (amount > 0) {
17
+ result.push(this.storage[pos]);
18
+ // Um negative Modulo zu umgehen.
19
+ pos = (((pos - 1) % this.maxSize) + this.maxSize) % this.maxSize;
20
+ amount--;
21
+ }
22
+ return result;
23
+ }
24
+ }
@@ -1,52 +1,52 @@
1
- import { ServerLogService } from '../log-service';
2
- import { LogLevel } from '../../../models/logLevel';
3
-
4
- export class Utils {
5
- public static guardedFunction(func: (...args: unknown[]) => void, thisContext: unknown | undefined): void {
6
- try {
7
- if (thisContext) {
8
- func.bind(thisContext)();
9
- } else {
10
- func();
11
- }
12
- } catch (e) {
13
- ServerLogService.writeLog(LogLevel.Error, `Guarded Function failed: ${e.message}\n Stack: ${e.stack}`);
14
- }
15
- }
16
-
17
- public static nowMS(): number {
18
- return new Date().getTime();
19
- }
20
-
21
- public static guardedNewThread(func: (...args: unknown[]) => void, thisContext?: unknown | undefined): void {
22
- Utils.guardedTimeout(func, 1, thisContext);
23
- }
24
-
25
- public static guardedTimeout(
26
- func: (...args: unknown[]) => void,
27
- time: number,
28
- thisContext?: unknown | undefined,
29
- ): NodeJS.Timeout {
30
- return setTimeout(() => {
31
- Utils.guardedFunction(func, thisContext);
32
- }, time);
33
- }
34
-
35
- public static guardedInterval(
36
- func: (...args: unknown[]) => void,
37
- time: number,
38
- thisContext?: unknown | undefined,
39
- fireImmediate: boolean = false,
40
- ): NodeJS.Timeout {
41
- if (fireImmediate) {
42
- Utils.guardedFunction(func, thisContext);
43
- }
44
- return setInterval(() => {
45
- Utils.guardedFunction(func, thisContext);
46
- }, time);
47
- }
48
- public static nowString(): string {
49
- const d: Date = new Date();
50
- return `${d.toLocaleTimeString('de-DE')}.${d.getMilliseconds()}`;
51
- }
52
- }
1
+ import { ServerLogService } from '../log-service';
2
+ import { LogLevel } from '../../../models/logLevel';
3
+
4
+ export class Utils {
5
+ public static guardedFunction(func: (...args: unknown[]) => void, thisContext: unknown | undefined): void {
6
+ try {
7
+ if (thisContext) {
8
+ func.bind(thisContext)();
9
+ } else {
10
+ func();
11
+ }
12
+ } catch (e) {
13
+ ServerLogService.writeLog(LogLevel.Error, `Guarded Function failed: ${e.message}\n Stack: ${e.stack}`);
14
+ }
15
+ }
16
+
17
+ public static nowMS(): number {
18
+ return new Date().getTime();
19
+ }
20
+
21
+ public static guardedNewThread(func: (...args: unknown[]) => void, thisContext?: unknown | undefined): void {
22
+ Utils.guardedTimeout(func, 1, thisContext);
23
+ }
24
+
25
+ public static guardedTimeout(
26
+ func: (...args: unknown[]) => void,
27
+ time: number,
28
+ thisContext?: unknown | undefined,
29
+ ): NodeJS.Timeout {
30
+ return setTimeout(() => {
31
+ Utils.guardedFunction(func, thisContext);
32
+ }, time);
33
+ }
34
+
35
+ public static guardedInterval(
36
+ func: (...args: unknown[]) => void,
37
+ time: number,
38
+ thisContext?: unknown | undefined,
39
+ fireImmediate: boolean = false,
40
+ ): NodeJS.Timeout {
41
+ if (fireImmediate) {
42
+ Utils.guardedFunction(func, thisContext);
43
+ }
44
+ return setInterval(() => {
45
+ Utils.guardedFunction(func, thisContext);
46
+ }, time);
47
+ }
48
+ public static nowString(): string {
49
+ const d: Date = new Date();
50
+ return `${d.toLocaleTimeString('de-DE')}.${d.getMilliseconds()}`;
51
+ }
52
+ }
@@ -1,7 +1,7 @@
1
- export interface WeatherAlert {
2
- sender_name: string;
3
- event: string;
4
- start: number;
5
- end: number;
6
- description: string;
7
- }
1
+ export interface WeatherAlert {
2
+ sender_name: string;
3
+ event: string;
4
+ start: number;
5
+ end: number;
6
+ description: string;
7
+ }
@@ -1,26 +1,26 @@
1
- import { WeatherItem } from './weather-item';
2
-
3
- export interface WeatherCurrent {
4
- /**
5
- * Zeit der Anfrage
6
- * @type {number}
7
- * @memberof WeatherCurrent
8
- */
9
- dt: number;
10
- sunrise: number;
11
- sunset: number;
12
- temp: number;
13
- feels_like: number;
14
- pressure: number;
15
- humidity: number;
16
- dew_point: number;
17
- uvi: number;
18
- clouds: number;
19
- rain?: number;
20
- snow?: number;
21
- visibility: number;
22
- wind_speed: number;
23
- wind_deg: number;
24
- wind_gust: number;
25
- weather: WeatherItem[];
26
- }
1
+ import { WeatherItem } from './weather-item';
2
+
3
+ export interface WeatherCurrent {
4
+ /**
5
+ * Zeit der Anfrage
6
+ * @type {number}
7
+ * @memberof WeatherCurrent
8
+ */
9
+ dt: number;
10
+ sunrise: number;
11
+ sunset: number;
12
+ temp: number;
13
+ feels_like: number;
14
+ pressure: number;
15
+ humidity: number;
16
+ dew_point: number;
17
+ uvi: number;
18
+ clouds: number;
19
+ rain?: number;
20
+ snow?: number;
21
+ visibility: number;
22
+ wind_speed: number;
23
+ wind_deg: number;
24
+ wind_gust: number;
25
+ weather: WeatherItem[];
26
+ }