homebridge-hatch-baby-rest
Version:
Homebridge plugin for Hatch Rest/Restore WiFi sound machines
24 lines (23 loc) • 1.58 kB
JavaScript
import { hap } from "./hap.js";
import { filter, map } from 'rxjs/operators';
import { BaseAccessory } from "./base-accessory.js";
export class SoundMachineAccessory extends BaseAccessory {
constructor(device, accessory) {
super(device, accessory);
const { Service, Characteristic } = hap, speakerService = this.getService(Service.Speaker, 'Volume'), audioService = this.getService(Service.Fan, 'onBrightness' in device ? 'Audio Track' : undefined), { audioTracks } = device;
this.registerCharacteristic(speakerService.getCharacteristic(Characteristic.Volume), device.onVolume, (volume) => device.setVolume(volume));
this.registerCharacteristic(speakerService.getCharacteristic(Characteristic.Mute), device.onVolume.pipe(map((volume) => volume === 0)), (mute) => {
device.setVolume(mute ? 0 : 50);
});
this.registerCharacteristic(audioService.getCharacteristic(Characteristic.On), device.onAudioPlaying, (on) => device.setAudioPlaying(on));
this.registerCharacteristic(audioService.getCharacteristic(Characteristic.RotationSpeed), device.onAudioTrack.pipe(filter((audioTrack) => Boolean(audioTrack)), map((audioTrack) => audioTracks.indexOf(audioTrack))), (level) => {
const audioTrack = audioTracks[level];
if (audioTrack !== undefined) {
device.setAudioTrack(audioTrack);
}
});
audioService
.getCharacteristic(Characteristic.RotationSpeed)
.setProps({ minValue: 0, maxValue: audioTracks.length - 1 });
}
}