hoffmation-base 1.0.48 → 1.0.51

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 (45) hide show
  1. package/lib/server/devices/DeviceCapability.d.ts +2 -1
  2. package/lib/server/devices/DeviceCapability.js +1 -0
  3. package/lib/server/devices/IoBrokerBaseDevice.d.ts +2 -1
  4. package/lib/server/devices/IoBrokerBaseDevice.js +12 -1
  5. package/lib/server/devices/baseDeviceInterfaces/iBatteryDevice.d.ts +4 -0
  6. package/lib/server/devices/baseDeviceInterfaces/iBatteryDevice.js +2 -0
  7. package/lib/server/devices/baseDeviceInterfaces/index.d.ts +1 -0
  8. package/lib/server/devices/baseDeviceInterfaces/index.js +1 -0
  9. package/lib/server/devices/devices.js +4 -0
  10. package/lib/server/devices/hmIPDevices/hmIpBewegung.js +12 -7
  11. package/lib/server/devices/hmIPDevices/hmIpDevice.d.ts +1 -0
  12. package/lib/server/devices/hmIPDevices/hmIpDevice.js +9 -4
  13. package/lib/server/devices/hmIPDevices/hmIpGriff.d.ts +3 -2
  14. package/lib/server/devices/hmIPDevices/hmIpGriff.js +16 -2
  15. package/lib/server/devices/hmIPDevices/hmIpHeizung.d.ts +3 -1
  16. package/lib/server/devices/hmIPDevices/hmIpHeizung.js +10 -0
  17. package/lib/server/devices/hmIPDevices/hmIpPraezenz.d.ts +3 -2
  18. package/lib/server/devices/hmIPDevices/hmIpPraezenz.js +30 -16
  19. package/lib/server/devices/hmIPDevices/hmIpTaster.d.ts +3 -2
  20. package/lib/server/devices/hmIPDevices/hmIpTaster.js +9 -0
  21. package/lib/server/devices/hmIPDevices/hmIpTherm.d.ts +3 -1
  22. package/lib/server/devices/hmIPDevices/hmIpTherm.js +12 -0
  23. package/lib/server/devices/zigbee/BaseDevices/zigbeeDevice.d.ts +1 -0
  24. package/lib/server/devices/zigbee/BaseDevices/zigbeeDevice.js +8 -6
  25. package/lib/server/devices/zigbee/BaseDevices/zigbeeHeater.d.ts +5 -2
  26. package/lib/server/devices/zigbee/BaseDevices/zigbeeHeater.js +13 -0
  27. package/lib/server/devices/zigbee/BaseDevices/zigbeeMagnetContact.d.ts +3 -1
  28. package/lib/server/devices/zigbee/BaseDevices/zigbeeMagnetContact.js +9 -0
  29. package/lib/server/devices/zigbee/BaseDevices/zigbeeMotionSensor.d.ts +3 -2
  30. package/lib/server/devices/zigbee/BaseDevices/zigbeeMotionSensor.js +20 -7
  31. package/lib/server/devices/zigbee/BaseDevices/zigbeeSwitch.d.ts +1 -0
  32. package/lib/server/devices/zigbee/BaseDevices/zigbeeSwitch.js +12 -0
  33. package/lib/server/devices/zigbee/zigbeeAquaraVibra.d.ts +3 -2
  34. package/lib/server/devices/zigbee/zigbeeAquaraVibra.js +8 -0
  35. package/lib/server/devices/zigbee/zigbeeAquaraWater.d.ts +3 -1
  36. package/lib/server/devices/zigbee/zigbeeAquaraWater.js +9 -0
  37. package/lib/server/devices/zigbee/zigbeeHeimanSmoke.d.ts +3 -1
  38. package/lib/server/devices/zigbee/zigbeeHeimanSmoke.js +9 -0
  39. package/lib/server/devices/zigbee/zigbeeSonoffTemp.d.ts +3 -2
  40. package/lib/server/devices/zigbee/zigbeeSonoffTemp.js +9 -0
  41. package/lib/server/services/dbo/postgreSqlPersist.js +5 -4
  42. package/lib/server/services/utils/utils.d.ts +2 -1
  43. package/lib/server/services/utils/utils.js +9 -2
  44. package/lib/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +10 -10
@@ -14,5 +14,6 @@ export declare enum DeviceCapability {
14
14
  temperatureSensor = 12,
15
15
  vibrationSensor = 13,
16
16
  speaker = 14,
17
- handleSensor = 15
17
+ handleSensor = 15,
18
+ batteryDriven = 16
18
19
  }
@@ -19,4 +19,5 @@ var DeviceCapability;
19
19
  DeviceCapability[DeviceCapability["vibrationSensor"] = 13] = "vibrationSensor";
20
20
  DeviceCapability[DeviceCapability["speaker"] = 14] = "speaker";
21
21
  DeviceCapability[DeviceCapability["handleSensor"] = 15] = "handleSensor";
22
+ DeviceCapability[DeviceCapability["batteryDriven"] = 16] = "batteryDriven";
22
23
  })(DeviceCapability = exports.DeviceCapability || (exports.DeviceCapability = {}));
@@ -13,8 +13,8 @@ export declare abstract class IoBrokerBaseDevice implements iBaseDevice {
13
13
  [id: string]: RoomDeviceAddingSettings;
14
14
  };
15
15
  room: RoomBase | undefined;
16
- battery: number | undefined;
17
16
  readonly deviceCapabilities: DeviceCapability[];
17
+ protected readonly individualStateCallbacks: Map<string, Array<(val: ioBroker.StateValue) => void>>;
18
18
  protected constructor(_info: IoBrokerDeviceInfo, deviceType: DeviceType);
19
19
  get id(): string;
20
20
  /**
@@ -34,6 +34,7 @@ export declare abstract class IoBrokerBaseDevice implements iBaseDevice {
34
34
  get ioConn(): IOBrokerConnection | undefined;
35
35
  static addRoom(shortName: string, settings: RoomDeviceAddingSettings): void;
36
36
  static checkMissing(): void;
37
+ addIndividualStateCallback(stateName: string, cb: (val: ioBroker.StateValue) => void): void;
37
38
  /**
38
39
  * Returns whether a connection to ioBroker is established or not
39
40
  * @param showError If true, an error message will be written to the log if the connection is not established
@@ -10,6 +10,7 @@ class IoBrokerBaseDevice {
10
10
  this.deviceType = deviceType;
11
11
  this.room = undefined;
12
12
  this.deviceCapabilities = [];
13
+ this.individualStateCallbacks = new Map();
13
14
  this.addToCorrectRoom();
14
15
  }
15
16
  get id() {
@@ -52,6 +53,16 @@ class IoBrokerBaseDevice {
52
53
  this.roomAddingSettings[rName].checkMissing();
53
54
  }
54
55
  }
56
+ addIndividualStateCallback(stateName, cb) {
57
+ let arr = this.individualStateCallbacks.get(stateName);
58
+ if (arr === undefined) {
59
+ arr = [cb];
60
+ }
61
+ else {
62
+ arr.push(cb);
63
+ }
64
+ this.individualStateCallbacks.set(stateName, arr);
65
+ }
55
66
  /**
56
67
  * Returns whether a connection to ioBroker is established or not
57
68
  * @param showError If true, an error message will be written to the log if the connection is not established
@@ -71,7 +82,7 @@ class IoBrokerBaseDevice {
71
82
  });
72
83
  }
73
84
  toJSON() {
74
- return services_1.Utils.jsonFilter(this);
85
+ return services_1.Utils.jsonFilter(this, ['individualStateCallbacks']);
75
86
  }
76
87
  addToCorrectRoom() {
77
88
  const settings = IoBrokerBaseDevice.roomAddingSettings[this.info.room];
@@ -0,0 +1,4 @@
1
+ import { iBaseDevice } from './iBaseDevice';
2
+ export interface iBatteryDevice extends iBaseDevice {
3
+ battery: number;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,7 @@
1
1
  export * from './iAcDevice';
2
2
  export * from './iActuator';
3
3
  export * from './iBaseDevice';
4
+ export * from './iBatteryDevice';
4
5
  export * from './iButtonSwitch';
5
6
  export * from './iEnergyManager';
6
7
  export * from './iExcessEnergyConsumer';
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./iAcDevice"), exports);
18
18
  __exportStar(require("./iActuator"), exports);
19
19
  __exportStar(require("./iBaseDevice"), exports);
20
+ __exportStar(require("./iBatteryDevice"), exports);
20
21
  __exportStar(require("./iButtonSwitch"), exports);
21
22
  __exportStar(require("./iEnergyManager"), exports);
22
23
  __exportStar(require("./iExcessEnergyConsumer"), exports);
@@ -9,6 +9,7 @@ const services_1 = require("../services");
9
9
  const IoBrokerDeviceInfo_1 = require("./IoBrokerDeviceInfo");
10
10
  const jsObject_1 = require("./jsObject");
11
11
  const wledDevice_1 = require("./wledDevice");
12
+ const DeviceCapability_1 = require("./DeviceCapability");
12
13
  class Devices {
13
14
  constructor(pDeviceData, pRoomImportEnforcer) {
14
15
  // This forces import of rooms at correct timing, to allow devices to land in proper rooms.
@@ -65,6 +66,9 @@ class Devices {
65
66
  ];
66
67
  for (const key in this.alLDevices) {
67
68
  const d = this.alLDevices[key];
69
+ if (!d.deviceCapabilities.includes(DeviceCapability_1.DeviceCapability.batteryDriven)) {
70
+ continue;
71
+ }
68
72
  if (d.battery !== undefined) {
69
73
  data.push({ name: d.info.customName, amount: d.battery });
70
74
  }
@@ -19,14 +19,19 @@ class HmIpBewegung extends hmIpDevice_1.HmIPDevice {
19
19
  this._currentIllumination = -1;
20
20
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.motionSensor);
21
21
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.illuminationSensor);
22
- (_a = services_1.Utils.dbo) === null || _a === void 0 ? void 0 : _a.getCount(this).then((todayCount) => {
23
- this.detectionsToday = todayCount.counter;
24
- this.log(models_1.LogLevel.Debug, `Bewegungscounter vorinitialisiert mit ${this.detectionsToday}`);
22
+ if (!services_1.Utils.anyDboActive) {
25
23
  this.initialized = true;
26
- }).catch((err) => {
27
- var _a;
28
- this.log(models_1.LogLevel.Warn, `Failed to initialize Movement Counter, err ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
29
- });
24
+ }
25
+ else {
26
+ (_a = services_1.Utils.dbo) === null || _a === void 0 ? void 0 : _a.getCount(this).then((todayCount) => {
27
+ this.detectionsToday = todayCount.counter;
28
+ this.log(models_1.LogLevel.Debug, `Bewegungscounter vorinitialisiert mit ${this.detectionsToday}`);
29
+ this.initialized = true;
30
+ }).catch((err) => {
31
+ var _a;
32
+ this.log(models_1.LogLevel.Warn, `Failed to initialize Movement Counter, err ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
33
+ });
34
+ }
30
35
  }
31
36
  get timeSinceLastMotion() {
32
37
  return Math.floor((services_1.Utils.nowMS() - this._lastMotionTime) / 1000);
@@ -4,6 +4,7 @@ import { DeviceType } from '../deviceType';
4
4
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
5
5
  export declare class HmIPDevice extends IoBrokerBaseDevice {
6
6
  lowBattery: boolean;
7
+ stateMap: Map<string, ioBroker.StateValue>;
7
8
  constructor(pInfo: IoBrokerDeviceInfo, pType: DeviceType);
8
9
  update(idSplit: string[], state: ioBroker.State, initial?: boolean, pOverride?: boolean): void;
9
10
  }
@@ -7,6 +7,7 @@ class HmIPDevice extends IoBrokerBaseDevice_1.IoBrokerBaseDevice {
7
7
  constructor(pInfo, pType) {
8
8
  super(pInfo, pType);
9
9
  this.lowBattery = false;
10
+ this.stateMap = new Map();
10
11
  }
11
12
  update(idSplit, state, initial = false, pOverride = false) {
12
13
  if (!pOverride) {
@@ -19,16 +20,20 @@ class HmIPDevice extends IoBrokerBaseDevice_1.IoBrokerBaseDevice {
19
20
  return;
20
21
  }
21
22
  switch (idSplit[4]) {
22
- case 'OPERATING_VOLTAGE':
23
- this.battery = state.val;
24
- break;
25
23
  case 'LOW_BAT':
26
24
  const newBatLowVal = state.val;
27
25
  if (newBatLowVal) {
28
- this.log(models_1.LogLevel.Alert, `!!BATTERIE FAST LEER!!`);
26
+ this.log(models_1.LogLevel.Warn, `!!BATTERIE FAST LEER!!`);
29
27
  }
30
28
  break;
31
29
  }
30
+ this.stateMap.set(idSplit[3], state.val);
31
+ const individualCallbacks = this.individualStateCallbacks.get(idSplit[3]);
32
+ if (individualCallbacks !== undefined) {
33
+ for (const cb of individualCallbacks) {
34
+ cb(state.val);
35
+ }
36
+ }
32
37
  }
33
38
  }
34
39
  exports.HmIPDevice = HmIPDevice;
@@ -4,8 +4,9 @@ import { Fenster } from '../groups';
4
4
  import { IoBrokerBaseDevice } from '../IoBrokerBaseDevice';
5
5
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
6
6
  import { HmIPDevice } from './hmIpDevice';
7
- import { iHandleSensor } from '../baseDeviceInterfaces';
8
- export declare class HmIpGriff extends HmIPDevice implements iHandleSensor {
7
+ import { iBatteryDevice, iHandleSensor } from '../baseDeviceInterfaces';
8
+ export declare class HmIpGriff extends HmIPDevice implements iHandleSensor, iBatteryDevice {
9
+ battery: number;
9
10
  position: FensterPosition;
10
11
  private _kippCallback;
11
12
  private _closedCallback;
@@ -14,6 +14,7 @@ const DeviceCapability_1 = require("../DeviceCapability");
14
14
  class HmIpGriff extends hmIpDevice_1.HmIPDevice {
15
15
  constructor(pInfo) {
16
16
  super(pInfo, deviceType_1.DeviceType.HmIpGriff);
17
+ this.battery = -99;
17
18
  this.position = models_1.FensterPosition.geschlossen;
18
19
  this._kippCallback = [];
19
20
  this._closedCallback = [];
@@ -22,6 +23,7 @@ class HmIpGriff extends hmIpDevice_1.HmIPDevice {
22
23
  this._fenster = undefined;
23
24
  this._helpingRoomTemp = false;
24
25
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.handleSensor);
26
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
25
27
  }
26
28
  set Fenster(value) {
27
29
  this._fenster = value;
@@ -39,9 +41,21 @@ class HmIpGriff extends hmIpDevice_1.HmIPDevice {
39
41
  this.log(models_2.LogLevel.DeepTrace, `Griff Update: JSON: ${JSON.stringify(state)}ID: ${idSplit.join('.')}`);
40
42
  super.update(idSplit, state, initial, true);
41
43
  switch (idSplit[3]) {
44
+ case '0':
45
+ switch (idSplit[4]) {
46
+ case 'OPERATING_VOLTAGE':
47
+ this.battery = (state.val - 0.9) / 0.6;
48
+ break;
49
+ }
50
+ break;
42
51
  case '1':
43
- if (idSplit[4] === 'STATE') {
44
- this.updatePosition(state.val);
52
+ switch (idSplit[4]) {
53
+ case 'STATE':
54
+ this.updatePosition(state.val);
55
+ break;
56
+ case 'OPERATING_VOLTAGE':
57
+ this.battery = (state.val - 0.9) / 0.6;
58
+ break;
45
59
  }
46
60
  break;
47
61
  }
@@ -1,10 +1,12 @@
1
1
  /// <reference types="iobroker" />
2
2
  import { HmIPDevice } from './hmIpDevice';
3
3
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
4
- export declare class HmIpHeizung extends HmIPDevice {
4
+ import { iBatteryDevice } from '../baseDeviceInterfaces';
5
+ export declare class HmIpHeizung extends HmIPDevice implements iBatteryDevice {
5
6
  private _temperatur;
6
7
  private _level;
7
8
  private _adaptionState;
9
+ battery: number;
8
10
  constructor(pInfo: IoBrokerDeviceInfo);
9
11
  private _desiredTemperatur;
10
12
  get desiredTemperatur(): number;
@@ -4,6 +4,7 @@ exports.HmIpHeizung = void 0;
4
4
  const deviceType_1 = require("../deviceType");
5
5
  const models_1 = require("../../../models");
6
6
  const hmIpDevice_1 = require("./hmIpDevice");
7
+ const DeviceCapability_1 = require("../DeviceCapability");
7
8
  var HmIpHeizungAdaptionStates;
8
9
  (function (HmIpHeizungAdaptionStates) {
9
10
  HmIpHeizungAdaptionStates[HmIpHeizungAdaptionStates["StateNotAvailable"] = 0] = "StateNotAvailable";
@@ -21,7 +22,9 @@ class HmIpHeizung extends hmIpDevice_1.HmIPDevice {
21
22
  super(pInfo, deviceType_1.DeviceType.HmIpHeizung);
22
23
  this._temperatur = 0;
23
24
  this._level = 0;
25
+ this.battery = -99;
24
26
  this._desiredTemperatur = 0;
27
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
25
28
  }
26
29
  get desiredTemperatur() {
27
30
  return this._desiredTemperatur;
@@ -36,6 +39,13 @@ class HmIpHeizung extends hmIpDevice_1.HmIPDevice {
36
39
  this.log(models_1.LogLevel.DeepTrace, `Heizung Update: ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`);
37
40
  super.update(idSplit, state, initial, true);
38
41
  switch (idSplit[3]) {
42
+ case '0':
43
+ switch (idSplit[4]) {
44
+ case 'OPERATING_VOLTAGE':
45
+ this.battery = (state.val - 1.8) / 1.2;
46
+ break;
47
+ }
48
+ break;
39
49
  case '1':
40
50
  this.updateBaseInformation(idSplit[4], state);
41
51
  break;
@@ -1,12 +1,13 @@
1
1
  /// <reference types="iobroker" />
2
2
  import { HmIPDevice } from './hmIpDevice';
3
- import { iIlluminationSensor } from '../baseDeviceInterfaces';
3
+ import { iBatteryDevice, iIlluminationSensor } from '../baseDeviceInterfaces';
4
4
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
5
- export declare class HmIpPraezenz extends HmIPDevice implements iIlluminationSensor {
5
+ export declare class HmIpPraezenz extends HmIPDevice implements iIlluminationSensor, iBatteryDevice {
6
6
  private static PRESENCE_DETECTION;
7
7
  private static CURRENT_ILLUMINATION;
8
8
  excludeFromNightAlarm: boolean;
9
9
  presenceDetected: boolean;
10
+ battery: number;
10
11
  private _presenceDetectedCallback;
11
12
  private initialized;
12
13
  constructor(pInfo: IoBrokerDeviceInfo);
@@ -12,21 +12,28 @@ class HmIpPraezenz extends hmIpDevice_1.HmIPDevice {
12
12
  super(pInfo, deviceType_1.DeviceType.HmIpPraezenz);
13
13
  this.excludeFromNightAlarm = false;
14
14
  this.presenceDetected = false;
15
+ this.battery = -99;
15
16
  this._presenceDetectedCallback = [];
16
17
  // private presenceStateID: string;
17
18
  this.initialized = false;
18
19
  this._detectionsToday = 0;
19
20
  this._currentIllumination = -1;
20
21
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.illuminationSensor);
22
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
21
23
  // this.presenceStateID = `${this.info.fullID}.1.${HmIpPraezenz.PRESENCE_DETECTION}`;
22
- (_a = services_1.Utils.dbo) === null || _a === void 0 ? void 0 : _a.getCount(this).then((todayCount) => {
23
- this.detectionsToday = todayCount.counter;
24
- this.log(models_1.LogLevel.Debug, `Präsenzcounter vorinitialisiert mit ${this.detectionsToday}`);
24
+ if (!services_1.Utils.anyDboActive) {
25
25
  this.initialized = true;
26
- }).catch((err) => {
27
- var _a;
28
- this.log(models_1.LogLevel.Warn, `Failed to initialize Movement Counter, err ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
29
- });
26
+ }
27
+ else {
28
+ (_a = services_1.Utils.dbo) === null || _a === void 0 ? void 0 : _a.getCount(this).then((todayCount) => {
29
+ this.detectionsToday = todayCount.counter;
30
+ this.log(models_1.LogLevel.Debug, `Präsenzcounter vorinitialisiert mit ${this.detectionsToday}`);
31
+ this.initialized = true;
32
+ }).catch((err) => {
33
+ var _a;
34
+ this.log(models_1.LogLevel.Warn, `Failed to initialize Movement Counter, err ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
35
+ });
36
+ }
30
37
  }
31
38
  get detectionsToday() {
32
39
  return this._detectionsToday;
@@ -51,16 +58,23 @@ class HmIpPraezenz extends hmIpDevice_1.HmIPDevice {
51
58
  update(idSplit, state, initial = false) {
52
59
  this.log(models_1.LogLevel.DeepTrace, `Präzens Update: JSON: ${JSON.stringify(state)}ID: ${idSplit.join('.')}`);
53
60
  super.update(idSplit, state, initial, true);
54
- if (idSplit[3] !== '1') {
55
- // Nur die Infos in Kanal 1 sind relevant
56
- return;
57
- }
58
- switch (idSplit[4]) {
59
- case HmIpPraezenz.PRESENCE_DETECTION:
60
- this.updatePresence(state.val);
61
+ switch (idSplit[3]) {
62
+ case '0':
63
+ switch (idSplit[4]) {
64
+ case 'OPERATING_VOLTAGE':
65
+ this.battery = (state.val - 1.8) / 1.2;
66
+ break;
67
+ }
61
68
  break;
62
- case HmIpPraezenz.CURRENT_ILLUMINATION:
63
- this.currentIllumination = state.val;
69
+ case '1':
70
+ switch (idSplit[4]) {
71
+ case HmIpPraezenz.PRESENCE_DETECTION:
72
+ this.updatePresence(state.val);
73
+ break;
74
+ case HmIpPraezenz.CURRENT_ILLUMINATION:
75
+ this.currentIllumination = state.val;
76
+ break;
77
+ }
64
78
  break;
65
79
  }
66
80
  }
@@ -1,9 +1,9 @@
1
1
  /// <reference types="iobroker" />
2
2
  import { HmIPDevice } from './hmIpDevice';
3
- import { iButtonSwitch } from '../baseDeviceInterfaces';
3
+ import { iBatteryDevice, iButtonSwitch } from '../baseDeviceInterfaces';
4
4
  import { Button } from '../button';
5
5
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
6
- export declare class HmIpTaster extends HmIPDevice implements iButtonSwitch {
6
+ export declare class HmIpTaster extends HmIPDevice implements iButtonSwitch, iBatteryDevice {
7
7
  private static readonly BUTTON_CAPABILLITIES;
8
8
  buttonTopLeft: Button;
9
9
  buttonMidLeft: Button;
@@ -13,6 +13,7 @@ export declare class HmIpTaster extends HmIPDevice implements iButtonSwitch {
13
13
  buttonBotRight: Button;
14
14
  buttonBot: undefined;
15
15
  buttonTop: undefined;
16
+ battery: number;
16
17
  constructor(pInfo: IoBrokerDeviceInfo);
17
18
  update(idSplit: string[], state: ioBroker.State, initial?: boolean): void;
18
19
  getButtonAssignment(): string;
@@ -17,13 +17,22 @@ class HmIpTaster extends hmIpDevice_1.HmIPDevice {
17
17
  this.buttonBotRight = new button_1.Button('BotRight', HmIpTaster.BUTTON_CAPABILLITIES);
18
18
  this.buttonBot = undefined;
19
19
  this.buttonTop = undefined;
20
+ this.battery = -99;
20
21
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.buttonSwitch);
22
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
21
23
  }
22
24
  update(idSplit, state, initial = false) {
23
25
  this.log(models_1.LogLevel.DeepTrace, `Taster Update: JSON: ${JSON.stringify(state)}ID: ${idSplit.join('.')}`);
24
26
  super.update(idSplit, state, initial, true);
25
27
  let cTaste = undefined;
26
28
  switch (idSplit[3]) {
29
+ case '0':
30
+ switch (idSplit[4]) {
31
+ case 'OPERATING_VOLTAGE':
32
+ this.battery = (state.val - 1.8) / 1.2;
33
+ break;
34
+ }
35
+ break;
27
36
  case '1':
28
37
  cTaste = this.buttonTopLeft;
29
38
  break;
@@ -1,7 +1,9 @@
1
1
  /// <reference types="iobroker" />
2
2
  import { HmIPDevice } from './hmIpDevice';
3
3
  import { IoBrokerDeviceInfo } from '../IoBrokerDeviceInfo';
4
- export declare class HmIpTherm extends HmIPDevice {
4
+ import { iBatteryDevice } from '../baseDeviceInterfaces';
5
+ export declare class HmIpTherm extends HmIPDevice implements iBatteryDevice {
6
+ battery: number;
5
7
  constructor(pInfo: IoBrokerDeviceInfo);
6
8
  update(idSplit: string[], state: ioBroker.State, initial?: boolean): void;
7
9
  }
@@ -4,13 +4,25 @@ exports.HmIpTherm = void 0;
4
4
  const hmIpDevice_1 = require("./hmIpDevice");
5
5
  const deviceType_1 = require("../deviceType");
6
6
  const models_1 = require("../../../models");
7
+ const DeviceCapability_1 = require("../DeviceCapability");
7
8
  class HmIpTherm extends hmIpDevice_1.HmIPDevice {
8
9
  constructor(pInfo) {
9
10
  super(pInfo, deviceType_1.DeviceType.HmIpTherm);
11
+ this.battery = -99;
12
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
10
13
  }
11
14
  update(idSplit, state, initial = false) {
12
15
  this.log(models_1.LogLevel.DeepTrace, `Thermostat Update: ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`);
13
16
  super.update(idSplit, state, initial, true);
17
+ switch (idSplit[3]) {
18
+ case '0':
19
+ switch (idSplit[4]) {
20
+ case 'OPERATING_VOLTAGE':
21
+ this.battery = (state.val - 1.8) / 1.2;
22
+ break;
23
+ }
24
+ break;
25
+ }
14
26
  }
15
27
  }
16
28
  exports.HmIpTherm = HmIpTherm;
@@ -6,6 +6,7 @@ export declare class ZigbeeDevice extends IoBrokerBaseDevice {
6
6
  available: boolean;
7
7
  linkQuality: number;
8
8
  voltage: string;
9
+ stateMap: Map<string, ioBroker.StateValue>;
9
10
  constructor(pInfo: IoBrokerDeviceInfo, pType: DeviceType);
10
11
  update(idSplit: string[], state: ioBroker.State, initial?: boolean, pOverride?: boolean): void;
11
12
  }
@@ -9,6 +9,7 @@ class ZigbeeDevice extends IoBrokerBaseDevice_1.IoBrokerBaseDevice {
9
9
  this.available = false;
10
10
  this.linkQuality = 0;
11
11
  this.voltage = '';
12
+ this.stateMap = new Map();
12
13
  }
13
14
  update(idSplit, state, initial = false, pOverride = false) {
14
15
  this.log(models_1.LogLevel.DeepTrace, `Zigbee: ${initial ? 'Initiales ' : ''}Update: ID: ${idSplit.join('.')} JSON: ${JSON.stringify(state)}`);
@@ -22,12 +23,6 @@ class ZigbeeDevice extends IoBrokerBaseDevice_1.IoBrokerBaseDevice {
22
23
  this.log(models_1.LogLevel.Debug, `Das Zigbee Gerät ist nicht erreichbar.`);
23
24
  }
24
25
  break;
25
- case 'battery':
26
- this.battery = state.val;
27
- if (this.battery < 20) {
28
- this.log(models_1.LogLevel.Alert, `Das Zigbee Gerät hat unter 20% Batterie.`);
29
- }
30
- break;
31
26
  case 'link_quality':
32
27
  this.linkQuality = state.val;
33
28
  if (this.linkQuality < 5) {
@@ -38,6 +33,13 @@ class ZigbeeDevice extends IoBrokerBaseDevice_1.IoBrokerBaseDevice {
38
33
  this.voltage = state.val.toString();
39
34
  break;
40
35
  }
36
+ this.stateMap.set(idSplit[3], state.val);
37
+ const individualCallbacks = this.individualStateCallbacks.get(idSplit[3]);
38
+ if (individualCallbacks !== undefined) {
39
+ for (const cb of individualCallbacks) {
40
+ cb(state.val);
41
+ }
42
+ }
41
43
  }
42
44
  }
43
45
  exports.ZigbeeDevice = ZigbeeDevice;
@@ -1,11 +1,13 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="iobroker" />
2
3
  import { ZigbeeDevice } from './zigbeeDevice';
3
- import { iHeater } from '../../baseDeviceInterfaces';
4
+ import { iBatteryDevice, iHeater } from '../../baseDeviceInterfaces';
4
5
  import { HeaterSettings, TemperatureSettings } from '../../../../models';
5
6
  import { DeviceType } from '../../deviceType';
6
7
  import { IoBrokerDeviceInfo } from '../../IoBrokerDeviceInfo';
7
- export declare class ZigbeeHeater extends ZigbeeDevice implements iHeater {
8
+ export declare class ZigbeeHeater extends ZigbeeDevice implements iHeater, iBatteryDevice {
8
9
  settings: HeaterSettings;
10
+ battery: number;
9
11
  protected _automaticPoints: {
10
12
  [name: string]: TemperatureSettings;
11
13
  };
@@ -34,5 +36,6 @@ export declare class ZigbeeHeater extends ZigbeeDevice implements iHeater {
34
36
  setAutomaticPoint(name: string, setting: TemperatureSettings): void;
35
37
  stopAutomaticCheck(): void;
36
38
  onTemperaturChange(newTemperatur: number): void;
39
+ update(idSplit: string[], state: ioBroker.State, initial?: boolean, pOverride?: boolean): void;
37
40
  private checkSeasonTurnOff;
38
41
  }
@@ -10,6 +10,7 @@ class ZigbeeHeater extends zigbeeDevice_1.ZigbeeDevice {
10
10
  constructor(pInfo, pType) {
11
11
  super(pInfo, pType);
12
12
  this.settings = new models_1.HeaterSettings();
13
+ this.battery = -99;
13
14
  this._automaticPoints = {};
14
15
  this._initialSeasonCheckDone = false;
15
16
  this._level = 0;
@@ -20,6 +21,7 @@ class ZigbeeHeater extends zigbeeDevice_1.ZigbeeDevice {
20
21
  this._humidity = 0;
21
22
  this._roomTemperatur = 0;
22
23
  this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.heater);
24
+ this.deviceCapabilities.push(DeviceCapability_1.DeviceCapability.batteryDriven);
23
25
  this._iAutomaticInterval = services_1.Utils.guardedInterval(this.checkAutomaticChange, 300000, this); // Alle 5 Minuten prüfen
24
26
  services_1.TimeCallbackService.addCallback(new models_1.TimeCallback(`${this.info.fullID} Season Check`, models_1.TimeCallbackType.TimeOfDay, () => {
25
27
  this.checkSeasonTurnOff();
@@ -102,6 +104,17 @@ class ZigbeeHeater extends zigbeeDevice_1.ZigbeeDevice {
102
104
  onTemperaturChange(newTemperatur) {
103
105
  this.roomTemperatur = newTemperatur;
104
106
  }
107
+ update(idSplit, state, initial = false, pOverride = false) {
108
+ switch (idSplit[3]) {
109
+ case 'battery':
110
+ this.battery = state.val;
111
+ if (this.battery < 20) {
112
+ this.log(models_1.LogLevel.Warn, `Das Zigbee Gerät hat unter 20% Batterie.`);
113
+ }
114
+ break;
115
+ }
116
+ super.update(idSplit, state, initial, pOverride);
117
+ }
105
118
  checkSeasonTurnOff() {
106
119
  const desiredState = services_1.Utils.beetweenDays(new Date(), this.settings.seasonTurnOffDay, this.settings.seasonTurnOnDay);
107
120
  if (desiredState !== this.seasonTurnOff || !this._initialSeasonCheckDone) {
@@ -3,7 +3,9 @@ import { DeviceType } from '../../deviceType';
3
3
  import { ZigbeeDevice } from './zigbeeDevice';
4
4
  import { MagnetPosition } from '../../models';
5
5
  import { IoBrokerDeviceInfo } from '../../IoBrokerDeviceInfo';
6
- export declare class ZigbeeMagnetContact extends ZigbeeDevice {
6
+ import { iBatteryDevice } from '../../baseDeviceInterfaces';
7
+ export declare class ZigbeeMagnetContact extends ZigbeeDevice implements iBatteryDevice {
8
+ battery: number;
7
9
  position: MagnetPosition;
8
10
  telegramOnOpen: boolean;
9
11
  speakOnOpen: boolean;
@@ -8,6 +8,7 @@ const models_2 = require("../../models");
8
8
  class ZigbeeMagnetContact extends zigbeeDevice_1.ZigbeeDevice {
9
9
  constructor(pInfo, deviceType) {
10
10
  super(pInfo, deviceType);
11
+ this.battery = -99;
11
12
  this.position = models_2.MagnetPosition.closed;
12
13
  this.telegramOnOpen = false;
13
14
  this.speakOnOpen = false;
@@ -23,6 +24,14 @@ class ZigbeeMagnetContact extends zigbeeDevice_1.ZigbeeDevice {
23
24
  }
24
25
  update(idSplit, state, initial = false, pOverrride = false) {
25
26
  super.update(idSplit, state, initial, pOverrride);
27
+ switch (idSplit[3]) {
28
+ case 'battery':
29
+ this.battery = state.val;
30
+ if (this.battery < 20) {
31
+ this.log(models_1.LogLevel.Warn, `Das Zigbee Gerät hat unter 20% Batterie.`);
32
+ }
33
+ break;
34
+ }
26
35
  }
27
36
  updatePosition(pValue) {
28
37
  if (pValue === this.position) {
@@ -3,11 +3,12 @@
3
3
  import { DeviceType } from '../../deviceType';
4
4
  import { ZigbeeDevice } from './index';
5
5
  import { MotionSensorSettings } from '../../../../models';
6
- import { iMotionSensor } from '../../baseDeviceInterfaces';
6
+ import { iBatteryDevice, iMotionSensor } from '../../baseDeviceInterfaces';
7
7
  import { IoBrokerDeviceInfo } from '../../IoBrokerDeviceInfo';
8
- export declare class ZigbeeMotionSensor extends ZigbeeDevice implements iMotionSensor {
8
+ export declare class ZigbeeMotionSensor extends ZigbeeDevice implements iMotionSensor, iBatteryDevice {
9
9
  settings: MotionSensorSettings;
10
10
  movementDetected: boolean;
11
+ battery: number;
11
12
  protected _initialized: boolean;
12
13
  protected _movementDetectedCallback: Array<(pValue: boolean) => void>;
13
14
  protected _needsMovementResetFallback: boolean;