UNPKG

homebridge-vwconnectid

Version:
116 lines 7.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RemainingRangeAccessory = exports.ChargingAccessory = void 0; class ChargingAccessory { constructor(platform, accessory) { this.platform = platform; this.accessory = accessory; this.accessory.getService(this.platform.Service.AccessoryInformation) .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Volkswagen') .setCharacteristic(this.platform.Characteristic.Model, this.platform.vwConn.vehicles.data.find(({ vin }) => vin === this.platform.config.weconnect.vin).model) .setCharacteristic(this.platform.Characteristic.SerialNumber, this.platform.config.weconnect.vin); this.service = this.accessory.getService(this.platform.Service.Switch) || this.accessory.addService(this.platform.Service.Switch); this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.displayName); this.service.getCharacteristic(this.platform.Characteristic.On) .onSet(this.setOn.bind(this)) .onGet(this.getOn.bind(this)); const chargePercentageService = this.accessory.getService('Battery Level') || this.accessory.addService(this.platform.Service.Lightbulb, 'Battery Level', 'YourUniqueIdentifier-1'); chargePercentageService.setCharacteristic(this.platform.Characteristic.ConfiguredName, 'Battery Level'); chargePercentageService.setCharacteristic(this.platform.Characteristic.IsConfigured, this.platform.Characteristic.IsConfigured.CONFIGURED); chargePercentageService.getCharacteristic(this.platform.Characteristic.Brightness) .onSet(this.setBatteryLevel.bind(this)) .onGet(this.getBatteryLevel.bind(this)); chargePercentageService.getCharacteristic(this.platform.Characteristic.On) .onGet(this.getBatteryLevelOn.bind(this)); const batteryService = this.accessory.getService('BatteryLevel') || this.accessory.addService(this.platform.Service.BatteryService, 'BatteryLevel', 'YourUniqueIdentifier-3'); batteryService.setCharacteristic(this.platform.Characteristic.ConfiguredName, 'BatteryLevel'); batteryService.getCharacteristic(this.platform.Characteristic.BatteryLevel) .onGet(this.getBatteryLevel.bind(this)); const targetSOCreachedService = this.accessory.getService('Charge Level Reached') || this.accessory.addService(this.platform.Service.MotionSensor, 'Charge Level Reached', 'YourUniqueIdentifier-2'); targetSOCreachedService.setCharacteristic(this.platform.Characteristic.ConfiguredName, 'Charge Level Reached'); targetSOCreachedService.setCharacteristic(this.platform.Characteristic.IsConfigured, this.platform.Characteristic.IsConfigured.CONFIGURED); this.platform.idStatusEmitter.on('chargePurposeReached', () => { targetSOCreachedService.updateCharacteristic(this.platform.Characteristic.MotionDetected, true); setInterval(() => { targetSOCreachedService.updateCharacteristic(this.platform.Characteristic.MotionDetected, false); }, 60 * 1000); }); this.platform.idStatusEmitter.on('chargingStarted', () => { chargePercentageService.updateCharacteristic(this.platform.Characteristic.On, true); this.service.updateCharacteristic(this.platform.Characteristic.On, true); }); this.platform.idStatusEmitter.on('chargingStopped', () => { chargePercentageService.updateCharacteristic(this.platform.Characteristic.On, false); this.service.updateCharacteristic(this.platform.Characteristic.On, false); }); this.platform.idStatusEmitter.on('currentSOC', (soc) => { chargePercentageService.updateCharacteristic(this.platform.Characteristic.On, true); chargePercentageService.updateCharacteristic(this.platform.Characteristic.Brightness, soc); }); } async setOn(value) { if (value) { this.platform.vwConn.startCharging(); } else { this.platform.vwConn.stopCharging(); } this.platform.log.info('Set Characteristic On ->', value); } async setBatteryLevel(value) { const targetPercentage = Math.max(50, Math.round(value / 10) * 10); clearTimeout(this.timer); this.timer = setTimeout(() => { this.accessory.getService(this.platform.Service.Lightbulb).getCharacteristic(this.platform.Characteristic.Brightness).updateValue(this.platform.vwConn.idData.charging.batteryStatus.value.currentSOC_pct); this.platform.vwConn.setChargingSetting("targetSOC", targetPercentage); this.platform.log.info('Set Characteristic target battery level ->', targetPercentage); }, 5000); } async getOn() { var _a, _b, _c; if (typeof ((_c = (_b = (_a = this.platform.vwConn.idData.charging) === null || _a === void 0 ? void 0 : _a.chargingStatus) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.chargingState) === 'undefined') return false; const isOn = this.platform.vwConn.idData.charging.chargingStatus.value.chargingState === 'charging'; return isOn; } async getBatteryLevel() { var _a, _b, _c; if (typeof ((_c = (_b = (_a = this.platform.vwConn.idData.charging) === null || _a === void 0 ? void 0 : _a.batteryStatus) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.currentSOC_pct) === 'undefined') return 80; const brightness = this.platform.vwConn.idData.charging.batteryStatus.value.currentSOC_pct; return brightness; } async getBatteryLevelOn() { return true; } } exports.ChargingAccessory = ChargingAccessory; class RemainingRangeAccessory { constructor(platform, accessory) { this.platform = platform; this.accessory = accessory; this.accessory.getService(this.platform.Service.AccessoryInformation) .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Volkswagen') .setCharacteristic(this.platform.Characteristic.Model, this.platform.vwConn.vehicles.data.find(({ vin }) => vin === this.platform.config.weconnect.vin).model) .setCharacteristic(this.platform.Characteristic.SerialNumber, this.platform.config.weconnect.vin); this.service = this.accessory.getService(this.platform.Service.LightSensor) || this.accessory.addService(this.platform.Service.LightSensor); this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.displayName); this.service.getCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel) .onGet(this.getCurrentAmbientLightLevel.bind(this)); this.platform.idStatusEmitter.on('remainingRange', (range) => { this.service.updateCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel, range); }); } async getCurrentAmbientLightLevel() { var _a, _b, _c; if (typeof ((_c = (_b = (_a = this.platform.vwConn.idData.charging) === null || _a === void 0 ? void 0 : _a.batteryStatus) === null || _b === void 0 ? void 0 : _b.value) === null || _c === void 0 ? void 0 : _c.cruisingRangeElectric_km) === 'undefined') return 300; const range = this.platform.vwConn.idData.charging.batteryStatus.value.cruisingRangeElectric_km; return range; } } exports.RemainingRangeAccessory = RemainingRangeAccessory; //# sourceMappingURL=chargingAccessory.js.map