├── .github ├── FUNDING.yml └── workflows │ ├── build.yml │ ├── release.yml │ └── validate.yaml ├── .gitignore ├── Change_README ├── Override_buttons.md ├── README.md ├── example ├── Infinity+.svg ├── channels.jpg ├── color_buttons.jpg ├── logo_area.png ├── logo_area2.png ├── logo_area3.png ├── logo_example.png ├── popup.png ├── remote-control.jpg ├── remote-control2.jpg ├── remote-control3.jpg ├── remote.png ├── sound-source-pad.png ├── sound-source.jpg └── source_error.png ├── hacs.json ├── info.md ├── package-lock.json ├── package.json ├── rollup.config.mjs ├── src ├── const.ts ├── editor.ts ├── icons.ts ├── lg-remote-control.ts ├── types.ts └── utils.ts ├── tsconfig.json ├── tv_logo ├── AUX1.png ├── AUX2.png ├── AXN +1.png ├── AXN HD.png ├── AXN Sci-Fi.png ├── Alice.png ├── Animal Planet.png ├── Bluetooth.png ├── Boing.png ├── Boomerang.png ├── CD.png ├── Canale5 HD.png ├── Canali TV.png ├── Cartoon Network.png ├── Cartoonito.png ├── Cielo HD.png ├── DMAX.png ├── Deejay TV HD.png ├── EuroSport HD.png ├── Eurosport 2 HD.png ├── Fire Tv.png ├── Focus.png ├── IRIS.png ├── Italia1 HD.png ├── K2.png ├── LA7 HD.png ├── La 5.png ├── Marantz.png ├── Media Player.png ├── NOVE.png ├── Netflix.png ├── Nick Junior.png ├── Nickelodeon.png ├── Premium Action +24.png ├── Premium Action HD.png ├── Premium Calcio 1 HD.png ├── Premium Calcio 2.png ├── Premium Calcio 3.png ├── Premium Calcio 4.png ├── Premium Calcio 5.png ├── Premium Calcio 6.png ├── Premium Calcio.png ├── Premium Cinema +24.jpg ├── Premium Cinema 2 +24.jpg ├── Premium Cinema 2 HD.png ├── Premium Cinema HD.png ├── Premium Comedy.png ├── Premium Crime +24.jpg ├── Premium Crime HD.png ├── Premium Emotion.png ├── Premium Energy.png ├── Premium Extra 1 - GF.jpg ├── Premium Joi.png ├── Premium Mya.png ├── Premium Sport HD.jpg ├── Premium Stories.png ├── Ps4.png ├── RSI LA 1.png ├── RSI LA 2.png ├── Rai 1 HD.png ├── Rai 2 HD.png ├── Rai 3 HD.png ├── Rai 4.png ├── Rai Gulp.png ├── Rai Movie.png ├── Rai News 24.png ├── Rai Premium.png ├── Rai Sport 1.png ├── Rai Sport 2.png ├── Rai YoYo.png ├── Real Time HD.png ├── Rete4 HD.png ├── SKY.png ├── Sky 3D.PNG ├── Sky Arte HD.png ├── Sky Atlantic +1 HD.png ├── Sky Atlantic HD.png ├── Sky Calcio 1 HD.png ├── Sky Calcio 10.png ├── Sky Calcio 11.png ├── Sky Calcio 12.png ├── Sky Calcio 2 HD.png ├── Sky Calcio 3 HD.png ├── Sky Calcio 4 HD.png ├── Sky Calcio 5 HD.png ├── Sky Calcio 6 HD.png ├── Sky Calcio 7 HD.png ├── Sky Calcio 8 HD.png ├── Sky Calcio 9.png ├── Sky Sport 1 HD.png ├── Sky Sport 2 HD.png ├── Sky Sport 24 HD.png ├── Sky Sport 3 HD.png ├── Sky Sport F1 HD.png ├── Sky Sport MotoGP HD.png ├── Sky Sport Plus HD.png ├── Sky Supercalcio HD.png ├── Sky TG24 HD.png ├── Sky TG24.png ├── Sky Uno +1 HD.png ├── Sky Uno HD.png ├── Spotify.png ├── Super Tennis HD.png ├── Super!.png ├── TGCOM24.png ├── TV Audio.png ├── TV8.png ├── Tuner.png ├── Wii.png ├── cielo.png ├── deejay.png ├── frisbee.png ├── italia 2.png ├── paramount.png ├── rainews24.png ├── readme.md ├── realtime.png ├── sportitalia.jpg ├── sportitalia.png ├── supertennis.png ├── teleradiostereo.png └── tv_off.png └── tv_logos.zip /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ["buymeacoffee.com/madmicio"] -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | jobs: 8 | build: 9 | name: Build 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | 14 | - uses: actions/setup-node@v3 15 | with: 16 | node-version: 20 17 | 18 | - name: Build 19 | run: | 20 | npm install 21 | npm run build 22 | 23 | - name: Archive built file 24 | uses: actions/upload-artifact@v3 25 | with: 26 | name: lg-remote-control 27 | path: dist/lg-remote-control.js 28 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | release: 9 | name: Prepare release 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | 14 | - uses: actions/setup-node@v3 15 | with: 16 | node-version: 20 17 | 18 | - name: Build the file 19 | run: | 20 | npm install 21 | npm version --git-tag-version=false --commit-hooks=false "${{ github.event.release.tag_name }}" 22 | npm run build 23 | 24 | - name: Upload build result to release 25 | uses: svenstaro/upload-release-action@v1-release 26 | 27 | with: 28 | repo_token: ${{ secrets.GITHUB_TOKEN }} 29 | file: dist/lg-remote-control.js 30 | asset_name: lg-remote-control.js 31 | tag: ${{ github.ref }} 32 | overwrite: true 33 | -------------------------------------------------------------------------------- /.github/workflows/validate.yaml: -------------------------------------------------------------------------------- 1 | name: Validate HACS 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | jobs: 8 | validate: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v3 13 | 14 | - name: Validate HACS 15 | uses: "hacs/action@main" 16 | with: 17 | category: "plugin" 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /.rpt2_cache/ 3 | /dist 4 | .idea -------------------------------------------------------------------------------- /Change_README: -------------------------------------------------------------------------------- 1 | In the readme the following is mentioned regarding the following special icons on the remote: 2 | - icon: disney 3 | name: Disney 4 | - icon: dazn 5 | name: Dazn 6 | 7 | After testing I noticed the Disney button requires the following name: 8 | 9 | - icon: disney 10 | name: Disney+ 11 | 12 | Otherwise the button does not work at all 13 | -------------------------------------------------------------------------------- /Override_buttons.md: -------------------------------------------------------------------------------- 1 | ## Overriding key actions 2 | 3 | Example config: 4 | ```yaml 5 | type: custom:lg-remote-control 6 | av_receiver_family: anthemav 7 | entity: media_player.lg_webos_smart_tv 8 | is_smart_tv: 'true' 9 | colors: 10 | buttons: red 11 | text: blue 12 | background: blue 13 | projectorentity: '' 14 | mac: '00:11:22:33:44:66' 15 | keys: 16 | LEFT: 17 | service: light.toggle 18 | data: 19 | entity_id: light.tv 20 | VOLUME_UP: 21 | service: light.toggle 22 | data: 23 | entity_id: light.tv 24 | ``` 25 | 26 | available keys: 27 | - `"1"` 28 | - `"2"` 29 | - `"3"` 30 | - `"4"` 31 | - `"5"` 32 | - `"6"` 33 | - `"7"` 34 | - `"8"` 35 | - `"9"` 36 | - `"0"` 37 | - `"UP"` 38 | - `"LEFT"` 39 | - `"ENTER"` 40 | - `"RIGHT"` 41 | - `"BACK"` 42 | - `"DOWN"` 43 | - `"EXIT"` 44 | - `"RED"` 45 | - `"GREEN"` 46 | - `"YELLOW"` 47 | - `"BLUE"` 48 | - `"HOME"` 49 | - `"CHANNELUP"` 50 | - `"MUTE"` 51 | - `"INFO"` 52 | - `"CHANNELDOWN"` 53 | - `"PLAY"` 54 | - `"PAUSE"` 55 | - `"STOP"` 56 | - `"REWIND"` 57 | - `"RECORD"` 58 | - `"FAST_FOWARD"` 59 | - `"POWER"` 60 | - `"VOLUME_UP"` 61 | - `"VOLUME_DOWN"` 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LG-WebOS-Remote-Control 2 | Remote Control for LG TV WebOS 3 | 4 | [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg)](https://github.com/hacs/integration) 5 | [![buymeacoffee_badge](https://img.shields.io/badge/Donate-buymeacoffe-ff813f?style=flat)](https://www.buymeacoffee.com/madmicio) 6 | 7 | the project is now curated and developed in collaboration with [Piotr Machowski](https://github.com/PiotrMachowski) 8 | 9 | 10 | 11 | ![all](example/remote.png) 12 | 13 | ![all](example/channels.jpg) 14 | 15 | browser_mod is required for this channel panel (you can find it [here](https://github.com/thomasloven/hass-browser_mod)) 16 | 17 | custom card: "card-channel-pad" is required (you can find it [here](https://github.com/madmicio/channel-pad)) 18 | 19 | # New features 20 | ### - editor card 21 | ### - ovverride buttons services 22 | 23 | 24 | 25 | 26 | 27 | ## hacs Card install 28 | 1. Find and install `LG WebOS Remote Control` plugin 29 | 30 | 2. Add a reference inside your resources config: 31 | 32 | ```yaml 33 | resources: 34 | - type: module 35 | url: /hacsfiles/LG-WebOS-Remote-Control/lg-remote-control.js 36 | ``` 37 | 38 | 39 | ### Manual install 40 | 41 | 1. Download and copy `lg-remote-control.js` from (https://github.com/madmicio/LG-WebOS-Remote-Control/releases/latest) into your custom components directory. 42 | 43 | 2. Add a reference `lg-remote-control.js` inside your resources config: 44 | 45 | ```yaml 46 | resources: 47 | - url: /local/"your_directory"/lg-remote-control.js 48 | type: module 49 | ``` 50 | # lovelace config: default view 51 | ```yaml 52 | - type: 'custom:lg-remote-control' 53 | entity: media_player.tv_lg_55c8 54 | mac: xx:xx:xx:xx 55 | ``` 56 | 57 | ### Main Options 58 | | Name | Type | Default | Supported options | Description | 59 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 60 | | `type` | string | **Required** | `custom:lg-remote-control` | Type of the card | 61 | | `entity` | string | **Required** | | tv entity | 62 | | `name` | string | **Option** | | tv name | 63 | | `mac` | string | **Option** | | tv mac address (if not specified, you need to create an automation to perform the action to turn the TV on) | 64 | | `ampli_antity` | string | **Option** | | your AV receiver entity (see option config) | 65 | | `colors` | string | **Option** | | list of color options | 66 | | `channels` | | **Option**| | list of channel in popup | 67 | | `sources` | | **Option**| | list of custom app. if not set, default apps will be displayed | 68 | | `color_buttons` | | **Option**| enable | display color buttons: RED GREEN YELLOW BLUE | 69 | 70 | ### Source Options 71 | | Name | Type | Default | Supported options | Description | 72 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 73 | | `icon` | string | **Required** | 'mdi:netflix'| url of the image to be displayed in the channel pad popup | 74 | | `name` | string | **Required** | app name | you have to write the exact name of the app to launch. you can find the correct name in the state of your media_player entity under "source_list:" | 75 | ```yaml 76 | sources: 77 | - icon: 'mdi:power' 78 | name: "Netflix" 79 | - icon: 'mdi:youtube' 80 | name: "YouTube" 81 | ``` 82 | **Note:** `disney` `amazon` and `dazn` are special, icon you must enter them like this: 83 | ```yaml 84 | - icon: disney 85 | name: Disney+ 86 | - icon: amazon 87 | name: Prime Video 88 | - icon: dazn 89 | name: Dazn 90 | ``` 91 | ### Channels Options 92 | | Name | Type | Default | Supported options | Description | 93 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 94 | | `image` | url | **Required** | /local/your_dir/tv_logo/your_image.png | url of the image to be displayed in the channel pad popup | 95 | | `number` | string | **Required** | number | TV channel number | 96 | ```yaml 97 | channels: 98 | - image: /local/lg_remote/tv_logo/Rai 1 HD.png 99 | number: '501' 100 | - image: /local/lg_remote/tv_logo/Rai 2 HD.png 101 | number: '502' 102 | - image: /local/lg_remote/tv_logo/Rai 3 HD.png 103 | number: '503' 104 | ``` 105 | 106 | ## Ovverride buttons services 107 | 108 | with version 2.0 the possibility of overriding the functionality of the button is introduced. you therefore have the possibility of calling a Home assistant service at your convenience 109 | 110 | here are the [override keys](https://github.com/madmicio/LG-WebOS-Remote-Control/blob/master/Override_buttons.md) and the yaml configuration. 111 | 112 | ## AV receiver volume control Options 113 | 114 | option dedicated to all those with problems controlling the volume of the AV Receiver through HDMI-cec commands. 115 | if the ampli_entity item is configured, and when the sound output is set to external_arc (HDMI) or external_optical (optical output) then the remote control buttons will no longer act on the volume of the television, but on the volume of your receiver. 116 | 117 | 118 | ```yaml 119 | type: 'custom:lg-remote-control' 120 | entity: media_player.lg_webos_tv_oled55c8pla 121 | mac: xx:xx:xx:xx:xx:xx 122 | ampli_entity: media_player.marantz_sr6010 123 | ... 124 | ``` 125 | 126 | ### power on/off Receiver 127 | it would have been possible to implement automatic power on and choice of the input source of the Receiver when the sound output is set to external_arc (HDMI) or external_optical (optical output) and turn off the Receiver when any other sound output is set, but the card of home assistants do not work in background but only when rendered. for this and other reasons it is preferable to use a home assistant automation that manages the process, so the actions will also take place when operating with the physical remote control rather than with the home assistant card. 128 | 129 | Below is an example of code: 130 | 131 | ```yaml 132 | alias: "tv_receiver" 133 | trigger: 134 | - platform: template 135 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') == 'external_arc' }}" 136 | id: "external_arc" 137 | - platform: template 138 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') != 'external_arc' }}" 139 | id: "tv_speaker" 140 | - platform: state 141 | entity_id: media_player.lg_webos_tv_oled55c8pla 142 | from: 'off' 143 | to: 'on' 144 | id: "tv_on" 145 | - platform: state 146 | entity_id: media_player.lg_webos_tv_oled55c8pla 147 | from: 'on' 148 | to: 'off' 149 | id: "tv_off" 150 | action: 151 | - choose: 152 | - conditions: "{{ trigger.id == 'tv_on' }}" 153 | sequence: 154 | - condition: template 155 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') == 'external_arc' }}" 156 | - service: media_player.turn_on 157 | target: 158 | entity_id: media_player.marantz_sr6010 159 | - wait_template: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 160 | - service: media_player.select_source 161 | data: 162 | source: TV Audio 163 | target: 164 | entity_id: media_player.marantz_sr6010 165 | - conditions: "{{ trigger.id == 'external_arc'}}" 166 | sequence: 167 | - if: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 168 | then: 169 | - service: media_player.select_source 170 | data: 171 | source: TV Audio 172 | target: 173 | entity_id: media_player.marantz_sr6010 174 | else: 175 | - service: media_player.turn_on 176 | target: 177 | entity_id: media_player.marantz_sr6010 178 | - wait_template: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 179 | - service: media_player.select_source 180 | data: 181 | source: TV Audio 182 | target: 183 | entity_id: media_player.marantz_sr6010 184 | - conditions: "{{ trigger.id == 'tv_speaker' or trigger.id == 'tv_off' }}" 185 | sequence: 186 | - service: media_player.turn_off 187 | target: 188 | entity_id: media_player.marantz_sr6010 189 | ``` 190 | 191 | ## MENU button 192 | to display the "quick menu" (MENU function of WEBOS integration), long press, longer than 1 second, on the "HOME" button 193 | 194 | ## Color Management 195 | color customization implemented through the section 196 | ```yaml 197 | colors: 198 | ``` 199 | 200 | 201 | - buttons: set buttons background color - default: "#f2f0fa" 202 | - texts: set buttons color - default: "var(--primary-text-color)" 203 | - background: set remote background color - default: "var(--primary-background-color)" 204 | ```yaml 205 | colors: 206 | buttons: var(--deactive-background-button-color) 207 | texts: pink 208 | background: rgba(95,155,234) 209 | ``` 210 | 211 | **NOTE: option in "your-theme.yaml** 212 | ```yaml 213 | #button 214 | deactive-background-button-color: "#f2f0fa" 215 | ``` 216 | 217 | ### Colors Options 218 | | Name | Type | Default | Supported options | Description | 219 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 220 | | `buttons` | string | **Option** | color formats | buttons background-color | 221 | | `texts` | string | **Option** | color formats | number and icon color | 222 | | `background:` | string | **Option** | color formats | list of color options | 223 | | `border:` | string | --app-header-text-color | color formats | remote border color | 224 | 225 | 226 | ### dimensions Options 227 | | Name | Type | Default | Supported options | Description | 228 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 229 | | `scale` | | **Option**| number | scale factor; default 1 | 230 | | `border_width` | | **Option**| number | set remote border width; default 1px | 231 | 232 | # Channel pad 233 | in this version of the card there is no longer a "channel pad popup" with preset channels. 234 | this is to give each user the ability to create his own list. 235 | 236 | "channels" configuration is not mandatory. if "channels" is not configured the remote control will work normally but you will not be able to use the channel pad. 237 | pressing the button on the remote control you will receive this message. 238 | ![all](example/source_error.png) 239 | 240 | # New Features Config 241 | in this new version we have implemented some new features: 242 | 1. customizable and incremental app button 243 | 244 | option: **sources:** ( if you do not configure this option, the remote control will display the default apps) 245 | 246 | 2. customizable channel pad 247 | 248 | option: **channels:** ( if you do not configure this option, on button click you receive an error message) 249 | 250 | 3. customizable scale: 251 | 252 | option: **scale:** ( this option reduces or enlarges the size of the remote control. we are testing this option ) 253 | 254 | # lovelace config: custom view 255 | ```yaml 256 | - type: 'custom:lg-remote-control' 257 | entity: media_player.tv_lg_55c8 258 | mac: xx:xx:xx:xx 259 | sources: 260 | - name: Netflix 261 | icon: 'mdi:netflix' 262 | - name: Disney+ 263 | icon: disney 264 | - name: Dazn 265 | icon: dazn 266 | - name: YouTube 267 | icon: 'mdi:youtube-tv' 268 | - name: HDMI 1 269 | icon: 'mdi:video-input-hdmi' 270 | - name: HDMI 2 271 | icon: 'mdi:video-input-hdmi' 272 | channels: 273 | - image: /local/images/tv_logo/channel_1.png 274 | number: '1' 275 | - image: /local/images/tv_logo/channel_2.png 276 | number: '1' 277 | 278 | 279 | ``` 280 | **note: disney and danz are special icon. so you you must enter it as in the example** 281 | 282 | ## dimnensions option: 283 | 284 | the remote control supports the scale option to adjust its size 285 | ```yaml 286 | - type: 'custom:lg-remote-control' 287 | entity: media_player.tv_lg_55c8 288 | mac: xx:xx:xx:xx 289 | dimensions: 290 | scale: 0.98 291 | border_width: 3px 292 | ``` 293 | 294 | ## Install Tv Logo 295 | 296 | 1. download tv_logo 297 | 2. directory put the images file where you prefer (we suggest: www / images / tv_logo) 298 | 3. calls the image in the configuration as in the example 299 | ```yaml 300 | image: /local/your_directory/your_file.png 301 | ``` 302 | **new_tv logo** 303 | at this moment only tv logo of italian tv are available. 304 | users who produce other logos are invited to share them, so we could have a complete and international library 305 | **new logo spec** 306 | height: 268px 307 | width: 171px 308 | background: transparent 309 | image must have 10px margin like this example: 310 | 311 | ![all](example/logo_example.png)![all](example/logo_area3.png) 312 | 313 | 314 | ## Popup Buttons 315 | 316 | ![all](example/popup.png) 317 | 318 | Buy Me A Coffee 319 | 320 | -------------------------------------------------------------------------------- /example/Infinity+.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 27 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /example/channels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/channels.jpg -------------------------------------------------------------------------------- /example/color_buttons.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/color_buttons.jpg -------------------------------------------------------------------------------- /example/logo_area.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/logo_area.png -------------------------------------------------------------------------------- /example/logo_area2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/logo_area2.png -------------------------------------------------------------------------------- /example/logo_area3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/logo_area3.png -------------------------------------------------------------------------------- /example/logo_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/logo_example.png -------------------------------------------------------------------------------- /example/popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/popup.png -------------------------------------------------------------------------------- /example/remote-control.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/remote-control.jpg -------------------------------------------------------------------------------- /example/remote-control2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/remote-control2.jpg -------------------------------------------------------------------------------- /example/remote-control3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/remote-control3.jpg -------------------------------------------------------------------------------- /example/remote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/remote.png -------------------------------------------------------------------------------- /example/sound-source-pad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/sound-source-pad.png -------------------------------------------------------------------------------- /example/sound-source.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/sound-source.jpg -------------------------------------------------------------------------------- /example/source_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/example/source_error.png -------------------------------------------------------------------------------- /hacs.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LG WebOS Remote Control", 3 | "filename": "lg-remote-control.js", 4 | "render_readme" : true 5 | } 6 | -------------------------------------------------------------------------------- /info.md: -------------------------------------------------------------------------------- 1 | # LG-WebOS-Remote-Control 2 | Remote Control for LG TV WebOS 3 | 4 | [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg)](https://github.com/hacs/integration) 5 | [![buymeacoffee_badge](https://img.shields.io/badge/Donate-buymeacoffe-ff813f?style=flat)](https://www.buymeacoffee.com/madmicio) 6 | 7 | the project is now curated and developed in collaboration with [Piotr Machowski](https://github.com/PiotrMachowski) 8 | 9 | 10 | 11 | ![all](example/remote.png) 12 | 13 | ![all](example/channels.jpg) 14 | 15 | browser_mod is required for this channel panel (you can find it [here](https://github.com/thomasloven/hass-browser_mod)) 16 | 17 | custom card: "card-channel-pad" is required (you can find it [here](https://github.com/madmicio/channel-pad)) 18 | 19 | # New features 20 | ### - editor card 21 | ### - ovverride buttons services 22 | 23 | 24 | 25 | 26 | 27 | ## hacs Card install 28 | 1. Find and install `LG WebOS Remote Control` plugin 29 | 30 | 2. Add a reference inside your resources config: 31 | 32 | ```yaml 33 | resources: 34 | - type: module 35 | url: /hacsfiles/LG-WebOS-Remote-Control/lg-remote-control.js 36 | ``` 37 | 38 | 39 | ### Manual install 40 | 41 | 1. Download and copy `lg-remote-control.js` from (https://github.com/madmicio/LG-WebOS-Remote-Control/releases/latest) into your custom components directory. 42 | 43 | 2. Add a reference `lg-remote-control.js` inside your resources config: 44 | 45 | ```yaml 46 | resources: 47 | - url: /local/"your_directory"/lg-remote-control.js 48 | type: module 49 | ``` 50 | # lovelace config: default view 51 | ```yaml 52 | - type: 'custom:lg-remote-control' 53 | entity: media_player.tv_lg_55c8 54 | mac: xx:xx:xx:xx 55 | ``` 56 | 57 | ### Main Options 58 | | Name | Type | Default | Supported options | Description | 59 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 60 | | `type` | string | **Required** | `custom:lg-remote-control` | Type of the card | 61 | | `entity` | string | **Required** | | tv entity | 62 | | `name` | string | **Option** | | tv name | 63 | | `mac` | string | **Option** | | tv mac address (if not specified, you need to create an automation to perform the action to turn the TV on) | 64 | | `ampli_antity` | string | **Option** | | your AV receiver entity (see option config) | 65 | | `colors` | string | **Option** | | list of color options | 66 | | `channels` | | **Option**| | list of channel in popup | 67 | | `sources` | | **Option**| | list of custom app. if not set, default apps will be displayed | 68 | | `color_buttons` | | **Option**| enable | display color buttons: RED GREEN YELLOW BLUE | 69 | 70 | ### Source Options 71 | | Name | Type | Default | Supported options | Description | 72 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 73 | | `icon` | string | **Required** | 'mdi:netflix'| url of the image to be displayed in the channel pad popup | 74 | | `name` | string | **Required** | app name | you have to write the exact name of the app to launch. you can find the correct name in the state of your media_player entity under "source_list:" | 75 | ```yaml 76 | sources: 77 | - icon: 'mdi:power' 78 | name: "Netflix" 79 | - icon: 'mdi:youtube' 80 | name: "YouTube" 81 | ``` 82 | **Note:** `disney` `amazon` and `dazn` are special, icon you must enter them like this: 83 | ```yaml 84 | - icon: disney 85 | name: Disney+ 86 | - icon: amazon 87 | name: Prime Video 88 | - icon: dazn 89 | name: Dazn 90 | ``` 91 | ### Channels Options 92 | | Name | Type | Default | Supported options | Description | 93 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 94 | | `image` | url | **Required** | /local/your_dir/tv_logo/your_image.png | url of the image to be displayed in the channel pad popup | 95 | | `number` | string | **Required** | number | TV channel number | 96 | ```yaml 97 | channels: 98 | - image: /local/lg_remote/tv_logo/Rai 1 HD.png 99 | number: '501' 100 | - image: /local/lg_remote/tv_logo/Rai 2 HD.png 101 | number: '502' 102 | - image: /local/lg_remote/tv_logo/Rai 3 HD.png 103 | number: '503' 104 | ``` 105 | 106 | ## Ovverride buttons services 107 | 108 | with version 2.0 the possibility of overriding the functionality of the button is introduced. you therefore have the possibility of calling a Home assistant service at your convenience 109 | 110 | here are the [override keys](https://github.com/madmicio/LG-WebOS-Remote-Control/blob/master/Override_buttons.md) and the yaml configuration. 111 | 112 | ## AV receiver volume control Options 113 | 114 | option dedicated to all those with problems controlling the volume of the AV Receiver through HDMI-cec commands. 115 | if the ampli_entity item is configured, and when the sound output is set to external_arc (HDMI) or external_optical (optical output) then the remote control buttons will no longer act on the volume of the television, but on the volume of your receiver. 116 | 117 | 118 | ```yaml 119 | type: 'custom:lg-remote-control' 120 | entity: media_player.lg_webos_tv_oled55c8pla 121 | mac: xx:xx:xx:xx:xx:xx 122 | ampli_entity: media_player.marantz_sr6010 123 | ... 124 | ``` 125 | 126 | ### power on/off Receiver 127 | it would have been possible to implement automatic power on and choice of the input source of the Receiver when the sound output is set to external_arc (HDMI) or external_optical (optical output) and turn off the Receiver when any other sound output is set, but the card of home assistants do not work in background but only when rendered. for this and other reasons it is preferable to use a home assistant automation that manages the process, so the actions will also take place when operating with the physical remote control rather than with the home assistant card. 128 | 129 | Below is an example of code: 130 | 131 | ```yaml 132 | alias: "tv_receiver" 133 | trigger: 134 | - platform: template 135 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') == 'external_arc' }}" 136 | id: "external_arc" 137 | - platform: template 138 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') != 'external_arc' }}" 139 | id: "tv_speaker" 140 | - platform: state 141 | entity_id: media_player.lg_webos_tv_oled55c8pla 142 | from: 'off' 143 | to: 'on' 144 | id: "tv_on" 145 | - platform: state 146 | entity_id: media_player.lg_webos_tv_oled55c8pla 147 | from: 'on' 148 | to: 'off' 149 | id: "tv_off" 150 | action: 151 | - choose: 152 | - conditions: "{{ trigger.id == 'tv_on' }}" 153 | sequence: 154 | - condition: template 155 | value_template: "{{ state_attr('media_player.lg_webos_tv_oled55c8pla', 'sound_output') == 'external_arc' }}" 156 | - service: media_player.turn_on 157 | target: 158 | entity_id: media_player.marantz_sr6010 159 | - wait_template: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 160 | - service: media_player.select_source 161 | data: 162 | source: TV Audio 163 | target: 164 | entity_id: media_player.marantz_sr6010 165 | - conditions: "{{ trigger.id == 'external_arc'}}" 166 | sequence: 167 | - if: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 168 | then: 169 | - service: media_player.select_source 170 | data: 171 | source: TV Audio 172 | target: 173 | entity_id: media_player.marantz_sr6010 174 | else: 175 | - service: media_player.turn_on 176 | target: 177 | entity_id: media_player.marantz_sr6010 178 | - wait_template: "{{ is_state('media_player.marantz_sr6010', 'on') }}" 179 | - service: media_player.select_source 180 | data: 181 | source: TV Audio 182 | target: 183 | entity_id: media_player.marantz_sr6010 184 | - conditions: "{{ trigger.id == 'tv_speaker' or trigger.id == 'tv_off' }}" 185 | sequence: 186 | - service: media_player.turn_off 187 | target: 188 | entity_id: media_player.marantz_sr6010 189 | ``` 190 | 191 | ## MENU button 192 | to display the "quick menu" (MENU function of WEBOS integration), long press, longer than 1 second, on the "HOME" button 193 | 194 | 195 | ## Color Management 196 | color customization implemented through the section 197 | ```yaml 198 | colors: 199 | ``` 200 | 201 | 202 | - buttons: set buttons background color - default: "#f2f0fa" 203 | - texts: set buttons color - default: "var(--primary-text-color)" 204 | - background: set remote background color - default: "var(--primary-background-color)" 205 | ```yaml 206 | colors: 207 | buttons: var(--deactive-background-button-color) 208 | texts: pink 209 | background: rgba(95,155,234) 210 | ``` 211 | 212 | **NOTE: option in "your-theme.yaml** 213 | ```yaml 214 | #button 215 | deactive-background-button-color: "#f2f0fa" 216 | ``` 217 | 218 | ### Colors Options 219 | | Name | Type | Default | Supported options | Description | 220 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 221 | | `buttons` | string | **Option** | color formats | buttons background-color | 222 | | `texts` | string | **Option** | color formats | number and icon color | 223 | | `background:` | string | **Option** | color formats | list of color options | 224 | | `border:` | string | --app-header-text-color | color formats | remote border color | 225 | 226 | 227 | ### dimensions Options 228 | | Name | Type | Default | Supported options | Description | 229 | | -------------- | ----------- | ------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 230 | | `scale` | | **Option**| number | scale factor; default 1 | 231 | | `border_width` | | **Option**| number | set remote border width; default 1px | 232 | 233 | # Channel pad 234 | in this version of the card there is no longer a "channel pad popup" with preset channels. 235 | this is to give each user the ability to create his own list. 236 | 237 | "channels" configuration is not mandatory. if "channels" is not configured the remote control will work normally but you will not be able to use the channel pad. 238 | pressing the button on the remote control you will receive this message. 239 | ![all](example/source_error.png) 240 | 241 | # New Features Config 242 | in this new version we have implemented some new features: 243 | 1. customizable and incremental app button 244 | 245 | option: **sources:** ( if you do not configure this option, the remote control will display the default apps) 246 | 247 | 2. customizable channel pad 248 | 249 | option: **channels:** ( if you do not configure this option, on button click you receive an error message) 250 | 251 | 3. customizable scale: 252 | 253 | option: **scale:** ( this option reduces or enlarges the size of the remote control. we are testing this option ) 254 | 255 | # lovelace config: custom view 256 | ```yaml 257 | - type: 'custom:lg-remote-control' 258 | entity: media_player.tv_lg_55c8 259 | mac: xx:xx:xx:xx 260 | sources: 261 | - name: Netflix 262 | icon: 'mdi:netflix' 263 | - name: Disney+ 264 | icon: disney 265 | - name: Dazn 266 | icon: dazn 267 | - name: YouTube 268 | icon: 'mdi:youtube-tv' 269 | - name: HDMI 1 270 | icon: 'mdi:video-input-hdmi' 271 | - name: HDMI 2 272 | icon: 'mdi:video-input-hdmi' 273 | channels: 274 | - image: /local/images/tv_logo/channel_1.png 275 | number: '1' 276 | - image: /local/images/tv_logo/channel_2.png 277 | number: '1' 278 | 279 | 280 | ``` 281 | **note: disney and danz are special icon. so you you must enter it as in the example** 282 | 283 | ## dimnensions option: 284 | 285 | the remote control supports the scale option to adjust its size 286 | ```yaml 287 | - type: 'custom:lg-remote-control' 288 | entity: media_player.tv_lg_55c8 289 | mac: xx:xx:xx:xx 290 | dimensions: 291 | scale: 0.98 292 | border_width: 3px 293 | ``` 294 | 295 | ## Install Tv Logo 296 | 297 | 1. download tv_logo 298 | 2. directory put the images file where you prefer (we suggest: www / images / tv_logo) 299 | 3. calls the image in the configuration as in the example 300 | ```yaml 301 | image: /local/your_directory/your_file.png 302 | ``` 303 | **new_tv logo** 304 | at this moment only tv logo of italian tv are available. 305 | users who produce other logos are invited to share them, so we could have a complete and international library 306 | **new logo spec** 307 | height: 268px 308 | width: 171px 309 | background: transparent 310 | image must have 10px margin like this example: 311 | 312 | ![all](example/logo_example.png)![all](example/logo_area3.png) 313 | 314 | 315 | ## Popup Buttons 316 | 317 | ![all](example/popup.png) 318 | 319 | Buy Me A Coffee 320 | 321 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lg-remote-card", 3 | "version": "v0.0.0-master", 4 | "description": "LG Remote card", 5 | "keywords": [ 6 | "home-assistant", 7 | "homeassistant", 8 | "hass", 9 | "automation", 10 | "lovelace", 11 | "custom-cards" 12 | ], 13 | "module": "lg-remote-card.js", 14 | "repository": "git@github.com:madmicio/LG-WebOS-Remote-Control.git", 15 | "author": "Maurizio ", 16 | "license": "MIT", 17 | "dependencies": { 18 | "custom-card-helpers": "^1.9.0", 19 | "home-assistant-js-websocket": "^9.1.0", 20 | "lit": "^3.1.0" 21 | }, 22 | "devDependencies": { 23 | "@babel/core": "^7.23.6", 24 | "@babel/plugin-proposal-class-properties": "^7.14.5", 25 | "@babel/plugin-proposal-decorators": "^7.23.6", 26 | "@babel/plugin-transform-runtime": "^7.23.6", 27 | "@rollup/plugin-babel": "^6.0.4", 28 | "@rollup/plugin-commonjs": "^25.0.7", 29 | "@rollup/plugin-json": "^6.1.0", 30 | "@rollup/plugin-node-resolve": "^15.2.3", 31 | "@rollup/plugin-terser": "^0.4.4", 32 | "@rollup/plugin-typescript": "^11.1.5", 33 | "@types/node": "^20.10.5", 34 | "@typescript-eslint/eslint-plugin": "^6.15.0", 35 | "@typescript-eslint/parser": "^6.15.0", 36 | "cross-var": "^1.1.0", 37 | "prettier": "^3.1.1", 38 | "replace-in-file": "^7.0.2", 39 | "rollup": "^4.9.1", 40 | "rollup-plugin-serve": "^2.0.3", 41 | "ts-lit-plugin": "^2.0.1", 42 | "typescript": "^5.3.3" 43 | }, 44 | "scripts": { 45 | "start": "rollup -c rollup.config.mjs --watch", 46 | "build": "npm run rollup && npm run add-version", 47 | "add-version": "cross-var replace-in-file \"@LG_REMOTE_CONTROL_CARD_VERSION_PLACEHOLDER@\" \"$npm_package_version\" \"dist/lg-remote-control.js\"", 48 | "rollup": "rollup -c" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import typescript from "@rollup/plugin-typescript"; 2 | import commonjs from "@rollup/plugin-commonjs"; 3 | import nodeResolve from "@rollup/plugin-node-resolve"; 4 | import babel from "@rollup/plugin-babel"; 5 | import terser from "@rollup/plugin-terser"; 6 | import serve from "rollup-plugin-serve"; 7 | import json from "@rollup/plugin-json"; 8 | 9 | const dev = process.env.ROLLUP_WATCH; 10 | 11 | const serveopts = { 12 | contentBase: ["./dist"], 13 | host: "0.0.0.0", 14 | port: 5000, 15 | allowCrossOrigin: true, 16 | headers: { 17 | "Access-Control-Allow-Origin": "*", 18 | }, 19 | }; 20 | 21 | const plugins = [ 22 | nodeResolve({}), 23 | commonjs(), 24 | typescript(), 25 | json(), 26 | babel({ 27 | exclude: "node_modules/**", 28 | }), 29 | dev && serve(serveopts), 30 | !dev && terser(), 31 | ]; 32 | 33 | export default [ 34 | { 35 | input: "src/lg-remote-control.ts", 36 | output: { 37 | dir: "dist", 38 | format: "es", 39 | }, 40 | plugins: [...plugins], 41 | }, 42 | ]; 43 | -------------------------------------------------------------------------------- /src/const.ts: -------------------------------------------------------------------------------- 1 | export const CARD_VERSION = "v@LG_REMOTE_CONTROL_CARD_VERSION_PLACEHOLDER@"; 2 | export const CARD_TAG_NAME = "lg-remote-control"; 3 | export const EDITOR_CARD_TAG_NAME = "lg-remote-control-editor"; 4 | -------------------------------------------------------------------------------- /src/editor.ts: -------------------------------------------------------------------------------- 1 | // Create and register the card editor 2 | import { customElement } from "lit/decorators.js"; 3 | import { html, css, LitElement } from "lit"; 4 | 5 | import { HomeAssistantFixed } from "./types"; 6 | import { EDITOR_CARD_TAG_NAME } from "./const"; 7 | import { getMediaPlayerEntitiesByPlatform } from "./utils"; 8 | 9 | 10 | const avreceivers = { 11 | "anthemav": { 12 | "friendlyName": "Anthem A/V Receivers", 13 | }, 14 | "arcam_fmj": { 15 | "friendlyName": "Arcam FMJ Receivers", 16 | }, 17 | "denonavr": { 18 | "friendlyName": "Denon, Marantz A/V Receivers", 19 | }, 20 | "heos": { 21 | "friendlyName": "Denon heos A/V Receivers", 22 | }, 23 | "harman_kardon_avr": { 24 | "friendlyName": "Harman Kardon AVR", 25 | }, 26 | "monoprice": { 27 | "friendlyName": "Monoprice 6-Zone Amplifier", 28 | }, 29 | "onkyo": { 30 | "friendlyName": "Onkyo A/V Receivers", 31 | }, 32 | "sonos": { 33 | "friendlyName": "Sonos", 34 | }, 35 | "pws66i": { 36 | "friendlyName": "Soundavo WS66i 6-Zone Amplifier", 37 | }, 38 | "yamaha": { 39 | "friendlyName": "Yamaha Network Receivers", 40 | }, 41 | } 42 | 43 | const AvReceiverdevicemap = new Map(Object.entries(avreceivers)); 44 | 45 | 46 | @customElement(EDITOR_CARD_TAG_NAME) 47 | class LgRemoteControlEditor extends LitElement { 48 | private _config: any; 49 | private hass: HomeAssistantFixed; 50 | 51 | static get properties() { 52 | return { 53 | hass: {}, 54 | _config: {}, 55 | }; 56 | } 57 | 58 | // setConfig works the same way as for the card itself 59 | setConfig(config) { 60 | this._config = config; 61 | } 62 | 63 | // This function is called when the input element of the editor loses focus or is changed 64 | configChanged(ev) { 65 | 66 | const _config = Object.assign({}, this._config); 67 | _config[ev.target.name.toString()] = ev.target.value; 68 | this._config = _config; 69 | 70 | // A config-changed event will tell lovelace we have made changed to the configuration 71 | // this make sure the changes are saved correctly later and will update the preview 72 | const event = new CustomEvent("config-changed", { 73 | detail: { config: _config }, 74 | bubbles: true, 75 | composed: true, 76 | }); 77 | this.dispatchEvent(event); 78 | } 79 | 80 | configChangedBool(ev) { 81 | const inputName = ev.target.name; 82 | const newValue = ev.target.value === 'true'; 83 | 84 | const _config = Object.assign({}, this._config); 85 | _config[inputName] = newValue; 86 | this._config = _config; 87 | 88 | // Invia l'evento "config-changed" 89 | const event = new CustomEvent('config-changed', { 90 | detail: { config: _config }, 91 | bubbles: true, 92 | composed: true, 93 | }); 94 | this.dispatchEvent(event); 95 | } 96 | 97 | colorsConfigChanged(ev) { 98 | // Controlla se l'evento è scatenato da un'icona 99 | if (ev.target.tagName === "HA-ICON") { 100 | const inputName = ev.target.getAttribute("data-input-name"); 101 | if (inputName) { 102 | const inputElement = this.shadowRoot.querySelector(`[name="${inputName}"]`) as any; 103 | if (inputElement) { 104 | // Imposta l'input su una stringa vuota 105 | inputElement.value = ""; 106 | 107 | // Aggiorna la configurazione 108 | const _config = Object.assign({}, this._config); 109 | _config["colors"] = { ...(_config["colors"] ?? {}) }; 110 | _config["colors"][inputName] = ""; 111 | this._config = _config; 112 | 113 | // Invia l'evento "config-changed" 114 | const event = new CustomEvent("config-changed", { 115 | detail: { config: _config }, 116 | bubbles: true, 117 | composed: true, 118 | }); 119 | this.dispatchEvent(event); 120 | } 121 | } 122 | } else { 123 | // Se l'evento non proviene da un'icona, gestisci la modifica dell'input come al solito 124 | const _config = Object.assign({}, this._config); 125 | _config["colors"] = { ...(_config["colors"] ?? {}) }; 126 | _config["colors"][ev.target.name.toString()] = ev.target.value; 127 | this._config = _config; 128 | 129 | // Invia l'evento "config-changed" 130 | const event = new CustomEvent("config-changed", { 131 | detail: { config: _config }, 132 | bubbles: true, 133 | composed: true, 134 | }); 135 | this.dispatchEvent(event); 136 | } 137 | } 138 | _erase_av_receiver() { 139 | this._config.av_receiver_family = ''; 140 | this.requestUpdate(); // Aggiunta per forzare il render 141 | } 142 | 143 | dimensionsConfigChanged(ev) { 144 | // Se l'evento non proviene da un'icona, gestisci la modifica dell'input come al solito 145 | const _config = Object.assign({}, this._config); 146 | _config["dimensions"] = { ...(_config["dimensions"] ?? {}) }; 147 | 148 | if (ev.target.name === 'border_width') { 149 | _config["dimensions"][ev.target.name] = ev.target.value + 'px'; 150 | } else { 151 | _config["dimensions"][ev.target.name] = ev.target.value; 152 | } 153 | 154 | this._config = _config; 155 | 156 | // Invia l'evento "config-changed" 157 | const event = new CustomEvent("config-changed", { 158 | detail: { config: _config }, 159 | bubbles: true, 160 | composed: true, 161 | }); 162 | this.dispatchEvent(event); 163 | } 164 | getLgTvEntityDropdown(optionValue){ 165 | let mediaPlayerEntities = getMediaPlayerEntitiesByPlatform(this.hass, 'webostv'); 166 | let heading = 'LG Media Player Entity'; 167 | let blankEntity = html``; 168 | if(this._config.tventity == '' || !(mediaPlayerEntities).includes(optionValue)) { 169 | blankEntity = html ` `; 170 | } 171 | return html` 172 | ${heading}:
173 | 186 |
187 |
` 188 | } 189 | 190 | setRemoteName(remoteNameValue) { 191 | let heading = 'Remote Control Name (option):'; 192 | return html` 193 | ${heading}
194 |
197 | `; 198 | } 199 | 200 | selectMac(macValue) { 201 | macValue = macValue ?? '00:11:22:33:44:55'; 202 | let heading = 'MAC Address:'; 203 | return html` 204 | ${heading}
205 | 208 |

209 | `; 210 | } 211 | 212 | selectColors(config) { 213 | let heading = 'Colors Configuration'; 214 | 215 | if (!config || !config.colors) { 216 | config = { colors: { buttons: '', text: '', background: '', border: '' } }; 217 | } 218 | 219 | return html` 220 |
${heading}:
221 |
222 | 223 | 225 | 226 | 227 | 228 | 229 | 231 | 232 | 233 | 234 | 236 | 237 | 238 | 239 | 241 | 242 |
243 | `; 244 | } 245 | 246 | colorButtonsConfig(optionvalue) { 247 | let heading = 'Do you want to configure an AV-Receiver'; 248 | 249 | // Controlla se esiste una configurazione "color_buttons" e usa quel valore come opzione selezionata 250 | const selectedValue = this._config.color_buttons || 'false'; 251 | 252 | return html` 253 |
Color buttons config
254 | 261 |
262 | `; 263 | } 264 | 265 | setDimensions(dimensions) { 266 | let heading = 'Dimensions'; 267 | 268 | const borderWidth = parseFloat(dimensions.border_width??"1"); 269 | 270 | return html` 271 |
${heading}:
272 |
273 |
274 | 275 | 276 |
277 |
278 |
279 | 280 | 281 |
282 | 283 | `; 284 | } 285 | 286 | getDeviceAVReceiverDropdown(optionvalue) { 287 | const familykeys = [...AvReceiverdevicemap.keys()]; 288 | const blankEntity = (!this._config.av_receiver_family || this._config.av_receiver_family === '') 289 | ? html`` 290 | : ''; 291 | return html` 292 |
AV-Receiver config option:
293 |
294 | 311 | ${this._config.av_receiver_family && this._config.av_receiver_family != '' ? html` 312 | this.focus()} 317 | >` 318 | : ''} 319 |
320 |
321 | `; 322 | } 323 | 324 | getMediaPlayerEntityDropdown(optionValue) { 325 | if (this._config.av_receiver_family) { 326 | const mediaPlayerEntities = getMediaPlayerEntitiesByPlatform(this.hass, optionValue); 327 | const blankEntity = (this._config.ampli_entity === '' || !mediaPlayerEntities.includes(optionValue)) 328 | ? html`` 329 | : ''; 330 | return html` 331 | A-Receiver config (option):
332 | 342 |

343 | `; 344 | } else { 345 | return html``; // Gestire il caso in cui `deviceFamily` non corrisponda a nessuna piattaforma 346 | } 347 | } 348 | 349 | 350 | 351 | render() { 352 | if (!this.hass || !this._config) { 353 | return html``; 354 | } 355 | 356 | return html` 357 | ${this.getLgTvEntityDropdown(this._config.entity)} 358 | ${this.selectMac(this._config.mac)} 359 | ${this.setRemoteName(this._config.name)} 360 | ${this.selectColors(this._config)} 361 | ${this.colorButtonsConfig(this._config)} 362 | ${this.getDeviceAVReceiverDropdown(this._config.av_receiver_family)} 363 | ${this.getMediaPlayerEntityDropdown(this._config.av_receiver_family)} 364 | ${this.setDimensions(this._config.dimensions??{})} 365 |
366 |

Other functionalities must be configured manually in code editor

367 |

references to https://github.com/madmicio/LG-WebOS-Remote-Control

368 |
369 | Buy Me A Coffee 370 |
371 | 372 | 373 | 374 |
375 | 376 |
377 | `; 378 | } 379 | 380 | static get styles() { 381 | return css` 382 | 383 | .color-selector { 384 | display: grid; 385 | grid-template-columns: auto 8ch 3ch; 386 | width: 40ch; 387 | } 388 | 389 | .color-item { 390 | padding: .6em; 391 | font-size: 1em; 392 | } 393 | 394 | .heading { 395 | font-weight: bold; 396 | } 397 | 398 | .select-item { 399 | background-color: var(--label-badge-text-color); 400 | width: 40ch; 401 | padding: .6em; 402 | font-size: 1em; 403 | } 404 | 405 | `; 406 | } 407 | 408 | } 409 | -------------------------------------------------------------------------------- /src/icons.ts: -------------------------------------------------------------------------------- 1 | import { html } from "lit"; 2 | 3 | export function disneyIcon() { 4 | return html` 6 | 9 | 10 | 14 | 22 | 23 | 24 | `; 25 | } 26 | 27 | export function daznIcon() { 28 | return html` 30 | 33 | 34 | 38 | 40 | 44 | 47 | 50 | 51 | 52 | `; 53 | } 54 | 55 | export function nowTvIcon() { 56 | return html` 57 | 59 | 62 | 63 | 65 | 69 | 73 | 78 | 79 | 80 | `; 81 | } 82 | 83 | export function tvOpticIcon() { 84 | return html` 86 | 89 | 90 | 96 | 98 | 100 | 111 | 114 | 115 | 116 | `; 117 | } 118 | 119 | export function tvHeadphonesIcon() { 120 | return html` 121 | 123 | 126 | 127 | 133 | 135 | 138 | 139 | `; 140 | } 141 | 142 | export function opticIcon() { 143 | return html` 145 | 148 | 149 | 151 | 162 | 165 | 166 | 167 | `; 168 | } 169 | 170 | export function arcIcon() { 171 | return html` 173 | 176 | 177 | 182 | 184 | 186 | 187 | 188 | 189 | `; 190 | } 191 | 192 | export function amazonIcon() { 193 | return html` 194 | 197 | 239 | `; 240 | } 241 | 242 | export function lineOutIcon() { 243 | return html` 244 | 247 | 252 | 253 | 255 | 257 | 265 | 266 | 267 | `; 268 | } -------------------------------------------------------------------------------- /src/lg-remote-control.ts: -------------------------------------------------------------------------------- 1 | import { css, html, LitElement } from 'lit'; 2 | import { customElement } from 'lit/decorators.js'; 3 | import { HomeAssistant } from 'custom-card-helpers'; 4 | 5 | import "./editor"; 6 | import { lineOutIcon, amazonIcon, tvOpticIcon, daznIcon, disneyIcon, tvHeadphonesIcon, arcIcon, opticIcon, nowTvIcon } from "./icons"; 7 | import { HomeAssistantFixed, WindowWithCards } from "./types"; 8 | import { CARD_TAG_NAME, CARD_VERSION, EDITOR_CARD_TAG_NAME } from "./const"; 9 | import { getMediaPlayerEntitiesByPlatform } from "./utils"; 10 | 11 | 12 | const line1 = ' LG WebOS Remote Control Card '; 13 | const line2 = ` version: ${CARD_VERSION} `; 14 | /* eslint no-console: 0 */ 15 | console.info( 16 | `%c${line1}\n%c${line2}`, 17 | 'color: orange; font-weight: bold; background: black', 18 | 'color: white; font-weight: bold; background: dimgray', 19 | ); 20 | 21 | 22 | // Allow this card to appear in the card chooser menu 23 | const windowWithCards = window as unknown as WindowWithCards; 24 | windowWithCards.customCards = windowWithCards.customCards || []; 25 | windowWithCards.customCards.push({ 26 | type: CARD_TAG_NAME, 27 | name: "LG WebOS Remote Control Card", 28 | preview: true, 29 | description: "Remote control card for LG WebOS TV devices" 30 | }); 31 | 32 | 33 | 34 | @customElement(CARD_TAG_NAME) 35 | class LgRemoteControl extends LitElement { 36 | 37 | public hass!: HomeAssistant; 38 | public config!: any; 39 | private _show_inputs: boolean; 40 | private _show_sound_output: boolean; 41 | private _show_text: boolean; 42 | private _show_keypad: boolean; 43 | private _show_vol_text: boolean; 44 | private volume_value: number; 45 | private soundOutput: string; 46 | private output_entity: string; 47 | private valueDisplayTimeout: NodeJS.Timeout; 48 | private homeisLongPress: boolean = false; 49 | private homelongPressTimer: any; // Tipo generico, ma puoi specificare il tipo corretto se lo conosci 50 | 51 | 52 | static getConfigElement() { 53 | // Create and return an editor element 54 | return document.createElement(EDITOR_CARD_TAG_NAME); 55 | } 56 | 57 | public static getStubConfig(hass: HomeAssistantFixed) { 58 | let entities = getMediaPlayerEntitiesByPlatform(hass, "webostv"); 59 | if(entities.length == 0){ 60 | entities = Object.keys(hass.entities).filter(e => e.startsWith("media_player.")); 61 | } 62 | const entity = entities.length > 0 ? entities[0] : "media_player.lg_webos_smart_tv"; 63 | return { 64 | "type": `custom:${CARD_TAG_NAME}`, 65 | "entity": entity 66 | } 67 | } 68 | 69 | static get iconMapping() { 70 | return { 71 | "disney": disneyIcon(), 72 | "dazn": daznIcon(), 73 | "nowtv": nowTvIcon(), 74 | "amazon": amazonIcon(), 75 | }; 76 | } 77 | 78 | static get properties() { 79 | return { 80 | hass: {}, 81 | config: {}, 82 | _show_inputs: {}, 83 | _show_sound_output: {}, 84 | _show_text: {}, 85 | _show_keypad: {}, 86 | _show_vol_text: {}, 87 | volume_value: { type: Number, reflect: true }, 88 | output_entity: { type: Number, reflect: true }, 89 | 90 | }; 91 | } 92 | 93 | constructor() { 94 | super(); 95 | this._show_inputs = false; 96 | this._show_sound_output = false; 97 | this._show_text = false; 98 | this._show_keypad = false; 99 | this._show_vol_text = false; 100 | this.volume_value = 0; 101 | this.soundOutput = ""; 102 | 103 | } 104 | 105 | render() { 106 | const stateObj = this.hass.states[this.config.entity]; 107 | const colorButtons = this.config.color_buttons; 108 | 109 | const borderWidth = this.config.dimensions && this.config.dimensions.border_width ? this.config.dimensions.border_width : "1px"; 110 | const scale = this.config.dimensions && this.config.dimensions.scale ? this.config.dimensions.scale : 1; 111 | const remoteWidth = Math.round(scale * 260) + "px"; 112 | const tv_name_color = this.config.tv_name_color ? this.config.tv_name_color : "var(--primary-text-color)"; 113 | const backgroundColor = this.config.colors && this.config.colors.background ? this.config.colors.background : "var( --ha-card-background, var(--card-background-color, white) )"; 114 | const borderColor = this.config.colors && this.config.colors.border ? this.config.colors.border: "var(--primary-text-color)"; 115 | const buttonColor = this.config.colors && this.config.colors.buttons ? this.config.colors.buttons : "var(--secondary-background-color)"; 116 | const textColor = this.config.colors && this.config.colors.text ? this.config.colors.text : "var(--primary-text-color)"; 117 | const mac = this.config.mac; 118 | 119 | if (this.config.ampli_entity && 120 | (this.hass.states[this.config.entity].attributes.sound_output === 'external_arc' || 121 | this.hass.states[this.config.entity].attributes.sound_output === 'external_optical')) { 122 | 123 | this.volume_value = Math.round(this.hass.states[this.config.ampli_entity].attributes.volume_level * 100 * 2) / 2; 124 | this.output_entity = this.config.ampli_entity; 125 | 126 | } else { 127 | 128 | this.volume_value = Math.round(this.hass.states[this.config.entity].attributes.volume_level * 100); 129 | this.output_entity = this.config.entity; 130 | } 131 | 132 | return html` 133 |
134 |
135 | ${this.config.name 136 | ? html`
${this.config.name}
` 137 | : ""} 138 |
139 | 140 | ${stateObj.state === 'off' ? html` 141 | 142 | ` : html` 143 | 144 | `} 145 | 146 |
147 | ${this._show_inputs ? html` 148 | 149 |
150 |
151 | 152 |
153 | 154 |

SOURCE

155 |
156 | ${stateObj.attributes.source_list.map(source => html` 157 | 161 | `)} 162 |
163 | 164 | ` : html` 165 | ${this._show_sound_output ? html` 166 | 167 |
168 |
169 | 170 |
171 | 172 | ${this._show_text ? html` 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 |
183 | ` : html` 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 |
194 | `} 195 | 196 | ` : html` 197 | 198 | ${this._show_keypad ? html` 199 | 200 |
201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 |
214 | 215 | ` : html` 216 | 217 |
218 |
219 | 220 |
221 | 222 | 223 | 224 | 225 |
this._button("ENTER")}>${this._show_vol_text === true ? this.volume_value : 'OK'}
226 | 227 | 228 | 229 | 230 |
231 | 232 | `} 233 | 234 | `} 235 | 236 | ${this.config.sources ? html` 237 |
238 | ${this.config.sources.map(source => { 239 | return html` 240 | 243 | `; 244 | })} 245 |
246 | ` : html` 247 |
248 | 249 | 250 | 251 | 252 |
`} 253 | 254 | 255 | 256 | ${colorButtons ? html` 257 |
258 | 259 | 260 | 261 | 262 |
263 | ` : html` 264 | `} 265 | 266 | 267 |
268 | 269 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 |
288 | 289 | 290 |
291 | 292 | 293 | 294 | 295 | 296 | 297 |
298 | 299 |
300 | `} 301 |
302 | 303 | `; 304 | } 305 | 306 | _channelList() { 307 | const popupEvent = new Event('ll-custom', { bubbles: true, cancelable: false, composed: true }); 308 | (popupEvent as any).detail = { 309 | "browser_mod": { 310 | "service": "browser_mod.popup", 311 | "data": { 312 | "content": { 313 | "type": "custom:card-channel-pad", 314 | "entity": this.config.entity, 315 | "channels": this.config.channels 316 | }, 317 | "title": " ", 318 | "size": "wide", 319 | "style": "--popup-border-radius: 15px;" 320 | } 321 | } 322 | }; 323 | this.ownerDocument.querySelector("home-assistant").dispatchEvent(popupEvent); 324 | } 325 | 326 | _button(button) { 327 | this.callServiceFromConfig(button, "webostv.button", { 328 | entity_id: this.config.entity, 329 | button: button 330 | }) 331 | } 332 | 333 | _command(button, command) { 334 | this.callServiceFromConfig(button, "webostv.command", { 335 | entity_id: this.config.entity, 336 | command: command 337 | }); 338 | } 339 | 340 | _media_player_turn_on(mac) { 341 | if (this.config.mac) { 342 | this.hass.callService("wake_on_lan", "send_magic_packet", { 343 | mac: mac 344 | }); 345 | } else { 346 | this._media_player_service("POWER", "turn_on"); 347 | } 348 | } 349 | 350 | _media_player_service(button, service) { 351 | this.callServiceFromConfig(button, `media_player.${service}`, { 352 | entity_id: this.config.entity, 353 | }); 354 | } 355 | 356 | firstUpdated(changedProperties) { 357 | super.firstUpdated(changedProperties); 358 | const plusButton = this.shadowRoot.querySelector("#plusButton"); 359 | const minusButton = this.shadowRoot.querySelector("#minusButton"); 360 | const interval = this.output_entity === this.config.ampli_entity ? 250 : 100; 361 | let longPressTimer; 362 | let isLongPress = false; 363 | 364 | // Funzione per aggiornare e chiamare il servizio 365 | const updateValue = (service) => { 366 | this.callServiceFromConfig(service.toUpperCase(), `media_player.${service}`, { 367 | entity_id: this.output_entity, 368 | }); 369 | }; 370 | 371 | // Gestore per il pulsante '+' (plusButton) 372 | plusButton.addEventListener("mousedown", () => { 373 | if (!isNaN(this.volume_value)) { 374 | isLongPress = false; 375 | this._show_vol_text = true; 376 | longPressTimer = setTimeout(() => { 377 | isLongPress = true; 378 | updateValue("volume_up"); 379 | longPressTimer = setInterval(() => updateValue("volume_up"), interval); 380 | }, 500); 381 | } 382 | }); 383 | 384 | plusButton.addEventListener("touchstart", (e) => { 385 | e.preventDefault(); 386 | if (!isNaN(this.volume_value)) { 387 | isLongPress = false; 388 | this._show_vol_text = true; 389 | longPressTimer = setTimeout(() => { 390 | isLongPress = true; 391 | updateValue("volume_up"); 392 | longPressTimer = setInterval(() => updateValue("volume_up"), interval); 393 | }, 500); 394 | } 395 | }); 396 | 397 | plusButton.addEventListener("mouseup", () => { 398 | clearTimeout(longPressTimer); 399 | if (!isLongPress) { 400 | updateValue("volume_up"); 401 | } 402 | clearInterval(longPressTimer); 403 | this.valueDisplayTimeout = setTimeout(() => { 404 | this._show_vol_text = false; 405 | }, 500); 406 | }); 407 | 408 | plusButton.addEventListener("touchend", () => { 409 | clearTimeout(longPressTimer); 410 | if (!isLongPress) { 411 | updateValue("volume_up"); 412 | } 413 | clearInterval(longPressTimer); 414 | this.valueDisplayTimeout = setTimeout(() => { 415 | this._show_vol_text = false; 416 | }, 500); 417 | }); 418 | 419 | // Gestore per il pulsante '-' (minusButton) 420 | minusButton.addEventListener("mousedown", () => { 421 | if (!isNaN(this.volume_value)) { 422 | isLongPress = false; 423 | this._show_vol_text = true; 424 | longPressTimer = setTimeout(() => { 425 | isLongPress = true; 426 | updateValue("volume_down"); 427 | longPressTimer = setInterval(() => updateValue("volume_down"), interval); 428 | }, 400); 429 | } 430 | }); 431 | 432 | minusButton.addEventListener("touchstart", (e) => { 433 | e.preventDefault(); 434 | if (!isNaN(this.volume_value)) { 435 | isLongPress = false; 436 | this._show_vol_text = true; 437 | longPressTimer = setTimeout(() => { 438 | isLongPress = true; 439 | updateValue("volume_down"); 440 | longPressTimer = setInterval(() => updateValue("volume_down"), interval); 441 | }, 400); 442 | } 443 | }); 444 | 445 | minusButton.addEventListener("mouseup", () => { 446 | clearTimeout(longPressTimer); 447 | if (!isLongPress) { 448 | updateValue("volume_down"); 449 | } 450 | clearInterval(longPressTimer); 451 | this.valueDisplayTimeout = setTimeout(() => { 452 | this._show_vol_text = false; 453 | }, 500); 454 | }); 455 | 456 | minusButton.addEventListener("touchend", () => { 457 | clearTimeout(longPressTimer); 458 | if (!isLongPress) { 459 | updateValue("volume_down"); 460 | } 461 | clearInterval(longPressTimer); 462 | this.valueDisplayTimeout = setTimeout(() => { 463 | this._show_vol_text = false; 464 | }, 500); 465 | }); 466 | } 467 | 468 | updated(changedProperties) { 469 | 470 | if (changedProperties.has("hass")) { 471 | const tvEntity = this.hass.states[this.config.entity]; 472 | const newSoundOutput = tvEntity.attributes.sound_output; 473 | 474 | if (newSoundOutput !== this.soundOutput) { 475 | this.soundOutput = newSoundOutput; // Aggiorna il valore della variabile di classe 476 | this.requestUpdate(); // Richiedi l'aggiornamento della card 477 | } 478 | } 479 | } 480 | 481 | _homeButtonDown(event: MouseEvent | TouchEvent) { 482 | this.homeisLongPress = false; 483 | this.homelongPressTimer = setTimeout(() => { 484 | this.homeisLongPress = true; 485 | this._button("MENU") 486 | }, 1000); // Tempo in millisecondi per determinare una pressione prolungata 487 | } 488 | 489 | _homeButtonUp(event: MouseEvent | TouchEvent) { 490 | clearTimeout(this.homelongPressTimer); 491 | if (!this.homeisLongPress) { 492 | this._button("HOME") 493 | } 494 | } 495 | 496 | 497 | _select_source(source) { 498 | this.hass.callService("media_player", "select_source", { 499 | entity_id: this.config.entity, 500 | source: source 501 | }); 502 | } 503 | 504 | _select_sound_output(sound_output) { 505 | this.hass.callService("webostv", "select_sound_output", { 506 | entity_id: this.config.entity, 507 | sound_output: sound_output 508 | }); 509 | this._show_sound_output = false; 510 | } 511 | 512 | setConfig(config) { 513 | if (!config.entity) { 514 | throw new Error("Invalid configuration"); 515 | } 516 | this.config = config; 517 | } 518 | 519 | getCardSize() { 520 | return 15; 521 | } 522 | 523 | callServiceFromConfig(key: string, service: string, serviceData: Record) { 524 | let serviceToUse = service; 525 | let serviceDataToUse = serviceData; 526 | if(this.config.keys && key in this.config.keys) { 527 | const keyConfig = this.config.keys[key]; 528 | serviceToUse = keyConfig["service"]; 529 | serviceDataToUse = keyConfig["data"]; 530 | } 531 | this.hass.callService( 532 | serviceToUse.split(".")[0], 533 | serviceToUse.split(".")[1], 534 | serviceDataToUse 535 | ); 536 | 537 | } 538 | 539 | static getIcon(iconName) { 540 | return Object.keys(LgRemoteControl.iconMapping).includes(iconName) 541 | ? LgRemoteControl.iconMapping[iconName] 542 | : html``; 543 | } 544 | 545 | static get styles() { 546 | return css` 547 | @keyframes blinker { 548 | 50% { 549 | opacity: 0; 550 | } 551 | } 552 | .tv_title { 553 | width: fit-content; 554 | alig: -webkit-center; 555 | display: block; 556 | margin: auto; 557 | padding: calc(var(--remotewidth)/52) calc(var(--remotewidth)/26); 558 | border-radius: calc(var(--remotewidth)/10); 559 | background-color: var(--remote-button-color); 560 | } 561 | button:focus { 562 | outline: 0; 563 | } 564 | .ripple { 565 | position: relative; 566 | overflow: hidden; 567 | transform: translate3d(0, 0, 0); 568 | } 569 | .ripple:after { 570 | content: ""; 571 | display: block; 572 | position: absolute; 573 | border-radius: 50%; 574 | top: 0; 575 | left: 0; 576 | pointer-events: none; 577 | background-image: radial-gradient(circle, #7a7f87 2%, transparent 10.01%); 578 | background-repeat: no-repeat; 579 | background-position: 50%; 580 | transform: scale(10, 10); 581 | opacity: 0; 582 | transition: transform .5s, opacity 1s; 583 | } 584 | .ripple:active:after { 585 | transform: scale(0, 0); 586 | opacity: .3; 587 | transition: 0s; 588 | } 589 | .blink { 590 | animation: blinker 1.5s linear infinite; 591 | color: red; 592 | } 593 | .card, .ripple:after { 594 | width: 100%; 595 | height: 100%} 596 | .card { 597 | display: flex; 598 | justify-content: center; 599 | } 600 | .page { 601 | background-color: var(--remote-color); 602 | height: 100%; 603 | display: inline-block; 604 | flex-direction: row; 605 | border: var(--main-border-width) solid var(--main-border-color); 606 | border-radius: calc(var(--remotewidth)/7.5); 607 | padding: calc(var(--remotewidth)/37.5) calc(var(--remotewidth)/15.2) calc(var(--remotewidth)/11); 608 | } 609 | .grid-container-power { 610 | display: grid; 611 | grid-template-columns: 1fr 1fr 1fr; 612 | grid-template-rows: 1fr; 613 | background-color: transparent; 614 | overflow: hidden; 615 | width: var(--remotewidth); 616 | height: calc(var(--remotewidth)/3); 617 | } 618 | .grid-container-cursor, .grid-container-keypad { 619 | display: grid; 620 | grid-template-columns: 1fr 1fr 1fr; 621 | overflow: hidden; 622 | height: var(--remotewidth); 623 | } 624 | .grid-container-cursor { 625 | grid-template-rows: 1fr 1fr 1fr; 626 | width: var(--remotewidth); 627 | grid-template-areas: "sound up input""left ok right""back down exit"} 628 | .grid-container-keypad { 629 | grid-template-rows: 1fr 1fr 1fr 1fr; 630 | background-color: transparent; 631 | background-color: var(--remote-button-color); 632 | border-radius: 35px; 633 | width: calc(var(--remotewidth) - 10%); 634 | margin: auto; 635 | } 636 | .grid-container-input, .grid-container-sound { 637 | display: grid; 638 | background-color: transparent; 639 | overflow: hidden; 640 | width: var(--remotewidth); 641 | } 642 | .grid-container-input { 643 | grid-template-columns: 1fr 1fr 1fr; 644 | grid-template-rows: calc(var(--remotewidth)/2) calc(var(--remotewidth)/.5115); 645 | } 646 | .grid-container-sound { 647 | grid-template-columns: 1fr 1fr; 648 | grid-template-rows: 28% 6% 16% 16% 16% 16% 6%; 649 | height: var(--remotewidth); 650 | grid-template-areas: "bnt title"". .""tv tv-opt""tv-phone opt""hdmi line""phone bluetooth"} 651 | .grid-container-color_btn, .grid-container-source { 652 | display: grid; 653 | grid-template-columns: 1fr 1fr 1fr 1fr; 654 | grid-template-rows: auto; 655 | background-color: transparent; 656 | width: calc(var(--remotewidth)/1.03); 657 | overflow: hidden; 658 | margin: auto; 659 | } 660 | .grid-container-color_btn { 661 | height: calc(var(--remotewidth)/10); 662 | } 663 | .grid-container-media-control, .grid-container-volume-channel-control { 664 | display: grid; 665 | grid-template-columns: 1fr 1fr 1fr; 666 | grid-template-rows: 1fr 1fr 1fr; 667 | background-color: transparent; 668 | width: var(--remotewidth); 669 | height: calc(var(--remotewidth)/1.4); 670 | overflow: hidden; 671 | margin-top: calc(var(--remotewidth)/12); 672 | } 673 | .grid-container-media-control { 674 | grid-template-rows: 1fr 1fr; 675 | height: calc(var(--remotewidth)/2.85); 676 | } 677 | .grid-item-input { 678 | grid-column-start: 1; 679 | grid-column-end: 4; 680 | grid-row-start: 1; 681 | grid-row-end: 3; 682 | display: grid; 683 | grid-template-columns: auto; 684 | background-color: var(--remote-button-color); 685 | margin: auto; 686 | margin-top: calc(var(--remotewidth)/2.6); 687 | overflow: scroll; 688 | height: calc(var(--remotewidth)*2.01); 689 | width: calc(var(--remotewidth) - 9%); 690 | border-radius: calc(var(--remotewidth)/12); 691 | } 692 | .grid-item-input::-webkit-scrollbar { 693 | display: none; 694 | -ms-overflow-style: none; 695 | } 696 | .shape, .shape-input, .shape-sound, .source_text { 697 | grid-column-start: 1; 698 | grid-column-end: 4; 699 | grid-row-start: 1; 700 | } 701 | .shape { 702 | grid-row-end: 4; 703 | padding: 5px; 704 | } 705 | .shape-input, .shape-sound, .source_text { 706 | grid-row-end: 3; 707 | } 708 | .shape-sound, .source_text { 709 | grid-column-end: 5; 710 | grid-row-end: 6; 711 | } 712 | .source_text { 713 | grid-column-end: 3; 714 | grid-row-end: 2; 715 | text-align: center; 716 | margin-top: calc(var(--remotewidth)/6); 717 | font-size: calc(var(--remotewidth)/10); 718 | opacity: .3; 719 | } 720 | .btn_soundoutput, .sound_icon_text { 721 | width: 70%; 722 | height: 70%; 723 | border-width: 0; 724 | margin: auto auto 0 0; 725 | cursor: pointer; 726 | background-color: transparent; 727 | grid-area: title; 728 | } 729 | .sound_icon_text { 730 | color: var(--remote-text-color); 731 | font-size: calc(var(--remotewidth)/18.75); 732 | overflow: hidden; 733 | } 734 | .btn_soundoutput { 735 | font-size: calc(var(--remotewidth)/12.5); 736 | display: block; 737 | opacity: .4; 738 | color: var(--remote-text-color); 739 | font-weight: bold; 740 | } 741 | .tv { 742 | grid-area: tv; 743 | } 744 | .tv-opt { 745 | grid-area: tv-opt; 746 | } 747 | .tv-phone { 748 | grid-area: tv-phone; 749 | } 750 | .opt { 751 | grid-area: opt; 752 | } 753 | .hdmi { 754 | grid-area: hdmi; 755 | } 756 | .phone { 757 | grid-area: phone; 758 | } 759 | .line { 760 | grid-area: line; 761 | } 762 | .bluetooth { 763 | grid-area: bluetooth; 764 | } 765 | .item_sound { 766 | grid-area: sound; 767 | } 768 | .item_up { 769 | grid-area: up; 770 | } 771 | .item_input { 772 | grid-area: input; 773 | } 774 | .item_2_sx { 775 | grid-area: left; 776 | } 777 | .item_2_c { 778 | grid-area: ok; 779 | } 780 | .item_right { 781 | grid-area: right; 782 | } 783 | .item_back { 784 | grid-area: back; 785 | } 786 | .item_down { 787 | grid-area: down; 788 | } 789 | .item_exit { 790 | grid-area: exit; 791 | } 792 | ha-icon { 793 | width: calc(var(--remotewidth)/10.8); 794 | height: calc(var(--remotewidth)/10.8); 795 | } 796 | .bnt-input-back, .bnt-sound-back, .btn { 797 | font-size: calc(var(--remotewidth)/18.75); 798 | border-radius: 50%; 799 | place-items: center; 800 | display: inline-block; 801 | cursor: pointer; 802 | } 803 | .btn { 804 | background-color: var(--remote-button-color); 805 | color: var(--remote-text-color); 806 | width: 70%; 807 | height: 70%; 808 | border-width: 0; 809 | margin: auto; 810 | } 811 | .bnt-input-back, .bnt-sound-back { 812 | background-color: transparent; 813 | margin-top: calc(var(--remotewidth)/21); 814 | } 815 | .bnt-input-back { 816 | grid-column-start: 3; 817 | grid-column-end: 4; 818 | grid-row-start: 1; 819 | grid-row-end: 2; 820 | color: var(--remote-text-color); 821 | width: 70%; 822 | height: 50%; 823 | border-width: 0; 824 | margin-left: calc(var(--remotewidth)/21); 825 | } 826 | .bnt-sound-back { 827 | margin-left: 0; 828 | grid-area: bnt; 829 | width: 45%; 830 | height: 83%; 831 | margin-left: calc(var(--remotewidth)/18); 832 | } 833 | .bnt-sound-back, .btn-color, .btn-keypad, .btn_source { 834 | color: var(--remote-text-color); 835 | border-width: 0; 836 | } 837 | .btn-keypad { 838 | background-color: transparent; 839 | font-size: calc(var(--remotewidth)/10); 840 | width: 100%; 841 | height: 100%} 842 | .btn-color, .btn_source { 843 | background-color: var(--remote-button-color); 844 | border-radius: calc(var(--remotewidth)/10); 845 | place-items: center; 846 | cursor: pointer; 847 | } 848 | .btn_source { 849 | width: calc(var(--remotewidth)/5.9); 850 | height: calc(var(--remotewidth)/8.125); 851 | margin: calc(var(--remotewidth)/18.57) auto calc(var(--remotewidth)/20); 852 | } 853 | .btn-color { 854 | width: 70%; 855 | height: 55%; 856 | margin: auto; 857 | } 858 | .icon_source { 859 | height: 100%; 860 | width: 100%} 861 | .btn-input, .btn-input-on { 862 | font-size: calc(var(--remotewidth)/18.5); 863 | height: calc(var(--remotewidth)/7.2226); 864 | border-width: 0; 865 | border-radius: calc(var(--remotewidth)/20); 866 | margin: calc(var(--remotewidth)/47); 867 | place-items: center; 868 | display: list-item; 869 | cursor: pointer; 870 | } 871 | .btn-input { 872 | background-color: var(--remote-button-color); 873 | color: var(--remote-text-color); 874 | border: solid 2px var(--remote-color); 875 | } 876 | .btn-input-on { 877 | background-color: var(--primary-color); 878 | color: #fff; 879 | } 880 | .bnt_sound_icon_width { 881 | width: calc(var(--remotewidth)/3); 882 | } 883 | .bnt_sound_text_width { 884 | width: calc(var(--remotewidth)/2.6); 885 | } 886 | .btn_sound_off, .btn_sound_on { 887 | font-size: calc(var(--remotewidth)/25); 888 | height: calc(var(--remotewidth)/9.3); 889 | border-width: 0; 890 | border-radius: calc(var(--remotewidth)/20); 891 | margin: auto; 892 | display: block; 893 | cursor: pointer; 894 | } 895 | .btn_sound_on { 896 | background-color: var(--primary-color); 897 | color: #fff; 898 | } 899 | .btn_sound_off { 900 | background-color: var(--remote-button-color); 901 | color: var(--remote-text-color); 902 | border: solid 2px var(--remote-color); 903 | } 904 | .overlay { 905 | background-color: rgba(0, 0, 0, .02); 906 | } 907 | .flat-high { 908 | width: 70%; 909 | height: 37%} 910 | .flat-low { 911 | width: 70%; 912 | height: 65%} 913 | .btn-flat { 914 | background-color: var(--remote-button-color); 915 | color: var(--remote-text-color); 916 | font-size: calc(var(--remotewidth)/18.75); 917 | border-width: 0; 918 | border-radius: calc(var(--remotewidth)/10); 919 | margin: auto; 920 | display: grid; 921 | place-items: center; 922 | display: inline-block; 923 | cursor: pointer; 924 | } 925 | 926 | 927 | .ok_button { 928 | display: flex; 929 | color: var(--remote-text-color); 930 | justify-content: center; 931 | align-items: center; 932 | border: solid 3px var(--ha-card-background); 933 | border-radius: 100%; 934 | font-size: calc(var(--remotewidth)/16.6); 935 | cursor: pointer; 936 | 937 | } 938 | 939 | .vol_text_value { 940 | // width: 40px; 941 | background-color: transparent; 942 | border: none; 943 | text-align: center; 944 | color: var(--primary-text-color); 945 | font-size: calc(var(--remotewidth)/14); 946 | 947 | `; 948 | } 949 | 950 | } 951 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { HomeAssistant } from "custom-card-helpers"; 2 | 3 | export interface HomeAssistantFixed extends HomeAssistant { 4 | entities: { [id: string]: EntityRegistryDisplayEntry }; 5 | } 6 | 7 | type entityCategory = "config" | "diagnostic"; 8 | 9 | export interface EntityRegistryDisplayEntry { 10 | entity_id: string; 11 | name?: string; 12 | device_id?: string; 13 | area_id?: string; 14 | hidden?: boolean; 15 | entity_category?: entityCategory; 16 | translation_key?: string; 17 | platform?: string; 18 | display_precision?: number; 19 | } 20 | 21 | export interface WindowWithCards extends Window { 22 | customCards: unknown[]; 23 | } -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export function getMediaPlayerEntitiesByPlatform(hass, platformName) { 2 | let entities = Object.keys(hass.entities).filter( 3 | (eid) => hass.entities[eid].platform === platformName 4 | ); 5 | const re = /media_player/; 6 | return entities.filter(a => re.exec(a)); 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "lib": ["es2017", "dom", "dom.iterable", "esnext"], 7 | "noEmit": true, 8 | "noUnusedParameters": false, 9 | "noImplicitReturns": false, 10 | "noFallthroughCasesInSwitch": false, 11 | "strict": false, 12 | "noImplicitAny": false, 13 | "skipLibCheck": true, 14 | "resolveJsonModule": true, 15 | "experimentalDecorators": true, 16 | "types": ["node"] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tv_logo/AUX1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/AUX1.png -------------------------------------------------------------------------------- /tv_logo/AUX2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/AUX2.png -------------------------------------------------------------------------------- /tv_logo/AXN +1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/AXN +1.png -------------------------------------------------------------------------------- /tv_logo/AXN HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/AXN HD.png -------------------------------------------------------------------------------- /tv_logo/AXN Sci-Fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/AXN Sci-Fi.png -------------------------------------------------------------------------------- /tv_logo/Alice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Alice.png -------------------------------------------------------------------------------- /tv_logo/Animal Planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Animal Planet.png -------------------------------------------------------------------------------- /tv_logo/Bluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Bluetooth.png -------------------------------------------------------------------------------- /tv_logo/Boing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Boing.png -------------------------------------------------------------------------------- /tv_logo/Boomerang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Boomerang.png -------------------------------------------------------------------------------- /tv_logo/CD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/CD.png -------------------------------------------------------------------------------- /tv_logo/Canale5 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Canale5 HD.png -------------------------------------------------------------------------------- /tv_logo/Canali TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Canali TV.png -------------------------------------------------------------------------------- /tv_logo/Cartoon Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Cartoon Network.png -------------------------------------------------------------------------------- /tv_logo/Cartoonito.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Cartoonito.png -------------------------------------------------------------------------------- /tv_logo/Cielo HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Cielo HD.png -------------------------------------------------------------------------------- /tv_logo/DMAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/DMAX.png -------------------------------------------------------------------------------- /tv_logo/Deejay TV HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Deejay TV HD.png -------------------------------------------------------------------------------- /tv_logo/EuroSport HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/EuroSport HD.png -------------------------------------------------------------------------------- /tv_logo/Eurosport 2 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Eurosport 2 HD.png -------------------------------------------------------------------------------- /tv_logo/Fire Tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Fire Tv.png -------------------------------------------------------------------------------- /tv_logo/Focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Focus.png -------------------------------------------------------------------------------- /tv_logo/IRIS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/IRIS.png -------------------------------------------------------------------------------- /tv_logo/Italia1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Italia1 HD.png -------------------------------------------------------------------------------- /tv_logo/K2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/K2.png -------------------------------------------------------------------------------- /tv_logo/LA7 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/LA7 HD.png -------------------------------------------------------------------------------- /tv_logo/La 5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/La 5.png -------------------------------------------------------------------------------- /tv_logo/Marantz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Marantz.png -------------------------------------------------------------------------------- /tv_logo/Media Player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Media Player.png -------------------------------------------------------------------------------- /tv_logo/NOVE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/NOVE.png -------------------------------------------------------------------------------- /tv_logo/Netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Netflix.png -------------------------------------------------------------------------------- /tv_logo/Nick Junior.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Nick Junior.png -------------------------------------------------------------------------------- /tv_logo/Nickelodeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Nickelodeon.png -------------------------------------------------------------------------------- /tv_logo/Premium Action +24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Action +24.png -------------------------------------------------------------------------------- /tv_logo/Premium Action HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Action HD.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 1 HD.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 2.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 3.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 4.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 5.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio 6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio 6.png -------------------------------------------------------------------------------- /tv_logo/Premium Calcio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Calcio.png -------------------------------------------------------------------------------- /tv_logo/Premium Cinema +24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Cinema +24.jpg -------------------------------------------------------------------------------- /tv_logo/Premium Cinema 2 +24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Cinema 2 +24.jpg -------------------------------------------------------------------------------- /tv_logo/Premium Cinema 2 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Cinema 2 HD.png -------------------------------------------------------------------------------- /tv_logo/Premium Cinema HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Cinema HD.png -------------------------------------------------------------------------------- /tv_logo/Premium Comedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Comedy.png -------------------------------------------------------------------------------- /tv_logo/Premium Crime +24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Crime +24.jpg -------------------------------------------------------------------------------- /tv_logo/Premium Crime HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Crime HD.png -------------------------------------------------------------------------------- /tv_logo/Premium Emotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Emotion.png -------------------------------------------------------------------------------- /tv_logo/Premium Energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Energy.png -------------------------------------------------------------------------------- /tv_logo/Premium Extra 1 - GF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Extra 1 - GF.jpg -------------------------------------------------------------------------------- /tv_logo/Premium Joi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Joi.png -------------------------------------------------------------------------------- /tv_logo/Premium Mya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Mya.png -------------------------------------------------------------------------------- /tv_logo/Premium Sport HD.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Sport HD.jpg -------------------------------------------------------------------------------- /tv_logo/Premium Stories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Premium Stories.png -------------------------------------------------------------------------------- /tv_logo/Ps4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Ps4.png -------------------------------------------------------------------------------- /tv_logo/RSI LA 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/RSI LA 1.png -------------------------------------------------------------------------------- /tv_logo/RSI LA 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/RSI LA 2.png -------------------------------------------------------------------------------- /tv_logo/Rai 1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai 1 HD.png -------------------------------------------------------------------------------- /tv_logo/Rai 2 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai 2 HD.png -------------------------------------------------------------------------------- /tv_logo/Rai 3 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai 3 HD.png -------------------------------------------------------------------------------- /tv_logo/Rai 4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai 4.png -------------------------------------------------------------------------------- /tv_logo/Rai Gulp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai Gulp.png -------------------------------------------------------------------------------- /tv_logo/Rai Movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai Movie.png -------------------------------------------------------------------------------- /tv_logo/Rai News 24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai News 24.png -------------------------------------------------------------------------------- /tv_logo/Rai Premium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai Premium.png -------------------------------------------------------------------------------- /tv_logo/Rai Sport 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai Sport 1.png -------------------------------------------------------------------------------- /tv_logo/Rai Sport 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai Sport 2.png -------------------------------------------------------------------------------- /tv_logo/Rai YoYo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rai YoYo.png -------------------------------------------------------------------------------- /tv_logo/Real Time HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Real Time HD.png -------------------------------------------------------------------------------- /tv_logo/Rete4 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Rete4 HD.png -------------------------------------------------------------------------------- /tv_logo/SKY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/SKY.png -------------------------------------------------------------------------------- /tv_logo/Sky 3D.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky 3D.PNG -------------------------------------------------------------------------------- /tv_logo/Sky Arte HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Arte HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Atlantic +1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Atlantic +1 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Atlantic HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Atlantic HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 1 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 10.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 11.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 12.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 2 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 2 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 3 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 3 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 4 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 4 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 5 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 5 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 6 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 6 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 7 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 7 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 8 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 8 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Calcio 9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Calcio 9.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport 1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport 1 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport 2 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport 2 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport 24 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport 24 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport 3 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport 3 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport F1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport F1 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport MotoGP HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport MotoGP HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Sport Plus HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Sport Plus HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Supercalcio HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Supercalcio HD.png -------------------------------------------------------------------------------- /tv_logo/Sky TG24 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky TG24 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky TG24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky TG24.png -------------------------------------------------------------------------------- /tv_logo/Sky Uno +1 HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Uno +1 HD.png -------------------------------------------------------------------------------- /tv_logo/Sky Uno HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Sky Uno HD.png -------------------------------------------------------------------------------- /tv_logo/Spotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Spotify.png -------------------------------------------------------------------------------- /tv_logo/Super Tennis HD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Super Tennis HD.png -------------------------------------------------------------------------------- /tv_logo/Super!.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Super!.png -------------------------------------------------------------------------------- /tv_logo/TGCOM24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/TGCOM24.png -------------------------------------------------------------------------------- /tv_logo/TV Audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/TV Audio.png -------------------------------------------------------------------------------- /tv_logo/TV8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/TV8.png -------------------------------------------------------------------------------- /tv_logo/Tuner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Tuner.png -------------------------------------------------------------------------------- /tv_logo/Wii.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/Wii.png -------------------------------------------------------------------------------- /tv_logo/cielo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/cielo.png -------------------------------------------------------------------------------- /tv_logo/deejay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/deejay.png -------------------------------------------------------------------------------- /tv_logo/frisbee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/frisbee.png -------------------------------------------------------------------------------- /tv_logo/italia 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/italia 2.png -------------------------------------------------------------------------------- /tv_logo/paramount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/paramount.png -------------------------------------------------------------------------------- /tv_logo/rainews24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/rainews24.png -------------------------------------------------------------------------------- /tv_logo/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tv_logo/realtime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/realtime.png -------------------------------------------------------------------------------- /tv_logo/sportitalia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/sportitalia.jpg -------------------------------------------------------------------------------- /tv_logo/sportitalia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/sportitalia.png -------------------------------------------------------------------------------- /tv_logo/supertennis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/supertennis.png -------------------------------------------------------------------------------- /tv_logo/teleradiostereo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/teleradiostereo.png -------------------------------------------------------------------------------- /tv_logo/tv_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logo/tv_off.png -------------------------------------------------------------------------------- /tv_logos.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/madmicio/LG-WebOS-Remote-Control/b4e5cfac3b3ec55201fd91afbe90f1f65caf60ab/tv_logos.zip --------------------------------------------------------------------------------