diff --git a/index.js b/index.js index 5db83a8..d045a89 100644 --- a/index.js +++ b/index.js @@ -69,6 +69,40 @@ mqtt.on('message', function (topic, payload) { case 'launch': lgtv.request('ssap://system.launcher/launch', {id: '' + payload}); break; + + case 'move': + case 'drag': + // the event type is 'move' for both moves and drags. + sendPointerEvent('move', { + dx: payload.dx, + dy: payload.dy, + drag: parts[2] === 'drag' ? 1 : 0 + }); + break; + + case 'scroll': + sendPointerEvent('scroll', { + dx: payload.dx, + dy: payload.dy + }); + break; + + case 'click': + sendPointerEvent('click'); + break; + + case 'button': + /* + * Buttons that are known to work: + * MUTE, RED, GREEN, YELLOW, BLUE, HOME, MENU, VOLUMEUP, VOLUMEDOWN, + * CC, BACK, UP, DOWN, LEFT, ENTER, DASH, 0-9, EXIT + * + * Probably also (but I don't have the facility to test them): + * CHANNELUP, CHANNELDOWN + */ + sendPointerEvent('button', { name: (''+payload).toUpperCase() }); + break; + default: lgtv.request('ssap://' + topic.replace(config.name + '/set/', ''), payload || null); } @@ -156,3 +190,14 @@ lgtv.on('error', function (err) { } lastError = str; }); + +function sendPointerEvent(type, payload) { + lgtv.getSocket( + 'ssap://com.webos.service.networkinput/getPointerInputSocket', + function(err, sock) { + if (!err) { + sock.send(type, payload); + } + } + ); +} diff --git a/package.json b/package.json index 4b3cce8..fcddf10 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/hobbyquaker/lgtv2mqtt", "dependencies": { - "lgtv2": "^1.0.0", + "lgtv2": "^1.1.0", "mqtt": "^1.5.0", "yalm": "^2.0.0", "yargs": "^3.29.0"