homebridge-yoto 0.0.38 → 0.0.39

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/lib/accessory.js CHANGED
@@ -950,14 +950,11 @@ export class YotoPlayerAccessory {
950
950
 
951
951
  const normalizedPercent = Math.max(0, Math.min(Math.round(requestedPercent), 100))
952
952
  const requestedSteps = Math.round((normalizedPercent / 100) * 16)
953
- const maxVolumeSteps = Number.isFinite(deviceModel.status.maxVolume)
954
- ? deviceModel.status.maxVolume
955
- : 16
956
- const steps = Math.max(0, Math.min(Math.round(requestedSteps), maxVolumeSteps))
953
+ const steps = Math.max(0, Math.min(Math.round(requestedSteps), 16))
957
954
  const resultPercent = Math.round((steps / 16) * 100)
958
955
  this.#log.debug(
959
956
  LOG_PREFIX.ACCESSORY,
960
- `[${this.#device.name}] Set volume raw=${value} normalizedPercent=${normalizedPercent} requestedSteps=${requestedSteps} -> steps=${steps} percent=${resultPercent} (maxSteps=${maxVolumeSteps})`
957
+ `[${this.#device.name}] Set volume raw=${value} normalizedPercent=${normalizedPercent} requestedSteps=${requestedSteps} -> steps=${steps} percent=${resultPercent}`
961
958
  )
962
959
 
963
960
  // Track last non-zero volume for unmute
@@ -1035,8 +1032,8 @@ export class YotoPlayerAccessory {
1035
1032
  async getOnlineStatus () {
1036
1033
  const { Characteristic } = this.#platform
1037
1034
  return this.#deviceModel.status.isOnline
1038
- ? Characteristic.ContactSensorState.CONTACT_DETECTED
1039
- : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1035
+ ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1036
+ : Characteristic.ContactSensorState.CONTACT_DETECTED
1040
1037
  }
1041
1038
 
1042
1039
  // ==================== Battery Characteristic Handlers ====================
@@ -1450,7 +1447,7 @@ export class YotoPlayerAccessory {
1450
1447
  const { Characteristic } = this.#platform
1451
1448
  const status = this.#deviceModel.status
1452
1449
  const isActive = status.nightlightMode !== 'off'
1453
- return isActive ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1450
+ return isActive ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED
1454
1451
  }
1455
1452
 
1456
1453
  /**
@@ -1463,7 +1460,7 @@ export class YotoPlayerAccessory {
1463
1460
  const isDay = status.dayMode === 'day'
1464
1461
  const isActive = status.nightlightMode !== 'off'
1465
1462
  const isShowing = isDay && isActive
1466
- return isShowing ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1463
+ return isShowing ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED
1467
1464
  }
1468
1465
 
1469
1466
  /**
@@ -1476,7 +1473,7 @@ export class YotoPlayerAccessory {
1476
1473
  const isNight = status.dayMode === 'night'
1477
1474
  const isActive = status.nightlightMode !== 'off'
1478
1475
  const isShowing = isNight && isActive
1479
- return isShowing ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1476
+ return isShowing ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED
1480
1477
  }
1481
1478
 
1482
1479
  // ==================== Card Slot ContactSensor Getter ====================
@@ -1489,7 +1486,7 @@ export class YotoPlayerAccessory {
1489
1486
  const { Characteristic } = this.#platform
1490
1487
  const status = this.#deviceModel.status
1491
1488
  const hasCard = status.cardInsertionState !== 'none'
1492
- return hasCard ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1489
+ return hasCard ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED
1493
1490
  }
1494
1491
 
1495
1492
  // ==================== Night Mode ContactSensor Getter ====================
@@ -1503,8 +1500,8 @@ export class YotoPlayerAccessory {
1503
1500
  const status = this.#deviceModel.status
1504
1501
  const isNightMode = status.dayMode === 'night'
1505
1502
  return isNightMode
1506
- ? Characteristic.ContactSensorState.CONTACT_DETECTED
1507
- : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1503
+ ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1504
+ : Characteristic.ContactSensorState.CONTACT_DETECTED
1508
1505
  }
1509
1506
 
1510
1507
  // ==================== Sleep Timer Switch Getter/Setter ====================
@@ -1765,8 +1762,8 @@ export class YotoPlayerAccessory {
1765
1762
  this.onlineStatusService
1766
1763
  .getCharacteristic(Characteristic.ContactSensorState)
1767
1764
  .updateValue(isOnline
1768
- ? Characteristic.ContactSensorState.CONTACT_DETECTED
1769
- : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1765
+ ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED
1766
+ : Characteristic.ContactSensorState.CONTACT_DETECTED)
1770
1767
  }
1771
1768
 
1772
1769
  // Update TemperatureSensor (temperature reading)
@@ -1846,7 +1843,7 @@ export class YotoPlayerAccessory {
1846
1843
  const isActive = status.nightlightMode !== 'off'
1847
1844
  this.nightlightActiveService
1848
1845
  .getCharacteristic(Characteristic.ContactSensorState)
1849
- .updateValue(isActive ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1846
+ .updateValue(isActive ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED)
1850
1847
  }
1851
1848
 
1852
1849
  if (this.dayNightlightActiveService) {
@@ -1855,7 +1852,7 @@ export class YotoPlayerAccessory {
1855
1852
  const isShowing = isDay && isActive
1856
1853
  this.dayNightlightActiveService
1857
1854
  .getCharacteristic(Characteristic.ContactSensorState)
1858
- .updateValue(isShowing ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1855
+ .updateValue(isShowing ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED)
1859
1856
  }
1860
1857
 
1861
1858
  if (this.nightNightlightActiveService) {
@@ -1864,7 +1861,7 @@ export class YotoPlayerAccessory {
1864
1861
  const isShowing = isNight && isActive
1865
1862
  this.nightNightlightActiveService
1866
1863
  .getCharacteristic(Characteristic.ContactSensorState)
1867
- .updateValue(isShowing ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1864
+ .updateValue(isShowing ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED)
1868
1865
  }
1869
1866
  }
1870
1867
 
@@ -1882,7 +1879,7 @@ export class YotoPlayerAccessory {
1882
1879
 
1883
1880
  this.cardSlotService
1884
1881
  .getCharacteristic(Characteristic.ContactSensorState)
1885
- .updateValue(hasCard ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1882
+ .updateValue(hasCard ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED)
1886
1883
  }
1887
1884
 
1888
1885
  /**
@@ -1899,7 +1896,7 @@ export class YotoPlayerAccessory {
1899
1896
 
1900
1897
  this.nightModeService
1901
1898
  .getCharacteristic(Characteristic.ContactSensorState)
1902
- .updateValue(isNightMode ? Characteristic.ContactSensorState.CONTACT_DETECTED : Characteristic.ContactSensorState.CONTACT_NOT_DETECTED)
1899
+ .updateValue(isNightMode ? Characteristic.ContactSensorState.CONTACT_NOT_DETECTED : Characteristic.ContactSensorState.CONTACT_DETECTED)
1903
1900
  }
1904
1901
 
1905
1902
  /**
package/lib/platform.js CHANGED
@@ -188,11 +188,19 @@ export class YotoPlatform {
188
188
  this.log.info(`Device offline: ${deviceId}${reason}`)
189
189
  })
190
190
 
191
+ /**
192
+ * @param {string} deviceId
193
+ * @returns {string}
194
+ */
191
195
  const getDeviceLabel = (deviceId) => {
192
196
  const deviceName = this.yotoAccount?.getDevice(deviceId)?.device?.name
193
197
  return deviceName || deviceId
194
198
  }
195
199
 
200
+ /**
201
+ * @param {{ status?: Record<string, unknown> } | null | undefined} message
202
+ * @returns {string}
203
+ */
196
204
  const formatLegacyStatusFields = (message) => {
197
205
  const status = message?.status
198
206
  if (!status || typeof status !== 'object') return ''
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "homebridge-yoto",
3
3
  "description": "Control your Yoto players through Apple HomeKit with real-time MQTT updates",
4
- "version": "0.0.38",
4
+ "version": "0.0.39",
5
5
  "author": "Bret Comnes <bcomnes@gmail.com> (https://bret.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/bcomnes/homebridge-yoto/issues"