Skip to content

Commit

Permalink
Humidity optional on zones & better state updates
Browse files Browse the repository at this point in the history
  • Loading branch information
jxg81 committed Aug 5, 2022
1 parent ef316b6 commit 518e538
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 39 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"private": false,
"displayName": "Homebridge Actron Que",
"name": "homebridge-actron-que",
"version": "1.1.0",
"version": "1.1.1-beta.0",
"description": "Homebridge plugin for controlling Actron Que controller systems",
"license": "Apache-2.0",
"repository": {
Expand Down
13 changes: 11 additions & 2 deletions src/hvacZone.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export class HvacZone {
readonly zoneName: string;
readonly zoneIndex: number;
readonly sensorId: string;
readonly zoneHumiditySensor: boolean;
zoneEnabled: boolean;
currentTemp: number;
currentHeatingSetTemp: number;
Expand All @@ -28,27 +29,35 @@ export class HvacZone {
this.sensorId = zoneStatus.sensorId;
this.zoneEnabled = zoneStatus.zoneEnabled;
this.currentTemp = zoneStatus.currentTemp;
this.currentHumidity = zoneStatus.currentHumidity;
this.maxHeatSetPoint = zoneStatus.maxHeatSetPoint;
this.minHeatSetPoint = zoneStatus.minHeatSetPoint;
this.maxCoolSetPoint = zoneStatus.maxCoolSetPoint;
this.minCoolSetPoint = zoneStatus.minCoolSetPoint;
this.currentHeatingSetTemp = zoneStatus.currentHeatingSetTemp;
this.currentCoolingSetTemp = zoneStatus.currentCoolingSetTemp;
this.zoneSensorBattery = zoneStatus.zoneSensorBattery;

// some zone sensor versions do not report humidity
if (zoneStatus.currentHumidity === 'notSupported') {
this.zoneHumiditySensor = false;
this.currentHumidity = 0;
} else {
this.zoneHumiditySensor = false;
this.currentHumidity = zoneStatus.currentHumidity;
}
}

async pushStatusUpdate(zoneStatus: ZoneStatus) {
this.zoneEnabled = zoneStatus.zoneEnabled;
this.currentTemp = zoneStatus.currentTemp;
this.currentHumidity = zoneStatus.currentHumidity;
this.maxHeatSetPoint = zoneStatus.maxHeatSetPoint;
this.minHeatSetPoint = zoneStatus.minHeatSetPoint;
this.maxCoolSetPoint = zoneStatus.maxCoolSetPoint;
this.minCoolSetPoint = zoneStatus.minCoolSetPoint;
this.currentHeatingSetTemp = zoneStatus.currentHeatingSetTemp;
this.currentCoolingSetTemp = zoneStatus.currentCoolingSetTemp;
this.zoneSensorBattery = zoneStatus.zoneSensorBattery;
this.currentHumidity = this.zoneHumiditySensor ? zoneStatus.currentHumidity as number : 0;
}

async getZoneStatus() {
Expand Down
29 changes: 13 additions & 16 deletions src/masterControllerAccessory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ export class MasterControllerAccessory {
async setPowerState(value: CharacteristicValue) {
switch (value) {
case 0:
this.platform.hvacInstance.setPowerStateOff();
await this.platform.hvacInstance.setPowerStateOff();
break;
case 1:
this.platform.hvacInstance.setPowerStateOn();
await this.platform.hvacInstance.setPowerStateOn();
break;
}
this.platform.log.debug('Set Master Power State -> ', value);
Expand Down Expand Up @@ -152,16 +152,13 @@ export class MasterControllerAccessory {
async setTargetClimateMode(value: CharacteristicValue) {
switch (value) {
case this.platform.Characteristic.TargetHeaterCoolerState.AUTO:
this.platform.hvacInstance.setClimateModeAuto();
this.platform.hvacInstance.getStatus();
await this.platform.hvacInstance.setClimateModeAuto();
break;
case this.platform.Characteristic.TargetHeaterCoolerState.HEAT:
this.platform.hvacInstance.setClimateModeHeat();
this.platform.hvacInstance.getStatus();
await this.platform.hvacInstance.setClimateModeHeat();
break;
case this.platform.Characteristic.TargetHeaterCoolerState.COOL:
this.platform.hvacInstance.setClimateModeCool();
this.platform.hvacInstance.getStatus();
await this.platform.hvacInstance.setClimateModeCool();
break;
default:
this.platform.log.debug('Failed To Set Master Climate Mode -> ', value);
Expand Down Expand Up @@ -201,8 +198,8 @@ export class MasterControllerAccessory {
this.platform.hvacInstance.zonesFollowMaster === true) {
await this.platform.hvacInstance.setControlAllZonesOn();
}
this.platform.hvacInstance.setHeatTemp(value as number);
this.platform.hvacInstance.getStatus();
await this.platform.hvacInstance.setHeatTemp(value as number);
await this.platform.hvacInstance.getStatus();
this.platform.log.debug('Set Master Target Heating Temperature -> ', value);
}

Expand All @@ -217,8 +214,8 @@ export class MasterControllerAccessory {
this.platform.hvacInstance.zonesFollowMaster === true) {
await this.platform.hvacInstance.setControlAllZonesOn();
}
this.platform.hvacInstance.setCoolTemp(value as number);
this.platform.hvacInstance.getStatus();
await this.platform.hvacInstance.setCoolTemp(value as number);
await this.platform.hvacInstance.getStatus();
this.platform.log.debug('Set Master Target Cooling Temperature -> ', value);
}

Expand All @@ -231,16 +228,16 @@ export class MasterControllerAccessory {
async setFanMode(value: CharacteristicValue) {
switch (true) {
case (value <= 30):
this.platform.hvacInstance.setFanModeLow();
await this.platform.hvacInstance.setFanModeLow();
break;
case (value <= 60):
this.platform.hvacInstance.setFanModeMedium();
await this.platform.hvacInstance.setFanModeMedium();
break;
case (value <= 90):
this.platform.hvacInstance.setFanModeHigh();
await this.platform.hvacInstance.setFanModeHigh();
break;
case (value <= 100):
this.platform.hvacInstance.setFanModeAuto();
await this.platform.hvacInstance.setFanModeAuto();
break;
}
this.platform.log.debug('Set Master Fan Mode 91-100:Auto, 1-30:Low, 31-60:Medium, 61-90:High -> ', value);
Expand Down
3 changes: 2 additions & 1 deletion src/queApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -342,20 +342,21 @@ export default class QueApi {
// Format the data in a standard model that could be used with multiple HVAC types. Not sure if this was worth the effort
// but if i have to create another HVAC plugin it will be worthwhile :)
// This first section is the zone data, one of these per zone
// some versions of the zone sensor do not support humidity readings so if its undefined we will insert notSupported string
const zoneData: ZoneStatus = {
zoneName: zone['NV_Title'],
zoneIndex: zoneIndex,
sensorId: sensorId,
zoneEnabled: zoneEnabledState[zoneIndex],
currentTemp: zone['LiveTemp_oC'],
currentHumidity: zone['LiveHumidity_pc'],
maxHeatSetPoint: zone['MaxHeatSetpoint'],
minHeatSetPoint: zone['MinHeatSetpoint'],
maxCoolSetPoint: zone['MaxCoolSetpoint'],
minCoolSetPoint: zone['MinCoolSetpoint'],
currentHeatingSetTemp: zone['TemperatureSetpoint_Heat_oC'],
currentCoolingSetTemp: zone['TemperatureSetpoint_Cool_oC'],
zoneSensorBattery: zone['Sensors'][sensorId]['Battery_pc'],
currentHumidity: zone['LiveHumidity_pc'] === undefined ? 'notSupported' : zone['LiveHumidity_pc'],
};
zoneCurrentStatus.push(zoneData);
}
Expand Down
2 changes: 1 addition & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ export interface ZoneStatus {
sensorId: string;
zoneEnabled: boolean;
currentTemp: number;
currentHumidity: number;
currentHumidity: number | 'notSupported';
maxHeatSetPoint: number;
minHeatSetPoint: number;
maxCoolSetPoint: number;
Expand Down
44 changes: 26 additions & 18 deletions src/zoneControllerAccessory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { HvacZone } from './hvacZone';
// This class represents the master controller, a seperate class is used for representing zones (or will be once i write it)
export class ZoneControllerAccessory {
private hvacService: Service;
private humidityService: Service;
// some versions of the zone sensor do not support humidity
private humidityService: Service | null;
private batteryService: Service;

constructor(
Expand All @@ -25,25 +26,29 @@ export class ZoneControllerAccessory {
this.hvacService = this.accessory.getService(this.platform.Service.HeaterCooler)
|| this.accessory.addService(this.platform.Service.HeaterCooler);

// Get or create the humidity sensor service.
this.humidityService = this.accessory.getService(this.platform.Service.HumiditySensor)
|| this.accessory.addService(this.platform.Service.HumiditySensor);
// Set accesory display name, this is taken from discover devices in platform
this.hvacService.setCharacteristic(this.platform.Characteristic.Name, accessory.displayName);

// Get or create the humidity sensor service.
this.batteryService = this.accessory.getService(this.platform.Service.Battery)
|| this.accessory.addService(this.platform.Service.Battery);

// Set accesory display name, this is taken from discover devices in platform
this.hvacService.setCharacteristic(this.platform.Characteristic.Name, accessory.displayName);

// get humidity
this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
.onGet(this.getHumidity.bind(this));
// Get or create the humidity sensor service if the zone sensor supoprts humidity readings
if (this.zone.zoneHumiditySensor) {
this.humidityService = this.accessory.getService(this.platform.Service.HumiditySensor)
|| this.accessory.addService(this.platform.Service.HumiditySensor);
// get humidity
this.humidityService.getCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity)
.onGet(this.getHumidity.bind(this));
} else {
this.humidityService = null;
}

// get battery low
this.batteryService.getCharacteristic(this.platform.Characteristic.StatusLowBattery)
.onGet(this.getBatteryStatus.bind(this));

// get battery level
this.batteryService.getCharacteristic(this.platform.Characteristic.BatteryLevel)
.onGet(this.getBatteryLevel.bind(this));

Expand Down Expand Up @@ -96,9 +101,12 @@ export class ZoneControllerAccessory {
this.hvacService.updateCharacteristic(this.platform.Characteristic.CurrentTemperature, this.getCurrentTemperature());
this.hvacService.updateCharacteristic(this.platform.Characteristic.HeatingThresholdTemperature, this.getHeatingThresholdTemperature());
this.hvacService.updateCharacteristic(this.platform.Characteristic.CoolingThresholdTemperature, this.getCoolingThresholdTemperature());
this.humidityService.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, this.getHumidity());
this.batteryService.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, this.getBatteryStatus());
this.batteryService.updateCharacteristic(this.platform.Characteristic.BatteryLevel, this.getBatteryLevel());

if (this.humidityService) {
this.humidityService.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, this.getHumidity());
}
}

getHumidity(): CharacteristicValue {
Expand All @@ -123,10 +131,10 @@ export class ZoneControllerAccessory {
async setEnableState(value: CharacteristicValue) {
switch (value) {
case 0:
this.zone.setZoneDisable();
await this.zone.setZoneDisable();
break;
case 1:
this.zone.setZoneEnable();
await this.zone.setZoneEnable();
break;
}
this.platform.log.debug(`Set Zone ${this.zone.zoneName} Enable State -> `, value);
Expand Down Expand Up @@ -162,13 +170,13 @@ export class ZoneControllerAccessory {
async setTargetClimateMode(value: CharacteristicValue) {
switch (value) {
case this.platform.Characteristic.TargetHeaterCoolerState.AUTO:
this.platform.hvacInstance.setClimateModeAuto();
await this.platform.hvacInstance.setClimateModeAuto();
break;
case this.platform.Characteristic.TargetHeaterCoolerState.HEAT:
this.platform.hvacInstance.setClimateModeHeat();
await this.platform.hvacInstance.setClimateModeHeat();
break;
case this.platform.Characteristic.TargetHeaterCoolerState.COOL:
this.platform.hvacInstance.setClimateModeCool();
await this.platform.hvacInstance.setClimateModeCool();
break;
}
this.platform.log.debug(`Set Zone ${this.zone.zoneName} Climate Mode -> `, value);
Expand Down Expand Up @@ -216,7 +224,7 @@ export class ZoneControllerAccessory {
} else if (value < this.zone.minHeatSetPoint) {
value = this.zone.minHeatSetPoint;
}
this.zone.setHeatTemp(value as number);
await this.zone.setHeatTemp(value as number);
this.platform.log.debug(`Set Zone ${this.zone.zoneName} Target Heating Temperature -> `, value);
}

Expand All @@ -241,7 +249,7 @@ export class ZoneControllerAccessory {
} else if (value < this.zone.minCoolSetPoint) {
value = this.zone.minCoolSetPoint;
}
this.zone.setCoolTemp(value as number);
await this.zone.setCoolTemp(value as number);
this.platform.log.debug(`Set Zone ${this.zone.zoneName} Taget Cooling Temperature -> `, value);
}

Expand Down

0 comments on commit 518e538

Please sign in to comment.