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.
Files changed (37) hide show
  1. package/README.md +1 -0
  2. package/lib/index.js +7 -0
  3. package/lib/models/dimmerSettings.d.ts +6 -4
  4. package/lib/models/dimmerSettings.js +7 -4
  5. package/lib/models/persistence/ShutterCalibration.d.ts +8 -0
  6. package/lib/models/persistence/ShutterCalibration.js +13 -0
  7. package/lib/models/persistence/index.d.ts +4 -3
  8. package/lib/models/persistence/index.js +4 -3
  9. package/lib/models/rooms/RoomBase.js +10 -9
  10. package/lib/server/config/iConfig.d.ts +9 -0
  11. package/lib/server/devices/hmIPDevices/hmIpTuer.js +2 -1
  12. package/lib/server/devices/zigbee/zigbeeAquaraMotion.d.ts +5 -1
  13. package/lib/server/devices/zigbee/zigbeeAquaraMotion.js +14 -10
  14. package/lib/server/devices/zigbee/zigbeeAquaraVibra.js +2 -1
  15. package/lib/server/devices/zigbee/zigbeeAquaraWater.js +7 -6
  16. package/lib/server/devices/zigbee/zigbeeHeimanSmoke.js +7 -6
  17. package/lib/server/devices/zigbee/zigbeeIlluDimmer.d.ts +1 -1
  18. package/lib/server/devices/zigbee/zigbeeIlluDimmer.js +10 -4
  19. package/lib/server/devices/zigbee/zigbeeIlluShutter.d.ts +2 -0
  20. package/lib/server/devices/zigbee/zigbeeIlluShutter.js +24 -1
  21. package/lib/server/devices/zigbee/zigbeeMagnetContact.js +4 -4
  22. package/lib/server/services/Sonos/sonos-service.js +0 -2
  23. package/lib/server/services/Translation/iRessources.d.ts +25 -0
  24. package/lib/server/services/Translation/iRessources.js +2 -0
  25. package/lib/server/services/Translation/index.d.ts +2 -0
  26. package/lib/server/services/Translation/index.js +14 -0
  27. package/lib/server/services/Translation/res.d.ts +83 -0
  28. package/lib/server/services/Translation/res.js +147 -0
  29. package/lib/server/services/Translation/resources.json +78 -0
  30. package/lib/server/services/dbo/persist.d.ts +11 -3
  31. package/lib/server/services/dbo/persist.js +64 -24
  32. package/lib/server/services/index.d.ts +1 -0
  33. package/lib/server/services/index.js +1 -0
  34. package/lib/server/services/log-service.d.ts +3 -1
  35. package/lib/server/services/log-service.js +9 -3
  36. package/lib/tsconfig.tsbuildinfo +1 -1
  37. 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
- export declare class DimmerSettings {
2
- dawnOn: boolean;
3
- duskOn: boolean;
4
- nightOn: boolean;
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
- class DimmerSettings {
4
+ const actuatorSettings_1 = require("./actuatorSettings");
5
+ class DimmerSettings extends actuatorSettings_1.ActuatorSettings {
5
6
  constructor() {
6
- this.dawnOn = true;
7
- this.duskOn = true;
8
- this.nightOn = true;
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 './RoomDetailInfo';
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 './CurrentIlluminationDataPoint';
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("./RoomDetailInfo"), exports);
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("./CurrentIlluminationDataPoint"), exports);
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(`Alarmanlage wird scharfgeschaltet.`, 40);
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(`Alarmanlage wird für die Nacht scharfgeschaltet. Gute Nacht!`, 30);
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(`Willkommen Zuhause!`, 35);
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(`Guten Morgen!`, 30);
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 = `Hallo potenzieller Eindringling! Das Alarmprotokoll ist initiiert bitte verlassen Sie umgehend das Gebäude!`;
244
+ speakMessage = res_1.Res.intruderGreeting();
244
245
  volume = 40;
245
246
  }
246
247
  else if (this._intrusionAlarmLevel === 2) {
247
- speakMessage = `Alle Rollos fahren hoch, bitte begeben Sie sich zum nächsten Ausgang`;
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 = `Verlassen Sie sofort das Gebäude! Die Behörden sind informiert`;
256
+ speakMessage = res_1.Res.intruderLeaveAndOwnerInformed();
256
257
  }
257
258
  else if (this._intrusionAlarmLevel <= 5) {
258
259
  volume = 80;
259
- speakMessage = `Weitere Abwehrmaßnahmen werden eingeleitet`;
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 = `Alarm. Einbrecher erkannt.`;
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 = `"${this.info.customName}" was opened`;
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
- addMovementCallback(pCallback: (pValue: boolean) => void): void;
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, `Bewegungscounter "${this.info.customName}" vorinitialisiert mit ${this.detectionsToday}`);
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 Movement Counter for "${this.info.customName}", err ${err.message}`);
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 occured while setting motion timeout: ${err}`);
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, `Bewegung für "${this.info.customName}" erkannt aber die Initialisierung aus der DB ist noch nicht erfolgt --> verzögern`);
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, `Überspringe Bewegung für "${this.info.customName}" da bereits der Wert ${newState} vorliegt`);
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, `Neuer Bewegunsstatus Wert für "${this.info.customName}": ${newState}`);
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, `Dies ist die ${this.detectionsToday} Bewegung für "${this.info.customName}"`);
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, `Stecker Update für "${this.info.customName}": ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`);
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 'illumincance':
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._illuminance = state.val;
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 = `Alarm bei ${this.info.customName}. Ich wiederhole: Alarm bei ${this.info.customName}`;
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 = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
21
- this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
22
- this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
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 = `${this.info.customName} erkennt Wasser. Möglicher Rohrbruch in ${this._roomName}`;
27
- this._messageAlarm = `${this.info.customName} hat ausgelöst. Poolparty in ${this._roomName}`;
28
- this._messageAlarmEnd = `Wasser Alarm Ende: Überflutung in ${this._roomName} zu Ende.`;
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 = `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.`;
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 = `Rauchmelder in ${this._roomName} ausgelöst. Möglicher Brand in ${this._roomName}`;
28
- this._messageAlarm = `Rauchmelder in ${this._roomName} aktiv. Möglicher Brand in ${this._roomName}`;
29
- this._messageAlarmEnd = `Rauchmelder Alarm Ende: Gefahr in ${this._roomName} zu Ende.`;
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);
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, 75);
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, 100);
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._msTilTop > 0 && this._msTilBot > 0;
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 = `${this.info.customName} closed after ${this.minutesOpen} minutes!`;
44
+ let message = res_1.Res.closedAfterMinutes(this.info.customName, this.minutesOpen.toString(10));
44
45
  if (this.minutesOpen === 0) {
45
- message = `"${this.info.customName}" just closed`;
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 = `"${this.info.customName}" was opened`;
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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export * from './iRessources';
2
+ export * from './res';
@@ -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);