hoffmation-base 1.0.4 → 1.0.7

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.
@@ -43,6 +43,11 @@ export interface iConfig {
43
43
  export interface iLogSettings {
44
44
  logLevel: number;
45
45
  useTimestamp: boolean;
46
+ debugNewMovementState?: boolean;
47
+ debugShutterPositionChange?: boolean;
48
+ debugActuatorChange?: boolean;
49
+ debugUchangedShutterPosition?: boolean;
50
+ debugUnchangedActuator?: boolean;
46
51
  }
47
52
  export interface iTimePair {
48
53
  hours: number;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="iobroker" />
2
2
  import { IBaseDevice } from './baseDeviceInterfaces';
3
+ import { LogDebugType } from '../services';
3
4
  import { DeviceInfo } from './DeviceInfo';
4
5
  import { LogLevel, RoomBase, RoomDeviceAddingSettings } from '../../models';
5
6
  import { IOBrokerConnection } from '../ioBroker';
@@ -37,7 +38,7 @@ export declare abstract class IoBrokerBaseDevice implements IBaseDevice {
37
38
  */
38
39
  checkIoConnection(showError?: boolean): boolean;
39
40
  abstract update(idSplit: string[], state: ioBroker.State, initial: boolean, pOverride: boolean): void;
40
- log(level: LogLevel, message: string): void;
41
+ log(level: LogLevel, message: string, logDebugType?: LogDebugType): void;
41
42
  toJSON(): Partial<IoBrokerBaseDevice>;
42
43
  protected addToCorrectRoom(): void;
43
44
  /**
@@ -61,11 +61,12 @@ class IoBrokerBaseDevice {
61
61
  }
62
62
  return this.ioConn !== undefined;
63
63
  }
64
- log(level, message) {
64
+ log(level, message, logDebugType = services_1.LogDebugType.None) {
65
65
  services_1.ServerLogService.writeLog(level, message, {
66
66
  room: this.info.room,
67
67
  deviceId: this.id,
68
68
  deviceName: this.info.customName,
69
+ debugType: logDebugType,
69
70
  });
70
71
  }
71
72
  toJSON() {
@@ -31,7 +31,7 @@ class HmIpLampe extends hmIpDevice_1.HmIPDevice {
31
31
  /** @inheritdoc */
32
32
  setLight(pValue, timeout = -1, force = false) {
33
33
  if (!force && pValue === this.lightOn && this.queuedLightValue === null) {
34
- this.log(models_1.LogLevel.DeepTrace, `Skip light command as it is already ${pValue}`);
34
+ this.log(models_1.LogLevel.DeepTrace, `Skip light command as it is already ${pValue}`, services_1.LogDebugType.SkipUnchangedActuatorCommand);
35
35
  return;
36
36
  }
37
37
  if (this.lightOnSwitchID === '') {
@@ -42,7 +42,7 @@ class HmIpLampe extends hmIpDevice_1.HmIPDevice {
42
42
  this.log(models_1.LogLevel.Debug, `Skip automatic command to ${pValue} as it is locked until ${new Date(this.turnOffTime).toLocaleString()}`);
43
43
  return;
44
44
  }
45
- this.log(models_1.LogLevel.Debug, `Lampe schalten Wert: ${pValue}`);
45
+ this.log(models_1.LogLevel.Debug, `Set Light Acutator to "${pValue}"`, services_1.LogDebugType.SetActuator);
46
46
  this.setState(this.lightOnSwitchID, pValue, undefined, (err) => {
47
47
  this.log(models_1.LogLevel.Error, `Lampe schalten ergab Fehler: ${err}`);
48
48
  });
@@ -69,7 +69,7 @@ class HmIpRoll extends hmIpDevice_1.HmIPDevice {
69
69
  return;
70
70
  }
71
71
  if (this.currentLevel === pPosition) {
72
- this.log(models_2.LogLevel.Debug, `Skip Rollo command to Position ${pPosition} as this is the current one`);
72
+ this.log(models_2.LogLevel.Debug, `Skip Rollo command to Position ${pPosition} as this is the current one`, services_1.LogDebugType.SkipUnchangedRolloPosition);
73
73
  return;
74
74
  }
75
75
  if (this._setLevelSwitchID === '') {
@@ -37,10 +37,10 @@ class ZigbeeActuator extends zigbeeDevice_1.ZigbeeDevice {
37
37
  return;
38
38
  }
39
39
  if (!force && pValue === this.actuatorOn && this.queuedValue === null) {
40
- this.log(models_1.LogLevel.Debug, `Skip actuator command as it is already ${pValue}`);
40
+ this.log(models_1.LogLevel.Debug, `Skip actuator command as it is already ${pValue}`, services_1.LogDebugType.SkipUnchangedActuatorCommand);
41
41
  return;
42
42
  }
43
- this.log(models_1.LogLevel.Debug, `Switch actuator to: ${pValue}`);
43
+ this.log(models_1.LogLevel.Debug, `Set outlet Acutator to "${pValue}"`, services_1.LogDebugType.SetActuator);
44
44
  this.setState(this.actuatorOnSwitchID, pValue, undefined, (err) => {
45
45
  this.log(models_1.LogLevel.Error, `Switching actuator resulted in error: ${err}`);
46
46
  });
@@ -70,7 +70,7 @@ class ZigbeeShutter extends zigbeeDevice_1.ZigbeeDevice {
70
70
  return;
71
71
  }
72
72
  if (this.currentLevel === pPosition) {
73
- this.log(models_1.LogLevel.Debug, `Skip Rollo command to Position ${pPosition} as this is the current one`);
73
+ this.log(models_1.LogLevel.Debug, `Skip Rollo command to Position ${pPosition} as this is the current one`, services_1.LogDebugType.SkipUnchangedRolloPosition);
74
74
  return;
75
75
  }
76
76
  if (this._fenster !== undefined) {
@@ -88,7 +88,7 @@ class ZigbeeIlluDimmer extends BaseDevices_1.ZigbeeDevice {
88
88
  if (pValue && brightness === -1 && this.brightness < 10) {
89
89
  brightness = 10;
90
90
  }
91
- this.log(models_1.LogLevel.Debug, `Dimmer Schalten An: ${pValue} \t Helligkeit: ${brightness}%`);
91
+ this.log(models_1.LogLevel.Debug, `Set Light Acutator to "${pValue}" with brightness ${brightness}`, services_1.LogDebugType.SetActuator);
92
92
  this.setState(this.stateID, pValue);
93
93
  this.queuedValue = pValue;
94
94
  if (brightness > -1) {
@@ -22,7 +22,7 @@ class ZigbeeIlluLampe extends zigbeeIlluActuator_1.ZigbeeIlluActuator {
22
22
  }
23
23
  /** @inheritdoc */
24
24
  setLight(pValue, timeout = -1, force = false) {
25
- this.log(models_1.LogLevel.Debug, `Lampenaktor schalten Wert: ${pValue}`);
25
+ this.log(models_1.LogLevel.Debug, `Set Light Acutator to "${pValue}"`, services_1.LogDebugType.SetActuator);
26
26
  if (this.settings.isStromStoss) {
27
27
  timeout = 3000;
28
28
  services_1.Utils.guardedTimeout(() => {
@@ -53,7 +53,7 @@ class ZigbeeMotionSensor extends BaseDevices_1.ZigbeeDevice {
53
53
  return;
54
54
  }
55
55
  if (newState === this.movementDetected) {
56
- this.log(models_1.LogLevel.Debug, `Skip movement because state is already ${newState}`);
56
+ this.log(models_1.LogLevel.Debug, `Skip movement because state is already ${newState}`, services_1.LogDebugType.SkipUnchangedMovementState);
57
57
  if (newState) {
58
58
  // Wenn ein Sensor sich nicht von alleine zurücksetzt, hier erzwingen.
59
59
  this.resetFallbackTimeout();
@@ -63,7 +63,7 @@ class ZigbeeMotionSensor extends BaseDevices_1.ZigbeeDevice {
63
63
  }
64
64
  this.resetFallbackTimeout();
65
65
  this.movementDetected = newState;
66
- this.log(models_1.LogLevel.Debug, `New movement state: ${newState}`);
66
+ this.log(models_1.LogLevel.Debug, `New movement state: ${newState}`, services_1.LogDebugType.NewMovementState);
67
67
  if (newState) {
68
68
  this.startFallbackTimeout();
69
69
  this.detectionsToday++;
@@ -41,7 +41,7 @@ class SonosService {
41
41
  if (m.from === undefined)
42
42
  return false;
43
43
  SonosService.speakTestMessageOnEachDevice();
44
- Telegram_1.TelegramService.sendMessage([m.from.id], 'Testnachricht gesprochen --> Führe weiteren Test durch');
44
+ Telegram_1.TelegramService.sendMessage([m.chat.id], 'Testnachricht gesprochen --> Führe weiteren Test durch');
45
45
  await SonosService.checkAll();
46
46
  return true;
47
47
  }, `Spiele eine kurze Nachricht auf allen Sonos Geräten um diese zu identifizieren`));
@@ -73,6 +73,7 @@ class SonosService {
73
73
  for (const deviceName in this.ownDevices) {
74
74
  currentDevice = this.ownDevices[deviceName];
75
75
  if ((currentDevice === null || currentDevice === void 0 ? void 0 : currentDevice.device) === undefined) {
76
+ // noinspection ExceptionCaughtLocallyJS
76
77
  throw `${currentDevice === null || currentDevice === void 0 ? void 0 : currentDevice.name} is missing`;
77
78
  }
78
79
  await currentDevice.device.GetState();
@@ -12,7 +12,7 @@ class TelegramCommands {
12
12
  if (m.from === undefined)
13
13
  return false;
14
14
  room_service_1.RoomService.clearAllAlarms();
15
- telegram_service_1.TelegramService.sendMessage([m.from.id], 'Alle ausgelösten Wasser-/Rauchmelder und Eindringlingsalarme wurden gestoppt.');
15
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], 'Alle ausgelösten Wasser-/Rauchmelder und Eindringlingsalarme wurden gestoppt.');
16
16
  return true;
17
17
  }, 'Eine Möglichkeit bei Fehlalarm den Alarm abzuschalten'));
18
18
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('AwayModeStart', /\/away_mode_start/, async (m) => {
@@ -33,62 +33,62 @@ class TelegramCommands {
33
33
  if (m.from === undefined)
34
34
  return false;
35
35
  room_service_1.RoomService.endAlarmModes();
36
- telegram_service_1.TelegramService.sendMessage([m.from.id], 'Der Abwesenheitsmodus ist deaktiviert.');
36
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], 'Der Abwesenheitsmodus ist deaktiviert.');
37
37
  return true;
38
38
  }, 'Alarmanlage nach Abwesenheit/Nacht entschärfen'));
39
39
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('LastMovements', /\/check_movement/, async (m) => {
40
40
  if (m.from === undefined)
41
41
  return false;
42
- telegram_service_1.TelegramService.sendMessage([m.from.id], `Im Folgenden sind die letzten Bewegungen\n${room_service_1.RoomService.getLastMovements()}`);
42
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], `Im Folgenden sind die letzten Bewegungen\n${room_service_1.RoomService.getLastMovements()}`);
43
43
  return true;
44
44
  }, 'Gibt die letzten Bewegungen inkl. ihrer Uhrzeit aus.'));
45
45
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('TelegramTest', /\/test/, async (m) => {
46
46
  if (m.from === undefined)
47
47
  return false;
48
- telegram_service_1.TelegramService.sendMessage([m.from.id], 'Hallo, ich bin der HoffMation Bot.');
48
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], 'Hallo, ich bin der HoffMation Bot.');
49
49
  return true;
50
50
  }, 'Eine Möglichkeit die Verknüpfung mit dem HoffMation Bot zu testen'));
51
51
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('RolloObenCheck', /\/check_rollo/, async (m) => {
52
52
  if (m.from === undefined)
53
53
  return false;
54
- telegram_service_1.TelegramService.sendMessage([m.from.id], ShutterService_1.ShutterService.getRolladenPosition());
54
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], ShutterService_1.ShutterService.getRolladenPosition());
55
55
  return true;
56
56
  }, 'Gibt die Positionen der Rollos aus, warnt über offene Rollos und nennt die nächsten Fahrten'));
57
57
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('FensterCheck', /\/check_fenster/, async (m) => {
58
58
  if (m.from === undefined)
59
59
  return false;
60
- telegram_service_1.TelegramService.sendMessage([m.from.id], devices_1.Griffe.getGriffPosition());
60
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], devices_1.Griffe.getGriffPosition());
61
61
  return true;
62
62
  }, 'Gibt die Positionen der Fenstergriffe aus und warnt somit über offene Fenster'));
63
63
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('BatteryCheck', /\/check_battery/, async (m) => {
64
64
  if (m.from === undefined)
65
65
  return Promise.resolve(false);
66
- telegram_service_1.TelegramService.sendMessage([m.from.id], devices_1.Devices.getBatteryInfo());
66
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], devices_1.Devices.getBatteryInfo());
67
67
  return Promise.resolve(true);
68
68
  }, 'Returns a list of all battery driven devices in ascending order.'));
69
69
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('HeizungCheck', /\/check_temperatur/, async (m) => {
70
70
  if (m.from === undefined)
71
71
  return false;
72
- telegram_service_1.TelegramService.sendMessage([m.from.id], devices_1.Heizgruppen.getInfo());
72
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], devices_1.Heizgruppen.getInfo());
73
73
  return true;
74
74
  }, 'Gibt die Namen und aktuellen Werte sämtlicher Heizgruppen aus (aktuelle Temperatur, Soll Temperatur, Ventilstellung).'));
75
75
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('HeizungError', /\/temperatur_error/, async (m) => {
76
76
  if (m.from === undefined)
77
77
  return false;
78
- telegram_service_1.TelegramService.sendMessage([m.from.id], devices_1.Heizgruppen.getProblems());
78
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], devices_1.Heizgruppen.getProblems());
79
79
  return true;
80
80
  }, 'Zeigt Differenzen zwischen Heizungen und den jeweiligen Heizgruppen auf'));
81
81
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('HeizungCheckOne', /\/check_1_temperatur.*/, async (m) => {
82
82
  if (m.from === undefined)
83
83
  return false;
84
- telegram_service_1.TelegramService.sendMessage([m.from.id], await devices_1.Heizgruppen.getSpecificInfo(m.text));
84
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], await devices_1.Heizgruppen.getSpecificInfo(m.text));
85
85
  return true;
86
86
  }, `Gibt den Verlauf der in \\"\\" übergebenen Heizgruppe aus.`, /\/check_1_temperatur/));
87
87
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('AllRolloDown', /\/all_rollo_down/, async (m) => {
88
88
  if (m.from === undefined)
89
89
  return false;
90
90
  room_service_1.RoomService.setAllRolloOfFloor(-1, 0);
91
- telegram_service_1.TelegramService.sendMessage([m.from.id], `Es werden alle Rollos heruntergefahren`);
91
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], `Es werden alle Rollos heruntergefahren`);
92
92
  return true;
93
93
  }, `Fährt alle rollos runter`));
94
94
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('VibrationSensitivity', /\/set_vibration_sensitivity/, async (m) => {
@@ -100,7 +100,7 @@ class TelegramCommands {
100
100
  d.setSensitivity(2);
101
101
  }
102
102
  }
103
- telegram_service_1.TelegramService.sendMessage([m.from.id], 'Abgeschlossen');
103
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], 'Abgeschlossen');
104
104
  return true;
105
105
  }, `Setzt alle Vibrationsensoren auf High`));
106
106
  telegram_service_1.TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('AllButtonAssignments', /\/get_all_button_assignments/, async (m) => {
@@ -113,7 +113,7 @@ class TelegramCommands {
113
113
  response.push(d.getButtonAssignment());
114
114
  }
115
115
  }
116
- telegram_service_1.TelegramService.sendMessage([m.from.id], response.join('\n'));
116
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], response.join('\n'));
117
117
  return true;
118
118
  }, `Retrieves the button assignments for all buttons in home`));
119
119
  if (devices_1.Devices.energymanager !== undefined) {
@@ -128,7 +128,7 @@ class TelegramCommands {
128
128
  response.push(`Drawing Wattage: ${(_d = devices_1.Devices.energymanager) === null || _d === void 0 ? void 0 : _d.drawingWattage}W`);
129
129
  response.push(`Self Consuming Wattage: ${(_e = devices_1.Devices.energymanager) === null || _e === void 0 ? void 0 : _e.selfConsumingWattage}W`);
130
130
  response.push(`Injecting Wattage: ${(_f = devices_1.Devices.energymanager) === null || _f === void 0 ? void 0 : _f.injectingWattage}W`);
131
- telegram_service_1.TelegramService.sendMessage([m.from.id], response.join('\n'));
131
+ telegram_service_1.TelegramService.sendMessage([m.chat.id], response.join('\n'));
132
132
  return true;
133
133
  }, `Retrieves the current energy manager values`));
134
134
  }
@@ -46,7 +46,6 @@ class TelegramService {
46
46
  log_service_1.ServerLogService.writeLog(models_1.LogLevel.Trace, `Telegram Polling Error stack: ${e.stack}`);
47
47
  });
48
48
  TelegramService.addMessageCallback(new telegramMessageCalback_1.TelegramMessageCallback('helpCommand', /\/help/, async (m) => {
49
- var _a;
50
49
  if (m.from === undefined)
51
50
  return true;
52
51
  const message = [];
@@ -55,7 +54,7 @@ class TelegramService {
55
54
  const telegramCb = TelegramService.callbacks[cName];
56
55
  message.push(`${telegramCb.identifier.toString().replace(/\//g, '').replace(/\\/g, '')} - ${telegramCb.helpMessage}`);
57
56
  }
58
- TelegramService.sendMessage([(_a = m.from) === null || _a === void 0 ? void 0 : _a.id], message.join('\n'));
57
+ TelegramService.sendMessage([m.chat.id], message.join('\n'));
59
58
  return true;
60
59
  }, `Gibt eine Liste mit sämtlichen Kommandos aus`));
61
60
  TelegramService.inform(`(Re-)Initialisierung abgeschlossen`);
@@ -97,7 +96,7 @@ class TelegramService {
97
96
  }
98
97
  static checkAuthorized(msg) {
99
98
  var _a;
100
- if (msg.from !== undefined && this.allowedIDs.includes((_a = msg.from) === null || _a === void 0 ? void 0 : _a.id)) {
99
+ if ((msg.from !== undefined && this.allowedIDs.includes((_a = msg.from) === null || _a === void 0 ? void 0 : _a.id)) || this.allowedIDs.includes(msg.chat.id)) {
101
100
  log_service_1.ServerLogService.writeLog(models_1.LogLevel.Debug, `Authorisierte Telegram Message erhalten: ${JSON.stringify(msg)}`);
102
101
  return true;
103
102
  }
@@ -31,14 +31,14 @@ class DaikinService {
31
31
  if (m.from === undefined)
32
32
  return false;
33
33
  DaikinService.setAll(true);
34
- Telegram_1.TelegramService.sendMessage([m.from.id], 'Command executed');
34
+ Telegram_1.TelegramService.sendMessage([m.chat.id], 'Command executed');
35
35
  return true;
36
36
  }, `Turns all Ac's on without changing any settings`));
37
37
  Telegram_1.TelegramService.addMessageCallback(new Telegram_1.TelegramMessageCallback('AcOff', /\/ac_off/, async (m) => {
38
38
  if (m.from === undefined)
39
39
  return false;
40
40
  DaikinService.setAll(false, true);
41
- Telegram_1.TelegramService.sendMessage([m.from.id], 'Command executed');
41
+ Telegram_1.TelegramService.sendMessage([m.chat.id], 'Command executed');
42
42
  return true;
43
43
  }, `Turns all Ac's off without changing any settings`));
44
44
  return new Promise((res, _rej) => {
@@ -61,6 +61,9 @@ class DaikinService {
61
61
  });
62
62
  }
63
63
  static setAll(on, force = false) {
64
+ if (!this.isInitialized) {
65
+ return;
66
+ }
64
67
  for (const deviceName in this._ownDevices) {
65
68
  const dev = this._ownDevices[deviceName];
66
69
  if (on) {
@@ -1,7 +1,14 @@
1
1
  import { IBaseDevice } from '../../devices';
2
2
  import { RoomBase } from '../../../models';
3
3
  import { LogObject } from '../log-service';
4
+ import { OwnDaikinDevice } from '../ac';
4
5
  export declare class API {
6
+ /**
7
+ * Gets the instance of an Daikin Device identified by name
8
+ * @param {string} name
9
+ * @returns {OwnDaikinDevice | undefined}
10
+ */
11
+ static getAc(name: string): OwnDaikinDevice | undefined;
5
12
  static getDevices(): {
6
13
  [id: string]: IBaseDevice;
7
14
  };
@@ -9,4 +16,22 @@ export declare class API {
9
16
  static getRooms(): Map<string, RoomBase>;
10
17
  static getRoom(id: string): RoomBase | undefined;
11
18
  static getLog(): LogObject[];
19
+ /**
20
+ * Turns on/off one AC identified by it's name
21
+ * @param name The name of the device, if wrong false will be returned
22
+ * @param {boolean} desiredState
23
+ */
24
+ static setAc(name: string, desiredState: boolean): boolean;
25
+ /**
26
+ * Turns on/off all AC´s in the home
27
+ * @param {boolean} desiredState
28
+ */
29
+ static setAllAc(desiredState: boolean): void;
30
+ /**
31
+ * Changes the status of a given Lamp
32
+ * @param {string} deviceId The device Id of the lamp
33
+ * @param {boolean} state The desired new state
34
+ * @returns {Error | null} In case it failed the Error containing the reason
35
+ */
36
+ static setLight(deviceId: string, state: boolean): Error | null;
12
37
  }
@@ -5,7 +5,16 @@ const devices_1 = require("../../devices");
5
5
  const models_1 = require("../../../models");
6
6
  const room_service_1 = require("../room-service");
7
7
  const log_service_1 = require("../log-service");
8
+ const ac_1 = require("../ac");
8
9
  class API {
10
+ /**
11
+ * Gets the instance of an Daikin Device identified by name
12
+ * @param {string} name
13
+ * @returns {OwnDaikinDevice | undefined}
14
+ */
15
+ static getAc(name) {
16
+ return ac_1.OwnDaikinDevices.ownDevices[name];
17
+ }
9
18
  static getDevices() {
10
19
  // console.log(inspect(Devices.alLDevices, false, 3));
11
20
  return devices_1.Devices.alLDevices;
@@ -27,5 +36,48 @@ class API {
27
36
  static getLog() {
28
37
  return log_service_1.ServerLogService.getLog();
29
38
  }
39
+ /**
40
+ * Turns on/off one AC identified by it's name
41
+ * @param name The name of the device, if wrong false will be returned
42
+ * @param {boolean} desiredState
43
+ */
44
+ static setAc(name, desiredState) {
45
+ const d = this.getAc(name);
46
+ if (!d) {
47
+ log_service_1.ServerLogService.writeLog(models_1.LogLevel.Warn, `Daikin Device for name ${name} not found`);
48
+ return false;
49
+ }
50
+ if (desiredState) {
51
+ d.turnOn();
52
+ }
53
+ else {
54
+ d.deactivateAutomaticTurnOn(60 * 60 * 1000);
55
+ }
56
+ return true;
57
+ }
58
+ /**
59
+ * Turns on/off all AC´s in the home
60
+ * @param {boolean} desiredState
61
+ */
62
+ static setAllAc(desiredState) {
63
+ ac_1.DaikinService.setAll(desiredState, true);
64
+ }
65
+ /**
66
+ * Changes the status of a given Lamp
67
+ * @param {string} deviceId The device Id of the lamp
68
+ * @param {boolean} state The desired new state
69
+ * @returns {Error | null} In case it failed the Error containing the reason
70
+ */
71
+ static setLight(deviceId, state) {
72
+ const d = this.getDevice(deviceId);
73
+ if (d === undefined) {
74
+ return new Error(`Device with ID ${deviceId} not found`);
75
+ }
76
+ if (typeof d.setLight !== 'function') {
77
+ return new Error(`Device with ID ${deviceId} is no Lamp`);
78
+ }
79
+ d.setLight(state, 60 * 60 * 1000, true);
80
+ return null;
81
+ }
30
82
  }
31
83
  exports.API = API;
@@ -1,8 +1,18 @@
1
1
  import { LogSource } from '../../../models/logSource';
2
+ export declare enum LogDebugType {
3
+ None = 0,
4
+ SkipUnchangedActuatorCommand = 1,
5
+ SkipUnchangedRolloPosition = 2,
6
+ SetActuator = 3,
7
+ ShutterPositionChange = 4,
8
+ NewMovementState = 5,
9
+ SkipUnchangedMovementState = 6
10
+ }
2
11
  export declare class LogFilterData {
3
12
  room?: string;
4
13
  deviceId?: string;
5
14
  deviceName?: string;
6
15
  groupType?: string;
7
16
  source?: LogSource;
17
+ debugType?: LogDebugType;
8
18
  }
@@ -1,6 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LogFilterData = void 0;
3
+ exports.LogFilterData = exports.LogDebugType = void 0;
4
+ var LogDebugType;
5
+ (function (LogDebugType) {
6
+ LogDebugType[LogDebugType["None"] = 0] = "None";
7
+ LogDebugType[LogDebugType["SkipUnchangedActuatorCommand"] = 1] = "SkipUnchangedActuatorCommand";
8
+ LogDebugType[LogDebugType["SkipUnchangedRolloPosition"] = 2] = "SkipUnchangedRolloPosition";
9
+ LogDebugType[LogDebugType["SetActuator"] = 3] = "SetActuator";
10
+ LogDebugType[LogDebugType["ShutterPositionChange"] = 4] = "ShutterPositionChange";
11
+ LogDebugType[LogDebugType["NewMovementState"] = 5] = "NewMovementState";
12
+ LogDebugType[LogDebugType["SkipUnchangedMovementState"] = 6] = "SkipUnchangedMovementState";
13
+ })(LogDebugType = exports.LogDebugType || (exports.LogDebugType = {}));
4
14
  class LogFilterData {
15
+ constructor() {
16
+ this.debugType = LogDebugType.None;
17
+ }
5
18
  }
6
19
  exports.LogFilterData = LogFilterData;
@@ -15,4 +15,10 @@ export declare class ServerLogService {
15
15
  static addedDeviceToRoom(pRoomName: string, pDeviceType: DeviceType, pRoomIndex: number, forceDebug?: boolean): void;
16
16
  static missingRoomHandling(pRoomName: string, pDeviceType: DeviceType): void;
17
17
  static missingRoomIndexHandling(pRoomName: string, pIndex: number, pDeviceType: DeviceType): void;
18
+ /**
19
+ * Checks if this message is of a debugtype which should be skipped according to settings
20
+ * @param {LogDebugType} debugType
21
+ * @returns {boolean} If the Message should be skipped
22
+ */
23
+ private static checkDebugLogSkip;
18
24
  }
@@ -6,7 +6,9 @@ const models_1 = require("../../../models");
6
6
  const devices_1 = require("../../devices");
7
7
  const utils_1 = require("../utils");
8
8
  const log_object_1 = require("./log-object");
9
+ const log_filter_data_1 = require("./log-filter-data");
9
10
  const logSource_1 = require("../../../models/logSource");
11
+ const settings_service_1 = require("../settings-service");
10
12
  class ServerLogService {
11
13
  static getLog(amount = 5000) {
12
14
  return this.storage.readAmount(amount);
@@ -17,6 +19,9 @@ class ServerLogService {
17
19
  static writeLog(pLevel, pMessage, additionalLogInfo) {
18
20
  var _a;
19
21
  const now = Date.now();
22
+ if ((additionalLogInfo === null || additionalLogInfo === void 0 ? void 0 : additionalLogInfo.debugType) !== undefined && ServerLogService.checkDebugLogSkip(additionalLogInfo.debugType)) {
23
+ return;
24
+ }
20
25
  if (pLevel > this.storageLevel && pLevel > ServerLogService.settings.logLevel) {
21
26
  return;
22
27
  }
@@ -53,6 +58,46 @@ class ServerLogService {
53
58
  static missingRoomIndexHandling(pRoomName, pIndex, pDeviceType) {
54
59
  ServerLogService.writeLog(models_1.LogLevel.Warn, `Raum "${pRoomName}" hat keine Definition für den Typ "${devices_1.DeviceType[pDeviceType]} mit Index ${pIndex}"`);
55
60
  }
61
+ /**
62
+ * Checks if this message is of a debugtype which should be skipped according to settings
63
+ * @param {LogDebugType} debugType
64
+ * @returns {boolean} If the Message should be skipped
65
+ */
66
+ static checkDebugLogSkip(debugType) {
67
+ var _a, _b, _c, _d, _e;
68
+ switch (debugType) {
69
+ case log_filter_data_1.LogDebugType.None:
70
+ break;
71
+ case log_filter_data_1.LogDebugType.SkipUnchangedActuatorCommand:
72
+ if (((_a = settings_service_1.SettingsService.settings.logSettings) === null || _a === void 0 ? void 0 : _a.debugUnchangedActuator) === true) {
73
+ return false;
74
+ }
75
+ break;
76
+ case log_filter_data_1.LogDebugType.SkipUnchangedRolloPosition:
77
+ if (((_b = settings_service_1.SettingsService.settings.logSettings) === null || _b === void 0 ? void 0 : _b.debugUchangedShutterPosition) === true) {
78
+ return false;
79
+ }
80
+ break;
81
+ case log_filter_data_1.LogDebugType.SetActuator:
82
+ if (((_c = settings_service_1.SettingsService.settings.logSettings) === null || _c === void 0 ? void 0 : _c.debugActuatorChange) === true) {
83
+ return false;
84
+ }
85
+ break;
86
+ case log_filter_data_1.LogDebugType.ShutterPositionChange:
87
+ if (((_d = settings_service_1.SettingsService.settings.logSettings) === null || _d === void 0 ? void 0 : _d.debugShutterPositionChange) === true) {
88
+ return false;
89
+ }
90
+ break;
91
+ case log_filter_data_1.LogDebugType.NewMovementState:
92
+ if (((_e = settings_service_1.SettingsService.settings.logSettings) === null || _e === void 0 ? void 0 : _e.debugNewMovementState) === true) {
93
+ return false;
94
+ }
95
+ break;
96
+ case log_filter_data_1.LogDebugType.SkipUnchangedMovementState:
97
+ break;
98
+ }
99
+ return true;
100
+ }
56
101
  }
57
102
  exports.ServerLogService = ServerLogService;
58
103
  ServerLogService.telegramLevel = -1; // Controlled from within Config File
@@ -76,7 +76,7 @@ class Utils {
76
76
  }
77
77
  static jsonFilter(object) {
78
78
  return lodash_1.default.omit(object, Object.keys(object).filter((key) => {
79
- if (key.includes('Timeout') || key.includes('Interval')) {
79
+ if (key.includes('Timeout') || key.includes('Interval') || key.includes('timeouts')) {
80
80
  // Exclude timeout Variables.
81
81
  return true;
82
82
  }