homebridge-panasonic-bluray-players
Version:
Get status of Panasonic Blu-ray players
50 lines • 2.24 kB
JavaScript
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