├── .foreverignore ├── .gitignore ├── package.json ├── samsung.js ├── README.md └── public └── index.html /.foreverignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | *.swp 3 | *.bak 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "samsung", 3 | "version": "1.0.0", 4 | "description": "Samsung TV web control", 5 | "main": "samsung.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Robert Oostenveld", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.15.3", 13 | "samsung-remote": "^1.2.5" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /samsung.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var express = require('express'); 4 | var SamsungRemote = require('samsung-remote'); 5 | 6 | var ADDRESS = '192.168.1.127'; // of the smart TV 7 | 8 | var remote = new SamsungRemote({ 9 | ip: ADDRESS 10 | }); 11 | 12 | var app = express(); 13 | var PORT = 3010; // of this application 14 | 15 | app.use(express.static('public')) 16 | 17 | app.listen(PORT, function () { 18 | console.log('Listening on port ' + PORT); 19 | }); 20 | 21 | app.get('/', function (req, res) { 22 | res.send('index.html') 23 | // res.send('Samsung Smart TV'); 24 | }); 25 | 26 | app.get('/status', function (req, res) { 27 | remote.isAlive(function(err) { 28 | if (err) { 29 | res.send('TV is offline'); 30 | } else { 31 | res.send('TV is online'); 32 | } 33 | }); 34 | }); 35 | 36 | app.get([], function (req, res) { 37 | arr = req.url.split('/'); 38 | message = arr[1].toUpperCase(); 39 | if (message.length>1) { 40 | remote.send(message, function callback(err) { 41 | if (err) { 42 | console.error(err); 43 | res.send(err); 44 | } else { 45 | console.log(message); 46 | res.send(message); 47 | } 48 | }); 49 | } 50 | }); 51 | 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SAMSUNG 2 | 3 | This is a web interface for my Samsung Smart TV. It is built on 4 | top of [samsung-remote](https://www.npmjs.com/package/samsung-remote) 5 | and [express](https://www.npmjs.com/package/express). The interface can be 6 | used with a web browser, but also from the command line and using 7 | the [IFTTT](http://ifttt.com) Maker channel. 8 | 9 | Use as 10 | ``` 11 | curl -X get http://hostname:3010/command 12 | ``` 13 | where the command is one of the following 14 | ``` 15 | KEY_VOLUP 16 | KEY_VOLDOWN 17 | KEY_POWERON 18 | KEY_POWEROFF 19 | ``` 20 | etc. 21 | 22 | ## Complete list of commands 23 | 24 | ``` 25 | KEY_0 26 | KEY_1 27 | KEY_2 28 | KEY_3 29 | KEY_4 30 | KEY_5 31 | KEY_6 32 | KEY_7 33 | KEY_8 34 | KEY_9 35 | KEY_11 36 | KEY_11 37 | KEY_12 38 | KEY_AD 39 | KEY_ADDDEL 40 | KEY_ALT_MHP 41 | KEY_ANGLE 42 | KEY_ANTENA 43 | KEY_ANYNET 44 | KEY_ANYVIEW 45 | KEY_APP_LIST 46 | KEY_ASPECT 47 | KEY_AUTO_ARC_ANTENNA_AIR 48 | KEY_AUTO_ARC_ANTENNA_CABLE 49 | KEY_AUTO_ARC_ANTENNA_SATELLITE 50 | KEY_AUTO_ARC_ANYNET_AUTO_START 51 | KEY_AUTO_ARC_ANYNET_MODE_OK 52 | KEY_AUTO_ARC_AUTOCOLOR_FAIL 53 | KEY_AUTO_ARC_AUTOCOLOR_SUCCESS 54 | KEY_AUTO_ARC_CAPTION_ENG 55 | KEY_AUTO_ARC_CAPTION_KOR 56 | KEY_AUTO_ARC_CAPTION_OFF 57 | KEY_AUTO_ARC_CAPTION_ON 58 | KEY_AUTO_ARC_C_FORCE_AGING 59 | KEY_AUTO_ARC_JACK_IDENT 60 | KEY_AUTO_ARC_LNA_OFF 61 | KEY_AUTO_ARC_LNA_ON 62 | KEY_AUTO_ARC_PIP_CH_CHANGE 63 | KEY_AUTO_ARC_PIP_DOUBLE 64 | KEY_AUTO_ARC_PIP_LARGE 65 | KEY_AUTO_ARC_PIP_LEFT_BOTTOM 66 | KEY_AUTO_ARC_PIP_LEFT_TOP 67 | KEY_AUTO_ARC_PIP_RIGHT_BOTTOM 68 | KEY_AUTO_ARC_PIP_RIGHT_TOP 69 | KEY_AUTO_ARC_PIP_SMALL 70 | KEY_AUTO_ARC_PIP_SOURCE_CHANGE 71 | KEY_AUTO_ARC_PIP_WIDE 72 | KEY_AUTO_ARC_RESET 73 | KEY_AUTO_ARC_USBJACK_INSPECT 74 | KEY_AUTO_FORMAT 75 | KEY_AUTO_PROGRAM 76 | KEY_AV1 77 | KEY_AV2 78 | KEY_AV3 79 | KEY_BACK_MHP 80 | KEY_BOOKMARK 81 | KEY_CALLER_ID 82 | KEY_CAPTION 83 | KEY_CATV_MODE 84 | KEY_CHDOWN 85 | KEY_CHUP 86 | KEY_CH_LIST 87 | KEY_CLEAR 88 | KEY_CLOCK_DISPLAY 89 | KEY_COMPONENT1 90 | KEY_COMPONENT2 91 | KEY_CONTENTS 92 | KEY_CONVERGENCE 93 | KEY_CONVERT_AUDIO_MAINSUB 94 | KEY_CUSTOM 95 | KEY_CYAN 96 | KEY_DEVICE_CONNECT 97 | KEY_DISC_MENU 98 | KEY_DMA 99 | KEY_DNET 100 | KEY_DNIe 101 | KEY_DNSe 102 | KEY_DOOR 103 | KEY_DOWN 104 | KEY_DSS_MODE 105 | KEY_DTV 106 | KEY_DTV_LINK 107 | KEY_DTV_SIGNAL 108 | KEY_DVD_MODE 109 | KEY_DVI 110 | KEY_DVR 111 | KEY_DVR_MENU 112 | KEY_DYNAMIC 113 | KEY_ENTERTAINMENT 114 | KEY_ESAVING 115 | KEY_FACTORY 116 | KEY_FAVCH 117 | KEY_FF 118 | KEY_FF_ 119 | KEY_FM_RADIO 120 | KEY_GAME 121 | KEY_GREEN 122 | KEY_GUIDE 123 | KEY_HDMI 124 | KEY_HDMI1 125 | KEY_HDMI2 126 | KEY_HDMI3 127 | KEY_HDMI4 128 | KEY_HELP 129 | KEY_HOME 130 | KEY_ID_INPUT 131 | KEY_ID_SETUP 132 | KEY_INFO 133 | KEY_INSTANT_REPLAY 134 | KEY_LEFT 135 | KEY_LINK 136 | KEY_LIVE 137 | KEY_MAGIC_BRIGHT 138 | KEY_MAGIC_CHANNEL 139 | KEY_MDC 140 | KEY_MENU 141 | KEY_MIC 142 | KEY_MORE 143 | KEY_MOVIE1 144 | KEY_MS 145 | KEY_MTS 146 | KEY_MUTE 147 | KEY_NINE_SEPERATE 148 | KEY_OPEN 149 | KEY_PANNEL_CHDOWN 150 | KEY_PANNEL_CHUP 151 | KEY_PANNEL_ENTER 152 | KEY_PANNEL_MENU 153 | KEY_PANNEL_POWER 154 | KEY_PANNEL_SOURCE 155 | KEY_PANNEL_VOLDOW 156 | KEY_PANNEL_VOLUP 157 | KEY_PANORAMA 158 | KEY_PAUSE 159 | KEY_PCMODE 160 | KEY_PERPECT_FOCUS 161 | KEY_PICTURE_SIZE 162 | KEY_PIP_CHDOWN 163 | KEY_PIP_CHUP 164 | KEY_PIP_ONOFF 165 | KEY_PIP_SCAN 166 | KEY_PIP_SIZE 167 | KEY_PIP_SWAP 168 | KEY_PLAY 169 | KEY_PLUS100 170 | KEY_PMODE 171 | KEY_POWER 172 | KEY_POWEROFF 173 | KEY_POWERON 174 | KEY_PRECH 175 | KEY_PRINT 176 | KEY_PROGRAM 177 | KEY_QUICK_REPLAY 178 | KEY_REC 179 | KEY_RED 180 | KEY_REPEAT 181 | KEY_RESERVED1 182 | KEY_RETURN 183 | KEY_REWIND 184 | KEY_REWIND_ 185 | KEY_RIGHT 186 | KEY_RSS 187 | KEY_RSURF 188 | KEY_SCALE 189 | KEY_SEFFECT 190 | KEY_SETUP_CLOCK_TIMER 191 | KEY_SLEEP 192 | KEY_SOURCE 193 | KEY_SRS 194 | KEY_STANDARD 195 | KEY_STB_MODE 196 | KEY_STILL_PICTURE 197 | KEY_STOP 198 | KEY_SUB_TITLE 199 | KEY_SVIDEO1 200 | KEY_SVIDEO2 201 | KEY_SVIDEO3 202 | KEY_TOOLS 203 | KEY_TOPMENU 204 | KEY_TTX_MIX 205 | KEY_TTX_SUBFACE 206 | KEY_TURBO 207 | KEY_TV 208 | KEY_TV_MODE 209 | KEY_UP 210 | KEY_VCHIP 211 | KEY_VCR_MODE 212 | KEY_VOLDOWN 213 | KEY_VOLUP 214 | KEY_WHEEL_LEFT 215 | KEY_WHEEL_RIGHT 216 | KEY_W_LINK 217 | KEY_YELLOW 218 | KEY_ZOOM1 219 | KEY_ZOOM2 220 | KEY_ZOOM_IN 221 | KEY_ZOOM_MOVE 222 | KEY_ZOOM_OUT 223 | KEY_3SPEED 224 | KEY_16_9 225 | KEY_4_3 226 | ``` 227 | 228 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |