hoffmation-base 0.1.29-8 → 0.1.30-3
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/README.md +1 -0
- package/lib/index.js +7 -0
- package/lib/models/dimmerSettings.d.ts +6 -4
- package/lib/models/dimmerSettings.js +7 -4
- package/lib/models/persistence/ShutterCalibration.d.ts +8 -0
- package/lib/models/persistence/ShutterCalibration.js +13 -0
- package/lib/models/persistence/index.d.ts +4 -3
- package/lib/models/persistence/index.js +4 -3
- package/lib/models/rooms/RoomBase.js +10 -9
- package/lib/server/config/iConfig.d.ts +9 -0
- package/lib/server/devices/hmIPDevices/hmIpTuer.js +2 -1
- package/lib/server/devices/zigbee/zigbeeAquaraMotion.d.ts +5 -1
- package/lib/server/devices/zigbee/zigbeeAquaraMotion.js +14 -10
- package/lib/server/devices/zigbee/zigbeeAquaraVibra.js +2 -1
- package/lib/server/devices/zigbee/zigbeeAquaraWater.js +7 -6
- package/lib/server/devices/zigbee/zigbeeHeimanSmoke.js +7 -6
- package/lib/server/devices/zigbee/zigbeeIlluDimmer.d.ts +1 -1
- package/lib/server/devices/zigbee/zigbeeIlluDimmer.js +10 -4
- package/lib/server/devices/zigbee/zigbeeIlluShutter.d.ts +2 -0
- package/lib/server/devices/zigbee/zigbeeIlluShutter.js +24 -1
- package/lib/server/devices/zigbee/zigbeeMagnetContact.js +4 -4
- package/lib/server/services/Sonos/sonos-service.js +0 -2
- package/lib/server/services/Translation/iRessources.d.ts +25 -0
- package/lib/server/services/Translation/iRessources.js +2 -0
- package/lib/server/services/Translation/index.d.ts +2 -0
- package/lib/server/services/Translation/index.js +14 -0
- package/lib/server/services/Translation/res.d.ts +83 -0
- package/lib/server/services/Translation/res.js +147 -0
- package/lib/server/services/Translation/resources.json +78 -0
- package/lib/server/services/dbo/persist.d.ts +11 -3
- package/lib/server/services/dbo/persist.js +64 -24
- package/lib/server/services/index.d.ts +1 -0
- package/lib/server/services/index.js +1 -0
- package/lib/server/services/log-service.d.ts +3 -1
- package/lib/server/services/log-service.js +9 -3
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ Whether you use it with Hoffmation-Express or with your own controller code, mak
|
|
|
20
20
|
### Base requirements
|
|
21
21
|
In order to get the library running correctly, the following requirements should be met:
|
|
22
22
|
* You use ioBroker for all devices that you want to control or read from
|
|
23
|
+
Make sure you got the [socket.io](https://github.com/ioBroker/ioBroker.socketio) adapter installed
|
|
23
24
|
* You use devices that are supported or are able to use one of the supported devices as base for yours.
|
|
24
25
|
(If you use a Zigbee or Homematic IP device that is not currently supported, don't hesitate to create a pull request and add it!)
|
|
25
26
|
* You have a unix-based or windows device for the software you want to run this library with.
|
package/lib/index.js
CHANGED
|
@@ -25,10 +25,17 @@ exports.HoffmationInitializationObject = HoffmationInitializationObject;
|
|
|
25
25
|
class HoffmationBase {
|
|
26
26
|
static async initializeBeforeIoBroker(initObject) {
|
|
27
27
|
server_1.SettingsService.initialize(initObject.config);
|
|
28
|
+
server_1.Res.initialize(initObject.config.translationSettings);
|
|
29
|
+
if (initObject.config.logSettings) {
|
|
30
|
+
server_1.ServerLogService.initialize(initObject.config.logSettings);
|
|
31
|
+
}
|
|
28
32
|
server_1.ServerLogService.writeLog(models_1.LogLevel.Info, `Hoffmation-Base Startup`);
|
|
29
33
|
if (initObject.config.persistence) {
|
|
30
34
|
await server_1.Persist.initialize(initObject.config.persistence);
|
|
31
35
|
}
|
|
36
|
+
else {
|
|
37
|
+
server_1.Persist.turnOff();
|
|
38
|
+
}
|
|
32
39
|
this._app = initObject.app;
|
|
33
40
|
if (server_1.SettingsService.settings.mp3Server) {
|
|
34
41
|
server_1.ServerLogService.writeLog(models_1.LogLevel.Info, `Mp3Server settings detected --> initializing`);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { ActuatorSettings } from './actuatorSettings';
|
|
2
|
+
export declare class DimmerSettings extends ActuatorSettings {
|
|
3
|
+
nightBrightness: number;
|
|
4
|
+
dawnBrightness: number;
|
|
5
|
+
duskBrightness: number;
|
|
6
|
+
dayBrightness: number;
|
|
5
7
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DimmerSettings = void 0;
|
|
4
|
-
|
|
4
|
+
const actuatorSettings_1 = require("./actuatorSettings");
|
|
5
|
+
class DimmerSettings extends actuatorSettings_1.ActuatorSettings {
|
|
5
6
|
constructor() {
|
|
6
|
-
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.nightBrightness = 50;
|
|
9
|
+
this.dawnBrightness = 75;
|
|
10
|
+
this.duskBrightness = 75;
|
|
11
|
+
this.dayBrightness = 100;
|
|
9
12
|
}
|
|
10
13
|
}
|
|
11
14
|
exports.DimmerSettings = DimmerSettings;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare class ShutterCalibration {
|
|
2
|
+
deviceID: string;
|
|
3
|
+
averageUp: number;
|
|
4
|
+
counterUp: number;
|
|
5
|
+
averageDown: number;
|
|
6
|
+
counterDown: number;
|
|
7
|
+
constructor(deviceID: string, averageUp: number, counterUp: number, averageDown: number, counterDown: number);
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShutterCalibration = void 0;
|
|
4
|
+
class ShutterCalibration {
|
|
5
|
+
constructor(deviceID, averageUp, counterUp, averageDown, counterDown) {
|
|
6
|
+
this.deviceID = deviceID;
|
|
7
|
+
this.averageUp = averageUp;
|
|
8
|
+
this.counterUp = counterUp;
|
|
9
|
+
this.averageDown = averageDown;
|
|
10
|
+
this.counterDown = counterDown;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.ShutterCalibration = ShutterCalibration;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from './todaysCount';
|
|
2
1
|
export * from './BasicRoomInfo';
|
|
3
|
-
export * from './
|
|
2
|
+
export * from './CurrentIlluminationDataPoint';
|
|
4
3
|
export * from './DailyMovementCount';
|
|
4
|
+
export * from './RoomDetailInfo';
|
|
5
|
+
export * from './ShutterCalibration';
|
|
5
6
|
export * from './temperaturDataPoint';
|
|
6
|
-
export * from './
|
|
7
|
+
export * from './todaysCount';
|
|
@@ -10,9 +10,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./todaysCount"), exports);
|
|
14
13
|
__exportStar(require("./BasicRoomInfo"), exports);
|
|
15
|
-
__exportStar(require("./
|
|
14
|
+
__exportStar(require("./CurrentIlluminationDataPoint"), exports);
|
|
16
15
|
__exportStar(require("./DailyMovementCount"), exports);
|
|
16
|
+
__exportStar(require("./RoomDetailInfo"), exports);
|
|
17
|
+
__exportStar(require("./ShutterCalibration"), exports);
|
|
17
18
|
__exportStar(require("./temperaturDataPoint"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
+
__exportStar(require("./todaysCount"), exports);
|
|
@@ -17,6 +17,7 @@ const persist_1 = require("../../server/services/dbo/persist");
|
|
|
17
17
|
const time_callback_service_1 = require("../../server/services/time-callback-service");
|
|
18
18
|
const sonos_service_1 = require("../../server/services/Sonos/sonos-service");
|
|
19
19
|
const sonosGroup_1 = require("../../server/devices/groups/sonosGroup");
|
|
20
|
+
const res_1 = require("../../server/services/Translation/res");
|
|
20
21
|
class RoomBase {
|
|
21
22
|
constructor(roomName, Einstellungen) {
|
|
22
23
|
this.roomName = roomName;
|
|
@@ -88,7 +89,7 @@ class RoomBase {
|
|
|
88
89
|
this.restoreLight();
|
|
89
90
|
}
|
|
90
91
|
static startAwayMode() {
|
|
91
|
-
sonos_service_1.SonosService.speakOnAll(
|
|
92
|
+
sonos_service_1.SonosService.speakOnAll(res_1.Res.alarmArmed(), 40);
|
|
92
93
|
if (this._awayModeTimer) {
|
|
93
94
|
clearTimeout(this._awayModeTimer);
|
|
94
95
|
}
|
|
@@ -99,7 +100,7 @@ class RoomBase {
|
|
|
99
100
|
}, 60000, this);
|
|
100
101
|
}
|
|
101
102
|
static startNightAlarmMode() {
|
|
102
|
-
sonos_service_1.SonosService.speakOnAll(
|
|
103
|
+
sonos_service_1.SonosService.speakOnAll(res_1.Res.alarmNightModeArmed(), 30);
|
|
103
104
|
if (this._nightModeTimer) {
|
|
104
105
|
clearTimeout(this._nightModeTimer);
|
|
105
106
|
}
|
|
@@ -128,11 +129,11 @@ class RoomBase {
|
|
|
128
129
|
static endAlarmModes() {
|
|
129
130
|
if (this.awayModeActive) {
|
|
130
131
|
telegram_service_1.TelegramService.sendMessage(telegram_service_1.TelegramService.subscribedIDs, `Alarmanalage entschärft`);
|
|
131
|
-
sonos_service_1.SonosService.speakOnAll(
|
|
132
|
+
sonos_service_1.SonosService.speakOnAll(res_1.Res.welcomeHome(), 35);
|
|
132
133
|
}
|
|
133
134
|
if (this.nightAlarmActive) {
|
|
134
135
|
telegram_service_1.TelegramService.sendMessage(telegram_service_1.TelegramService.subscribedIDs, `Nachtmodus der Alarmanlage entschärft`);
|
|
135
|
-
sonos_service_1.SonosService.speakOnAll(
|
|
136
|
+
sonos_service_1.SonosService.speakOnAll(res_1.Res.goodMorning(), 30);
|
|
136
137
|
}
|
|
137
138
|
if (this._nightModeTimer) {
|
|
138
139
|
clearTimeout(this._nightModeTimer);
|
|
@@ -240,11 +241,11 @@ class RoomBase {
|
|
|
240
241
|
let newTimeout = 20000;
|
|
241
242
|
const alarmAutomaticEnd = 15;
|
|
242
243
|
if (this._intrusionAlarmLevel === 1) {
|
|
243
|
-
speakMessage =
|
|
244
|
+
speakMessage = res_1.Res.intruderGreeting();
|
|
244
245
|
volume = 40;
|
|
245
246
|
}
|
|
246
247
|
else if (this._intrusionAlarmLevel === 2) {
|
|
247
|
-
speakMessage =
|
|
248
|
+
speakMessage = res_1.Res.intruderShutterUpPleaseLeave();
|
|
248
249
|
utils_1.Utils.guardedNewThread(() => {
|
|
249
250
|
this.setAllRolloOfFloor(-1, 100);
|
|
250
251
|
this.setAllLampsOfFloor(-1, true);
|
|
@@ -252,11 +253,11 @@ class RoomBase {
|
|
|
252
253
|
}
|
|
253
254
|
else if (this._intrusionAlarmLevel === 3) {
|
|
254
255
|
volume = 70;
|
|
255
|
-
speakMessage =
|
|
256
|
+
speakMessage = res_1.Res.intruderLeaveAndOwnerInformed();
|
|
256
257
|
}
|
|
257
258
|
else if (this._intrusionAlarmLevel <= 5) {
|
|
258
259
|
volume = 80;
|
|
259
|
-
speakMessage =
|
|
260
|
+
speakMessage = res_1.Res.intruderAdditionalDefenseWarning();
|
|
260
261
|
}
|
|
261
262
|
else if (this._intrusionAlarmLevel >= alarmAutomaticEnd) {
|
|
262
263
|
this.stopIntrusionAlarm();
|
|
@@ -264,7 +265,7 @@ class RoomBase {
|
|
|
264
265
|
}
|
|
265
266
|
else {
|
|
266
267
|
volume = 90;
|
|
267
|
-
speakMessage =
|
|
268
|
+
speakMessage = res_1.Res.intruderAlarm();
|
|
268
269
|
newTimeout = 10000;
|
|
269
270
|
}
|
|
270
271
|
this._intrusionAlarmTimeout = utils_1.Utils.guardedTimeout(() => {
|
|
@@ -6,6 +6,8 @@ interface iSonosSettings {
|
|
|
6
6
|
export interface iConfig {
|
|
7
7
|
expressPort?: number;
|
|
8
8
|
ioBrokerUrl: string;
|
|
9
|
+
logSettings?: iLogSettings;
|
|
10
|
+
translationSettings: iTranslationSettings;
|
|
9
11
|
mp3Server?: iMp3Settings;
|
|
10
12
|
muell?: iMuellSettings;
|
|
11
13
|
persistence?: iPersistenceSettings;
|
|
@@ -16,6 +18,10 @@ export interface iConfig {
|
|
|
16
18
|
timeSettings: iTimeSettings;
|
|
17
19
|
weather?: iWeatherSettings;
|
|
18
20
|
}
|
|
21
|
+
export interface iLogSettings {
|
|
22
|
+
logLevel: number;
|
|
23
|
+
useTimestamp: boolean;
|
|
24
|
+
}
|
|
19
25
|
export interface iTimePair {
|
|
20
26
|
hours: number;
|
|
21
27
|
minutes: number;
|
|
@@ -54,4 +60,7 @@ export interface iWeatherSettings {
|
|
|
54
60
|
export interface iMuellSettings {
|
|
55
61
|
calendarURL: string;
|
|
56
62
|
}
|
|
63
|
+
export interface iTranslationSettings {
|
|
64
|
+
language: string;
|
|
65
|
+
}
|
|
57
66
|
export {};
|
|
@@ -9,6 +9,7 @@ const MagnetPosition_1 = require("../models/MagnetPosition");
|
|
|
9
9
|
const telegram_service_1 = require("../../services/Telegram/telegram-service");
|
|
10
10
|
const logLevel_1 = require("../../../models/logLevel");
|
|
11
11
|
const sonos_service_1 = require("../../services/Sonos/sonos-service");
|
|
12
|
+
const res_1 = require("../../services/Translation/res");
|
|
12
13
|
class HmIpTuer extends hmIpDevice_1.HmIPDevice {
|
|
13
14
|
constructor(pInfo) {
|
|
14
15
|
super(pInfo, deviceType_1.DeviceType.HmIpTuer);
|
|
@@ -66,7 +67,7 @@ class HmIpTuer extends hmIpDevice_1.HmIPDevice {
|
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
69
|
else if (this._iOpen === undefined) {
|
|
69
|
-
const message =
|
|
70
|
+
const message = res_1.Res.wasOpened(this.info.customName);
|
|
70
71
|
//const message: string = `Die Tür mit dem Namen "${this.info.customName}" wurde geöfnet!`
|
|
71
72
|
telegram_service_1.TelegramService.inform(message);
|
|
72
73
|
sonos_service_1.SonosService.speakOnAll(message, 40);
|
|
@@ -23,7 +23,11 @@ export declare class ZigbeeAquaraMotion extends ZigbeeDevice implements iIllumin
|
|
|
23
23
|
get detectionsToday(): number;
|
|
24
24
|
set detectionsToday(pVal: number);
|
|
25
25
|
constructor(pInfo: DeviceInfo);
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Adds a callback for when a motion state has changed.
|
|
28
|
+
* @param pCallback Function that accepts the new state as parameter
|
|
29
|
+
*/
|
|
30
|
+
addMovementCallback(pCallback: (newState: boolean) => void): void;
|
|
27
31
|
updateMovement(newState: boolean): void;
|
|
28
32
|
update(idSplit: string[], state: ioBroker.State, initial?: boolean): void;
|
|
29
33
|
private resetFallbackTimeout;
|
|
@@ -25,11 +25,11 @@ class ZigbeeAquaraMotion extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
25
25
|
persist_1.Persist.getCount(this)
|
|
26
26
|
.then((todayCount) => {
|
|
27
27
|
this.detectionsToday = todayCount.counter;
|
|
28
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `
|
|
28
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `Preinitialized movement counter for "${this.info.customName}" with ${this.detectionsToday}`);
|
|
29
29
|
this._initialized = true;
|
|
30
30
|
})
|
|
31
31
|
.catch((err) => {
|
|
32
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Warn, `Failed to initialize
|
|
32
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Warn, `Failed to initialize movement counter for "${this.info.customName}", err ${err.message}`);
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
// Currently measured brightness in lux
|
|
@@ -53,7 +53,7 @@ class ZigbeeAquaraMotion extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
53
53
|
this.setState(this.occupancyTimeoutID, value, () => {
|
|
54
54
|
this._motionTimeout = value;
|
|
55
55
|
}, (err) => {
|
|
56
|
-
console.log(`Error
|
|
56
|
+
console.log(`Error occurred while setting motion timeout: ${err}`);
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
get detectionsToday() {
|
|
@@ -64,19 +64,23 @@ class ZigbeeAquaraMotion extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
64
64
|
this._detectionsToday = pVal;
|
|
65
65
|
persist_1.Persist.persistTodayCount(this, pVal, oldVal);
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Adds a callback for when a motion state has changed.
|
|
69
|
+
* @param pCallback Function that accepts the new state as parameter
|
|
70
|
+
*/
|
|
67
71
|
addMovementCallback(pCallback) {
|
|
68
72
|
this._movementDetectedCallback.push(pCallback);
|
|
69
73
|
}
|
|
70
74
|
updateMovement(newState) {
|
|
71
75
|
if (!this._initialized && newState) {
|
|
72
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `
|
|
76
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `Movement recognized for "${this.info.customName}", but database initialization has not finished yet --> delay.`);
|
|
73
77
|
utils_1.Utils.guardedTimeout(() => {
|
|
74
78
|
this.updateMovement(newState);
|
|
75
79
|
}, 1000, this);
|
|
76
80
|
return;
|
|
77
81
|
}
|
|
78
82
|
if (newState === this.movementDetected) {
|
|
79
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug,
|
|
83
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `Skip movement for "${this.info.customName}" because state is already ${newState}`);
|
|
80
84
|
if (newState) {
|
|
81
85
|
// Wenn ein Sensor sich nicht von alleine zurücksetzt, hier erzwingen.
|
|
82
86
|
this.resetFallbackTimeout();
|
|
@@ -86,18 +90,18 @@ class ZigbeeAquaraMotion extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
86
90
|
}
|
|
87
91
|
this.resetFallbackTimeout();
|
|
88
92
|
this.movementDetected = newState;
|
|
89
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `
|
|
93
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `New movement state for "${this.info.customName}": ${newState}`);
|
|
90
94
|
if (newState) {
|
|
91
95
|
this.startFallbackTimeout();
|
|
92
96
|
this.detectionsToday++;
|
|
93
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `
|
|
97
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `This is movement no. ${this.detectionsToday} for "${this.info.customName}"`);
|
|
94
98
|
}
|
|
95
99
|
for (const c of this._movementDetectedCallback) {
|
|
96
100
|
c(newState);
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
103
|
update(idSplit, state, initial = false) {
|
|
100
|
-
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.DeepTrace, `
|
|
104
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.DeepTrace, `Motion update for "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`);
|
|
101
105
|
super.update(idSplit, state, initial, true);
|
|
102
106
|
switch (idSplit[3]) {
|
|
103
107
|
case 'occupancy':
|
|
@@ -108,13 +112,13 @@ class ZigbeeAquaraMotion extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
108
112
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `Motion sensor: Update for time since last motion of ${this.info.customName}: ${state.val}`);
|
|
109
113
|
this._timeSinceLastMotion = state.val;
|
|
110
114
|
break;
|
|
111
|
-
case '
|
|
115
|
+
case 'illuminance':
|
|
112
116
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `Motion sensor: Update for illuminance of ${this.info.customName}: ${state.val}`);
|
|
113
117
|
this.currentIllumination = state.val;
|
|
114
118
|
break;
|
|
115
119
|
case 'occupancy_timeout':
|
|
116
120
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Trace, `Motion sensor: Update for motion timeout of ${this.info.customName}: ${state.val}`);
|
|
117
|
-
this.
|
|
121
|
+
this._motionTimeout = state.val;
|
|
118
122
|
break;
|
|
119
123
|
}
|
|
120
124
|
}
|
|
@@ -8,6 +8,7 @@ const polly_service_1 = require("../../services/Sonos/polly-service");
|
|
|
8
8
|
const zigbeeDevice_1 = require("./zigbeeDevice");
|
|
9
9
|
const logLevel_1 = require("../../../models/logLevel");
|
|
10
10
|
const sonos_service_1 = require("../../services/Sonos/sonos-service");
|
|
11
|
+
const res_1 = require("../../services/Translation/res");
|
|
11
12
|
class ZigbeeAquaraVibra extends zigbeeDevice_1.ZigbeeDevice {
|
|
12
13
|
// TODO Set Sensitivity
|
|
13
14
|
constructor(pInfo) {
|
|
@@ -24,7 +25,7 @@ class ZigbeeAquaraVibra extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
24
25
|
this.vibrationBlockedTimeStamp = 0;
|
|
25
26
|
this._idSensitivity = '';
|
|
26
27
|
this._vibrationBlocked = false;
|
|
27
|
-
this._alarmMessage =
|
|
28
|
+
this._alarmMessage = res_1.Res.vibrationAlarm(this.info.customName);
|
|
28
29
|
polly_service_1.PollyService.preloadTTS(this._alarmMessage);
|
|
29
30
|
this._idSensitivity = `${this.info.fullID}.sensitivity`;
|
|
30
31
|
}
|
|
@@ -8,6 +8,7 @@ const polly_service_1 = require("../../services/Sonos/polly-service");
|
|
|
8
8
|
const zigbeeDevice_1 = require("./zigbeeDevice");
|
|
9
9
|
const logLevel_1 = require("../../../models/logLevel");
|
|
10
10
|
const sonos_service_1 = require("../../services/Sonos/sonos-service");
|
|
11
|
+
const res_1 = require("../../services/Translation/res");
|
|
11
12
|
class ZigbeeAquaraWater extends zigbeeDevice_1.ZigbeeDevice {
|
|
12
13
|
constructor(pInfo) {
|
|
13
14
|
super(pInfo, deviceType_1.DeviceType.ZigbeeAquaraWater);
|
|
@@ -17,15 +18,15 @@ class ZigbeeAquaraWater extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
17
18
|
this._messageAlarmFirst = '';
|
|
18
19
|
this._messageAlarm = '';
|
|
19
20
|
this._messageAlarmEnd = '';
|
|
20
|
-
this._messageAlarmFirst =
|
|
21
|
-
this._messageAlarm =
|
|
22
|
-
this._messageAlarmEnd =
|
|
21
|
+
this._messageAlarmFirst = res_1.Res.waterAlarmStart(this.info.customName, this._roomName);
|
|
22
|
+
this._messageAlarm = res_1.Res.waterAlarmRepeat(this.info.customName, this._roomName);
|
|
23
|
+
this._messageAlarmEnd = res_1.Res.waterAlarmEnd(this._roomName);
|
|
23
24
|
}
|
|
24
25
|
set roomName(val) {
|
|
25
26
|
this._roomName = val;
|
|
26
|
-
this._messageAlarmFirst =
|
|
27
|
-
this._messageAlarm =
|
|
28
|
-
this._messageAlarmEnd =
|
|
27
|
+
this._messageAlarmFirst = res_1.Res.waterAlarmStart(this.info.customName, this._roomName);
|
|
28
|
+
this._messageAlarm = res_1.Res.waterAlarmRepeat(this.info.customName, this._roomName);
|
|
29
|
+
this._messageAlarmEnd = res_1.Res.waterAlarmEnd(this._roomName);
|
|
29
30
|
polly_service_1.PollyService.preloadTTS(this._messageAlarmFirst);
|
|
30
31
|
polly_service_1.PollyService.preloadTTS(this._messageAlarm);
|
|
31
32
|
polly_service_1.PollyService.preloadTTS(this._messageAlarmEnd);
|
|
@@ -9,6 +9,7 @@ const polly_service_1 = require("../../services/Sonos/polly-service");
|
|
|
9
9
|
const zigbeeDevice_1 = require("./zigbeeDevice");
|
|
10
10
|
const logLevel_1 = require("../../../models/logLevel");
|
|
11
11
|
const sonos_service_1 = require("../../services/Sonos/sonos-service");
|
|
12
|
+
const res_1 = require("../../services/Translation/res");
|
|
12
13
|
class ZigbeeHeimanSmoke extends zigbeeDevice_1.ZigbeeDevice {
|
|
13
14
|
constructor(pInfo) {
|
|
14
15
|
super(pInfo, deviceType_1.DeviceType.ZigbeeHeimanSmoke);
|
|
@@ -18,15 +19,15 @@ class ZigbeeHeimanSmoke extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
18
19
|
this._messageAlarmFirst = '';
|
|
19
20
|
this._messageAlarm = '';
|
|
20
21
|
this._messageAlarmEnd = '';
|
|
21
|
-
this._messageAlarmFirst =
|
|
22
|
-
this._messageAlarm =
|
|
23
|
-
this._messageAlarmEnd =
|
|
22
|
+
this._messageAlarmFirst = res_1.Res.fireAlarmStart(this._roomName, this.info.customName);
|
|
23
|
+
this._messageAlarm = res_1.Res.fireAlarmRepeat(this._roomName, this.info.customName);
|
|
24
|
+
this._messageAlarmEnd = res_1.Res.fireAlarmEnd(this._roomName);
|
|
24
25
|
}
|
|
25
26
|
set roomName(val) {
|
|
26
27
|
this._roomName = val;
|
|
27
|
-
this._messageAlarmFirst =
|
|
28
|
-
this._messageAlarm =
|
|
29
|
-
this._messageAlarmEnd =
|
|
28
|
+
this._messageAlarmFirst = res_1.Res.fireAlarmStart(this._roomName, this.info.customName);
|
|
29
|
+
this._messageAlarm = res_1.Res.fireAlarmRepeat(this._roomName, this.info.customName);
|
|
30
|
+
this._messageAlarmEnd = res_1.Res.fireAlarmEnd(this._roomName);
|
|
30
31
|
polly_service_1.PollyService.preloadTTS(this._messageAlarmFirst);
|
|
31
32
|
polly_service_1.PollyService.preloadTTS(this._messageAlarm);
|
|
32
33
|
polly_service_1.PollyService.preloadTTS(this._messageAlarmEnd);
|
|
@@ -19,5 +19,5 @@ export declare class ZigbeeIlluDimmer extends ZigbeeDevice implements iLamp {
|
|
|
19
19
|
update(idSplit: string[], state: ioBroker.State, initial?: boolean): void;
|
|
20
20
|
setTimeBased(time: TimeOfDay, timeout?: number, force?: boolean): void;
|
|
21
21
|
setLight(pValue: boolean, timeout?: number, force?: boolean, brightness?: number, transitionTime?: number): void;
|
|
22
|
-
toggleLight(time?: TimeOfDay, force?: boolean): boolean;
|
|
22
|
+
toggleLight(time?: TimeOfDay, force?: boolean, calculateTime?: boolean): boolean;
|
|
23
23
|
}
|
|
@@ -47,14 +47,16 @@ class ZigbeeIlluDimmer extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
47
47
|
setTimeBased(time, timeout = -1, force = false) {
|
|
48
48
|
switch (time) {
|
|
49
49
|
case time_callback_service_1.TimeOfDay.Night:
|
|
50
|
-
this.setLight(true, timeout, force,
|
|
50
|
+
this.setLight(true, timeout, force, this.settings.nightBrightness);
|
|
51
51
|
break;
|
|
52
52
|
case time_callback_service_1.TimeOfDay.AfterSunset:
|
|
53
|
+
this.setLight(true, timeout, force, this.settings.dawnBrightness);
|
|
54
|
+
break;
|
|
53
55
|
case time_callback_service_1.TimeOfDay.BeforeSunrise:
|
|
54
|
-
this.setLight(true, timeout, force,
|
|
56
|
+
this.setLight(true, timeout, force, this.settings.duskBrightness);
|
|
55
57
|
break;
|
|
56
58
|
case time_callback_service_1.TimeOfDay.Daylight:
|
|
57
|
-
this.setLight(true, timeout, force,
|
|
59
|
+
this.setLight(true, timeout, force, this.settings.dayBrightness);
|
|
58
60
|
break;
|
|
59
61
|
}
|
|
60
62
|
}
|
|
@@ -114,9 +116,13 @@ class ZigbeeIlluDimmer extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
114
116
|
}
|
|
115
117
|
}, timeout, this);
|
|
116
118
|
}
|
|
117
|
-
toggleLight(time, force = false) {
|
|
119
|
+
toggleLight(time, force = false, calculateTime = false) {
|
|
120
|
+
var _a;
|
|
118
121
|
const newVal = this.queuedValue !== null ? !this.queuedValue : !this.lightOn;
|
|
119
122
|
const timeout = newVal && force ? 30 * 60 * 1000 : -1;
|
|
123
|
+
if (newVal && time === undefined && calculateTime && this.room !== undefined) {
|
|
124
|
+
time = time_callback_service_1.TimeCallbackService.dayType((_a = this.room) === null || _a === void 0 ? void 0 : _a.Einstellungen.lampOffset);
|
|
125
|
+
}
|
|
120
126
|
if (newVal && time !== undefined) {
|
|
121
127
|
this.setTimeBased(time, timeout, force);
|
|
122
128
|
return true;
|
|
@@ -8,10 +8,12 @@ export declare class ZigbeeIlluShutter extends ZigbeeShutter {
|
|
|
8
8
|
private _msTilTop;
|
|
9
9
|
private _msTilBot;
|
|
10
10
|
private _movementStartPos;
|
|
11
|
+
private _shutterCalibrationData;
|
|
11
12
|
constructor(pInfo: DeviceInfo);
|
|
12
13
|
update(idSplit: string[], state: ioBroker.State, initial?: boolean): void;
|
|
13
14
|
protected moveToPosition(targetPosition: number): void;
|
|
14
15
|
private changeMovementState;
|
|
15
16
|
private processNewMovementState;
|
|
16
17
|
private isCalibrated;
|
|
18
|
+
private persistCalibrationData;
|
|
17
19
|
}
|
|
@@ -6,6 +6,8 @@ const deviceType_1 = require("../deviceType");
|
|
|
6
6
|
const log_service_1 = require("../../services/log-service");
|
|
7
7
|
const logLevel_1 = require("../../../models/logLevel");
|
|
8
8
|
const utils_1 = require("../../services/utils/utils");
|
|
9
|
+
const persist_1 = require("../../services/dbo/persist");
|
|
10
|
+
const ShutterCalibration_1 = require("../../../models/persistence/ShutterCalibration");
|
|
9
11
|
var MovementState;
|
|
10
12
|
(function (MovementState) {
|
|
11
13
|
MovementState[MovementState["Down"] = 30] = "Down";
|
|
@@ -20,7 +22,17 @@ class ZigbeeIlluShutter extends zigbeeShutter_1.ZigbeeShutter {
|
|
|
20
22
|
this._msTilTop = -1;
|
|
21
23
|
this._msTilBot = -1;
|
|
22
24
|
this._movementStartPos = -1;
|
|
25
|
+
this._shutterCalibrationData = new ShutterCalibration_1.ShutterCalibration(this.info.fullID, 0, 0, 0, 0);
|
|
23
26
|
this._movementStateId = `${this.info.fullID}.position`;
|
|
27
|
+
// this.presenceStateID = `${this.info.fullID}.1.${HmIpPraezenz.PRESENCE_DETECTION}`;
|
|
28
|
+
persist_1.Persist.getShutterCalibration(this)
|
|
29
|
+
.then((calibrationData) => {
|
|
30
|
+
this._shutterCalibrationData = calibrationData;
|
|
31
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.DeepTrace, `IlluShutter "${this.info.customName}" initialized with calibration data`);
|
|
32
|
+
})
|
|
33
|
+
.catch((err) => {
|
|
34
|
+
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Warn, `Failed to initialize Calibration data for "${this.info.customName}", err ${err.message}`);
|
|
35
|
+
});
|
|
24
36
|
}
|
|
25
37
|
update(idSplit, state, initial = false) {
|
|
26
38
|
switch (idSplit[3]) {
|
|
@@ -74,12 +86,20 @@ class ZigbeeIlluShutter extends zigbeeShutter_1.ZigbeeShutter {
|
|
|
74
86
|
this._msTilTop = timePassed;
|
|
75
87
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `New Time-Until-Top measurement for ${this.info.customName}: ${timePassed}ms`);
|
|
76
88
|
this.currentLevel = this._setLevel;
|
|
89
|
+
this._shutterCalibrationData.counterUp++;
|
|
90
|
+
this._shutterCalibrationData.averageUp +=
|
|
91
|
+
(this._msTilTop - this._shutterCalibrationData.averageUp) / this._shutterCalibrationData.counterUp;
|
|
92
|
+
this.persistCalibrationData();
|
|
77
93
|
return;
|
|
78
94
|
}
|
|
79
95
|
if (this._movementStartPos === 100 && oldState === MovementState.Down && this._setLevel === 0) {
|
|
80
96
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Debug, `New Time-Until-Bottom measurement for ${this.info.customName}: ${timePassed}ms`);
|
|
81
97
|
this._msTilBot = timePassed;
|
|
82
98
|
this.currentLevel = this._setLevel;
|
|
99
|
+
this._shutterCalibrationData.counterDown++;
|
|
100
|
+
this._shutterCalibrationData.averageDown +=
|
|
101
|
+
(this._msTilBot - this._shutterCalibrationData.averageDown) / this._shutterCalibrationData.counterDown;
|
|
102
|
+
this.persistCalibrationData();
|
|
83
103
|
return;
|
|
84
104
|
}
|
|
85
105
|
if (!this.isCalibrated()) {
|
|
@@ -93,7 +113,10 @@ class ZigbeeIlluShutter extends zigbeeShutter_1.ZigbeeShutter {
|
|
|
93
113
|
}
|
|
94
114
|
}
|
|
95
115
|
isCalibrated() {
|
|
96
|
-
return this.
|
|
116
|
+
return this._shutterCalibrationData.averageUp > 0 && this._shutterCalibrationData.averageDown > 0;
|
|
117
|
+
}
|
|
118
|
+
persistCalibrationData() {
|
|
119
|
+
persist_1.Persist.persistShutterCalibration(this._shutterCalibrationData);
|
|
97
120
|
}
|
|
98
121
|
}
|
|
99
122
|
exports.ZigbeeIlluShutter = ZigbeeIlluShutter;
|
|
@@ -8,6 +8,7 @@ const logLevel_1 = require("../../../models/logLevel");
|
|
|
8
8
|
const sonos_service_1 = require("../../services/Sonos/sonos-service");
|
|
9
9
|
const zigbeeDevice_1 = require("./zigbeeDevice");
|
|
10
10
|
const MagnetPosition_1 = require("../models/MagnetPosition");
|
|
11
|
+
const res_1 = require("../../services/Translation/res");
|
|
11
12
|
class ZigbeeMagnetContact extends zigbeeDevice_1.ZigbeeDevice {
|
|
12
13
|
constructor(pInfo, deviceType) {
|
|
13
14
|
super(pInfo, deviceType);
|
|
@@ -40,9 +41,9 @@ class ZigbeeMagnetContact extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
40
41
|
if (pValue === MagnetPosition_1.MagnetPosition.closed) {
|
|
41
42
|
if (this._iOpen !== undefined) {
|
|
42
43
|
clearInterval(this._iOpen);
|
|
43
|
-
let message =
|
|
44
|
+
let message = res_1.Res.closedAfterMinutes(this.info.customName, this.minutesOpen.toString(10));
|
|
44
45
|
if (this.minutesOpen === 0) {
|
|
45
|
-
message =
|
|
46
|
+
message = res_1.Res.justClosed(this.info.customName);
|
|
46
47
|
}
|
|
47
48
|
// const message: string = `Die Tür mit dem Namen "${this.info.customName}" wurde nach ${this.minutesOpen} Minuten geschlossen!`;
|
|
48
49
|
log_service_1.ServerLogService.writeLog(logLevel_1.LogLevel.Info, message);
|
|
@@ -53,8 +54,7 @@ class ZigbeeMagnetContact extends zigbeeDevice_1.ZigbeeDevice {
|
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
56
|
else if (this._iOpen === undefined) {
|
|
56
|
-
const message =
|
|
57
|
-
//const message: string = `Die Tür mit dem Namen "${this.info.customName}" wurde geöfnet!`
|
|
57
|
+
const message = res_1.Res.wasOpened(this.info.customName);
|
|
58
58
|
telegram_service_1.TelegramService.inform(message);
|
|
59
59
|
sonos_service_1.SonosService.speakOnAll(message, 40);
|
|
60
60
|
this._iOpen = utils_1.Utils.guardedInterval(() => {
|
|
@@ -100,8 +100,6 @@ class SonosService {
|
|
|
100
100
|
}
|
|
101
101
|
const specificTimeout = Math.ceil(duration / 1000) + 5;
|
|
102
102
|
const options = {
|
|
103
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
104
|
-
// @ts-ignore
|
|
105
103
|
catchQueueErrors: true,
|
|
106
104
|
trackUri: `${(_b = settings_service_1.SettingsService.settings.mp3Server) === null || _b === void 0 ? void 0 : _b.serverAddress}/file.mp3?fname=${mp3Name}`,
|
|
107
105
|
delayMs: 750,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface IRessourceObject {
|
|
2
|
+
de?: string;
|
|
3
|
+
en: string;
|
|
4
|
+
}
|
|
5
|
+
export interface IRessources {
|
|
6
|
+
alarmArmed: IRessourceObject;
|
|
7
|
+
alarmNightModeArmed: IRessourceObject;
|
|
8
|
+
closedAfterMinutes: IRessourceObject;
|
|
9
|
+
fireAlarmEnd: IRessourceObject;
|
|
10
|
+
fireAlarmRepeat: IRessourceObject;
|
|
11
|
+
fireAlarmStart: IRessourceObject;
|
|
12
|
+
goodMorning: IRessourceObject;
|
|
13
|
+
intruderAlarm: IRessourceObject;
|
|
14
|
+
intruderAdditionalDefenseWarning: IRessourceObject;
|
|
15
|
+
intruderGreeting: IRessourceObject;
|
|
16
|
+
intruderLeaveAndOwnerInformed: IRessourceObject;
|
|
17
|
+
intruderShutterUpPleaseLeave: IRessourceObject;
|
|
18
|
+
justClosed: IRessourceObject;
|
|
19
|
+
vibrationAlarm: IRessourceObject;
|
|
20
|
+
waterAlarmEnd: IRessourceObject;
|
|
21
|
+
waterAlarmRepeat: IRessourceObject;
|
|
22
|
+
waterAlarmStart: IRessourceObject;
|
|
23
|
+
wasOpened: IRessourceObject;
|
|
24
|
+
welcomeHome: IRessourceObject;
|
|
25
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./iRessources"), exports);
|
|
14
|
+
__exportStar(require("./res"), exports);
|