homebridge-lib 5.6.6 → 5.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -291,6 +291,11 @@ class homebridgeLib {
291
291
  static toHexString (i, length = 4) {
292
292
  return (zeroes + i.toString(16)).slice(-length).toUpperCase()
293
293
  }
294
+
295
+ /** Return the `semver` library, so plugins don't have to list this as a
296
+ * separate dependency.
297
+ */
298
+ static get semver () { return require('semver') }
294
299
  }
295
300
 
296
301
  module.exports = homebridgeLib
@@ -204,7 +204,7 @@ class AccessoryDelegate extends homebridgeLib.Delegate {
204
204
 
205
205
  /** Returns the property delegate correspondig to the property key.
206
206
  * @param {!string} key - The key for the property.
207
- * returns {PropertyDelegate}
207
+ * @returns {PropertyDelegate}
208
208
  */
209
209
  propertyDelegate (key) {
210
210
  return this._propertyDelegates[key]
@@ -467,6 +467,8 @@ class MyHomeKitTypes extends homebridgeLib.CustomHomeKitTypes {
467
467
 
468
468
  this.createCharacteristicClass('CpuLoad', uuid('051'), {
469
469
  format: this.Formats.FLOAT,
470
+ minValue: 0,
471
+ maxValue: 100,
470
472
  minStep: 0.01,
471
473
  perms: [this.Perms.READ, this.Perms.NOTIFY]
472
474
  }, 'Load')
@@ -698,7 +700,7 @@ class MyHomeKitTypes extends homebridgeLib.CustomHomeKitTypes {
698
700
  format: this.Formats.UINT8,
699
701
  unit: this.Units.PERCENTAGE,
700
702
  minValue: 0,
701
- maxValue: 95,
703
+ maxValue: 100,
702
704
  minStep: 5,
703
705
  perms: [this.Perms.READ, this.Perms.NOTIFY, this.Perms.WRITE]
704
706
  }, 'Low Battery Threshold')
package/lib/Platform.js CHANGED
@@ -10,7 +10,7 @@ const homebridgeLib = require('../index')
10
10
  const events = require('events')
11
11
  const fs = require('fs')
12
12
  const http = require('http')
13
- const semver = require('semver')
13
+ const { semver } = homebridgeLib
14
14
  const util = require('util')
15
15
  const zlib = require('zlib')
16
16
 
@@ -53,9 +53,11 @@ class Consumption extends History {
53
53
  * @param {?CharacteristicDelegate} powerDelegate - A reference to the
54
54
  * delegate of the associated `Characteristics.eve.CurrentConsumption`
55
55
  * characteristic.
56
+ * @param {!CharacteristicDelegate} onDelegate - A reference to the
57
+ * delegate of the associated `Characteristics.hap.On` characteristic.
56
58
  */
57
59
  constructor (
58
- accessoryDelegate, params, consumptionDelegate, powerDelegate
60
+ accessoryDelegate, params, consumptionDelegate, powerDelegate, onDelegate
59
61
  ) {
60
62
  super(accessoryDelegate, params)
61
63
  if (!(consumptionDelegate instanceof homebridgeLib.CharacteristicDelegate)) {
@@ -67,25 +69,33 @@ class Consumption extends History {
67
69
  ) {
68
70
  throw new TypeError('powerDelegate: not a CharacteristicDelegate')
69
71
  }
70
- this.addCharacteristicDelegate({
71
- key: 'consumption',
72
- silent: true
73
- })
74
- this.addCharacteristicDelegate({
75
- key: 'time',
76
- silent: true
77
- })
72
+ if (
73
+ onDelegate != null &&
74
+ !(onDelegate instanceof homebridgeLib.CharacteristicDelegate)
75
+ ) {
76
+ throw new TypeError('temperatureDelegate: not a CharacteristicDelegate')
77
+ }
78
78
  this._consumptionDelegate = consumptionDelegate
79
79
  this._powerDelegate = powerDelegate
80
80
  this._entry = { time: 0, power: 0 }
81
+ if (onDelegate != null) {
82
+ this._entry.on = onDelegate.value ? 1 : 0
83
+ onDelegate.on('didSet', (value) => {
84
+ this._entry.on = value ? 1 : 0
85
+ const power = this._entry.power
86
+ this._entry.power = null
87
+ super._addEntry()
88
+ this._entry.power = power
89
+ })
90
+ }
81
91
  }
82
92
 
83
93
  _addEntry () {
84
94
  const now = Math.round(new Date().valueOf() / 1000)
85
95
  // Sensor deliveres totalConsumption, optionally compute currentConsumption
86
- if (this.values.consumption != null && this.values.time != null) {
87
- const delta = this._consumptionDelegate.value - this.values.consumption // kWh
88
- const period = now - this.values.time // s
96
+ if (this._consumption != null && this._time != null) {
97
+ const delta = this._consumptionDelegate.value - this._consumption // kWh
98
+ const period = now - this._time // s
89
99
  const power = Math.round(1000 * 3600 * delta / period) // W
90
100
  if (this._powerDelegate != null) {
91
101
  this._powerDelegate.value = power
@@ -93,20 +103,35 @@ class Consumption extends History {
93
103
  this._entry.power = power
94
104
  super._addEntry(now)
95
105
  }
96
- this.values.consumption = this._consumptionDelegate.value
97
- this.values.time = now
106
+ this._consumption = this._consumptionDelegate.value
107
+ this._time = now
98
108
  }
99
109
 
100
- // get _fingerPrint () { return '04 0102 0202 0702 0f03' }
101
- get _fingerPrint () { return '01 0702' }
110
+ get _fingerPrint () { return '02 0702 0E01' }
102
111
 
103
112
  _entryStream (entry) {
113
+ if (entry.on == null) {
114
+ return util.format(
115
+ '|0c %s %s 01 %s',
116
+ numToHex(swap32(this._h.currentEntry), 8),
117
+ numToHex(swap32(entry.time - this._h.initialTime), 8),
118
+ numToHex(swap16(entry.power * 10), 4)
119
+ )
120
+ }
121
+ if (entry.power == null) {
122
+ return util.format(
123
+ '|0b %s %s 02 %s',
124
+ numToHex(swap32(this._h.currentEntry), 8),
125
+ numToHex(swap32(entry.time - this._h.initialTime), 8),
126
+ numToHex(entry.on, 2)
127
+ )
128
+ }
104
129
  return util.format(
105
- // '|14 %s %s 1f 0000 0000 %s 0000 0000',
106
- '|0c %s %s 01 %s',
130
+ '|0d %s %s 03 %s %s',
107
131
  numToHex(swap32(this._h.currentEntry), 8),
108
132
  numToHex(swap32(entry.time - this._h.initialTime), 8),
109
- numToHex(swap16(entry.power * 10), 4)
133
+ numToHex(swap16(entry.power * 10), 4),
134
+ numToHex(entry.on, 2)
110
135
  )
111
136
  }
112
137
  }
@@ -113,7 +113,7 @@ class Motion extends History {
113
113
  }
114
114
 
115
115
  get _fingerPrint () {
116
- return '03 1c01 3002 0102'
116
+ return '03 1C01 3002 0102'
117
117
  }
118
118
 
119
119
  _entryStream (entry) {
@@ -71,7 +71,7 @@ class On extends History {
71
71
  }
72
72
  }
73
73
 
74
- get _fingerPrint () { return '01 0e01' }
74
+ get _fingerPrint () { return '01 0E01' }
75
75
 
76
76
  _entryStream (entry) {
77
77
  return util.format(
@@ -49,10 +49,11 @@ class Power extends History {
49
49
  * @param {!CharacteristicDelegate} consumptionDelegate - A reference to the
50
50
  * delegate of the associated `Characteristics.eve.TotalConsumption`
51
51
  * characteristic.
52
+ * @param {!CharacteristicDelegate} onDelegate - A reference to the
53
+ * delegate of the associated `Characteristics.hap.On` characteristic.
52
54
  */
53
55
  constructor (
54
- accessoryDelegate, params,
55
- powerDelegate, consumptionDelegate
56
+ accessoryDelegate, params, powerDelegate, consumptionDelegate, onDelegate
56
57
  ) {
57
58
  super(accessoryDelegate, params)
58
59
  if (!(powerDelegate instanceof homebridgeLib.CharacteristicDelegate)) {
@@ -61,6 +62,12 @@ class Power extends History {
61
62
  if (!(consumptionDelegate instanceof homebridgeLib.CharacteristicDelegate)) {
62
63
  throw new TypeError('consumptionDelegate: not a CharacteristicDelegate')
63
64
  }
65
+ if (
66
+ onDelegate != null &&
67
+ !(onDelegate instanceof homebridgeLib.CharacteristicDelegate)
68
+ ) {
69
+ throw new TypeError('temperatureDelegate: not a CharacteristicDelegate')
70
+ }
64
71
  this._powerDelegate = powerDelegate
65
72
  this._consumptionDelegate = consumptionDelegate
66
73
  this._entry = { time: 0, power: 0 }
@@ -86,6 +93,16 @@ class Power extends History {
86
93
  this._totalConsumption = 0
87
94
  this._consumptionDelegate.value = this._totalConsumption
88
95
  })
96
+ if (onDelegate != null) {
97
+ this._entry.on = onDelegate.value ? 1 : 0
98
+ onDelegate.on('didSet', (value) => {
99
+ this._entry.on = value ? 1 : 0
100
+ const power = this._entry.power
101
+ this._entry.power = null
102
+ super._addEntry()
103
+ this._entry.power = power
104
+ })
105
+ }
89
106
  }
90
107
 
91
108
  _addEntry () {
@@ -98,22 +115,39 @@ class Power extends History {
98
115
  this._consumptionDelegate.value = this._totalConsumption
99
116
  this._entry.power = this._runningConsumption
100
117
  super._addEntry(now)
118
+ } else if (this._entry.on != null) {
119
+ super._addEntry(now)
101
120
  }
102
121
  this._power = this._powerDelegate.value
103
122
  this._time = now
104
123
  this._runningConsumption = 0
105
124
  }
106
125
 
107
- // get _fingerPrint () { return '04 0102 0202 0702 0f03' }
108
- get _fingerPrint () { return '01 0702' }
126
+ get _fingerPrint () { return '02 0702 0E01' }
109
127
 
110
128
  _entryStream (entry) {
129
+ if (entry.on == null) {
130
+ return util.format(
131
+ '|0c %s %s 01 %s',
132
+ numToHex(swap32(this._h.currentEntry), 8),
133
+ numToHex(swap32(entry.time - this._h.initialTime), 8),
134
+ numToHex(swap16(entry.power * 10), 4)
135
+ )
136
+ }
137
+ if (entry.power == null) {
138
+ return util.format(
139
+ '|0b %s %s 02 %s',
140
+ numToHex(swap32(this._h.currentEntry), 8),
141
+ numToHex(swap32(entry.time - this._h.initialTime), 8),
142
+ numToHex(entry.on, 2)
143
+ )
144
+ }
111
145
  return util.format(
112
- // '|14 %s %s 1f 0000 0000 %s 0000 0000',
113
- '|0c %s %s 01 %s',
146
+ '|0d %s %s 03 %s %s',
114
147
  numToHex(swap32(this._h.currentEntry), 8),
115
148
  numToHex(swap32(entry.time - this._h.initialTime), 8),
116
- numToHex(swap16(entry.power * 10), 4)
149
+ numToHex(swap16(entry.power * 10), 4),
150
+ numToHex(entry.on, 2)
117
151
  )
118
152
  }
119
153
  }
package/lib/SystemInfo.js CHANGED
@@ -407,7 +407,7 @@ class SystemInfo extends events.EventEmitter {
407
407
  id,
408
408
  manufacturer: 'Synology',
409
409
  model: [device, model].join(' '),
410
- prettyName: ['Synologgy', device, model].join(' ')
410
+ prettyName: ['Synology', device, model].join(' ')
411
411
  }
412
412
  }
413
413
 
package/lib/UiServer.js CHANGED
@@ -10,7 +10,7 @@ const {
10
10
  } = require('@homebridge/plugin-ui-utils')
11
11
  const { HttpClient, formatError } = require('../index')
12
12
  const chalk = require('chalk')
13
- const fs = require('fs/promises')
13
+ const fs = require('fs').promises
14
14
  const path = require('path')
15
15
  const util = require('util')
16
16
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Library for homebridge plugins",
4
4
  "author": "Erik Baauw",
5
5
  "license": "Apache-2.0",
6
- "version": "5.6.6",
6
+ "version": "5.6.8",
7
7
  "keywords": [
8
8
  "homekit",
9
9
  "homebridge"
@@ -22,11 +22,11 @@
22
22
  },
23
23
  "engines": {
24
24
  "homebridge": "^1.5.0",
25
- "node": "^16.17.0"
25
+ "node": "^16.17.1"
26
26
  },
27
27
  "dependencies": {
28
28
  "@homebridge/plugin-ui-utils": "~0.0.19",
29
- "bonjour-hap": "^3.6.3",
29
+ "bonjour-hap": "^3.6.4",
30
30
  "chalk": "^4.1.2",
31
31
  "semver": "^7.3.7"
32
32
  },