hoffmation-base 0.1.41-13 → 0.1.41-16
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.
- package/lib/models/rooms/RoomBase.js +4 -0
- package/lib/models/rooms/RoomSettings/RoomSettings.d.ts +35 -34
- package/lib/models/rooms/RoomSettings/RoomSettings.js +84 -77
- package/lib/models/rooms/RoomSettings/iRoomDefaultSettings.d.ts +2 -1
- package/lib/models/timeCallback.d.ts +2 -1
- package/lib/models/timeCallback.js +15 -3
- package/lib/server/devices/devices.js +1 -1
- package/lib/server/services/weather/weather-service.d.ts +8 -5
- package/lib/server/services/weather/weather-service.js +71 -56
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -16
|
@@ -75,6 +75,10 @@ class RoomBase {
|
|
|
75
75
|
if (this.sonnenUntergangCallback && this.settings.rolloOffset) {
|
|
76
76
|
this.sonnenUntergangCallback.minuteOffset = this.settings.rolloOffset.sunset;
|
|
77
77
|
this.sonnenUntergangCallback.sunTimeOffset = this.settings.rolloOffset;
|
|
78
|
+
if (this.settings.sonnenUntergangRolloAdditionalOffsetPerCloudiness > 0) {
|
|
79
|
+
this.sonnenUntergangCallback.cloudOffset =
|
|
80
|
+
server_1.WeatherService.getCurrentCloudiness() * this.settings.sonnenUntergangRolloAdditionalOffsetPerCloudiness;
|
|
81
|
+
}
|
|
78
82
|
this.sonnenUntergangCallback.recalcNextToDo(now);
|
|
79
83
|
}
|
|
80
84
|
if (this.sonnenAufgangLichtCallback && this.settings.lampOffset) {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { RoomBase } from '../RoomBase';
|
|
2
2
|
import { iRoomInitializationSettings } from './iRoomInitializationSettings';
|
|
3
3
|
import { iRoomDefaultSettings } from './iRoomDefaultSettings';
|
|
4
|
-
import { SunTimeOffsets } from '../../../server
|
|
5
|
-
import { iTimePair } from '../../../server/config/iConfig';
|
|
4
|
+
import { iTimePair, SunTimeOffsets } from '../../../server';
|
|
6
5
|
import { RoomDeviceAddingSettings } from './roomDeviceAddingSettings';
|
|
7
6
|
export declare class RoomSettings implements iRoomDefaultSettings, iRoomInitializationSettings {
|
|
8
7
|
shortName: string;
|
|
@@ -14,48 +13,50 @@ export declare class RoomSettings implements iRoomDefaultSettings, iRoomInitiali
|
|
|
14
13
|
lampOffset: SunTimeOffsets;
|
|
15
14
|
roomName?: string;
|
|
16
15
|
rolloHeatReduction: boolean;
|
|
17
|
-
private _lampenBeiBewegung;
|
|
18
|
-
private _lichtSonnenAufgangAus;
|
|
19
|
-
private _sonnenUntergangRollos;
|
|
20
|
-
private _sonnenAufgangRollos;
|
|
21
|
-
private _movementResetTimer;
|
|
22
|
-
private _sonnenUntergangRolloDelay;
|
|
23
|
-
private _sonnenUntergangRolloMaxTime;
|
|
24
|
-
private _sonnenUntergangLampenDelay;
|
|
25
|
-
private _sonnenAufgangRolloDelay;
|
|
26
|
-
private _sonnenAufgangRolloMinTime;
|
|
27
|
-
private _sonnenAufgangLampenDelay;
|
|
28
|
-
private _lightIfNoWindows;
|
|
29
|
-
private _roomIsAlwaysDark;
|
|
30
16
|
constructor(initSettings: iRoomInitializationSettings);
|
|
31
|
-
private
|
|
32
|
-
private recalcLampOffset;
|
|
33
|
-
get roomIsAlwaysDark(): boolean;
|
|
34
|
-
set roomIsAlwaysDark(value: boolean);
|
|
35
|
-
get sonnenAufgangLampenDelay(): number;
|
|
36
|
-
set sonnenAufgangLampenDelay(value: number);
|
|
37
|
-
get sonnenAufgangRolloDelay(): number;
|
|
38
|
-
set sonnenAufgangRolloDelay(value: number);
|
|
39
|
-
get sonnenUntergangLampenDelay(): number;
|
|
40
|
-
set sonnenUntergangLampenDelay(value: number);
|
|
41
|
-
get sonnenUntergangRolloDelay(): number;
|
|
42
|
-
set sonnenUntergangRolloDelay(value: number);
|
|
43
|
-
get movementResetTimer(): number;
|
|
44
|
-
set movementResetTimer(value: number);
|
|
17
|
+
private _lichtSonnenAufgangAus;
|
|
45
18
|
get lichtSonnenAufgangAus(): boolean;
|
|
19
|
+
set lichtSonnenAufgangAus(value: boolean);
|
|
20
|
+
private _sonnenAufgangRollos;
|
|
46
21
|
get sonnenAufgangRollos(): boolean;
|
|
47
22
|
set sonnenAufgangRollos(value: boolean);
|
|
48
|
-
|
|
49
|
-
set sonnenUntergangRollos(value: boolean);
|
|
50
|
-
set lichtSonnenAufgangAus(value: boolean);
|
|
51
|
-
get lampenBeiBewegung(): boolean;
|
|
52
|
-
set lampenBeiBewegung(value: boolean);
|
|
23
|
+
private _sonnenUntergangRolloMaxTime;
|
|
53
24
|
get sonnenUntergangRolloMaxTime(): iTimePair;
|
|
54
25
|
set sonnenUntergangRolloMaxTime(value: iTimePair);
|
|
26
|
+
private _sonnenAufgangRolloMinTime;
|
|
55
27
|
get sonnenAufgangRolloMinTime(): iTimePair;
|
|
56
28
|
set sonnenAufgangRolloMinTime(value: iTimePair);
|
|
29
|
+
private _lightIfNoWindows;
|
|
57
30
|
get lightIfNoWindows(): boolean;
|
|
58
31
|
set lightIfNoWindows(value: boolean);
|
|
32
|
+
private _lampenBeiBewegung;
|
|
33
|
+
get lampenBeiBewegung(): boolean;
|
|
34
|
+
set lampenBeiBewegung(value: boolean);
|
|
35
|
+
private _sonnenUntergangRollos;
|
|
36
|
+
get sonnenUntergangRollos(): boolean;
|
|
37
|
+
set sonnenUntergangRollos(value: boolean);
|
|
38
|
+
private _movementResetTimer;
|
|
39
|
+
get movementResetTimer(): number;
|
|
40
|
+
set movementResetTimer(value: number);
|
|
41
|
+
private _sonnenUntergangRolloDelay;
|
|
42
|
+
get sonnenUntergangRolloDelay(): number;
|
|
43
|
+
set sonnenUntergangRolloDelay(value: number);
|
|
44
|
+
private _sonnenUntergangLampenDelay;
|
|
45
|
+
get sonnenUntergangLampenDelay(): number;
|
|
46
|
+
set sonnenUntergangLampenDelay(value: number);
|
|
47
|
+
private _sonnenUntergangRolloAdditionalOffsetPerCloudiness;
|
|
48
|
+
get sonnenUntergangRolloAdditionalOffsetPerCloudiness(): number;
|
|
49
|
+
private _sonnenAufgangRolloDelay;
|
|
50
|
+
get sonnenAufgangRolloDelay(): number;
|
|
51
|
+
set sonnenAufgangRolloDelay(value: number);
|
|
52
|
+
private _sonnenAufgangLampenDelay;
|
|
53
|
+
get sonnenAufgangLampenDelay(): number;
|
|
54
|
+
set sonnenAufgangLampenDelay(value: number);
|
|
55
|
+
private _roomIsAlwaysDark;
|
|
56
|
+
get roomIsAlwaysDark(): boolean;
|
|
57
|
+
set roomIsAlwaysDark(value: boolean);
|
|
59
58
|
get room(): RoomBase | undefined;
|
|
60
59
|
toJSON(): Partial<RoomSettings>;
|
|
60
|
+
private recalcRolloOffset;
|
|
61
|
+
private recalcLampOffset;
|
|
61
62
|
}
|
|
@@ -4,78 +4,78 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.RoomSettings = void 0;
|
|
7
|
-
const
|
|
8
|
-
const settings_service_1 = require("../../../server/services/settings-service");
|
|
9
|
-
const api_service_1 = require("../../../server/services/api/api-service");
|
|
10
|
-
const utils_1 = require("../../../server/services/utils/utils");
|
|
7
|
+
const server_1 = require("../../../server");
|
|
11
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
12
9
|
class RoomSettings {
|
|
13
10
|
constructor(initSettings) {
|
|
14
|
-
this.defaultSettings =
|
|
11
|
+
this.defaultSettings = server_1.SettingsService.settings.roomDefault;
|
|
15
12
|
this.radioUrl = 'https://hermes.bcs-systems.de/hitradio-rtl_top40_64k_aac'; // Radio RTL
|
|
16
13
|
this.etage = -1;
|
|
17
14
|
this.rolloHeatReduction = this.defaultSettings.rolloHeatReduction;
|
|
18
|
-
this._lampenBeiBewegung = this.defaultSettings.lampenBeiBewegung;
|
|
19
15
|
this._lichtSonnenAufgangAus = this.defaultSettings.lichtSonnenAufgangAus;
|
|
20
|
-
this._sonnenUntergangRollos = this.defaultSettings.sonnenUntergangRollos;
|
|
21
16
|
this._sonnenAufgangRollos = this.defaultSettings.sonnenAufgangRollos;
|
|
17
|
+
this._sonnenUntergangRolloMaxTime = this.defaultSettings.sonnenUntergangRolloMaxTime;
|
|
18
|
+
this._sonnenAufgangRolloMinTime = this.defaultSettings.sonnenAufgangRolloMinTime;
|
|
19
|
+
this._lightIfNoWindows = this.defaultSettings.lightIfNoWindows;
|
|
20
|
+
this._lampenBeiBewegung = this.defaultSettings.lampenBeiBewegung;
|
|
21
|
+
this._sonnenUntergangRollos = this.defaultSettings.sonnenUntergangRollos;
|
|
22
22
|
this._movementResetTimer = this.defaultSettings.movementResetTimer;
|
|
23
23
|
this._sonnenUntergangRolloDelay = this.defaultSettings.sonnenUntergangRolloDelay;
|
|
24
|
-
this._sonnenUntergangRolloMaxTime = this.defaultSettings.sonnenUntergangRolloMaxTime;
|
|
25
24
|
this._sonnenUntergangLampenDelay = this.defaultSettings.sonnenUntergangLampenDelay;
|
|
25
|
+
this._sonnenUntergangRolloAdditionalOffsetPerCloudiness = this.defaultSettings.sonnenUntergangRolloAdditionalOffsetPerCloudiness;
|
|
26
26
|
this._sonnenAufgangRolloDelay = this.defaultSettings.sonnenAufgangRolloDelay;
|
|
27
|
-
this._sonnenAufgangRolloMinTime = this.defaultSettings.sonnenAufgangRolloMinTime;
|
|
28
27
|
this._sonnenAufgangLampenDelay = this.defaultSettings.sonnenAufgangLampenDelay;
|
|
29
|
-
this._lightIfNoWindows = this.defaultSettings.lightIfNoWindows;
|
|
30
28
|
this._roomIsAlwaysDark = this.defaultSettings.roomIsAlwaysDark;
|
|
31
29
|
this.shortName = initSettings.shortName;
|
|
32
30
|
this.etage = initSettings.etage;
|
|
33
31
|
this.deviceAddidngSettings = initSettings.deviceAddidngSettings;
|
|
34
|
-
this.rolloOffset = new
|
|
35
|
-
this.lampOffset = new
|
|
32
|
+
this.rolloOffset = new server_1.SunTimeOffsets(this.sonnenAufgangRolloDelay, this.sonnenUntergangRolloDelay, this.sonnenAufgangRolloMinTime.hours, this.sonnenAufgangRolloMinTime.minutes, this.sonnenUntergangRolloMaxTime.hours, this.sonnenUntergangRolloMaxTime.minutes);
|
|
33
|
+
this.lampOffset = new server_1.SunTimeOffsets(this.sonnenAufgangLampenDelay, this.sonnenUntergangLampenDelay);
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.rolloOffset = new time_callback_service_1.SunTimeOffsets(this.sonnenAufgangRolloDelay, this.sonnenUntergangRolloDelay, this.sonnenAufgangRolloMinTime.hours, this.sonnenAufgangRolloMinTime.minutes, this.sonnenUntergangRolloMaxTime.hours, this.sonnenUntergangRolloMaxTime.minutes);
|
|
40
|
-
(_a = this.room) === null || _a === void 0 ? void 0 : _a.recalcTimeCallbacks();
|
|
35
|
+
get lichtSonnenAufgangAus() {
|
|
36
|
+
return this._lichtSonnenAufgangAus;
|
|
41
37
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.lampOffset = new time_callback_service_1.SunTimeOffsets(this.sonnenAufgangLampenDelay, this.sonnenAufgangRolloDelay);
|
|
45
|
-
(_a = this.room) === null || _a === void 0 ? void 0 : _a.recalcTimeCallbacks();
|
|
38
|
+
set lichtSonnenAufgangAus(value) {
|
|
39
|
+
this._lichtSonnenAufgangAus = value;
|
|
46
40
|
}
|
|
47
|
-
get
|
|
48
|
-
return this.
|
|
41
|
+
get sonnenAufgangRollos() {
|
|
42
|
+
return this._sonnenAufgangRollos;
|
|
49
43
|
}
|
|
50
|
-
set
|
|
51
|
-
this.
|
|
44
|
+
set sonnenAufgangRollos(value) {
|
|
45
|
+
this._sonnenAufgangRollos = value;
|
|
46
|
+
this.recalcRolloOffset();
|
|
52
47
|
}
|
|
53
|
-
get
|
|
54
|
-
return this.
|
|
48
|
+
get sonnenUntergangRolloMaxTime() {
|
|
49
|
+
return this._sonnenUntergangRolloMaxTime;
|
|
55
50
|
}
|
|
56
|
-
set
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
51
|
+
set sonnenUntergangRolloMaxTime(value) {
|
|
52
|
+
this._sonnenUntergangRolloMaxTime = value;
|
|
53
|
+
this.recalcRolloOffset();
|
|
59
54
|
}
|
|
60
|
-
get
|
|
61
|
-
return this.
|
|
55
|
+
get sonnenAufgangRolloMinTime() {
|
|
56
|
+
return this._sonnenAufgangRolloMinTime;
|
|
62
57
|
}
|
|
63
|
-
set
|
|
64
|
-
this.
|
|
58
|
+
set sonnenAufgangRolloMinTime(value) {
|
|
59
|
+
this._sonnenAufgangRolloMinTime = value;
|
|
65
60
|
this.recalcRolloOffset();
|
|
66
61
|
}
|
|
67
|
-
get
|
|
68
|
-
return this.
|
|
62
|
+
get lightIfNoWindows() {
|
|
63
|
+
return this._lightIfNoWindows;
|
|
69
64
|
}
|
|
70
|
-
set
|
|
71
|
-
this.
|
|
72
|
-
this.recalcLampOffset();
|
|
65
|
+
set lightIfNoWindows(value) {
|
|
66
|
+
this._lightIfNoWindows = value;
|
|
73
67
|
}
|
|
74
|
-
get
|
|
75
|
-
return this.
|
|
68
|
+
get lampenBeiBewegung() {
|
|
69
|
+
return this._lampenBeiBewegung;
|
|
76
70
|
}
|
|
77
|
-
set
|
|
78
|
-
this.
|
|
71
|
+
set lampenBeiBewegung(value) {
|
|
72
|
+
this._lampenBeiBewegung = value;
|
|
73
|
+
}
|
|
74
|
+
get sonnenUntergangRollos() {
|
|
75
|
+
return this._sonnenUntergangRollos;
|
|
76
|
+
}
|
|
77
|
+
set sonnenUntergangRollos(value) {
|
|
78
|
+
this._sonnenUntergangRollos = value;
|
|
79
79
|
this.recalcRolloOffset();
|
|
80
80
|
}
|
|
81
81
|
get movementResetTimer() {
|
|
@@ -84,61 +84,68 @@ class RoomSettings {
|
|
|
84
84
|
set movementResetTimer(value) {
|
|
85
85
|
this._movementResetTimer = value;
|
|
86
86
|
}
|
|
87
|
-
get
|
|
88
|
-
return this.
|
|
89
|
-
}
|
|
90
|
-
get sonnenAufgangRollos() {
|
|
91
|
-
return this._sonnenAufgangRollos;
|
|
92
|
-
}
|
|
93
|
-
set sonnenAufgangRollos(value) {
|
|
94
|
-
this._sonnenAufgangRollos = value;
|
|
95
|
-
this.recalcRolloOffset();
|
|
96
|
-
}
|
|
97
|
-
get sonnenUntergangRollos() {
|
|
98
|
-
return this._sonnenUntergangRollos;
|
|
87
|
+
get sonnenUntergangRolloDelay() {
|
|
88
|
+
return this._sonnenUntergangRolloDelay;
|
|
99
89
|
}
|
|
100
|
-
set
|
|
101
|
-
this.
|
|
90
|
+
set sonnenUntergangRolloDelay(value) {
|
|
91
|
+
this._sonnenUntergangRolloDelay = value;
|
|
102
92
|
this.recalcRolloOffset();
|
|
103
93
|
}
|
|
104
|
-
|
|
105
|
-
this.
|
|
94
|
+
get sonnenUntergangLampenDelay() {
|
|
95
|
+
return this._sonnenUntergangLampenDelay;
|
|
106
96
|
}
|
|
107
|
-
|
|
108
|
-
|
|
97
|
+
set sonnenUntergangLampenDelay(value) {
|
|
98
|
+
this._sonnenUntergangLampenDelay = value;
|
|
99
|
+
this.recalcLampOffset();
|
|
109
100
|
}
|
|
110
|
-
|
|
111
|
-
this.
|
|
101
|
+
get sonnenUntergangRolloAdditionalOffsetPerCloudiness() {
|
|
102
|
+
return this._sonnenUntergangRolloAdditionalOffsetPerCloudiness;
|
|
112
103
|
}
|
|
113
|
-
get
|
|
114
|
-
return this.
|
|
104
|
+
get sonnenAufgangRolloDelay() {
|
|
105
|
+
return this._sonnenAufgangRolloDelay;
|
|
115
106
|
}
|
|
116
|
-
set
|
|
117
|
-
this.
|
|
107
|
+
set sonnenAufgangRolloDelay(value) {
|
|
108
|
+
this._sonnenAufgangRolloDelay = value;
|
|
118
109
|
this.recalcRolloOffset();
|
|
119
110
|
}
|
|
120
|
-
get
|
|
121
|
-
return this.
|
|
111
|
+
get sonnenAufgangLampenDelay() {
|
|
112
|
+
return this._sonnenAufgangLampenDelay;
|
|
122
113
|
}
|
|
123
|
-
set
|
|
124
|
-
this.
|
|
125
|
-
this.
|
|
114
|
+
set sonnenAufgangLampenDelay(value) {
|
|
115
|
+
this._sonnenAufgangLampenDelay = value;
|
|
116
|
+
this.recalcLampOffset();
|
|
126
117
|
}
|
|
127
|
-
get
|
|
128
|
-
return this.
|
|
118
|
+
get roomIsAlwaysDark() {
|
|
119
|
+
return this._roomIsAlwaysDark;
|
|
129
120
|
}
|
|
130
|
-
set
|
|
131
|
-
this.
|
|
121
|
+
set roomIsAlwaysDark(value) {
|
|
122
|
+
this._roomIsAlwaysDark = value;
|
|
132
123
|
}
|
|
133
124
|
get room() {
|
|
134
125
|
if (!this.roomName) {
|
|
135
126
|
return undefined;
|
|
136
127
|
}
|
|
137
|
-
return
|
|
128
|
+
return server_1.API.getRoom(this.roomName);
|
|
138
129
|
}
|
|
139
130
|
toJSON() {
|
|
140
|
-
const result =
|
|
131
|
+
const result = server_1.Utils.jsonFilter(this);
|
|
141
132
|
return lodash_1.default.omit(result, [`defaultSettings`, 'deviceAddidngSettings']);
|
|
142
133
|
}
|
|
134
|
+
recalcRolloOffset() {
|
|
135
|
+
var _a;
|
|
136
|
+
this.rolloOffset = new server_1.SunTimeOffsets(this.sonnenAufgangRolloDelay, this.sonnenUntergangRolloDelay, this.sonnenAufgangRolloMinTime.hours, this.sonnenAufgangRolloMinTime.minutes, this.sonnenUntergangRolloMaxTime.hours, this.sonnenUntergangRolloMaxTime.minutes);
|
|
137
|
+
if (this.sonnenUntergangRolloAdditionalOffsetPerCloudiness > 0) {
|
|
138
|
+
server_1.WeatherService.addWeatherUpdateCb(`RolloWeatherUpdate${this.roomName}`, () => {
|
|
139
|
+
var _a;
|
|
140
|
+
(_a = this.room) === null || _a === void 0 ? void 0 : _a.recalcTimeCallbacks();
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
(_a = this.room) === null || _a === void 0 ? void 0 : _a.recalcTimeCallbacks();
|
|
144
|
+
}
|
|
145
|
+
recalcLampOffset() {
|
|
146
|
+
var _a;
|
|
147
|
+
this.lampOffset = new server_1.SunTimeOffsets(this.sonnenAufgangLampenDelay, this.sonnenAufgangRolloDelay);
|
|
148
|
+
(_a = this.room) === null || _a === void 0 ? void 0 : _a.recalcTimeCallbacks();
|
|
149
|
+
}
|
|
143
150
|
}
|
|
144
151
|
exports.RoomSettings = RoomSettings;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { iTimePair } from '../../../server
|
|
1
|
+
import { iTimePair } from '../../../server';
|
|
2
2
|
export interface iRoomDefaultSettings {
|
|
3
3
|
rolloHeatReduction: boolean;
|
|
4
4
|
/**
|
|
@@ -12,6 +12,7 @@ export interface iRoomDefaultSettings {
|
|
|
12
12
|
sonnenUntergangRolloDelay: number;
|
|
13
13
|
sonnenUntergangRolloMaxTime: iTimePair;
|
|
14
14
|
sonnenUntergangLampenDelay: number;
|
|
15
|
+
sonnenUntergangRolloAdditionalOffsetPerCloudiness: number;
|
|
15
16
|
sonnenAufgangRollos: boolean;
|
|
16
17
|
sonnenAufgangRolloDelay: number;
|
|
17
18
|
sonnenAufgangRolloMinTime: iTimePair;
|
|
@@ -18,8 +18,9 @@ export declare class TimeCallback {
|
|
|
18
18
|
hours?: number | undefined;
|
|
19
19
|
minutes?: number | undefined;
|
|
20
20
|
sunTimeOffset?: SunTimeOffsets | undefined;
|
|
21
|
+
cloudOffset?: number | undefined;
|
|
21
22
|
lastDone: Date;
|
|
22
23
|
nextToDo?: Date;
|
|
23
|
-
constructor(name: string, type: TimeCallbackType, cFunction: () => void, minuteOffset: number, hours?: number | undefined, minutes?: number | undefined, sunTimeOffset?: SunTimeOffsets | undefined);
|
|
24
|
+
constructor(name: string, type: TimeCallbackType, cFunction: () => void, minuteOffset: number, hours?: number | undefined, minutes?: number | undefined, sunTimeOffset?: SunTimeOffsets | undefined, cloudOffset?: number | undefined);
|
|
24
25
|
recalcNextToDo(now: Date): void;
|
|
25
26
|
}
|
|
@@ -17,7 +17,9 @@ var TimeOfDay;
|
|
|
17
17
|
TimeOfDay[TimeOfDay["Night"] = 4] = "Night";
|
|
18
18
|
})(TimeOfDay = exports.TimeOfDay || (exports.TimeOfDay = {}));
|
|
19
19
|
class TimeCallback {
|
|
20
|
-
constructor(name, type, cFunction, minuteOffset, hours, minutes, sunTimeOffset
|
|
20
|
+
constructor(name, type, cFunction, minuteOffset, hours, minutes, sunTimeOffset,
|
|
21
|
+
// Additional Offset due to amount of clouds
|
|
22
|
+
cloudOffset) {
|
|
21
23
|
this.name = name;
|
|
22
24
|
this.type = type;
|
|
23
25
|
this.cFunction = cFunction;
|
|
@@ -25,6 +27,7 @@ class TimeCallback {
|
|
|
25
27
|
this.hours = hours;
|
|
26
28
|
this.minutes = minutes;
|
|
27
29
|
this.sunTimeOffset = sunTimeOffset;
|
|
30
|
+
this.cloudOffset = cloudOffset;
|
|
28
31
|
this.lastDone = new Date(0);
|
|
29
32
|
}
|
|
30
33
|
recalcNextToDo(now) {
|
|
@@ -46,7 +49,10 @@ class TimeCallback {
|
|
|
46
49
|
server_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `Nächste Zeitevent für "${this.name}" um ${this.nextToDo.toLocaleTimeString('de-DE')}`);
|
|
47
50
|
break;
|
|
48
51
|
case TimeCallbackType.Sunrise:
|
|
49
|
-
|
|
52
|
+
if (this.cloudOffset === undefined) {
|
|
53
|
+
this.cloudOffset = 0;
|
|
54
|
+
}
|
|
55
|
+
let fixedSRDate = new Date(server_1.TimeCallbackService.nextSunRise.getTime() + (this.minuteOffset + this.cloudOffset) * 60 * 1000);
|
|
50
56
|
if (this.sunTimeOffset) {
|
|
51
57
|
const nextMinSR = this.sunTimeOffset.getNextMinimumSunrise(now);
|
|
52
58
|
if (nextMinSR > fixedSRDate && fixedSRDate.getDate() === nextMinSR.getDate()) {
|
|
@@ -60,7 +66,13 @@ class TimeCallback {
|
|
|
60
66
|
this.nextToDo = fixedSRDate;
|
|
61
67
|
break;
|
|
62
68
|
case TimeCallbackType.SunSet:
|
|
63
|
-
|
|
69
|
+
if (this.cloudOffset === undefined) {
|
|
70
|
+
this.cloudOffset = 0;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.cloudOffset = this.cloudOffset * -1;
|
|
74
|
+
}
|
|
75
|
+
let fixedSSDate = new Date(server_1.TimeCallbackService.nextSunSet.getTime() + (this.minuteOffset + this.cloudOffset) * 60 * 1000);
|
|
64
76
|
if (this.sunTimeOffset) {
|
|
65
77
|
const nextMaxSS = this.sunTimeOffset.getNextMaximumSunset(now);
|
|
66
78
|
if (nextMaxSS < fixedSSDate && fixedSSDate.getDate() === nextMaxSS.getDate()) {
|
|
@@ -29,7 +29,7 @@ class Devices {
|
|
|
29
29
|
else if (cName.indexOf('00-Zigbee') === 0) {
|
|
30
30
|
Devices.processZigbeeDevice(cDevConf);
|
|
31
31
|
}
|
|
32
|
-
else if (cName.indexOf('00-EnergyManager') === 0) {
|
|
32
|
+
else if (cName.indexOf('00-EnergyManager') === 0 && cDevConf.type !== 'folder') {
|
|
33
33
|
services_1.ServerLogService.writeLog(models_1.LogLevel.Info, `Found Energy-Manager in Device json.`);
|
|
34
34
|
Devices.createEnergyManager(cDevConf);
|
|
35
35
|
}
|
|
@@ -2,8 +2,8 @@ import { WeatherHourly } from './weather-hourly';
|
|
|
2
2
|
import { WeatherCurrent } from './weather-current';
|
|
3
3
|
import { WeatherMinutes } from './weather-minutes';
|
|
4
4
|
import { WeatherAlert } from './weather-alert';
|
|
5
|
-
import { iWeatherSettings } from '../../config
|
|
6
|
-
import { OwnSonosDevice } from '../Sonos
|
|
5
|
+
import { iWeatherSettings } from '../../config';
|
|
6
|
+
import { OwnSonosDevice } from '../Sonos';
|
|
7
7
|
import { WeatherDaily } from './weather-daily';
|
|
8
8
|
export interface WeatherResponse {
|
|
9
9
|
lat: number;
|
|
@@ -20,18 +20,21 @@ export declare class WeatherService {
|
|
|
20
20
|
static active: boolean;
|
|
21
21
|
static oneDay: number;
|
|
22
22
|
static lastResponse: WeatherResponse;
|
|
23
|
+
private static _dataUpdateCbs;
|
|
23
24
|
private static _refreshInterval;
|
|
24
25
|
private static latitude;
|
|
25
26
|
private static longitude;
|
|
26
27
|
private static appID;
|
|
28
|
+
static addWeatherUpdateCb(name: string, cb: () => void): void;
|
|
27
29
|
static initialize(config: iWeatherSettings): void;
|
|
28
30
|
static stopInterval(): void;
|
|
29
31
|
static playWeatherInfo(sonosDevice: OwnSonosDevice, volume?: number, short?: boolean, retries?: number): void;
|
|
30
|
-
private static getRainNextMinutes;
|
|
31
|
-
private static getActiveAlerts;
|
|
32
|
-
private static getWeatherData;
|
|
33
32
|
static processHourlyWeather(): void;
|
|
34
33
|
static getCurrentTemp(): number;
|
|
35
34
|
static isOutsideWarmer(currentTemperatur: number): boolean;
|
|
36
35
|
static weatherRolloPosition(normalPos: number, desiredTemperatur: number, currentTemperatur: number): number;
|
|
36
|
+
static getCurrentCloudiness(): number;
|
|
37
|
+
private static getRainNextMinutes;
|
|
38
|
+
private static getActiveAlerts;
|
|
39
|
+
private static getWeatherData;
|
|
37
40
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WeatherService = void 0;
|
|
4
|
-
const
|
|
4
|
+
const models_1 = require("../../../models");
|
|
5
5
|
const HTTPSOptions_1 = require("../HTTPSOptions");
|
|
6
6
|
const https_service_1 = require("../https-service");
|
|
7
|
-
const utils_1 = require("../utils
|
|
8
|
-
const
|
|
9
|
-
const log_service_1 = require("../log-service
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
const Sonos_1 = require("../Sonos");
|
|
9
|
+
const log_service_1 = require("../log-service");
|
|
10
10
|
class WeatherService {
|
|
11
|
+
static addWeatherUpdateCb(name, cb) {
|
|
12
|
+
this._dataUpdateCbs[name] = cb;
|
|
13
|
+
}
|
|
11
14
|
static initialize(config) {
|
|
12
15
|
this.active = true;
|
|
13
16
|
this.longitude = config.longitude;
|
|
@@ -25,29 +28,29 @@ class WeatherService {
|
|
|
25
28
|
const wData = WeatherService.lastResponse;
|
|
26
29
|
if (wData === undefined) {
|
|
27
30
|
if (retries > 0) {
|
|
28
|
-
log_service_1.ServerLogService.writeLog(
|
|
31
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Warn, `WeatherService.playWeatherInfo(): Der Wetterbericht ist noch nicht bereit --> warten`);
|
|
29
32
|
setTimeout(() => {
|
|
30
33
|
WeatherService.playWeatherInfo(sonosDevice, volume, short, retries - 1);
|
|
31
34
|
}, 1000);
|
|
32
35
|
}
|
|
33
36
|
else {
|
|
34
|
-
log_service_1.ServerLogService.writeLog(
|
|
37
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Error, `WeatherService.playWeatherInfo(): Der Wetterbericht ist vorhanden --> Abbruch`);
|
|
35
38
|
}
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
Sonos_1.SonosService.speakOnDevice(short ? `Kurze Wetterinfo:` : `HoffMation Wetter-Bericht:`, sonosDevice, volume, false);
|
|
42
|
+
Sonos_1.SonosService.speakOnDevice(`Wetterbeschreibung für heute: ${wData.daily[0].weather[0].description}`, sonosDevice, volume, false);
|
|
43
|
+
Sonos_1.SonosService.speakOnDevice(`Aktuell sind es ${Math.round(wData.current.temp)} Grad.`, sonosDevice, volume, false);
|
|
41
44
|
if (!short) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
Sonos_1.SonosService.speakOnDevice(`Heute sollen es im Durchschnitt ${Math.round(wData.daily[0].temp.day)} Grad sein.`, sonosDevice, volume, false);
|
|
46
|
+
Sonos_1.SonosService.speakOnDevice(`Die Höchsttemperatur liegt heute bei ${Math.round(wData.daily[0].temp.max)} Grad.`, sonosDevice, volume, false);
|
|
47
|
+
Sonos_1.SonosService.speakOnDevice(`Die Tiefsttemperatur soll heute ${Math.round(wData.daily[0].temp.min)} Grad betragen.`, sonosDevice, volume, false);
|
|
45
48
|
if (wData.daily[0].rain !== undefined) {
|
|
46
|
-
|
|
49
|
+
Sonos_1.SonosService.speakOnDevice(`Es sollen heute etwa ${Math.round(wData.daily[0].rain)} Millimeter Regen fallen.`, sonosDevice, volume, false);
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
if (wData.daily[0].snow !== undefined && wData.daily[0].snow > 0) {
|
|
50
|
-
|
|
53
|
+
Sonos_1.SonosService.speakOnDevice(`Heute wird es Schneien! Es werden etwa ${Math.round(wData.daily[0].snow)} Millimeter Schnee erwartet.`, sonosDevice, volume, false);
|
|
51
54
|
}
|
|
52
55
|
const { minutes, precipitation } = WeatherService.getRainNextMinutes();
|
|
53
56
|
const ratio = minutes <= 0 ? 0 : (precipitation / minutes) * 60;
|
|
@@ -72,10 +75,10 @@ class WeatherService {
|
|
|
72
75
|
message += `bleibt es trocken.`;
|
|
73
76
|
break;
|
|
74
77
|
}
|
|
75
|
-
|
|
78
|
+
Sonos_1.SonosService.speakOnDevice(message, sonosDevice, volume, false);
|
|
76
79
|
!short &&
|
|
77
80
|
precipitation > 0 &&
|
|
78
|
-
|
|
81
|
+
Sonos_1.SonosService.speakOnDevice(`Es werden etwa ${precipitation} Millimeter Niederschlag in den nächsten ${minutes} Minuten fallen`, sonosDevice, volume, false);
|
|
79
82
|
const alerts = WeatherService.getActiveAlerts();
|
|
80
83
|
if (alerts.length > 0) {
|
|
81
84
|
const alertMessage = [`Achtung, vorliegende Wetterwarnungen:`];
|
|
@@ -83,11 +86,55 @@ class WeatherService {
|
|
|
83
86
|
alertMessage.push(`${element.event} von ${new Date(element.start * 1000).toLocaleString('de-DE')} bis ${new Date(element.end * 1000).toLocaleString('de-DE')}`);
|
|
84
87
|
// } bis ${new Date(element.end * 1000).toLocaleString("de-DE")}; Beschreibung: ${element.description} Herausgeber: ${element.sender_name}`)
|
|
85
88
|
});
|
|
86
|
-
|
|
89
|
+
Sonos_1.SonosService.speakOnDevice(alertMessage.join('\n'), sonosDevice, volume, false);
|
|
87
90
|
}
|
|
88
91
|
else if (!short) {
|
|
89
|
-
|
|
92
|
+
Sonos_1.SonosService.speakOnDevice(`Für heute liegt keine Unwetterwarnungen vor`, sonosDevice, volume, false);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
static processHourlyWeather() {
|
|
96
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `Es sind gerade ${this.lastResponse.current.temp} Grad (gefühlt ${this.lastResponse.current.feels_like}).`);
|
|
97
|
+
if (this.lastResponse.alerts !== undefined && this.lastResponse.alerts.length > 0) {
|
|
98
|
+
const message = [`Es gibt folgende Wetterwarnungen:`];
|
|
99
|
+
this.lastResponse.alerts.forEach((element) => {
|
|
100
|
+
message.push(`${element.event} von ${new Date(element.start * 1000)} bis ${new Date(element.end * 1000)}; Beschreibung: ${element.description} Herausgeber: ${element.sender_name}`);
|
|
101
|
+
});
|
|
102
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, message.join('\n'));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static getCurrentTemp() {
|
|
106
|
+
const wData = WeatherService.lastResponse;
|
|
107
|
+
if (wData === undefined || wData.current === undefined) {
|
|
108
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `WeatherService.isOutsideWarmer(): There are no data yet`);
|
|
109
|
+
return -99;
|
|
110
|
+
}
|
|
111
|
+
return wData.current.temp;
|
|
112
|
+
}
|
|
113
|
+
static isOutsideWarmer(currentTemperatur) {
|
|
114
|
+
const wData = WeatherService.lastResponse;
|
|
115
|
+
if (wData === undefined || wData.current === undefined) {
|
|
116
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `WeatherService.isOutsideWarmer(): There are no data yet`);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `isOutsideWarmer(${currentTemperatur}) --> Aktuelle Temperatur: ${wData.current.temp}`);
|
|
120
|
+
return currentTemperatur < wData.current.temp;
|
|
121
|
+
}
|
|
122
|
+
static weatherRolloPosition(normalPos, desiredTemperatur, currentTemperatur) {
|
|
123
|
+
let result = normalPos;
|
|
124
|
+
if (currentTemperatur > desiredTemperatur && this.isOutsideWarmer(currentTemperatur) && normalPos > 30) {
|
|
125
|
+
// Draußen ist wärmer also runter
|
|
126
|
+
result = 30;
|
|
127
|
+
}
|
|
128
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `weatherRolloPosition(${normalPos}, ${desiredTemperatur}, ${currentTemperatur}) --> Target: ${result}`);
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
static getCurrentCloudiness() {
|
|
132
|
+
const wData = WeatherService.lastResponse;
|
|
133
|
+
if (wData === undefined || wData.current === undefined) {
|
|
134
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Info, `WeatherService.getCurrentCloudiness(): There are no data yet`);
|
|
135
|
+
return 0;
|
|
90
136
|
}
|
|
137
|
+
return wData.current.clouds;
|
|
91
138
|
}
|
|
92
139
|
static getRainNextMinutes() {
|
|
93
140
|
const minutes = WeatherService.lastResponse.minutely;
|
|
@@ -123,51 +170,19 @@ class WeatherService {
|
|
|
123
170
|
}
|
|
124
171
|
static getWeatherData() {
|
|
125
172
|
https_service_1.HTTPSService.request(new HTTPSOptions_1.HTTPSOptions('api.openweathermap.org', `/data/2.5/onecall?lat=${WeatherService.latitude}&lon=${WeatherService.longitude}&appid=${WeatherService.appID}&units=metric&lang=de`, {}, 'GET', 443), '', 5, (response) => {
|
|
126
|
-
log_service_1.ServerLogService.writeLog(
|
|
127
|
-
log_service_1.ServerLogService.writeLog(
|
|
173
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.Debug, `WeatherAPi Response erhalten`);
|
|
174
|
+
log_service_1.ServerLogService.writeLog(models_1.LogLevel.DeepTrace, `WeatherAPi Response: ${response}`);
|
|
128
175
|
utils_1.Utils.guardedFunction(() => {
|
|
129
176
|
WeatherService.lastResponse = JSON.parse(response);
|
|
130
177
|
WeatherService.processHourlyWeather();
|
|
178
|
+
for (const dataUpdateCbsKey in this._dataUpdateCbs) {
|
|
179
|
+
this._dataUpdateCbs[dataUpdateCbsKey]();
|
|
180
|
+
}
|
|
131
181
|
}, this);
|
|
132
182
|
});
|
|
133
183
|
}
|
|
134
|
-
static processHourlyWeather() {
|
|
135
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, `Es sind gerade ${this.lastResponse.current.temp} Grad (gefühlt ${this.lastResponse.current.feels_like}).`);
|
|
136
|
-
if (this.lastResponse.alerts !== undefined && this.lastResponse.alerts.length > 0) {
|
|
137
|
-
const message = [`Es gibt folgende Wetterwarnungen:`];
|
|
138
|
-
this.lastResponse.alerts.forEach((element) => {
|
|
139
|
-
message.push(`${element.event} von ${new Date(element.start * 1000)} bis ${new Date(element.end * 1000)}; Beschreibung: ${element.description} Herausgeber: ${element.sender_name}`);
|
|
140
|
-
});
|
|
141
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, message.join('\n'));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
static getCurrentTemp() {
|
|
145
|
-
const wData = WeatherService.lastResponse;
|
|
146
|
-
if (wData === undefined || wData.current === undefined) {
|
|
147
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, `WeatherService.isOutsideWarmer(): There are no data yet`);
|
|
148
|
-
return -99;
|
|
149
|
-
}
|
|
150
|
-
return wData.current.temp;
|
|
151
|
-
}
|
|
152
|
-
static isOutsideWarmer(currentTemperatur) {
|
|
153
|
-
const wData = WeatherService.lastResponse;
|
|
154
|
-
if (wData === undefined || wData.current === undefined) {
|
|
155
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, `WeatherService.isOutsideWarmer(): There are no data yet`);
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, `isOutsideWarmer(${currentTemperatur}) --> Aktuelle Temperatur: ${wData.current.temp}`);
|
|
159
|
-
return currentTemperatur < wData.current.temp;
|
|
160
|
-
}
|
|
161
|
-
static weatherRolloPosition(normalPos, desiredTemperatur, currentTemperatur) {
|
|
162
|
-
let result = normalPos;
|
|
163
|
-
if (currentTemperatur > desiredTemperatur && this.isOutsideWarmer(currentTemperatur) && normalPos > 30) {
|
|
164
|
-
// Draußen ist wärmer also runter
|
|
165
|
-
result = 30;
|
|
166
|
-
}
|
|
167
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, `weatherRolloPosition(${normalPos}, ${desiredTemperatur}, ${currentTemperatur}) --> Target: ${result}`);
|
|
168
|
-
return result;
|
|
169
|
-
}
|
|
170
184
|
}
|
|
171
185
|
exports.WeatherService = WeatherService;
|
|
172
186
|
WeatherService.active = false;
|
|
173
187
|
WeatherService.oneDay = 1000 * 60 * 60 * 24;
|
|
188
|
+
WeatherService._dataUpdateCbs = {};
|