Skip to content

Commit

Permalink
Add experimental support for a5-04-01/02/03
Browse files Browse the repository at this point in the history
  • Loading branch information
awaescher committed Jan 8, 2024
1 parent 883b486 commit 3977ced
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 0 deletions.
52 changes: 52 additions & 0 deletions src/EltakoTemperatureAndHumiditySensorAccessory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
import { EltakoMiniSafe2Platform } from './platform';
import { IUpdatableAccessory } from './IUpdatableAccessory';

export class EltakoTemperatureAndHumiditySensorAccessory implements IUpdatableAccessory {
private humidityService: Service;
private temperatureService: Service;

constructor(
private readonly platform: EltakoMiniSafe2Platform,
public readonly accessory: PlatformAccessory,
) {

this.accessory.getService(this.platform.Service.AccessoryInformation)!
.setCharacteristic(this.platform.Characteristic.Manufacturer, accessory.context.device.info.vendor)
.setCharacteristic(this.platform.Characteristic.Model, accessory.context.device.info.data)
.setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.info.address);

// https://developers.homebridge.io/#/service/HumiditySensor
const humidityServiceType = this.platform.Service.HumiditySensor;
this.humidityService = this.accessory.getService(humidityServiceType) || this.accessory.addService(humidityServiceType);

this.humidityService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.name);

this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
.onGet(this.getCurrentRelativeHumidity.bind(this));

// https://developers.homebridge.io/#/service/TemperatureSensor
const temperatureServiceType = this.platform.Service.TemperatureSensor;
this.temperatureService = this.accessory.getService(temperatureServiceType) || this.accessory.addService(temperatureServiceType);

this.temperatureService.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.name);

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

getCurrentRelativeHumidity(): CharacteristicValue {
const state = this.platform.deviceStateCache.find(s => s.sid === this.accessory.context.device.info.sid);
return state?.state?.humidity ?? 0;
}

getCurrentTemperature(): CharacteristicValue {
const state = this.platform.deviceStateCache.find(s => s.sid === this.accessory.context.device.info.sid);
return state?.state?.temperature ?? 0;
}

update() {
this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity).updateValue(this.getCurrentRelativeHumidity());

Check warning on line 49 in src/EltakoTemperatureAndHumiditySensorAccessory.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

This line has a length of 144. Maximum allowed is 140

Check warning on line 49 in src/EltakoTemperatureAndHumiditySensorAccessory.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

This line has a length of 144. Maximum allowed is 140

Check warning on line 49 in src/EltakoTemperatureAndHumiditySensorAccessory.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

This line has a length of 144. Maximum allowed is 140

Check warning on line 49 in src/EltakoTemperatureAndHumiditySensorAccessory.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

This line has a length of 144. Maximum allowed is 140
this.temperatureService.getCharacteristic(this.platform.Characteristic.CurrentTemperature).updateValue(this.getCurrentTemperature());
}
}
1 change: 1 addition & 0 deletions src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export class DeviceState {
timeout?: boolean;
illumination?: number;
temperature?: number;
humidity?: number;
wind?: number;
rain_state?: boolean;
s1?: number;
Expand Down
13 changes: 13 additions & 0 deletions src/platform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { PLATFORM_NAME, PLUGIN_NAME } from './settings';
import { EltakoSwitchAccessory } from './EltakoSwitchAccessory';
import { EltakoBlindsAccessory } from './EltakoBlindsAccessory';
import { EltakoDimmerAccessory } from './EltakoDimmerAccessory';
import { EltakoTemperatureAndHumiditySensorAccessory } from './EltakoTemperatureAndHumiditySensorAccessory';
import { MiniSafe2Api } from './MiniSafe2Api';
import { Device } from './models';
import { getChangedDeviceAddresses } from './StateChangeDetector';
Expand Down Expand Up @@ -164,6 +165,12 @@ export class EltakoMiniSafe2Platform implements DynamicPlatformPlugin {
let instance: IUpdatableAccessory | null = null;

switch (deviceType) {
case 'a5-04-01':
case 'a5-04-02':
case 'a5-04-03': {
instance = new EltakoTemperatureAndHumiditySensorAccessory(this, existingAccessory);
break;
}
case 'eltako_blind':
case 'eltako_tf_blind': {
instance = new EltakoBlindsAccessory(this, existingAccessory);
Expand Down Expand Up @@ -203,6 +210,12 @@ export class EltakoMiniSafe2Platform implements DynamicPlatformPlugin {
// create the accessory handler for the newly create accessory
// this is imported from `platformAccessory.ts`
switch (deviceType) {
case 'a5-04-01':
case 'a5-04-02':
case 'a5-04-03': {
instance = new EltakoTemperatureAndHumiditySensorAccessory(this, accessory);
break;
}
case 'eltako_blind':
case 'eltako_tf_blind': {
instance = new EltakoBlindsAccessory(this, accessory);
Expand Down

0 comments on commit 3977ced

Please sign in to comment.