UNPKG

homebridge-panasonic-bluray-players

Version:

Get status of Panasonic Blu-ray players

50 lines 2.24 kB
import { PanasonicBD } from './panasonic.js'; export class PanasonicPlatformAccessory { platform; accessory; service; device; lastStatus = null; constructor(platform, accessory) { this.platform = platform; this.accessory = accessory; this.accessory.getService(this.platform.api.hap.Service.AccessoryInformation) .setCharacteristic(this.platform.api.hap.Characteristic.Manufacturer, 'Panasonic') .setCharacteristic(this.platform.api.hap.Characteristic.Model, 'Blu-Ray') .setCharacteristic(this.platform.api.hap.Characteristic.SerialNumber, 'N/A'); this.service = this.accessory.getService(this.platform.api.hap.Service.OccupancySensor) || this.accessory.addService(this.platform.api.hap.Service.OccupancySensor); this.service.setCharacteristic(this.platform.api.hap.Characteristic.Name, this.accessory.context.device.displayName); this.device = new PanasonicBD(this.accessory.context.device.host); this.startPolling(); this.service .getCharacteristic(this.platform.api.hap.Characteristic.OccupancyDetected) .onGet(this.handleGet.bind(this)); } async handleGet() { return new Promise((resolve) => { this.device.getPlayStatus((err, state) => { resolve(!err && state === 'playing'); }); }); } startPolling() { const poll = () => { this.device.getPlayStatus((err, state, playtime, duration) => { const isPresent = state === 'playing'; if (this.lastStatus !== isPresent) { this.platform.log.info('Panasonic status changed from', this.lastStatus, 'to', isPresent); this.lastStatus = isPresent; } if (this.platform.config.debug) { this.platform.log.debug('Panasonic status:', state, playtime, duration); } this.service.updateCharacteristic(this.platform.api.hap.Characteristic.OccupancyDetected, isPresent); poll(); }); }; poll(); } } //# sourceMappingURL=platformAccessory.js.map