A node module for Logitech Harmony Hub.
Uses a simple watchdog to reconnect on connection losses.
npm install harmonyhubws --production
with Hub IP 192.168.0.50:
const util = require('util');
const HarmonyHubWS = require('harmonyhubws');
const IP = '192.168.0.50';
let harmonyHubWS = new HarmonyHubWS(IP);
harmonyHubWS.on('online', () => {
console.log('connected to hub', IP);
//request config
harmonyHubWS.requestConfig();
});
harmonyHubWS.on('config', (config) => {
//be careful, config could be very big!
console.log('config', util.inspect(config,false, null, true));
//request hub state
harmonyHubWS.requestState();
//if there is a device press first button of device
if (config.device.length) {
let device = config.device[0];
if (device.controlGroup.length && device.controlGroup[0].function.length) {
console.log('pressing key', device.label, device.controlGroup[0].function[0].label);
harmonyHubWS.requestKeyPress(device.controlGroup[0].function[0].action);
}
}
//if there is an activity start it
if (config.activity.length) {
let activity = config.activity[0];
console.log('starting activity', activity.label);
harmonyHubWS.requestActivityChange(activity.id);
}
});
harmonyHubWS.on('state', (activityId, activityStatus) => {
console.log('state', activityId, activityStatus);
//if an activity is started turn it off and close client
if (activityStatus === 2) {
console.log('activity started, turn off', activityId);
harmonyHubWS.requestActivityChange('-1');
harmonyHubWS.close();
}
});
harmonyHubWS.on('offline', () => {
console.log('lost connection to hub', IP);
});
Returns the state object of the robot. Also updates all robot properties.
ip
:string
- IP of your Harmony Hub- [
watchdog
]:boolean
- defaults to true - example:
const HarmonyHubWS = require('harmonyhubws');
const IP = '192.168.0.50';
//start client without automatic connection handling
let harmonyHubWS = new HarmonyHubWS(IP, false);
Asks Hub to send Config. To retrieve config use event config
.
Asks Hub to send current state. To retrieve current state use event state
.
Asks Hub to start activity with ID activityId
. Results in multiple state events, activityState
will be 2
when the activity is completely started.
activityId
:number|string
- ID of the activity you want to start, use'-1'
(string!) to turn off any activity. To retrieve activity IDs see requestConfig.
Asks Hub to press a device key.
action
:string
- whole action string (deviceId, keyId, type) as retrieved from config.- [
hold
]:string
'press' or 'hold' - defaults topress
,hold
is a long press for ~250ms, if you want to hold longer you need to request hold repeatedly. - [
delay
]:number
defaults to100
, how long the key is held
or
deviceId
:string
- ID of the device you want to control. To retrieve device IDs see requestConfig.keyId
:string
- ID (name) of the key you want to press. To retrieve key Ids see requestConfig.- [
type
]:number
- defaults toIRCommand
. To retrieve key types see requestConfig. - [
hold
]:string
'press' or 'hold' - defaults topress
,hold
is a long press for ~250ms, if you want to hold longer you need to request hold repeatedly. - [
delay
]:number
defaults to100
, how long the key is held
Fired when connection to hub is established.
Fired when connection to hub is lost.
Fired when hub sends its current state.
activityId
:number|string
- ID of current activity,'-1'
for powerOff.activityState
:number
- state of current activity, where0
: off1
: starting (hub blocked until activityState is 2)2
: started3
: stopping (hub blocked until activityState is 0)
Fired when hub sends its configuration (devices, activities).
config
:object
- Hubs configuration. For details see example.
- (hufftheweevil) fix requestKeyPress improper handling when alternate format used
- (foxriver76) make code working for Harmony Hub v4.15.250
- (Pmant) initial commit