diff --git a/accessory/air_conditioner.go b/accessory/air_conditioner.go new file mode 100644 index 0000000..1773599 --- /dev/null +++ b/accessory/air_conditioner.go @@ -0,0 +1,21 @@ +package accessory + +import ( + "github.com/brutella/hap/service" +) + +type AirConditioner struct { + *A + AirConditioner *service.AirConditioner +} + +// NewAirConditioner returns an air conditioner accessory. +func NewAirConditioner(info Info) *AirConditioner { + a := AirConditioner{} + a.A = New(info, TypeAirConditioner) + + a.AirConditioner = service.NewAirConditioner() + a.AddS(a.AirConditioner.S) + + return &a +} diff --git a/service/air_conditioner.go b/service/air_conditioner.go new file mode 100644 index 0000000..78ef7d0 --- /dev/null +++ b/service/air_conditioner.go @@ -0,0 +1,58 @@ +package service + +import ( + "github.com/brutella/hap/characteristic" +) + +type AirConditioner struct { + *S + + Active *characteristic.Active + CurrentHeaterCoolerState *characteristic.CurrentHeaterCoolerState + TargetHeaterCoolerState *characteristic.TargetHeaterCoolerState + CurrentTemperature *characteristic.CurrentTemperature + CoolingThresholdTemperature *characteristic.CoolingThresholdTemperature + HeatingThresholdTemperature *characteristic.HeatingThresholdTemperature + SwingMode *characteristic.SwingMode + RotationSpeed *characteristic.RotationSpeed + TemperatureDisplayUnits *characteristic.TemperatureDisplayUnits + LockPhysicalControls *characteristic.LockPhysicalControls +} + +func NewAirConditioner() *AirConditioner { + s := AirConditioner{} + s.S = New(TypeHeaterCooler) + + s.Active = characteristic.NewActive() + s.AddC(s.Active.C) + + s.CurrentHeaterCoolerState = characteristic.NewCurrentHeaterCoolerState() + s.AddC(s.CurrentHeaterCoolerState.C) + + s.TargetHeaterCoolerState = characteristic.NewTargetHeaterCoolerState() + s.AddC(s.TargetHeaterCoolerState.C) + + s.CurrentTemperature = characteristic.NewCurrentTemperature() + s.AddC(s.CurrentTemperature.C) + + // Add optional characteristics that are commonly used in air conditioners + s.CoolingThresholdTemperature = characteristic.NewCoolingThresholdTemperature() + s.AddC(s.CoolingThresholdTemperature.C) + + s.HeatingThresholdTemperature = characteristic.NewHeatingThresholdTemperature() + s.AddC(s.HeatingThresholdTemperature.C) + + s.SwingMode = characteristic.NewSwingMode() + s.AddC(s.SwingMode.C) + + s.RotationSpeed = characteristic.NewRotationSpeed() + s.AddC(s.RotationSpeed.C) + + s.TemperatureDisplayUnits = characteristic.NewTemperatureDisplayUnits() + s.AddC(s.TemperatureDisplayUnits.C) + + s.LockPhysicalControls = characteristic.NewLockPhysicalControls() + s.AddC(s.LockPhysicalControls.C) + + return &s +}