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.
- package/.eslintrc.js +27 -27
- package/.github/workflows/npm-publish.yml +50 -0
- package/.prettierrc.js +9 -9
- package/LICENSE +21 -21
- package/index.js +1 -1
- package/models/connectionCallbacks.ts +13 -13
- package/models/daytime.ts +3 -3
- package/models/deviceConfig.ts +8 -8
- package/models/dimmerSettings.ts +5 -5
- package/models/iTemperaturDataPoint.ts +9 -9
- package/models/lampSettings.ts +5 -5
- package/models/ledSettings.ts +19 -19
- package/models/logLevel.ts +9 -9
- package/models/persistence/BasicRoomInfo.ts +3 -3
- package/models/persistence/DailyMovementCount.ts +3 -3
- package/models/persistence/RoomDetailInfo.ts +4 -4
- package/models/persistence/temperaturDataPoint.ts +12 -12
- package/models/persistence/todaysCount.ts +3 -3
- package/models/rooms/RoomBase.ts +357 -357
- package/models/rooms/RoomSettings/RoomSettings.ts +159 -159
- package/models/rooms/RoomSettings/hmIPRoomSettings.ts +53 -53
- package/models/rooms/RoomSettings/iRoomDefaultSettings.ts +17 -17
- package/models/rooms/RoomSettings/readme.md +17 -17
- package/models/rooms/RoomSettings/zigbeeRoomSettings.ts +51 -51
- package/models/rooms/iRoomImportEnforcer.ts +3 -3
- package/models/rooms/readme.md +11 -11
- package/models/temperaturSettings.ts +22 -22
- package/models/timeCallback.ts +90 -90
- package/package.json +1 -1
- package/server/config/config-readme.md +19 -19
- package/server/config/iConfig.ts +53 -53
- package/server/config/private/mainConfig.json +64 -64
- package/server/devices/DeviceInfo.ts +66 -66
- package/server/devices/Griffe.ts +31 -31
- package/server/devices/Heizgruppen.ts +91 -91
- package/server/devices/Rollos.ts +48 -48
- package/server/devices/deviceUpdater.ts +72 -72
- package/server/devices/devices.ts +189 -189
- package/server/devices/groups/fensterGroup.ts +175 -175
- package/server/devices/groups/heatGroup.ts +32 -32
- package/server/devices/groups/lampenGroup.ts +88 -88
- package/server/devices/groups/praesenzGroup.ts +182 -182
- package/server/devices/groups/smokeGroup.ts +16 -16
- package/server/devices/groups/sonosGroup.ts +33 -33
- package/server/devices/groups/tasterGroup.ts +48 -48
- package/server/devices/groups/waterGroup.ts +16 -16
- package/server/devices/hmIPDevices/Fenster.ts +114 -114
- package/server/devices/hmIPDevices/FensterPosition.ts +5 -5
- package/server/devices/hmIPDevices/TuerPosition.ts +4 -4
- package/server/devices/hmIPDevices/hmIpBewegung.ts +126 -126
- package/server/devices/hmIPDevices/hmIpDevice.ts +90 -90
- package/server/devices/hmIPDevices/hmIpDeviceType.ts +14 -14
- package/server/devices/hmIPDevices/hmIpGriff.ts +143 -143
- package/server/devices/hmIPDevices/hmIpHeizgruppe.ts +172 -172
- package/server/devices/hmIPDevices/hmIpHeizung.ts +69 -69
- package/server/devices/hmIPDevices/hmIpLampe.ts +119 -119
- package/server/devices/hmIPDevices/hmIpPraezenz.ts +99 -99
- package/server/devices/hmIPDevices/hmIpRoll.ts +133 -133
- package/server/devices/hmIPDevices/hmIpTaster.ts +82 -73
- package/server/devices/hmIPDevices/hmIpTherm.ts +19 -19
- package/server/devices/hmIPDevices/hmIpTuer.ts +115 -115
- package/server/devices/hmIPDevices/hmIpWippe.ts +55 -55
- package/server/devices/iDeviceUpdater.ts +4 -4
- package/server/devices/iIoBrokerDevice.ts +44 -44
- package/server/devices/iTaster.ts +6 -0
- package/server/devices/{hmIPDevices/hmIpTaste.ts → taste.ts} +84 -72
- package/server/devices/wledDevice.ts +124 -124
- package/server/devices/zigbee/ZigbeeActuator.ts +113 -113
- package/server/devices/zigbee/zigbeeAquaraVibra.ts +171 -171
- package/server/devices/zigbee/zigbeeAquaraWater.ts +94 -94
- package/server/devices/zigbee/zigbeeBlitzShp.ts +77 -77
- package/server/devices/zigbee/zigbeeDevice.ts +115 -115
- package/server/devices/zigbee/zigbeeDeviceType.ts +13 -13
- package/server/devices/zigbee/zigbeeHeimanSmoke.ts +99 -99
- package/server/devices/zigbee/zigbeeIkeaSteckdose.ts +31 -31
- package/server/devices/zigbee/zigbeeIlluActuator.ts +37 -37
- package/server/devices/zigbee/zigbeeIlluDimmer.ts +165 -165
- package/server/devices/zigbee/zigbeeIlluLampe.ts +33 -33
- package/server/devices/zigbee/zigbeeIlluLedRGBCCT.ts +137 -137
- package/server/ioBroker/connection.ts +1655 -1655
- package/server/ioBroker/ioBroker.main.ts +99 -99
- package/server/ioBroker/socketIOAuthInfo.ts +5 -5
- package/server/ioBroker/socketIOConnectOptions.ts +6 -6
- package/server/ioBroker/socketIOLogging.ts +29 -29
- package/server/ioBroker/socketIOVisCommand.ts +11 -11
- package/server/services/HTTPSOptions.ts +14 -14
- package/server/services/Sonos/OwnSonosDevices.ts +9 -0
- package/server/services/Sonos/mp3-server.ts +75 -75
- package/server/services/Sonos/polly-service.ts +100 -100
- package/server/services/Sonos/sonos-service.ts +194 -199
- package/server/services/Telegram/telegram-Commands.ts +237 -215
- package/server/services/Telegram/telegram-service.ts +171 -171
- package/server/services/Telegram/telegramMessageCalback.ts +11 -11
- package/server/services/calendar/muell-tonne.ts +82 -83
- package/server/services/calendar/m/303/274ll-service.ts +147 -146
- package/server/services/dbo/persist.ts +125 -125
- package/server/services/https-service.ts +71 -71
- package/server/services/log-service.ts +69 -69
- package/server/services/news-service.ts +81 -81
- package/server/services/settings-service.ts +15 -15
- package/server/services/time-callback-service.ts +223 -223
- package/server/services/utils/ringstorage.ts +24 -24
- package/server/services/utils/utils.ts +52 -52
- package/server/services/weather/weather-alert.ts +7 -7
- package/server/services/weather/weather-current.ts +26 -26
- package/server/services/weather/weather-daily.ts +22 -22
- package/server/services/weather/weather-feelsLike.ts +6 -6
- package/server/services/weather/weather-hourly.ts +17 -17
- package/server/services/weather/weather-item.ts +6 -6
- package/server/services/weather/weather-minutes.ts +4 -4
- package/server/services/weather/weather-service.ts +277 -277
- package/server/services/weather/weather-temp.ts +8 -8
- package/tsconfig.json +58 -58
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Daytime } from './daytime';
|
|
2
|
-
|
|
3
|
-
export class TemperaturSettings {
|
|
4
|
-
public constructor(
|
|
5
|
-
public start: Daytime,
|
|
6
|
-
public end: Daytime,
|
|
7
|
-
public temperatur: number,
|
|
8
|
-
public active: boolean = true,
|
|
9
|
-
) {}
|
|
10
|
-
|
|
11
|
-
public isNowInRange(): boolean {
|
|
12
|
-
const now: number = new Date().getTime();
|
|
13
|
-
const todayStart: number = new Date().setHours(this.start.hour, this.start.minute);
|
|
14
|
-
if (now < todayStart) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const todayEnd: number = new Date().setHours(this.end.hour, this.end.minute);
|
|
19
|
-
|
|
20
|
-
return now < todayEnd;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
1
|
+
import { Daytime } from './daytime';
|
|
2
|
+
|
|
3
|
+
export class TemperaturSettings {
|
|
4
|
+
public constructor(
|
|
5
|
+
public start: Daytime,
|
|
6
|
+
public end: Daytime,
|
|
7
|
+
public temperatur: number,
|
|
8
|
+
public active: boolean = true,
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
public isNowInRange(): boolean {
|
|
12
|
+
const now: number = new Date().getTime();
|
|
13
|
+
const todayStart: number = new Date().setHours(this.start.hour, this.start.minute);
|
|
14
|
+
if (now < todayStart) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const todayEnd: number = new Date().setHours(this.end.hour, this.end.minute);
|
|
19
|
+
|
|
20
|
+
return now < todayEnd;
|
|
21
|
+
}
|
|
22
|
+
}
|
package/models/timeCallback.ts
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import { LogLevel } from './logLevel';
|
|
2
|
-
import { ServerLogService } from '../server/services/log-service';
|
|
3
|
-
import { SunTimeOffsets, TimeCallbackService } from '../server/services/time-callback-service';
|
|
4
|
-
|
|
5
|
-
export class TimeCallback {
|
|
6
|
-
public lastDone: Date = new Date(0);
|
|
7
|
-
public nextToDo?: Date;
|
|
8
|
-
|
|
9
|
-
constructor(
|
|
10
|
-
public name: string,
|
|
11
|
-
public type: TimeCallbackType,
|
|
12
|
-
public cFunction: () => void,
|
|
13
|
-
public minuteOffset: number,
|
|
14
|
-
public hours?: number,
|
|
15
|
-
public minutes?: number,
|
|
16
|
-
public sunTimeOffset?: SunTimeOffsets,
|
|
17
|
-
) {}
|
|
18
|
-
|
|
19
|
-
public recalcNextToDo(now: Date): void {
|
|
20
|
-
const today: Date = new Date(now.getTime());
|
|
21
|
-
today.setHours(0, 0, 0, 0);
|
|
22
|
-
switch (this.type) {
|
|
23
|
-
case TimeCallbackType.TimeOfDay:
|
|
24
|
-
if (this.hours === undefined) {
|
|
25
|
-
this.hours = 0;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (this.minutes === undefined) {
|
|
29
|
-
this.minutes = 0;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
this.nextToDo = new Date(
|
|
33
|
-
today.getTime() + this.hours * 60 * 60 * 1000 + (this.minutes + this.minuteOffset) * 60 * 1000,
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
if (this.nextToDo < now) {
|
|
37
|
-
// Heute ist schon abgelaufen, also morgen festlegen
|
|
38
|
-
this.nextToDo = new Date(this.nextToDo.getTime() + 24 * 60 * 60 * 1000);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
ServerLogService.writeLog(
|
|
42
|
-
LogLevel.Trace,
|
|
43
|
-
`Nächste Zeitevent für "${this.name}" um ${this.nextToDo.toLocaleTimeString('de-DE')}`,
|
|
44
|
-
);
|
|
45
|
-
break;
|
|
46
|
-
case TimeCallbackType.Sunrise:
|
|
47
|
-
let fixedSRDate: Date = new Date(TimeCallbackService.nextSunRise.getTime() + this.minuteOffset * 60 * 1000);
|
|
48
|
-
if (this.sunTimeOffset) {
|
|
49
|
-
const nextMinSR: Date = this.sunTimeOffset.getNextMinimumSunrise();
|
|
50
|
-
if (fixedSRDate.getDate() === nextMinSR.getDate()) {
|
|
51
|
-
fixedSRDate = nextMinSR;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (now > fixedSRDate) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
ServerLogService.writeLog(
|
|
59
|
-
LogLevel.Trace,
|
|
60
|
-
`Nächste Zeitevent für "${this.name}" um ${fixedSRDate.toLocaleTimeString('de-DE')}`,
|
|
61
|
-
);
|
|
62
|
-
this.nextToDo = fixedSRDate;
|
|
63
|
-
break;
|
|
64
|
-
case TimeCallbackType.SunSet:
|
|
65
|
-
let fixedSSDate: Date = new Date(TimeCallbackService.nextSunSet.getTime() + this.minuteOffset * 60 * 1000);
|
|
66
|
-
if (this.sunTimeOffset) {
|
|
67
|
-
const nextMaxSS: Date = this.sunTimeOffset.getNextMaximumSunset();
|
|
68
|
-
if (fixedSSDate.getDate() === nextMaxSS.getDate()) {
|
|
69
|
-
fixedSSDate = nextMaxSS;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (now > fixedSSDate) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
ServerLogService.writeLog(
|
|
77
|
-
LogLevel.Trace,
|
|
78
|
-
`Nächste Zeitevent für "${this.name}" um ${fixedSSDate.toLocaleTimeString('de-DE')}`,
|
|
79
|
-
);
|
|
80
|
-
this.nextToDo = fixedSSDate;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export enum TimeCallbackType {
|
|
87
|
-
TimeOfDay = 1,
|
|
88
|
-
Sunrise = 2,
|
|
89
|
-
SunSet = 3,
|
|
90
|
-
}
|
|
1
|
+
import { LogLevel } from './logLevel';
|
|
2
|
+
import { ServerLogService } from '../server/services/log-service';
|
|
3
|
+
import { SunTimeOffsets, TimeCallbackService } from '../server/services/time-callback-service';
|
|
4
|
+
|
|
5
|
+
export class TimeCallback {
|
|
6
|
+
public lastDone: Date = new Date(0);
|
|
7
|
+
public nextToDo?: Date;
|
|
8
|
+
|
|
9
|
+
constructor(
|
|
10
|
+
public name: string,
|
|
11
|
+
public type: TimeCallbackType,
|
|
12
|
+
public cFunction: () => void,
|
|
13
|
+
public minuteOffset: number,
|
|
14
|
+
public hours?: number,
|
|
15
|
+
public minutes?: number,
|
|
16
|
+
public sunTimeOffset?: SunTimeOffsets,
|
|
17
|
+
) {}
|
|
18
|
+
|
|
19
|
+
public recalcNextToDo(now: Date): void {
|
|
20
|
+
const today: Date = new Date(now.getTime());
|
|
21
|
+
today.setHours(0, 0, 0, 0);
|
|
22
|
+
switch (this.type) {
|
|
23
|
+
case TimeCallbackType.TimeOfDay:
|
|
24
|
+
if (this.hours === undefined) {
|
|
25
|
+
this.hours = 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (this.minutes === undefined) {
|
|
29
|
+
this.minutes = 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
this.nextToDo = new Date(
|
|
33
|
+
today.getTime() + this.hours * 60 * 60 * 1000 + (this.minutes + this.minuteOffset) * 60 * 1000,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (this.nextToDo < now) {
|
|
37
|
+
// Heute ist schon abgelaufen, also morgen festlegen
|
|
38
|
+
this.nextToDo = new Date(this.nextToDo.getTime() + 24 * 60 * 60 * 1000);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
ServerLogService.writeLog(
|
|
42
|
+
LogLevel.Trace,
|
|
43
|
+
`Nächste Zeitevent für "${this.name}" um ${this.nextToDo.toLocaleTimeString('de-DE')}`,
|
|
44
|
+
);
|
|
45
|
+
break;
|
|
46
|
+
case TimeCallbackType.Sunrise:
|
|
47
|
+
let fixedSRDate: Date = new Date(TimeCallbackService.nextSunRise.getTime() + this.minuteOffset * 60 * 1000);
|
|
48
|
+
if (this.sunTimeOffset) {
|
|
49
|
+
const nextMinSR: Date = this.sunTimeOffset.getNextMinimumSunrise();
|
|
50
|
+
if (fixedSRDate.getDate() === nextMinSR.getDate()) {
|
|
51
|
+
fixedSRDate = nextMinSR;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (now > fixedSRDate) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
ServerLogService.writeLog(
|
|
59
|
+
LogLevel.Trace,
|
|
60
|
+
`Nächste Zeitevent für "${this.name}" um ${fixedSRDate.toLocaleTimeString('de-DE')}`,
|
|
61
|
+
);
|
|
62
|
+
this.nextToDo = fixedSRDate;
|
|
63
|
+
break;
|
|
64
|
+
case TimeCallbackType.SunSet:
|
|
65
|
+
let fixedSSDate: Date = new Date(TimeCallbackService.nextSunSet.getTime() + this.minuteOffset * 60 * 1000);
|
|
66
|
+
if (this.sunTimeOffset) {
|
|
67
|
+
const nextMaxSS: Date = this.sunTimeOffset.getNextMaximumSunset();
|
|
68
|
+
if (fixedSSDate.getDate() === nextMaxSS.getDate()) {
|
|
69
|
+
fixedSSDate = nextMaxSS;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (now > fixedSSDate) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
ServerLogService.writeLog(
|
|
77
|
+
LogLevel.Trace,
|
|
78
|
+
`Nächste Zeitevent für "${this.name}" um ${fixedSSDate.toLocaleTimeString('de-DE')}`,
|
|
79
|
+
);
|
|
80
|
+
this.nextToDo = fixedSSDate;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export enum TimeCallbackType {
|
|
87
|
+
TimeOfDay = 1,
|
|
88
|
+
Sunrise = 2,
|
|
89
|
+
SunSet = 3,
|
|
90
|
+
}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Config
|
|
2
|
-
This home automation system is configured using multiple files which are described below.
|
|
3
|
-
|
|
4
|
-
## Device Config
|
|
5
|
-
To highly decrease workload manually entering device data from ioBroker
|
|
6
|
-
you can simply download your whole object tree from within the ioBroker -> objects page.
|
|
7
|
-
|
|
8
|
-
The resulting `.json` should be placed within `.\server\config\private` folder, renamed to `devices.json`
|
|
9
|
-
|
|
10
|
-
## Main Config
|
|
11
|
-
Please place a `mainConfig.json` in the `.\server\config\private` folder.
|
|
12
|
-
|
|
13
|
-
The file should contain all the desired services, which definitions can be found within the `iConfig.ts` file.
|
|
14
|
-
|
|
15
|
-
## RoomConfig
|
|
16
|
-
Please use the `.\models\rooms\Raumdefinition.xlsm` excel sheet to
|
|
17
|
-
generate a `RoomConfig.txt`. As this needs running a specific node script
|
|
18
|
-
afterwards you should follow the steps within `.\models\rooms\readme.md`
|
|
19
|
-
|
|
1
|
+
# Config
|
|
2
|
+
This home automation system is configured using multiple files which are described below.
|
|
3
|
+
|
|
4
|
+
## Device Config
|
|
5
|
+
To highly decrease workload manually entering device data from ioBroker
|
|
6
|
+
you can simply download your whole object tree from within the ioBroker -> objects page.
|
|
7
|
+
|
|
8
|
+
The resulting `.json` should be placed within `.\server\config\private` folder, renamed to `devices.json`
|
|
9
|
+
|
|
10
|
+
## Main Config
|
|
11
|
+
Please place a `mainConfig.json` in the `.\server\config\private` folder.
|
|
12
|
+
|
|
13
|
+
The file should contain all the desired services, which definitions can be found within the `iConfig.ts` file.
|
|
14
|
+
|
|
15
|
+
## RoomConfig
|
|
16
|
+
Please use the `.\models\rooms\Raumdefinition.xlsm` excel sheet to
|
|
17
|
+
generate a `RoomConfig.txt`. As this needs running a specific node script
|
|
18
|
+
afterwards you should follow the steps within `.\models\rooms\readme.md`
|
|
19
|
+
|
package/server/config/iConfig.ts
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { LogLevel } from '../../models/logLevel';
|
|
2
|
-
import { iRoomDefaultSettings } from '../../models/rooms/RoomSettings/iRoomDefaultSettings';
|
|
3
|
-
|
|
4
|
-
export interface iConfig {
|
|
5
|
-
roomDefault: iRoomDefaultSettings;
|
|
6
|
-
timeSettings: iTimeSettings;
|
|
7
|
-
ioBrokerUrl: string;
|
|
8
|
-
telegram?: iTelegramSettings;
|
|
9
|
-
polly?: iPollySettings;
|
|
10
|
-
mp3Server?: iMp3Settings;
|
|
11
|
-
weather?: iWeatherSettings;
|
|
12
|
-
muell?: iMuellSettings;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface iTimePair {
|
|
16
|
-
hours: number;
|
|
17
|
-
minutes: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface iTimeSettings {
|
|
21
|
-
nightStart: iTimePair;
|
|
22
|
-
nightEnd: iTimePair;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface iTelegramSettings {
|
|
26
|
-
logLevel: LogLevel;
|
|
27
|
-
telegramToken: string;
|
|
28
|
-
allowedIDs: number[];
|
|
29
|
-
subscribedIDs: number[];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface iPollySettings {
|
|
33
|
-
mp3Path: string;
|
|
34
|
-
region: string;
|
|
35
|
-
signatureVersion: string;
|
|
36
|
-
accessKeyId: string;
|
|
37
|
-
secretAccessKey: string;
|
|
38
|
-
voiceID: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface iMp3Settings {
|
|
42
|
-
path: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface iWeatherSettings {
|
|
46
|
-
lattitude: string;
|
|
47
|
-
longitude: string;
|
|
48
|
-
appid: string;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export interface iMuellSettings {
|
|
52
|
-
calendarURL: string;
|
|
53
|
-
}
|
|
1
|
+
import { LogLevel } from '../../models/logLevel';
|
|
2
|
+
import { iRoomDefaultSettings } from '../../models/rooms/RoomSettings/iRoomDefaultSettings';
|
|
3
|
+
|
|
4
|
+
export interface iConfig {
|
|
5
|
+
roomDefault: iRoomDefaultSettings;
|
|
6
|
+
timeSettings: iTimeSettings;
|
|
7
|
+
ioBrokerUrl: string;
|
|
8
|
+
telegram?: iTelegramSettings;
|
|
9
|
+
polly?: iPollySettings;
|
|
10
|
+
mp3Server?: iMp3Settings;
|
|
11
|
+
weather?: iWeatherSettings;
|
|
12
|
+
muell?: iMuellSettings;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface iTimePair {
|
|
16
|
+
hours: number;
|
|
17
|
+
minutes: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface iTimeSettings {
|
|
21
|
+
nightStart: iTimePair;
|
|
22
|
+
nightEnd: iTimePair;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface iTelegramSettings {
|
|
26
|
+
logLevel: LogLevel;
|
|
27
|
+
telegramToken: string;
|
|
28
|
+
allowedIDs: number[];
|
|
29
|
+
subscribedIDs: number[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface iPollySettings {
|
|
33
|
+
mp3Path: string;
|
|
34
|
+
region: string;
|
|
35
|
+
signatureVersion: string;
|
|
36
|
+
accessKeyId: string;
|
|
37
|
+
secretAccessKey: string;
|
|
38
|
+
voiceID: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface iMp3Settings {
|
|
42
|
+
path: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface iWeatherSettings {
|
|
46
|
+
lattitude: string;
|
|
47
|
+
longitude: string;
|
|
48
|
+
appid: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface iMuellSettings {
|
|
52
|
+
calendarURL: string;
|
|
53
|
+
}
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"ioBrokerUrl": "http://xxx.xxx.xxx.xxx:8xx4",
|
|
3
|
-
"timeSettings": {
|
|
4
|
-
"nightStart": {
|
|
5
|
-
"hours": 23,
|
|
6
|
-
"minutes": 45
|
|
7
|
-
},
|
|
8
|
-
"nightEnd": {
|
|
9
|
-
"hours": 6,
|
|
10
|
-
"minutes": 30
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
"roomDefault": {
|
|
14
|
-
"lampenBeiBewegung": true,
|
|
15
|
-
"lichtSonnenAufgangAus": true,
|
|
16
|
-
"sonnenUntergangRollos": true,
|
|
17
|
-
"sonnenAufgangRollos": true,
|
|
18
|
-
"movementResetTimer": 240,
|
|
19
|
-
"sonnenUntergangRolloDelay": 15,
|
|
20
|
-
"sonnenUntergangLampenDelay": 15,
|
|
21
|
-
"sonnenUntergangRolloMaxTime": {
|
|
22
|
-
"hours": 21,
|
|
23
|
-
"minutes": 30
|
|
24
|
-
},
|
|
25
|
-
"sonnenAufgangRolloMinTime": {
|
|
26
|
-
"hours": 7,
|
|
27
|
-
"minutes": 30
|
|
28
|
-
},
|
|
29
|
-
"sonnenAufgangRolloDelay": 35,
|
|
30
|
-
"sonnenAufgangLampenDelay": 15,
|
|
31
|
-
"lightIfNoWindows": false
|
|
32
|
-
},
|
|
33
|
-
"telegram": {
|
|
34
|
-
"logLevel": 1,
|
|
35
|
-
"telegramToken": "15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXU",
|
|
36
|
-
"allowedIDs": [
|
|
37
|
-
111111111,
|
|
38
|
-
111111111
|
|
39
|
-
],
|
|
40
|
-
"subscribedIDs": [
|
|
41
|
-
111111111,
|
|
42
|
-
111111111
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
|
-
"mp3Server": {
|
|
46
|
-
"path": "//XXXXXXXXXX/XXXXX/XXXXXX/XXX/ttsMP3/"
|
|
47
|
-
},
|
|
48
|
-
"muell": {
|
|
49
|
-
"calendarURL": "https://xxxxxxxxxxxxxxxxxxxxx.de/abfuhrkalender?format=ical&street=xxxxxxxx&number=xx"
|
|
50
|
-
},
|
|
51
|
-
"polly": {
|
|
52
|
-
"mp3Path": "//xxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/ttsMP3/",
|
|
53
|
-
"region": "eu-central-1",
|
|
54
|
-
"signatureVersion": "v4",
|
|
55
|
-
"accessKeyId": "xxxxxxxxxxxxxxxxxxxx",
|
|
56
|
-
"secretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
57
|
-
"voiceID": "Vicki"
|
|
58
|
-
},
|
|
59
|
-
"weather": {
|
|
60
|
-
"lattitude": "xx.xxxxxx",
|
|
61
|
-
"longitude": "xx.xxxxx",
|
|
62
|
-
"appid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"ioBrokerUrl": "http://xxx.xxx.xxx.xxx:8xx4",
|
|
3
|
+
"timeSettings": {
|
|
4
|
+
"nightStart": {
|
|
5
|
+
"hours": 23,
|
|
6
|
+
"minutes": 45
|
|
7
|
+
},
|
|
8
|
+
"nightEnd": {
|
|
9
|
+
"hours": 6,
|
|
10
|
+
"minutes": 30
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"roomDefault": {
|
|
14
|
+
"lampenBeiBewegung": true,
|
|
15
|
+
"lichtSonnenAufgangAus": true,
|
|
16
|
+
"sonnenUntergangRollos": true,
|
|
17
|
+
"sonnenAufgangRollos": true,
|
|
18
|
+
"movementResetTimer": 240,
|
|
19
|
+
"sonnenUntergangRolloDelay": 15,
|
|
20
|
+
"sonnenUntergangLampenDelay": 15,
|
|
21
|
+
"sonnenUntergangRolloMaxTime": {
|
|
22
|
+
"hours": 21,
|
|
23
|
+
"minutes": 30
|
|
24
|
+
},
|
|
25
|
+
"sonnenAufgangRolloMinTime": {
|
|
26
|
+
"hours": 7,
|
|
27
|
+
"minutes": 30
|
|
28
|
+
},
|
|
29
|
+
"sonnenAufgangRolloDelay": 35,
|
|
30
|
+
"sonnenAufgangLampenDelay": 15,
|
|
31
|
+
"lightIfNoWindows": false
|
|
32
|
+
},
|
|
33
|
+
"telegram": {
|
|
34
|
+
"logLevel": 1,
|
|
35
|
+
"telegramToken": "15xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXU",
|
|
36
|
+
"allowedIDs": [
|
|
37
|
+
111111111,
|
|
38
|
+
111111111
|
|
39
|
+
],
|
|
40
|
+
"subscribedIDs": [
|
|
41
|
+
111111111,
|
|
42
|
+
111111111
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"mp3Server": {
|
|
46
|
+
"path": "//XXXXXXXXXX/XXXXX/XXXXXX/XXX/ttsMP3/"
|
|
47
|
+
},
|
|
48
|
+
"muell": {
|
|
49
|
+
"calendarURL": "https://xxxxxxxxxxxxxxxxxxxxx.de/abfuhrkalender?format=ical&street=xxxxxxxx&number=xx"
|
|
50
|
+
},
|
|
51
|
+
"polly": {
|
|
52
|
+
"mp3Path": "//xxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/ttsMP3/",
|
|
53
|
+
"region": "eu-central-1",
|
|
54
|
+
"signatureVersion": "v4",
|
|
55
|
+
"accessKeyId": "xxxxxxxxxxxxxxxxxxxx",
|
|
56
|
+
"secretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
57
|
+
"voiceID": "Vicki"
|
|
58
|
+
},
|
|
59
|
+
"weather": {
|
|
60
|
+
"lattitude": "xx.xxxxxx",
|
|
61
|
+
"longitude": "xx.xxxxx",
|
|
62
|
+
"appid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { deviceConfig } from '../../models/deviceConfig';
|
|
2
|
-
|
|
3
|
-
export class DeviceInfo {
|
|
4
|
-
public devID: string;
|
|
5
|
-
public room: string;
|
|
6
|
-
public deviceType: string;
|
|
7
|
-
public deviceRoomIndex: number;
|
|
8
|
-
public type: 'device' | 'channel' | 'state';
|
|
9
|
-
public fullName: string;
|
|
10
|
-
private _customName?: string;
|
|
11
|
-
public fullID: string;
|
|
12
|
-
public channel?: number;
|
|
13
|
-
public valueName?: string;
|
|
14
|
-
public devConf: deviceConfig;
|
|
15
|
-
|
|
16
|
-
public constructor(pDevConf: deviceConfig) {
|
|
17
|
-
this.devConf = pDevConf;
|
|
18
|
-
this.type = pDevConf.type as 'device' | 'channel' | 'state';
|
|
19
|
-
|
|
20
|
-
this.fullID = pDevConf._id;
|
|
21
|
-
/**
|
|
22
|
-
* 0: hm-rpc
|
|
23
|
-
* 1: rcpInstance
|
|
24
|
-
* 2: Device ID
|
|
25
|
-
* 3?: Channel
|
|
26
|
-
* 4?: ValueName
|
|
27
|
-
*/
|
|
28
|
-
const idSplit: string[] = pDevConf._id.split('.');
|
|
29
|
-
this.devID = idSplit[2];
|
|
30
|
-
|
|
31
|
-
if (idSplit.length > 3) {
|
|
32
|
-
this.channel = Number(idSplit[3]);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (idSplit.length > 4) {
|
|
36
|
-
this.valueName = idSplit[4];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
this.fullName = pDevConf.common.name;
|
|
40
|
-
/**
|
|
41
|
-
* 0: Indikator own "00"
|
|
42
|
-
* 1: "HmIP"
|
|
43
|
-
* 2: Raum
|
|
44
|
-
* 3: Was für ein Gerät
|
|
45
|
-
* 4: Index dieses Gerätes im Raum (ggf. + :Channel)
|
|
46
|
-
* 5?: Name des Wertes
|
|
47
|
-
*/
|
|
48
|
-
const nameSplit: string[] = pDevConf.common.name.split('-');
|
|
49
|
-
|
|
50
|
-
this.room = nameSplit[2];
|
|
51
|
-
this.deviceType = nameSplit[3];
|
|
52
|
-
this.deviceRoomIndex = Number(nameSplit[4].split(':')[0]);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public set customName(val: string) {
|
|
56
|
-
this._customName = val;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public get customName(): string {
|
|
60
|
-
if (this._customName !== undefined) {
|
|
61
|
-
return this._customName;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return this.fullName;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
import { deviceConfig } from '../../models/deviceConfig';
|
|
2
|
+
|
|
3
|
+
export class DeviceInfo {
|
|
4
|
+
public devID: string;
|
|
5
|
+
public room: string;
|
|
6
|
+
public deviceType: string;
|
|
7
|
+
public deviceRoomIndex: number;
|
|
8
|
+
public type: 'device' | 'channel' | 'state';
|
|
9
|
+
public fullName: string;
|
|
10
|
+
private _customName?: string;
|
|
11
|
+
public fullID: string;
|
|
12
|
+
public channel?: number;
|
|
13
|
+
public valueName?: string;
|
|
14
|
+
public devConf: deviceConfig;
|
|
15
|
+
|
|
16
|
+
public constructor(pDevConf: deviceConfig) {
|
|
17
|
+
this.devConf = pDevConf;
|
|
18
|
+
this.type = pDevConf.type as 'device' | 'channel' | 'state';
|
|
19
|
+
|
|
20
|
+
this.fullID = pDevConf._id;
|
|
21
|
+
/**
|
|
22
|
+
* 0: hm-rpc
|
|
23
|
+
* 1: rcpInstance
|
|
24
|
+
* 2: Device ID
|
|
25
|
+
* 3?: Channel
|
|
26
|
+
* 4?: ValueName
|
|
27
|
+
*/
|
|
28
|
+
const idSplit: string[] = pDevConf._id.split('.');
|
|
29
|
+
this.devID = idSplit[2];
|
|
30
|
+
|
|
31
|
+
if (idSplit.length > 3) {
|
|
32
|
+
this.channel = Number(idSplit[3]);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (idSplit.length > 4) {
|
|
36
|
+
this.valueName = idSplit[4];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
this.fullName = pDevConf.common.name;
|
|
40
|
+
/**
|
|
41
|
+
* 0: Indikator own "00"
|
|
42
|
+
* 1: "HmIP"
|
|
43
|
+
* 2: Raum
|
|
44
|
+
* 3: Was für ein Gerät
|
|
45
|
+
* 4: Index dieses Gerätes im Raum (ggf. + :Channel)
|
|
46
|
+
* 5?: Name des Wertes
|
|
47
|
+
*/
|
|
48
|
+
const nameSplit: string[] = pDevConf.common.name.split('-');
|
|
49
|
+
|
|
50
|
+
this.room = nameSplit[2];
|
|
51
|
+
this.deviceType = nameSplit[3];
|
|
52
|
+
this.deviceRoomIndex = Number(nameSplit[4].split(':')[0]);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public set customName(val: string) {
|
|
56
|
+
this._customName = val;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public get customName(): string {
|
|
60
|
+
if (this._customName !== undefined) {
|
|
61
|
+
return this._customName;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return this.fullName;
|
|
65
|
+
}
|
|
66
|
+
}
|