iklein99 / homebridge-smartthings

This is a plugin to Homebridge to connect your Smartthings network into Apple Home Kit.
Apache License 2.0
158 stars 53 forks source link

New Multisensor architecture is still very verbose #48

Closed veonua closed 1 year ago

veonua commented 1 year ago
import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
import { IKHomeBridgeHomebridgePlatform } from '../platform';
import { BaseService } from './baseService';
import { MultiServiceAccessory } from '../multiServiceAccessory';

export class TemperatureService extends BaseService{
  private service: Service;

  constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, multiServiceAccessory:MultiServiceAccessory,
    name: string, deviceStatus) {
    super(platform, accessory, multiServiceAccessory, name, deviceStatus);

    this.service = this.accessory.getService(platform.Service.TemperatureSensor ) ||
      this.accessory.addService(platform.Service.TemperatureSensor);
  }

  startService(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory): Service {
    this.service.setCharacteristic(platform.Characteristic.Name, accessory.context.device.label);

    this.service.getCharacteristic(platform.Characteristic.CurrentTemperature)
      .onGet(this.getCurrentTemperature.bind(this));

    return this.service;
  }

  async getCurrentTemperature(): Promise<CharacteristicValue> {
    return new Promise((resolve, reject) => {
      if (!this.multiServiceAccessory.isOnline()) {
        this.log.info(`${this.name} is offline`);
        throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
      }
      this.multiServiceAccessory.refreshStatus()
        .then(success => {
          if (!success) {
            return reject(new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE));
          }
          resolve(this.deviceStatus.status.temperatureMeasurement.temperature.value);
        });
    });
  }
}

only 2 lines here are related to the sensor itself

resolve(this.deviceStatus.status.temperatureMeasurement.temperature.value);

and

this.service.getCharacteristic(platform.Characteristic.CurrentTemperature).onGet(this.getCurrentTemperature.bind(this));

other is just copy-paste

iklein99 commented 1 year ago

Andrew,

This is still a work in progress and I haven’t yet release it.

Thanks for the feedback, though

On Oct 18, 2022, at 11:26 AM, Andrew Me @.***> wrote:

import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; import { IKHomeBridgeHomebridgePlatform } from '../platform'; import { BaseService } from './baseService'; import { MultiServiceAccessory } from '../multiServiceAccessory';

export class TemperatureService extends BaseService{ private service: Service;

constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, multiServiceAccessory:MultiServiceAccessory, name: string, deviceStatus) { super(platform, accessory, multiServiceAccessory, name, deviceStatus);

this.service = this.accessory.getService(platform.Service.TemperatureSensor ) ||
  this.accessory.addService(platform.Service.TemperatureSensor);

}

startService(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory): Service { this.service.setCharacteristic(platform.Characteristic.Name, accessory.context.device.label);

this.service.getCharacteristic(platform.Characteristic.CurrentTemperature)
  .onGet(this.getCurrentTemperature.bind(this));

return this.service;

}

async getCurrentTemperature(): Promise { return new Promise((resolve, reject) => { if (!this.multiServiceAccessory.isOnline()) { this.log.info(${this.name} is offline); throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE); } this.multiServiceAccessory.refreshStatus() .then(success => { if (!success) { return reject(new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE)); } resolve(this.deviceStatus.status.temperatureMeasurement.temperature.value); }); }); } } only 2 lines here are related to the sensor itself

resolve(this.deviceStatus.status.temperatureMeasurement.temperature.value);

and

this.service.getCharacteristic(platform.Characteristic.CurrentTemperature).onGet(this.getCurrentTemperature.bind(this));

other is just copy-paste

— Reply to this email directly, view it on GitHub https://github.com/iklein99/homebridge-smartthings/issues/48, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABG55ESHZFOHFI5HXEEEQATWD26SVANCNFSM6AAAAAARIGWY3Y. You are receiving this because you are subscribed to this thread.