homebridge-eveatmo
Version:
Homebridge plugin which adds a Netatmo weatherstation as HomeKit device and tries to act like Elgato Eve Room/Weather
80 lines (64 loc) • 2.46 kB
JavaScript
'use strict';
var Accessory, Service, Characteristic;
var homebridge;
module.exports = function (pHomebridge) {
if (pHomebridge && !homebridge) {
homebridge = pHomebridge;
Characteristic = homebridge.hap.Characteristic;
Accessory = homebridge.hap.Accessory;
Service = homebridge.hap.Service;
}
class NetatmoAccessory extends Accessory {
constructor(homebridge, accessoryConfig, netatmoDevice) {
var name = accessoryConfig.name || 'Eveatmo ' + netatmoDevice.deviceType + ' ' + accessoryConfig.id;
var uid = homebridge.hap.uuid.generate('eveatmo.' + accessoryConfig.netatmoType + '.' + accessoryConfig.id);
super(name, uid);
this.log = netatmoDevice.log;
this.config = netatmoDevice.config;
this.device = netatmoDevice;
this.id = accessoryConfig.id;
this.name = name;
this.deviceType = netatmoDevice.deviceType;
this.netatmoType = accessoryConfig.netatmoType;
this.firmware = accessoryConfig.firmware;
this.dataTypes = accessoryConfig.dataTypes;
this.model = accessoryConfig.model;
this._configureAccessoryInformationService();
}
identify(callback) {
this.log('Identify ' + this.name);
callback();
}
getServices() {
return this.services;
}
_configureAccessoryInformationService() {
var accessoryInformationService = this.getService(Service.AccessoryInformation);
if (!accessoryInformationService.getCharacteristic(Characteristic.FirmwareRevision)) {
accessoryInformationService.addCharacteristic(Characteristic.FirmwareRevision);
}
accessoryInformationService
.setCharacteristic(Characteristic.Name, this.name)
.setCharacteristic(Characteristic.Model, this.model)
.setCharacteristic(Characteristic.SerialNumber, this.id)
.setCharacteristic(Characteristic.Manufacturer, 'Eveatmo')
.setCharacteristic(Characteristic.FirmwareRevision, this.firmware);
}
notifyUpdate() {
console.log('Method notifyUpdate should have been overridden ' + this.name);
}
refreshData(callback) {
this.device.refreshDeviceData((err, deviceData) => {
this.notifyUpdate(deviceData);
callback(err, deviceData);
}, false);
}
extractAccessoryData(deviceData) {
if (!deviceData) {
return null;
}
return deviceData[this.id];
}
}
return NetatmoAccessory;
};