badnimits
(badnimits)
January 2, 2021, 12:29pm
1
I wrote these scripts to change LG smart tv picture setteing via remote button key presses (i.e Living colors, HDR effect, expert light room)
I did not manage to control the picture settings using luna-send (Please share if you have a solution using the API)
scripts.yaml :
tv_pic_menu_enter:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: MENU
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: UP
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 2
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: RIGHT
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1
tv_pic_menu_choose_back:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: BACK
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: BACK
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: BACK
tv_down_button:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: DOWN
- delay: 0.2
tv_light_expert:
alias: TV Expert Light
sequence:
- service: script.tv_pic_menu_enter
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_pic_menu_choose_back
data: {}
mode: single
icon: mdi:television-ambient-light
tv_dark_expert:
alias: TV Expert Dark
sequence:
- service: script.tv_pic_menu_enter
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_down_button
data: {}
- service: script.tv_pic_menu_choose_back
data: {}
mode: single
icon: hass:sleep
tv_living_colors:
alias: TV Living Colors
sequence:
- service: script.tv_pic_menu_enter
data: {}
- service: script.tv_pic_menu_choose_back
data: {}
mode: single
icon: hass:flower
if you’d like to add the rest just copy paste tv_light_expert and remove one DOWN(- service: script.tv_down_button
) command line
to choose a previous setting(-1 = HDR effect, -2 = Game etc.)
Also if your only using HASS to change the setting you might use the smaller quick menu by using left and right commands (HDR -> Game = tv_smenu_right; HDR <- Game = tv_smenu_left)
tv_smenu_right:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: MENU
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: DOWN
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: RIGHT
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: BACK
tv_smenu_left:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: MENU
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: DOWN
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: LEFT
- delay: 1
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: BACK
badnimits
(badnimits)
January 2, 2021, 2:53pm
2
some tv loads the menus faster in that case you can lower the delay to speed up the command:
tv_pic_menu_enter:
sequence:
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: MENU
- delay: 0.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: UP
- delay: 0.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: RIGHT
- delay: 0.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 1.5
- service: webostv.button
data:
entity_id: media_player.lg_webos_smart_tv_2
button: ENTER
- delay: 0.5
Helge_K
(Helge)
May 4, 2021, 9:35am
3
Hi,
since I desperately wanted to find a way to organize scenes in which I can automatically set the Picture Mode and its parameters (e.g. when the shutters also close automatically and I need to reduce brightness) I’ve eventually found a tool which is capable of doing this. Now I can do this from the command line with this tool:
With this tool you can even change OLED brightness setting when your LG OLED TV is set to energy saving mode in Picture Settings.
From what I could understand from the source code I believe also the LGTV Home Assistant interface should be able to integrate picture mode settings and other settings. Also npm tools like LGTV2 should be able to run the necessary commands.
I installed aiopylgtv in MacOS Terminal:
pip install aiopylgtv
Put this code in a text file, e.g. picure_settings.py
import asyncio
from aiopylgtv import WebOsClient
async def runloop():
client = await WebOsClient.create('192.168.0.60')
await client.disconnect()
await client.connect()
await client.start_calibration(picMode="game")
await client.set_oled_light(picMode="game", value=100)
await client.set_contrast(picMode="game", value=70)
await client.set_brightness(picMode="game", value=60)
await client.end_calibration(picMode="game")
test = await client.get_picture_settings()
print(test)
await client.disconnect()
asyncio.run(runloop())
Then run:
python picure_settings.py
I use Python 3.9.4
Regards
Helge
5 Likes
Helge_K
(Helge)
May 4, 2021, 9:46am
4
I also left feedback at Additional endpoint examples · Issue #17685 · home-assistant/home-assistant.io · GitHub regarding the documentation of webostv integration in Home Assistant.
adryyy
September 15, 2022, 10:12am
5
I’ve manage to do this through telnet:
Check post #24 for updated code.
DEPRECATED - Here's the code I've used
switch:
- platform: command_line
switches:
lgtv_picture_eco:
unique_id: "lgtv_pict_eco"
command_on: "echo \"luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"settings\\\": {\\\"pictureMode\\\": \\\"eco\\\"}}' & exit\" | nc 192.168.0.103 23"
command_off: "echo \"luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"settings\\\": {\\\"pictureMode\\\": \\\"normal\\\"}}' & exit\" | nc 192.168.0.103 23"
command_state: "echo \"luna-send -n 1 luna://com.webos.settingsservice/getSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"keys\\\": [\\\"pictureMode\\\"]}' & exit\" | nc 192.168.0.103 23 | grep -c eco"
friendly_name: "LG Picture ECO"
lgtv_picture_cinema:
unique_id: "lgtv_pict_cinema"
command_on: "echo \"luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"settings\\\": {\\\"pictureMode\\\": \\\"cinema\\\"}}' & exit\" | nc 192.168.0.103 23"
command_off: "echo \"luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"settings\\\": {\\\"pictureMode\\\": \\\"normal\\\"}}' & exit\" | nc 192.168.0.103 23"
command_state: "echo \"luna-send -n 1 luna://com.webos.settingsservice/getSystemSettings '{\\\"category\\\": \\\"picture\\\", \\\"keys\\\": [\\\"pictureMode\\\"]}' & exit\" | nc 192.168.0.103 23 | grep -c cinema"
friendly_name: "LG Picture Cinema"
For nc command you need to install netcat, e.g.: sudo apt-get install netcat
.
Your LG TV should be capable of accepting Telnet connection. You might need to root your tv .
You can apply this to change any settings you want on LG TV, instantly, which give user much more control, and also get instant feedback about status. Here are WebOS API references .
Example automation for automatic switch profile between X hours
alias: "Picture mode change WebOS: Eco"
description: ""
trigger:
- platform: time
at: "01:00:00"
- platform: device
device_id: 4c58e3068c393b95070e6c5800a35647
domain: media_player
entity_id: media_player.lg_webos_tv_uj620v
type: turned_on
condition:
- condition: device
device_id: 4c58e3068c393b95070e6c5800a35647
domain: media_player
entity_id: media_player.lg_webos_tv_uj620v
type: is_on
- condition: time
before: "04:00:00"
after: "01:00:00"
action:
- service: switch.turn_on
data: {}
target:
entity_id: switch.lgtv_picture_eco
mode: single
alias: "Picture mode change WebOS: Cinema"
description: ""
trigger:
- platform: time
at: "20:00:00"
- platform: device
device_id: 4c58e3068c393b95070e6c5800a35647
domain: media_player
entity_id: media_player.lg_webos_tv_uj620v
type: turned_on
condition:
- condition: device
device_id: 4c58e3068c393b95070e6c5800a35647
domain: media_player
entity_id: media_player.lg_webos_tv_uj620v
type: is_on
- condition: time
before: "01:00:00"
after: "20:00:00"
action:
- service: switch.turn_on
data: {}
target:
entity_id: switch.lgtv_picture_cinema
mode: single
2 Likes
Hi all,
i would like to share my solution. After digging deeper into GitHub - merdok/homebridge-webos-tv: Homebridge plugin for LG webOS TVs i found a way to set specific picture mode using pure HA services.
It’s a little bit tricky because it opens allert popup and then after click fires luna action
This is my script:
living_room_lg_tv_picture_mode:
sequence:
- service: webostv.command
data:
entity_id: media_player.living_room_lg_tv
command: system.notifications/createAlert
payload:
message: >-
{{ picture_mode }}
modal: false
buttons:
- label: "ok"
focus: true
buttonType: "ok"
onClick: "luna://com.webos.settingsservice/setSystemSettings"
params:
category: "picture"
settings:
pictureMode: >-
{{ picture_mode }}
type: "confirm"
isSysReq: true
- delay: 0.6
- service: webostv.button
data:
entity_id: media_player.living_room_lg_tv
button: ENTER
as picture_mode
you can pass supported picture mode.
Available picture modes (not all are available on all TVs):
cinema, eco, expert1, expert2, game, normal, photo, sports, technicolor,
vivid, hdrEffect, hdrCinema, hdrCinemaBright, hdrExternal, hdrGame,
hdrStandard, hdrTechnicolor, hdrVivid, dolbyHdrCinema,dolbyHdrCinemaBright,
dolbyHdrDarkAmazon, dolbyHdrGame, dolbyHdrStandard, dolbyHdrVivid, dolbyStandard
You can also play with time of delay.
And also worth to note that this approach can be used to modify other settings eg. energySaving
13 Likes
Gussir
December 1, 2022, 2:23pm
7
Hello, this script looks very interesting !
I’m a bit new to Hassio.
How to you pass on the parameter: {{ picture_mode }}
? Is it a variable in your script?
Should you configure an input_select
variable with all the different choices to then execute the script?
Thanks in advance for the complementary info !
Hi,
just like that:
service: script.living_room_lg_tv_picture_mode
data:
picture_mode: eco
picture_mode
is only variable named in my script
2 Likes
Gussir
December 2, 2022, 9:57am
9
Hello, thanks a lot ! I managed to get the scrip working The question is: do you know which LG TV would support pictureModes?
When I execute the script, I do see a quick widget appearing on my TV but it doesn’t change picture mode. Might there be other name for: eco, normal, cinema
etc…
Gussir
December 2, 2022, 10:31am
10
Hello again, I have started digging in the API.
There might be an error? It seems that pictureMode
is in the object dimension
and not settings
?
API Summary Settings Service manages the settings used in webOS and provides the setting information (descriptions) such as Set, Get functions to setting values, the valid range of data that can be set, and whether UI is exposed or not. Subscription...
I still can’t manage to pass the parameter to my TV
I have OLED65C9 and this script is working without problems (i can set eco
, normal
, 'cinema), also i am able to change
energySavingmode. As far as i know there are differeces between models, so maybe there is different name for preset or maybe your model (os version) doesn't support this command. I think
pictureModenested in
dimensioncan be used to set mode per each
input`
1 Like
Gussir
December 2, 2022, 11:13am
12
Jacek_Paszkowski:
energySavingmode
Could you also share the script for this mode?
Thanks !
Sure
living_room_lg_tv_picture_energy_saving:
sequence:
- service: webostv.command
data:
entity_id: media_player.living_room_lg_tv
command: system.notifications/createAlert
payload:
title: "Energy saving"
message: >-
{{ energy_saving }}
modal: false
buttons:
- label: "ok"
focus: true
buttonType: "ok"
onClick: "luna://com.webos.settingsservice/setSystemSettings"
params:
category: "picture"
settings:
energySaving: >-
{{ energy_saving }}
energySavingModified: "true"
type: "confirm"
isSysReq: true
- delay:
milliseconds: 40
- service: webostv.button
data:
entity_id: media_player.living_room_lg_tv
button: ENTER
3 Likes
Gussir
December 2, 2022, 1:43pm
14
Is it necessary to have developer mode activated to be able to send such scripts to webos?
I don’t have this app. Only Mobile Apps anabled and HA paired with my TV.
Paboka
(Evgenii Pliusnin)
December 30, 2022, 11:17am
16
Thanks a lot, the script works well on my LG CineBeam HU810P projector.
But I have one question: the projector also has an additional picture mode “Brightest”. How can I get the name of the mode to use in the script? hdrBrightest
doesn’t work for that
Sorry, I have no idea and no way to check. The trial and error method remains. I hope you succeed
an1uk
February 10, 2023, 6:07pm
18
Sorry if this is a very basic question, as relatively new to HA. Where does the script go, and how can it be triggered - for example in an automation? (I’ve tried adding to scripts.yaml but can’t find a way to trigger it). Thanks.
Edit: Ah I think all this code can be put into the automation itself when formatted correctly.
You can define scipts in scripts.yaml (thank you have to reaload script or restar HA).
Than you will be able to call the script as a service eg:
- service: script.living_room_lg_tv_picture_energy_saving
data:
energy_saving: 'max'
Or include whole script in automation but you won’t be able to reuse it.
2 Likes
an1uk
February 22, 2023, 1:44pm
20
I have root telnet enabled. I can connect via Putty, and send commands such as below which successfully changes picture mode.
luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{"category": "picture", "settings": {"pictureMode": "expert2"}}' & exit
However I’m unable to get the command_line switches code here to work. The switch simply resets to off. The logs show no error.
Edit:
Finally managed to get it working with below…
switch:
- platform: command_line
switches:
lgtv_picture_bright_cl:
unique_id: "lgtv_pict_bright_cl"
command_on: >
echo "luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\"category\": \"picture\", \"settings\": {\"pictureMode\": \"expert1\"}}' & exit" | curl --raw --max-time 1 telnet://192.168.1.4:23
command_off: >
echo "luna-send -n 1 luna://com.webos.settingsservice/setSystemSettings '{\"category\": \"picture\", \"settings\": {\"pictureMode\": \"expert2\"}}' & exit" | curl --raw --max-time 1 telnet://192.168.1.4:23
command_state: >
echo "luna-send -n 1 luna://com.webos.settingsservice/getSystemSettings '{\"category\": \"picture\", \"keys\": [\"pictureMode\"]}' & exit" | curl --raw --max-time 1 telnet://192.168.1.4:23 | grep -c expert1
friendly_name: "LG Picture Bright"
4 Likes