Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set Picture Mode via Home Assistant #51

Open
BlackandBlue1908 opened this issue Jan 31, 2022 · 15 comments
Open

Set Picture Mode via Home Assistant #51

BlackandBlue1908 opened this issue Jan 31, 2022 · 15 comments

Comments

@BlackandBlue1908
Copy link

Apologies if this is the wrong place to ask this but I'd like to set the picture mode via homeassistant automations. I don't need to adjust picture settings necessarily just change between modes that are already configured. Any guidance would be appreciated.

@mhrazor1
Copy link

I am trying to achieve the same thing, but it seems that this project is missing something for those endpoints.

I am able to send the picture commands from a standalone installation of bscpylgtv via my system’s terminal and they work as expected (switch from Standard to Cinema, etc.)

However, in Home Assistant w/ aiopylgtv, the endpoint
“com.webos.settingsservice/setSystemSettings”
always fails regardless of its payload with
“aiowebostv.exceptions.WebOsTvServiceNotFoundError: 404 no such service or method”

Its seems that many of the endpoints that begin with “com.webos” are this way.

@BlackandBlue1908
Copy link
Author

I am trying to achieve the same thing, but it seems that this project is missing something for those endpoints.

I am able to send the picture commands from a standalone installation of bscpylgtv via my system’s terminal and they work as expected (switch from Standard to Cinema, etc.)

However, in Home Assistant w/ aiopylgtv, the endpoint

“com.webos.settingsservice/setSystemSettings”

always fails regardless of its payload with

“aiowebostv.exceptions.WebOsTvServiceNotFoundError: 404 no such service or method”

Its seems that many of the endpoints that begin with “com.webos” are this way.

Interesting, I wonder if it would be easy enough to slot bscpylgtv into a custom component replacing aiopylgtv.

@BlackandBlue1908
Copy link
Author

I am trying to achieve the same thing, but it seems that this project is missing something for those endpoints.

I am able to send the picture commands from a standalone installation of bscpylgtv via my system’s terminal and they work as expected (switch from Standard to Cinema, etc.)

However, in Home Assistant w/ aiopylgtv, the endpoint

“com.webos.settingsservice/setSystemSettings”

always fails regardless of its payload with

“aiowebostv.exceptions.WebOsTvServiceNotFoundError: 404 no such service or method”

Its seems that many of the endpoints that begin with “com.webos” are this way.

Interesting, I wonder if it would be easy enough to slot bscpylgtv into a custom component replacing aiopylgtv.

Also pretty sure it's possible to run CLI commands via HA so could probably just install the package and run those commands via scripts or automations, since it's just picture modes would only need to setup a couple of static commands.

@DeLub
Copy link

DeLub commented Jan 15, 2023

It is. That’s how I solved it. But I’d prefer it to be part of the integration. Now I have to reinstall bscpylgtv manually every time the python environment is updated on my dietPi.

@mhrazor1
Copy link

Would you mind providing some details on how you set that up? I think I have some kind of fundamental misunderstanding of how to use python scripts with HA.

@BlackandBlue1908
Copy link
Author

It is. That’s how I solved it. But I’d prefer it to be part of the integration. Now I have to reinstall bscpylgtv manually every time the python environment is updated on my dietPi.

Maybe as bscpylgtv as a requirement to a custom component with nothing else in it? Should install itself at startup each time if not present. But yet built in would be better.

@DeLub
Copy link

DeLub commented Jan 15, 2023

I installed bscpylgtv as per instructions, and added this to configuration.yaml:

# lg modes
shell_command:
  set_dark_mode_sdr: bscpylgtvcommand 192.168.1.102 set_picture_mode expert2 hdmi2 sdr
  set_dark_mode_hdr: bscpylgtvcommand 192.168.1.102 set_picture_mode hdrCinema hdmi2 hdr
  set_dark_mode_dolby: bscpylgtvcommand 192.168.1.102 set_picture_mode dolbyHdrCinema hdmi2 dolbyHdr
  set_light_mode_sdr: bscpylgtvcommand 192.168.1.102 set_picture_mode expert1 hdmi2 sdr
  set_light_mode_hdr: bscpylgtvcommand 192.168.1.102 set_picture_mode hdrCinemaBright hdmi2 hdr     
  set_light_mode_dolby: bscpylgtvcommand 192.168.1.102 set_picture_mode dolbyHdrCinemaBright hdmi2 dolbyHdr
  set_game_mode_sdr: bscpylgtvcommand 192.168.1.102 set_picture_mode game hdmi2 sdr
  set_game_mode_hdr: bscpylgtvcommand 192.168.1.102 set_picture_mode hdrGame hdmi2 hdr
  set_game_mode_dolby: bscpylgtvcommand 192.168.1.102 set_picture_mode dolbyHdrGame hdmi2 dolbyHdr

This allows me to call set_dark_mode_sdr as a service in automations.

@mhrazor1
Copy link

mhrazor1 commented Feb 4, 2023

Again, I feel like I have some kind of fundamental misunderstanding about this.

Are you installing via "pip install bscpylgtv" in the Home Assistant CLI? Because that works for me, and I can issue the commands from the CLI and they work.

But, adding the shell commands to configuration.yaml and calling them from an automation always returns error code 127.

Here is my shell_command entry:

shell_command:
  dolby_standard: bscpylgtvcommand 192.168.4.147 set_current_picture_mode dolbyHdrStandard
  dolby_game: bscpylgtvcommand 192.168.4.147 set_current_picture_mode dolbyHdrGame
  vol_up: bscpylgtvcommand 192.168.4.147 volume_up

Again, these commands work when directly typed into the CLI, but do NOT work when calling a shell command from an automation.

@mhrazor1
Copy link

mhrazor1 commented Mar 1, 2023

@DeLub Any advice on this?

@DeLub
Copy link

DeLub commented Mar 1, 2023

Before installing you should probably activate the Python environment. On my Pi I do this by

sudo -u homeassistant bash . /home/homeassistant/pyenv-activate.sh

does this help you?

@mhrazor1
Copy link

mhrazor1 commented Mar 1, 2023

Thanks for the reply 🍻

Unfortunately, that directory doesn’t exist for me, and the find command doesn’t find a pyenv-activate.sh anywhere on the system. There doesn’t appear to be homeassistant user either, just hassio.

I run HAOS in a Hyper-V VM, if that makes any difference.

@DeLub
Copy link

DeLub commented Mar 1, 2023

Sorry, can’t help you with that. I guess bscpylgtv needs to be added to the container. But I don’t know how you should do that.

@Nold360
Copy link

Nold360 commented May 16, 2023

This is actually a quite funny hack to access the internal "luna" api of webos.. idk if the maintainer of this project would like to implement it: https://github.com/chros73/bscpylgtv/blob/8267636a991bacbb581bca57b6b461adf1df05a2/bscpylgtv/webos_client.py#L1097

@Nold360
Copy link

Nold360 commented May 17, 2023

This is actually a quite funny hack to access the internal "luna" api of webos.. idk if the maintainer of this project would like to implement it: https://github.com/chros73/bscpylgtv/blob/8267636a991bacbb581bca57b6b461adf1df05a2/bscpylgtv/webos_client.py#L1097

So in theory something like this should do the trick, but it doesn't:

set_picture_mode:
    sequence:
    - service: webostv.command
      target:
        entity_id: media_player.lg_webos_smart_tv
      data:
        command: system.notifications/createAlert
        payload:
          message: " "
          buttons:
          - label: "" 
            onClick": luna://com.webos.settingsservice/setSystemSettings
            params:
              category: picture
              settings:
                pictureMode: cinema
          onclose:
            uri: luna://com.webos.settingsservice/setSystemSettings
            params:
              category: picture
              settings:
                pictureMode: cinema
          onfail:
            uri: luna://com.webos.settingsservice/setSystemSettings
            params:            
              category: picture
              settings:            
                pictureMode: cinema

//Edit: Also it opens up a dialog that you need to close manually on the TV, which is otherwise handled by the bscpylgtv script.

@TalhaMangarah
Copy link

I am using the linuxserver homeassistant image. As a workaround which is probably not recommended, I have set the PUID and PGID to root as when I tried my own user, I could see permission errors in the logs.

  • I first made a backup of my homassistant config dir and then install bscpylgtv at container creation with this added as a volume to my docker-compose.yml file.
/path/to/store/custom/scripts/homeassistant:/custom-cont-init.d:ro
  • Inside the /path/to/store/custom/scripts/homeassistant, I have a simple script that installs bscpylgtv via pip.
#!/bin/bash

echo "**** installing bscpylgtv via pip****"
pip install --no-cache-dir bscpylgtv
  • Then I had to use the environment variables PGID and PUID for root.
...
environment: 
    - PUID=0 
    - PGID=0
    - ...
...
  • After container start, I did see DHCP Discovery error with libpcap but I have not looked into it yet... at least the bscpylgtv shell commands are working for now.
Cannot watch for dhcp packets without a functional packet filter: libpcap is not available. Cannot compile filter !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants