Javascript client for communicating with Fibaro HomeCenter2 smart home controllers.
- NodeJS (>=10)
- Fibaro Home Center 2
yarn add fibaro-home-center2-client
or
npm install --save fibaro-home-center2-client
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getRooms().subscribe((rooms) => {
console.log(rooms);
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
console.log(devices);
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.events().subscribe((event) => {
console.log(event);
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
const light = devices.find(device => device.identifiers.includes('kitchen/lights/main-light'));
light.turnOff().subscribe(() => {
console.log('Kitchen light has turned off');
});
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
const fan = devices.find(device => device.identifiers.includes('bedroom/climate/fan'));
client.events().subscribe((event) => {
if (event.identifiers.includes('bedroom/climate/temperature') && event.property === 'value') {
if (event.newValue > 22) {
fan.turnOn().subscribe();
} else {
fan.turnOff().subscribe();
}
}
})
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
const map = {};
for (const device of devices) {
for (const identifier of device.identifiers) {
map[identifier] = device.id;
}
}
for (const key of Object.keys(map).sort()) {
console.log(key + ': ' + map[key]);
}
});
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
devices
.filter(device => device.properties.power > 0)
.map(device => console.log(device.identifiers.join(', ') + ': ' + device.properties.power + 'w'));
});
Output example:
hall/lights/lamp: 39.4w
garage/lights/lamp: 79.1w
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
for (const device of devices) {
console.log(device.identifiers.join(', '), device.actions);
}
});
Output example:
...
bedroom/blinds/curtains {
close: 0,
open: 0,
reconfigure: 0,
reset: 0,
sceneActivationSet: 0,
setValue: 1,
setValue2: 1,
startLevelDecrease: 0,
startLevelIncrease: 0,
stop: 0,
stopLevelChange: 0
}
bathroom/safety/flood-sensor {
abortUpdate: 1,
forceArm: 0,
meetArmConditions: 0,
reconfigure: 0,
retryUpdate: 1,
setArmed: 1,
setInterval: 1,
startUpdate: 1,
updateFirmware: 1
}
bedroom/lights/led-strip {
abortUpdate: 1,
reconfigure: 0,
reset: 0,
retryUpdate: 1,
setB: 1,
setBrightness: 1,
setColor: 1,
setFavoriteProgram: 2,
setG: 1,
setR: 1,
setValue: 1,
setW: 1,
startLevelDecrease: 0,
startLevelIncrease: 0,
startProgram: 1,
startUpdate: 1,
stopLevelChange: 0,
turnOff: 0,
turnOn: 0,
updateFirmware: 1
}
...
- CLIENT_OPTIONS
Client options
- DevicePropertyUpdateEvent :
Object
- EventCriteria :
Object
- SystemEvent :
Object
- Room :
Object
- Device :
Object
Kind: global class
Creates a new client.
Param | Type |
---|---|
options | CLIENT_OPTIONS | Object |
client.events() ⇒ Observable.<DevicePropertyUpdateEvent>
Subscribe on device property update events
Kind: instance method of Client
Properties
Name | Type | Description |
---|---|---|
criteria | EventCriteria |
Optional event filtering |
client.system() ⇒ Observable.<SystemEvent>
Subscribe on client system events
Kind: instance method of Client
Make a GET API request to HC2
Kind: instance method of Client
Param | Type | Default |
---|---|---|
query | string |
|
retry | boolean |
false |
Get rooms
Kind: instance method of Client
Returns: Observable<Room[]>
Example
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getRooms().subscribe((rooms) => {
console.log(rooms);
});
Returns devices with properties and actions
Kind: instance method of Client
Returns: Observable<Device[]>
Example
const Fibaro = require('fibaro-home-center2-client');
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.getDevices().subscribe((devices) => {
console.log(devices);
});
client.getDevices().subscribe((devices) => {
const light = devices.find(device => device.identifiers.includes('kitchen/lights/main-light'));
light.turnOff().subscribe(() => {
console.log('Kitchen light has turned off');
});
});
Low level method to call an action on a given device. Applications are supposed to call actions on devices instead of this function.
Kind: instance method of Client
Returns: Observable
Param | Type |
---|---|
deviceId | number |
action | string |
options | array |
Example
const Fibaro = require('fibaro-home-center2-client');
// call an action on an ID known device
const client = new Fibaro.Hc2Client({host: '192.168.1.69', user: 'foo', password: 'bar'});
client.callAction(21, 'turnOn');
// call an action on a device object
client.getDevices().subscribe((devices) => {
// control light
const light = devices.find(device => device.identifiers.includes('kitchen/lights/main-light'));
light.turnOn().subscribe(() => {
console.log('Kitchen light has turned on');
});
// control RGBW devices
const led = devices.find(device => device.identifiers.includes('living-room/lights/rgb-led-strip'));
led.setBrightness(50).subscribe(() => {
console.log('Brightness set to 50');
});
});
Client options
Kind: global constant
Read only: true
Properties
Name | Type | Default | Description |
---|---|---|---|
host | string |
"192.168.1.69" |
HC2 controller ip-address |
port | number |
80 |
HC2 controller port |
user | string |
"admin" |
username |
password | string |
user password | |
connectTimeout | number |
7000 |
Reconnect to controller if no success timeout |
pollingInterval | number |
1000 |
Controller devices properties polling interval |
pollingTimeout | number |
3000 |
Controller devices properties polling timeout |
debug | boolean |
false |
Trace debug information |
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
id | number |
Room id provided by HC |
identifier | number |
Generated literal identifier |
property | string |
Updated property |
newValue | string |
updated value |
oldValue | string |
previous value |
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
device | Device | null |
Subscribe only on a specific device events |
properties | Array.<string> | null |
Subscribe only on a specific property change events |
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
id | number |
Room id provided by HC |
name | number |
Room name provided by HC |
identifier | number |
Generated literal identifier |
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
id | number |
Room id provided by HC |
name | number |
Room name provided by HC |
identifier | number |
Generated literal identifier |
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
id | number |
Device id provided by HC |
name | number |
Device name provided by HC |
room | Room |
Device room |
identifiers | Array.<string> |
Generated literal identifiers |
properties | Object |
Device properties |
actions | Object |
Available device actions |
This project is licensed under the GNU GPLv3 - see the LICENSE file for details