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,77 +1,77 @@
|
|
|
1
|
-
import { LogLevel } from '../../../models/logLevel';
|
|
2
|
-
import { ServerLogService } from '../../services/log-service';
|
|
3
|
-
import { DeviceInfo } from '../DeviceInfo';
|
|
4
|
-
import { ZigbeeDevice } from './zigbeeDevice';
|
|
5
|
-
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
6
|
-
import { LampSettings } from '../../../models/lampSettings';
|
|
7
|
-
|
|
8
|
-
export class ZigbeeBlitzShp extends ZigbeeDevice {
|
|
9
|
-
public steckerOn: boolean = false;
|
|
10
|
-
public current: number = 0;
|
|
11
|
-
public energy: number = 0;
|
|
12
|
-
public loadPower: number = 0;
|
|
13
|
-
public settings: LampSettings = new LampSettings();
|
|
14
|
-
private steckerOnSwitchID: string = '';
|
|
15
|
-
|
|
16
|
-
public constructor(pInfo: DeviceInfo) {
|
|
17
|
-
super(pInfo, ZigbeeDeviceType.ZigbeeBlitzShp);
|
|
18
|
-
this.steckerOnSwitchID = `${this.info.fullID}.state`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
|
|
22
|
-
ServerLogService.writeLog(
|
|
23
|
-
LogLevel.DeepTrace,
|
|
24
|
-
`Stecker Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
25
|
-
);
|
|
26
|
-
super.update(idSplit, state, initial, true);
|
|
27
|
-
switch (idSplit[3]) {
|
|
28
|
-
case 'state':
|
|
29
|
-
ServerLogService.writeLog(LogLevel.Trace, `Stecker Update für ${this.info.customName} auf ${state.val}`);
|
|
30
|
-
this.steckerOn = state.val as boolean;
|
|
31
|
-
break;
|
|
32
|
-
case 'energy':
|
|
33
|
-
ServerLogService.writeLog(
|
|
34
|
-
LogLevel.Trace,
|
|
35
|
-
`Stecker Update für ${this.info.customName} auf Energie: ${state.val}`,
|
|
36
|
-
);
|
|
37
|
-
this.energy = state.val as number;
|
|
38
|
-
break;
|
|
39
|
-
case 'current':
|
|
40
|
-
ServerLogService.writeLog(LogLevel.Trace, `Stecker Update für ${this.info.customName} auf Strom: ${state.val}`);
|
|
41
|
-
this.current = state.val as number;
|
|
42
|
-
break;
|
|
43
|
-
case 'load_power':
|
|
44
|
-
ServerLogService.writeLog(
|
|
45
|
-
LogLevel.Trace,
|
|
46
|
-
`Stecker Update für ${this.info.customName} auf Leistungsaufnahme: ${state.val}`,
|
|
47
|
-
);
|
|
48
|
-
this.loadPower = state.val as number;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
public setStecker(pValue: boolean): void {
|
|
54
|
-
if (this.steckerOnSwitchID === '') {
|
|
55
|
-
ServerLogService.writeLog(LogLevel.Error, `Keine Switch ID für "${this.info.customName}" bekannt.`);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!this.ioConn) {
|
|
60
|
-
ServerLogService.writeLog(LogLevel.Error, `Keine Connection für "${this.info.customName}" bekannt.`);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
ServerLogService.writeLog(LogLevel.Debug, `Stecker schalten: "${this.info.customName}" Wert: ${pValue}`);
|
|
65
|
-
this.ioConn.setState(this.steckerOnSwitchID, pValue, (err) => {
|
|
66
|
-
if (err) {
|
|
67
|
-
console.log(`Stecker schalten ergab Fehler: ${err}`);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
public toggleStecker(): boolean {
|
|
73
|
-
const newVal = !this.steckerOn;
|
|
74
|
-
this.setStecker(newVal);
|
|
75
|
-
return newVal;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
1
|
+
import { LogLevel } from '../../../models/logLevel';
|
|
2
|
+
import { ServerLogService } from '../../services/log-service';
|
|
3
|
+
import { DeviceInfo } from '../DeviceInfo';
|
|
4
|
+
import { ZigbeeDevice } from './zigbeeDevice';
|
|
5
|
+
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
6
|
+
import { LampSettings } from '../../../models/lampSettings';
|
|
7
|
+
|
|
8
|
+
export class ZigbeeBlitzShp extends ZigbeeDevice {
|
|
9
|
+
public steckerOn: boolean = false;
|
|
10
|
+
public current: number = 0;
|
|
11
|
+
public energy: number = 0;
|
|
12
|
+
public loadPower: number = 0;
|
|
13
|
+
public settings: LampSettings = new LampSettings();
|
|
14
|
+
private steckerOnSwitchID: string = '';
|
|
15
|
+
|
|
16
|
+
public constructor(pInfo: DeviceInfo) {
|
|
17
|
+
super(pInfo, ZigbeeDeviceType.ZigbeeBlitzShp);
|
|
18
|
+
this.steckerOnSwitchID = `${this.info.fullID}.state`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
|
|
22
|
+
ServerLogService.writeLog(
|
|
23
|
+
LogLevel.DeepTrace,
|
|
24
|
+
`Stecker Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
25
|
+
);
|
|
26
|
+
super.update(idSplit, state, initial, true);
|
|
27
|
+
switch (idSplit[3]) {
|
|
28
|
+
case 'state':
|
|
29
|
+
ServerLogService.writeLog(LogLevel.Trace, `Stecker Update für ${this.info.customName} auf ${state.val}`);
|
|
30
|
+
this.steckerOn = state.val as boolean;
|
|
31
|
+
break;
|
|
32
|
+
case 'energy':
|
|
33
|
+
ServerLogService.writeLog(
|
|
34
|
+
LogLevel.Trace,
|
|
35
|
+
`Stecker Update für ${this.info.customName} auf Energie: ${state.val}`,
|
|
36
|
+
);
|
|
37
|
+
this.energy = state.val as number;
|
|
38
|
+
break;
|
|
39
|
+
case 'current':
|
|
40
|
+
ServerLogService.writeLog(LogLevel.Trace, `Stecker Update für ${this.info.customName} auf Strom: ${state.val}`);
|
|
41
|
+
this.current = state.val as number;
|
|
42
|
+
break;
|
|
43
|
+
case 'load_power':
|
|
44
|
+
ServerLogService.writeLog(
|
|
45
|
+
LogLevel.Trace,
|
|
46
|
+
`Stecker Update für ${this.info.customName} auf Leistungsaufnahme: ${state.val}`,
|
|
47
|
+
);
|
|
48
|
+
this.loadPower = state.val as number;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public setStecker(pValue: boolean): void {
|
|
54
|
+
if (this.steckerOnSwitchID === '') {
|
|
55
|
+
ServerLogService.writeLog(LogLevel.Error, `Keine Switch ID für "${this.info.customName}" bekannt.`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!this.ioConn) {
|
|
60
|
+
ServerLogService.writeLog(LogLevel.Error, `Keine Connection für "${this.info.customName}" bekannt.`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
ServerLogService.writeLog(LogLevel.Debug, `Stecker schalten: "${this.info.customName}" Wert: ${pValue}`);
|
|
65
|
+
this.ioConn.setState(this.steckerOnSwitchID, pValue, (err) => {
|
|
66
|
+
if (err) {
|
|
67
|
+
console.log(`Stecker schalten ergab Fehler: ${err}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public toggleStecker(): boolean {
|
|
73
|
+
const newVal = !this.steckerOn;
|
|
74
|
+
this.setStecker(newVal);
|
|
75
|
+
return newVal;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
2
|
-
import { DeviceInfo } from '../DeviceInfo';
|
|
3
|
-
import { LogLevel } from '../../../models/logLevel';
|
|
4
|
-
import { ZigbeeAddDeviceItem, ZigbeeRoomSettings } from '../../../models/rooms/RoomSettings/zigbeeRoomSettings';
|
|
5
|
-
import { ServerLogService } from '../../services/log-service';
|
|
6
|
-
import { ioBrokerBaseDevice } from '../iIoBrokerDevice';
|
|
7
|
-
import { RoomBase } from '../../../models/rooms/RoomBase';
|
|
8
|
-
|
|
9
|
-
export class ZigbeeDevice extends ioBrokerBaseDevice {
|
|
10
|
-
private static roomSettings: { [id: string]: ZigbeeRoomSettings } = {};
|
|
11
|
-
public room: RoomBase | undefined = undefined;
|
|
12
|
-
public deviceType: ZigbeeDeviceType;
|
|
13
|
-
public available: boolean = false;
|
|
14
|
-
public linkQuality: number = 0;
|
|
15
|
-
public battery: number = -1;
|
|
16
|
-
public voltage: string = '';
|
|
17
|
-
|
|
18
|
-
public static addRoom(shortName: string, settings: ZigbeeRoomSettings): void {
|
|
19
|
-
if (this.roomSettings[shortName] !== undefined) {
|
|
20
|
-
ServerLogService.writeLog(
|
|
21
|
-
LogLevel.Alert,
|
|
22
|
-
`Es gibt bereits ein Registrat für ZigbeeRoomsettings für den Raumnamen "${shortName}"`,
|
|
23
|
-
);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
this.roomSettings[shortName] = settings;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public static checkMissing(): void {
|
|
30
|
-
for (const rName in this.roomSettings) {
|
|
31
|
-
this.roomSettings[rName].checkMissing();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public constructor(pInfo: DeviceInfo, pType: ZigbeeDeviceType) {
|
|
36
|
-
super(pInfo);
|
|
37
|
-
this.deviceType = pType;
|
|
38
|
-
this.addToCorrectRoom();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
protected addToCorrectRoom(): void {
|
|
42
|
-
const settings: ZigbeeRoomSettings | undefined = ZigbeeDevice.roomSettings[this.info.room];
|
|
43
|
-
if (settings !== undefined) {
|
|
44
|
-
if (settings.devices[this.deviceType] === undefined) {
|
|
45
|
-
ServerLogService.missingZigbeeRoomHandling(settings.RoomName, this.deviceType);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const deviceSettings: ZigbeeAddDeviceItem | undefined =
|
|
49
|
-
settings.devices[this.deviceType][this.info.deviceRoomIndex];
|
|
50
|
-
if (deviceSettings === undefined) {
|
|
51
|
-
ServerLogService.missingZigbeeRoomIndexHandling(settings.RoomName, this.info.deviceRoomIndex, this.deviceType);
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (deviceSettings.customName !== undefined) {
|
|
56
|
-
this.info.customName = deviceSettings.customName;
|
|
57
|
-
}
|
|
58
|
-
deviceSettings.setID(this.info.devID);
|
|
59
|
-
deviceSettings.added = true;
|
|
60
|
-
ServerLogService.addedZigbeeDeviceToRoom(settings.RoomName, this.deviceType, this.info.deviceRoomIndex);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
ServerLogService.writeLog(LogLevel.Warn, `${this.info.room} ist noch kein bekannter Raum für Zigbee Geräte`);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false, pOverride: boolean = false): void {
|
|
67
|
-
ServerLogService.writeLog(
|
|
68
|
-
LogLevel.DeepTrace,
|
|
69
|
-
`Zigbee:Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
70
|
-
);
|
|
71
|
-
if (!pOverride) {
|
|
72
|
-
ServerLogService.writeLog(
|
|
73
|
-
LogLevel.Warn,
|
|
74
|
-
`Keine Update Überschreibung für "${this.info.customName}":\n\tID: ${idSplit.join(
|
|
75
|
-
'.',
|
|
76
|
-
)}\n\tData: ${JSON.stringify(state)}`,
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
switch (idSplit[3]) {
|
|
81
|
-
case 'available':
|
|
82
|
-
this.available = state.val as boolean;
|
|
83
|
-
if (!this.available) {
|
|
84
|
-
ServerLogService.writeLog(
|
|
85
|
-
LogLevel.Debug,
|
|
86
|
-
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" ist nicht erreichbar.`,
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
break;
|
|
90
|
-
case 'battery':
|
|
91
|
-
this.battery = state.val as number;
|
|
92
|
-
if (this.battery < 20) {
|
|
93
|
-
ServerLogService.writeLog(
|
|
94
|
-
LogLevel.Alert,
|
|
95
|
-
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" hat unter 20% Batterie.`,
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
break;
|
|
99
|
-
|
|
100
|
-
case 'link_quality':
|
|
101
|
-
this.linkQuality = state.val as number;
|
|
102
|
-
if (this.linkQuality < 5) {
|
|
103
|
-
ServerLogService.writeLog(
|
|
104
|
-
LogLevel.Debug,
|
|
105
|
-
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" hat eine schlechte Verbindung (${this.linkQuality}).`,
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
break;
|
|
109
|
-
|
|
110
|
-
case 'voltage':
|
|
111
|
-
this.voltage = state.val as string;
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
1
|
+
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
2
|
+
import { DeviceInfo } from '../DeviceInfo';
|
|
3
|
+
import { LogLevel } from '../../../models/logLevel';
|
|
4
|
+
import { ZigbeeAddDeviceItem, ZigbeeRoomSettings } from '../../../models/rooms/RoomSettings/zigbeeRoomSettings';
|
|
5
|
+
import { ServerLogService } from '../../services/log-service';
|
|
6
|
+
import { ioBrokerBaseDevice } from '../iIoBrokerDevice';
|
|
7
|
+
import { RoomBase } from '../../../models/rooms/RoomBase';
|
|
8
|
+
|
|
9
|
+
export class ZigbeeDevice extends ioBrokerBaseDevice {
|
|
10
|
+
private static roomSettings: { [id: string]: ZigbeeRoomSettings } = {};
|
|
11
|
+
public room: RoomBase | undefined = undefined;
|
|
12
|
+
public deviceType: ZigbeeDeviceType;
|
|
13
|
+
public available: boolean = false;
|
|
14
|
+
public linkQuality: number = 0;
|
|
15
|
+
public battery: number = -1;
|
|
16
|
+
public voltage: string = '';
|
|
17
|
+
|
|
18
|
+
public static addRoom(shortName: string, settings: ZigbeeRoomSettings): void {
|
|
19
|
+
if (this.roomSettings[shortName] !== undefined) {
|
|
20
|
+
ServerLogService.writeLog(
|
|
21
|
+
LogLevel.Alert,
|
|
22
|
+
`Es gibt bereits ein Registrat für ZigbeeRoomsettings für den Raumnamen "${shortName}"`,
|
|
23
|
+
);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.roomSettings[shortName] = settings;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static checkMissing(): void {
|
|
30
|
+
for (const rName in this.roomSettings) {
|
|
31
|
+
this.roomSettings[rName].checkMissing();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public constructor(pInfo: DeviceInfo, pType: ZigbeeDeviceType) {
|
|
36
|
+
super(pInfo);
|
|
37
|
+
this.deviceType = pType;
|
|
38
|
+
this.addToCorrectRoom();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
protected addToCorrectRoom(): void {
|
|
42
|
+
const settings: ZigbeeRoomSettings | undefined = ZigbeeDevice.roomSettings[this.info.room];
|
|
43
|
+
if (settings !== undefined) {
|
|
44
|
+
if (settings.devices[this.deviceType] === undefined) {
|
|
45
|
+
ServerLogService.missingZigbeeRoomHandling(settings.RoomName, this.deviceType);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const deviceSettings: ZigbeeAddDeviceItem | undefined =
|
|
49
|
+
settings.devices[this.deviceType][this.info.deviceRoomIndex];
|
|
50
|
+
if (deviceSettings === undefined) {
|
|
51
|
+
ServerLogService.missingZigbeeRoomIndexHandling(settings.RoomName, this.info.deviceRoomIndex, this.deviceType);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (deviceSettings.customName !== undefined) {
|
|
56
|
+
this.info.customName = deviceSettings.customName;
|
|
57
|
+
}
|
|
58
|
+
deviceSettings.setID(this.info.devID);
|
|
59
|
+
deviceSettings.added = true;
|
|
60
|
+
ServerLogService.addedZigbeeDeviceToRoom(settings.RoomName, this.deviceType, this.info.deviceRoomIndex);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
ServerLogService.writeLog(LogLevel.Warn, `${this.info.room} ist noch kein bekannter Raum für Zigbee Geräte`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false, pOverride: boolean = false): void {
|
|
67
|
+
ServerLogService.writeLog(
|
|
68
|
+
LogLevel.DeepTrace,
|
|
69
|
+
`Zigbee:Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
70
|
+
);
|
|
71
|
+
if (!pOverride) {
|
|
72
|
+
ServerLogService.writeLog(
|
|
73
|
+
LogLevel.Warn,
|
|
74
|
+
`Keine Update Überschreibung für "${this.info.customName}":\n\tID: ${idSplit.join(
|
|
75
|
+
'.',
|
|
76
|
+
)}\n\tData: ${JSON.stringify(state)}`,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
switch (idSplit[3]) {
|
|
81
|
+
case 'available':
|
|
82
|
+
this.available = state.val as boolean;
|
|
83
|
+
if (!this.available) {
|
|
84
|
+
ServerLogService.writeLog(
|
|
85
|
+
LogLevel.Debug,
|
|
86
|
+
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" ist nicht erreichbar.`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case 'battery':
|
|
91
|
+
this.battery = state.val as number;
|
|
92
|
+
if (this.battery < 20) {
|
|
93
|
+
ServerLogService.writeLog(
|
|
94
|
+
LogLevel.Alert,
|
|
95
|
+
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" hat unter 20% Batterie.`,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
|
|
100
|
+
case 'link_quality':
|
|
101
|
+
this.linkQuality = state.val as number;
|
|
102
|
+
if (this.linkQuality < 5) {
|
|
103
|
+
ServerLogService.writeLog(
|
|
104
|
+
LogLevel.Debug,
|
|
105
|
+
`Das Zigbee Gerät mit dem Namen "${this.info.customName}" hat eine schlechte Verbindung (${this.linkQuality}).`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
|
|
110
|
+
case 'voltage':
|
|
111
|
+
this.voltage = state.val as string;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export enum ZigbeeDeviceType {
|
|
2
|
-
unknown = 0,
|
|
3
|
-
ZigbeeIkeaFernbedienung = 1,
|
|
4
|
-
ZigbeeIkeaSteckdose = 2,
|
|
5
|
-
ZigbeeIlluLedRGBCCT = 3,
|
|
6
|
-
ZigbeeAquaraVibra = 4,
|
|
7
|
-
ZigbeeIlluDimmer = 5,
|
|
8
|
-
ZigbeeHeimanSmoke = 6,
|
|
9
|
-
ZigbeeAquaraWater = 7,
|
|
10
|
-
ZigbeeBlitzShp = 8,
|
|
11
|
-
ZigbeeIlluLampe = 9,
|
|
12
|
-
ZigbeeIlluActuator = 10,
|
|
13
|
-
}
|
|
1
|
+
export enum ZigbeeDeviceType {
|
|
2
|
+
unknown = 0,
|
|
3
|
+
ZigbeeIkeaFernbedienung = 1,
|
|
4
|
+
ZigbeeIkeaSteckdose = 2,
|
|
5
|
+
ZigbeeIlluLedRGBCCT = 3,
|
|
6
|
+
ZigbeeAquaraVibra = 4,
|
|
7
|
+
ZigbeeIlluDimmer = 5,
|
|
8
|
+
ZigbeeHeimanSmoke = 6,
|
|
9
|
+
ZigbeeAquaraWater = 7,
|
|
10
|
+
ZigbeeBlitzShp = 8,
|
|
11
|
+
ZigbeeIlluLampe = 9,
|
|
12
|
+
ZigbeeIlluActuator = 10,
|
|
13
|
+
}
|
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
import { LogLevel } from '../../../models/logLevel';
|
|
2
|
-
import { DeviceInfo } from '../DeviceInfo';
|
|
3
|
-
import { ZigbeeDevice } from './zigbeeDevice';
|
|
4
|
-
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
5
|
-
import { ServerLogService } from '../../services/log-service';
|
|
6
|
-
import { SonosService } from '../../services/Sonos/sonos-service';
|
|
7
|
-
import { RoomBase } from '../../../models/rooms/RoomBase';
|
|
8
|
-
import { Utils } from '../../services/utils/utils';
|
|
9
|
-
import { PollyService } from '../../services/Sonos/polly-service';
|
|
10
|
-
|
|
11
|
-
export class ZigbeeHeimanSmoke extends ZigbeeDevice {
|
|
12
|
-
public smoke: boolean = false;
|
|
13
|
-
private _roomName: string = '';
|
|
14
|
-
public iAlarm: NodeJS.Timeout | undefined = undefined;
|
|
15
|
-
private _messageAlarmFirst: string = '';
|
|
16
|
-
private _messageAlarm: string = '';
|
|
17
|
-
private _messageAlarmEnd: string = '';
|
|
18
|
-
|
|
19
|
-
public set roomName(val: string) {
|
|
20
|
-
this._roomName = val;
|
|
21
|
-
this._messageAlarmFirst = `Rauchmelder in ${this._roomName} ausgelöst. Möglicher Brand in ${this._roomName}`;
|
|
22
|
-
this._messageAlarm = `Rauchmelder in ${this._roomName} aktiv. Möglicher Brand in ${this._roomName}`;
|
|
23
|
-
this._messageAlarmEnd = `Rauchmelder Alarm Ende: Gefahr in ${this._roomName} zu Ende.`;
|
|
24
|
-
PollyService.preloadTTS(this._messageAlarmFirst);
|
|
25
|
-
PollyService.preloadTTS(this._messageAlarm);
|
|
26
|
-
PollyService.preloadTTS(this._messageAlarmEnd);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
public constructor(pInfo: DeviceInfo) {
|
|
30
|
-
super(pInfo, ZigbeeDeviceType.ZigbeeHeimanSmoke);
|
|
31
|
-
this._messageAlarmFirst = `Rauchmelder in ${this._roomName} ausgelöst. Möglicher Brand in ${this._roomName}`;
|
|
32
|
-
this._messageAlarm = `Rauchmelder in ${this._roomName} aktiv. Möglicher Brand in ${this._roomName}`;
|
|
33
|
-
this._messageAlarmEnd = `Rauchmelder Alarm Ende: Gefahr in ${this._roomName} zu Ende.`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
|
|
37
|
-
ServerLogService.writeLog(
|
|
38
|
-
LogLevel.DeepTrace,
|
|
39
|
-
`Smoke Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
40
|
-
);
|
|
41
|
-
super.update(idSplit, state, initial, true);
|
|
42
|
-
switch (idSplit[3]) {
|
|
43
|
-
case 'smoke':
|
|
44
|
-
ServerLogService.writeLog(LogLevel.Debug, `Smoke Update für ${this.info.customName} auf Rauch: ${state.val}`);
|
|
45
|
-
const newVal: boolean = state.val === true;
|
|
46
|
-
if (this.smoke === true && !newVal) {
|
|
47
|
-
this.stopAlarm();
|
|
48
|
-
} else if (newVal) {
|
|
49
|
-
this.startAlarm();
|
|
50
|
-
}
|
|
51
|
-
this.smoke = newVal;
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private startAlarm(): void {
|
|
57
|
-
if (this.iAlarm !== undefined) {
|
|
58
|
-
clearInterval(this.iAlarm);
|
|
59
|
-
}
|
|
60
|
-
this.iAlarm = Utils.guardedInterval(
|
|
61
|
-
() => {
|
|
62
|
-
this.alarm();
|
|
63
|
-
},
|
|
64
|
-
15000,
|
|
65
|
-
this,
|
|
66
|
-
);
|
|
67
|
-
this.alarm(true);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
public stopAlarm(quiet: boolean = false): void {
|
|
71
|
-
if (this.iAlarm) {
|
|
72
|
-
clearInterval(this.iAlarm);
|
|
73
|
-
}
|
|
74
|
-
if (quiet) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const message = this._messageAlarmEnd;
|
|
78
|
-
Utils.guardedNewThread(() => {
|
|
79
|
-
ServerLogService.writeLog(LogLevel.Alert, message);
|
|
80
|
-
});
|
|
81
|
-
Utils.guardedNewThread(() => {
|
|
82
|
-
SonosService.speakOnAll(message);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
private alarm(first: boolean = false): void {
|
|
87
|
-
const message = first ? this._messageAlarmFirst : this._messageAlarm;
|
|
88
|
-
Utils.guardedNewThread(() => {
|
|
89
|
-
ServerLogService.writeLog(LogLevel.Alert, message);
|
|
90
|
-
});
|
|
91
|
-
Utils.guardedNewThread(() => {
|
|
92
|
-
SonosService.speakOnAll(message, 100);
|
|
93
|
-
});
|
|
94
|
-
Utils.guardedNewThread(() => {
|
|
95
|
-
// Roll all Rollos up, to ensure free sight for firefighters
|
|
96
|
-
RoomBase.setAllRolloOfFloor(-1, 100);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
import { LogLevel } from '../../../models/logLevel';
|
|
2
|
+
import { DeviceInfo } from '../DeviceInfo';
|
|
3
|
+
import { ZigbeeDevice } from './zigbeeDevice';
|
|
4
|
+
import { ZigbeeDeviceType } from './zigbeeDeviceType';
|
|
5
|
+
import { ServerLogService } from '../../services/log-service';
|
|
6
|
+
import { SonosService } from '../../services/Sonos/sonos-service';
|
|
7
|
+
import { RoomBase } from '../../../models/rooms/RoomBase';
|
|
8
|
+
import { Utils } from '../../services/utils/utils';
|
|
9
|
+
import { PollyService } from '../../services/Sonos/polly-service';
|
|
10
|
+
|
|
11
|
+
export class ZigbeeHeimanSmoke extends ZigbeeDevice {
|
|
12
|
+
public smoke: boolean = false;
|
|
13
|
+
private _roomName: string = '';
|
|
14
|
+
public iAlarm: NodeJS.Timeout | undefined = undefined;
|
|
15
|
+
private _messageAlarmFirst: string = '';
|
|
16
|
+
private _messageAlarm: string = '';
|
|
17
|
+
private _messageAlarmEnd: string = '';
|
|
18
|
+
|
|
19
|
+
public set roomName(val: string) {
|
|
20
|
+
this._roomName = val;
|
|
21
|
+
this._messageAlarmFirst = `Rauchmelder in ${this._roomName} ausgelöst. Möglicher Brand in ${this._roomName}`;
|
|
22
|
+
this._messageAlarm = `Rauchmelder in ${this._roomName} aktiv. Möglicher Brand in ${this._roomName}`;
|
|
23
|
+
this._messageAlarmEnd = `Rauchmelder Alarm Ende: Gefahr in ${this._roomName} zu Ende.`;
|
|
24
|
+
PollyService.preloadTTS(this._messageAlarmFirst);
|
|
25
|
+
PollyService.preloadTTS(this._messageAlarm);
|
|
26
|
+
PollyService.preloadTTS(this._messageAlarmEnd);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public constructor(pInfo: DeviceInfo) {
|
|
30
|
+
super(pInfo, ZigbeeDeviceType.ZigbeeHeimanSmoke);
|
|
31
|
+
this._messageAlarmFirst = `Rauchmelder in ${this._roomName} ausgelöst. Möglicher Brand in ${this._roomName}`;
|
|
32
|
+
this._messageAlarm = `Rauchmelder in ${this._roomName} aktiv. Möglicher Brand in ${this._roomName}`;
|
|
33
|
+
this._messageAlarmEnd = `Rauchmelder Alarm Ende: Gefahr in ${this._roomName} zu Ende.`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public update(idSplit: string[], state: ioBroker.State, initial: boolean = false): void {
|
|
37
|
+
ServerLogService.writeLog(
|
|
38
|
+
LogLevel.DeepTrace,
|
|
39
|
+
`Smoke Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`,
|
|
40
|
+
);
|
|
41
|
+
super.update(idSplit, state, initial, true);
|
|
42
|
+
switch (idSplit[3]) {
|
|
43
|
+
case 'smoke':
|
|
44
|
+
ServerLogService.writeLog(LogLevel.Debug, `Smoke Update für ${this.info.customName} auf Rauch: ${state.val}`);
|
|
45
|
+
const newVal: boolean = state.val === true;
|
|
46
|
+
if (this.smoke === true && !newVal) {
|
|
47
|
+
this.stopAlarm();
|
|
48
|
+
} else if (newVal) {
|
|
49
|
+
this.startAlarm();
|
|
50
|
+
}
|
|
51
|
+
this.smoke = newVal;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private startAlarm(): void {
|
|
57
|
+
if (this.iAlarm !== undefined) {
|
|
58
|
+
clearInterval(this.iAlarm);
|
|
59
|
+
}
|
|
60
|
+
this.iAlarm = Utils.guardedInterval(
|
|
61
|
+
() => {
|
|
62
|
+
this.alarm();
|
|
63
|
+
},
|
|
64
|
+
15000,
|
|
65
|
+
this,
|
|
66
|
+
);
|
|
67
|
+
this.alarm(true);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public stopAlarm(quiet: boolean = false): void {
|
|
71
|
+
if (this.iAlarm) {
|
|
72
|
+
clearInterval(this.iAlarm);
|
|
73
|
+
}
|
|
74
|
+
if (quiet) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const message = this._messageAlarmEnd;
|
|
78
|
+
Utils.guardedNewThread(() => {
|
|
79
|
+
ServerLogService.writeLog(LogLevel.Alert, message);
|
|
80
|
+
});
|
|
81
|
+
Utils.guardedNewThread(() => {
|
|
82
|
+
SonosService.speakOnAll(message);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private alarm(first: boolean = false): void {
|
|
87
|
+
const message = first ? this._messageAlarmFirst : this._messageAlarm;
|
|
88
|
+
Utils.guardedNewThread(() => {
|
|
89
|
+
ServerLogService.writeLog(LogLevel.Alert, message);
|
|
90
|
+
});
|
|
91
|
+
Utils.guardedNewThread(() => {
|
|
92
|
+
SonosService.speakOnAll(message, 100);
|
|
93
|
+
});
|
|
94
|
+
Utils.guardedNewThread(() => {
|
|
95
|
+
// Roll all Rollos up, to ensure free sight for firefighters
|
|
96
|
+
RoomBase.setAllRolloOfFloor(-1, 100);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|