-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6b24bc5
commit 64febc0
Showing
7 changed files
with
79 additions
and
245 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import axios from 'axios'; | ||
|
||
export class HonAPI { | ||
private email: string; | ||
private password: string; | ||
|
||
constructor(email: string, password: string) { | ||
this.email = email; | ||
this.password = password; | ||
} | ||
|
||
async getDevices() { | ||
const response = await axios.post('https://geofence.haiersmart.com/v2/auth/login', { | ||
email: this.email, | ||
password: this.password, | ||
}); | ||
const token = response.data.token; | ||
const devicesResponse = await axios.get('https://geofence.haiersmart.com/v2/device', { | ||
headers: { Authorization: `Bearer ${token}` }, | ||
}); | ||
return devicesResponse.data.devices; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,7 @@ | ||
import { API } from 'homebridge'; | ||
|
||
import { PLATFORM_NAME } from './settings'; | ||
import { ExampleHomebridgePlatform } from './platform'; | ||
import { HonACPlatform } from './platform'; | ||
|
||
/** | ||
* This method registers the platform with Homebridge | ||
*/ | ||
export = (api: API) => { | ||
api.registerPlatform(PLATFORM_NAME, ExampleHomebridgePlatform); | ||
api.registerPlatform(PLATFORM_NAME, HonACPlatform); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,141 +1,30 @@ | ||
import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; | ||
import { HonACPlatform } from './platform'; | ||
|
||
import { ExampleHomebridgePlatform } from './platform'; | ||
|
||
/** | ||
* Platform Accessory | ||
* An instance of this class is created for each accessory your platform registers | ||
* Each accessory may expose multiple services of different service types. | ||
*/ | ||
export class ExamplePlatformAccessory { | ||
export class HonACPlatformAccessory { | ||
private service: Service; | ||
|
||
/** | ||
* These are just used to create a working example | ||
* You should implement your own code to track the state of your accessory | ||
*/ | ||
private exampleStates = { | ||
On: false, | ||
Brightness: 100, | ||
}; | ||
|
||
constructor( | ||
private readonly platform: ExampleHomebridgePlatform, | ||
private readonly platform: HonACPlatform, | ||
private readonly accessory: PlatformAccessory, | ||
private readonly device: any, | ||
Check failure on line 10 in src/platformAccessory.ts GitHub Actions / build (18.x)
|
||
) { | ||
this.service = this.accessory.getService(this.platform.Service.Thermostat) || | ||
this.accessory.addService(this.platform.Service.Thermostat); | ||
this.service.setCharacteristic(this.platform.Characteristic.Name, device.name); | ||
|
||
// set accessory information | ||
this.accessory.getService(this.platform.Service.AccessoryInformation)! | ||
.setCharacteristic(this.platform.Characteristic.Manufacturer, 'Default-Manufacturer') | ||
.setCharacteristic(this.platform.Characteristic.Model, 'Default-Model') | ||
.setCharacteristic(this.platform.Characteristic.SerialNumber, 'Default-Serial'); | ||
|
||
// get the LightBulb service if it exists, otherwise create a new LightBulb service | ||
// you can create multiple services for each accessory | ||
this.service = this.accessory.getService(this.platform.Service.Lightbulb) || this.accessory.addService(this.platform.Service.Lightbulb); | ||
|
||
// set the service name, this is what is displayed as the default name on the Home app | ||
// in this example we are using the name we stored in the `accessory.context` in the `discoverDevices` method. | ||
this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.exampleDisplayName); | ||
|
||
// each service must implement at-minimum the "required characteristics" for the given service type | ||
// see https://developers.homebridge.io/#/service/Lightbulb | ||
|
||
// register handlers for the On/Off Characteristic | ||
this.service.getCharacteristic(this.platform.Characteristic.On) | ||
.onSet(this.setOn.bind(this)) // SET - bind to the `setOn` method below | ||
.onGet(this.getOn.bind(this)); // GET - bind to the `getOn` method below | ||
|
||
// register handlers for the Brightness Characteristic | ||
this.service.getCharacteristic(this.platform.Characteristic.Brightness) | ||
.onSet(this.setBrightness.bind(this)); // SET - bind to the 'setBrightness` method below | ||
|
||
/** | ||
* Creating multiple services of the same type. | ||
* | ||
* To avoid "Cannot add a Service with the same UUID another Service without also defining a unique 'subtype' property." error, | ||
* when creating multiple services of the same type, you need to use the following syntax to specify a name and subtype id: | ||
* this.accessory.getService('NAME') || this.accessory.addService(this.platform.Service.Lightbulb, 'NAME', 'USER_DEFINED_SUBTYPE_ID'); | ||
* | ||
* The USER_DEFINED_SUBTYPE must be unique to the platform accessory (if you platform exposes multiple accessories, each accessory | ||
* can use the same subtype id.) | ||
*/ | ||
|
||
// Example: add two "motion sensor" services to the accessory | ||
const motionSensorOneService = this.accessory.getService('Motion Sensor One Name') || | ||
this.accessory.addService(this.platform.Service.MotionSensor, 'Motion Sensor One Name', 'YourUniqueIdentifier-1'); | ||
|
||
const motionSensorTwoService = this.accessory.getService('Motion Sensor Two Name') || | ||
this.accessory.addService(this.platform.Service.MotionSensor, 'Motion Sensor Two Name', 'YourUniqueIdentifier-2'); | ||
|
||
/** | ||
* Updating characteristics values asynchronously. | ||
* | ||
* Example showing how to update the state of a Characteristic asynchronously instead | ||
* of using the `on('get')` handlers. | ||
* Here we change update the motion sensor trigger states on and off every 10 seconds | ||
* the `updateCharacteristic` method. | ||
* | ||
*/ | ||
let motionDetected = false; | ||
setInterval(() => { | ||
// EXAMPLE - inverse the trigger | ||
motionDetected = !motionDetected; | ||
this.service.getCharacteristic(this.platform.Characteristic.CurrentTemperature) | ||
.onGet(this.getCurrentTemperature.bind(this)); | ||
|
||
// push the new value to HomeKit | ||
motionSensorOneService.updateCharacteristic(this.platform.Characteristic.MotionDetected, motionDetected); | ||
motionSensorTwoService.updateCharacteristic(this.platform.Characteristic.MotionDetected, !motionDetected); | ||
|
||
this.platform.log.debug('Triggering motionSensorOneService:', motionDetected); | ||
this.platform.log.debug('Triggering motionSensorTwoService:', !motionDetected); | ||
}, 10000); | ||
this.service.getCharacteristic(this.platform.Characteristic.TargetTemperature) | ||
.onSet(this.setTargetTemperature.bind(this)); | ||
} | ||
|
||
/** | ||
* Handle "SET" requests from HomeKit | ||
* These are sent when the user changes the state of an accessory, for example, turning on a Light bulb. | ||
*/ | ||
async setOn(value: CharacteristicValue) { | ||
// implement your own code to turn your device on/off | ||
this.exampleStates.On = value as boolean; | ||
|
||
this.platform.log.debug('Set Characteristic On ->', value); | ||
} | ||
|
||
/** | ||
* Handle the "GET" requests from HomeKit | ||
* These are sent when HomeKit wants to know the current state of the accessory, for example, checking if a Light bulb is on. | ||
* | ||
* GET requests should return as fast as possible. A long delay here will result in | ||
* HomeKit being unresponsive and a bad user experience in general. | ||
* | ||
* If your device takes time to respond you should update the status of your device | ||
* asynchronously instead using the `updateCharacteristic` method instead. | ||
* @example | ||
* this.service.updateCharacteristic(this.platform.Characteristic.On, true) | ||
*/ | ||
async getOn(): Promise<CharacteristicValue> { | ||
// implement your own code to check if the device is on | ||
const isOn = this.exampleStates.On; | ||
|
||
this.platform.log.debug('Get Characteristic On ->', isOn); | ||
|
||
// if you need to return an error to show the device as "Not Responding" in the Home app: | ||
// throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE); | ||
|
||
return isOn; | ||
async getCurrentTemperature(): Promise<CharacteristicValue> { | ||
return this.device.currentTemperature; | ||
} | ||
|
||
/** | ||
* Handle "SET" requests from HomeKit | ||
* These are sent when the user changes the state of an accessory, for example, changing the Brightness | ||
*/ | ||
async setBrightness(value: CharacteristicValue) { | ||
// implement your own code to set the brightness | ||
this.exampleStates.Brightness = value as number; | ||
|
||
this.platform.log.debug('Set Characteristic Brightness -> ', value); | ||
async setTargetTemperature(value: CharacteristicValue) { | ||
this.device.setTargetTemperature(value); | ||
} | ||
|
||
} |
Oops, something went wrong.