Coder Social home page Coder Social logo

kennymc-c / ucr2-integration-sonysdcp Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 0.0 411 KB

Integration for Unfolded Circle Remote 2 to control Sony projectors that support the SDCP/PJ Talk protocol

License: GNU General Public License v3.0

Python 99.76% Shell 0.24%

ucr2-integration-sonysdcp's Introduction

Sony Projector Integration for Unfolded Circle Remote Two

⚠️ WARNING ⚠️

Disclaimer: This software is at an early stage of development and may contain serious bugs that could affect system stability. Please use it at your own risk!

Integration for Unfolded Circle Remote Two to control Sony projectors that support the SDCP/PJTalk protocol.

Using uc-integration-api and a modified and extended version of pySDCP that is included in this repository.

Supported commands:

  • Turn On/Off/Toggle
  • Mute/Unmute/Toggle
    • Used for picture muting
  • Cursor Up/Down/Left/Right/Enter
    • The back command is also mapped to cursor left as there is no separate back command for the projector. Inside the setup menu cursor left has the same function as a typical back command.
  • Home
    • Opens the setup menu. Used instead of the menu feature because of the hard mapped home button when opening the entity from a profile page
  • Source Select
    • HDMI 1, HDMI 2
  • Simple Commands
    • Calibration Presets*
      • Cinema Film 1, Cinema Film 2, Reference, TV, Photo, Game, Bright Cinema, Bright TV, User
    • Aspect Ratios*
      • Normal, Stretch**, V Stretch, Ratio Squeeze, Zoom 1:85, Zoom 2:35
    • Motionfow*
      • Off, Smoth High, Smoth Low, Impulse***, Combination***, True Cinema
    • HDR*
      • On, Off, Auto
    • 2D/3D Display Select**
      • 2D, 3D, Auto
    • 3D Format**
      • Simulated 3D, Side-by-Side, Over-Under
    • Lamp Control*
      • High, Low
    • Input Lag Reduction*
      • On, Off
    • Menu Position
      • Bottom Left, Center
    • Lens Control
      • Lens Shift Up/Down/Left/Right
      • Lens Focus Far/Near
      • Lens Zoom Large/Small

* Only works if a video signal is present at the input
** May not work work with all video signals. Please refer to Sony's user manual
*** May not work on certain projector models that do not support this mode/feature. Please refer to Sony's user manual

If a command can't be processed or applied by the projector this will result in a bad request error on the remote. The response error message from the projector is shown in the integration log

Supported attributes:

  • State (On, Off, Unknown)
  • Muted (True, False)
  • Source
  • Source List (HDMI 1, HDMI 2)

By default the integration checks the status of all attributes every 20 seconds. The interval can be changed in config.py. Set it to 0 to deactivate this function.

Planned features:

  • Picture position and advanced iris commands (needs testers as I only own a VPL-VW-270 that doesn't support lens memory and iris control)
  • Additional sensor entity to show the lamp time
  • Additional remote entity to automatically map all commands to buttons and the ui grid

Planned improvements are labeled with #TODO in the code

Known supported projectors

According to pySDCP and/or personal testing.

  • VPL-HW65ES
  • VPL-VW100
  • VPL-VW260
  • VPL-VW270
  • VPL-VW285
  • VPL-VW315
  • VPL-VW320
  • VPL-VW328
  • VPL-VW365
  • VPL-VW515
  • VPL-VW520
  • VPL-VW528
  • VPL-VW665

Please inform me if you have a projector that is not on this list and it works with pySDCP or this integration

Usage

Setup

Activate SDCP/PJTalk

Open the projectors web interface and go to Setup/Advanced Menu (left menu)/PJTalk, activate the Start PJ Talk Service checkbox and click on Apply.

webinterface

Change SDAP Interval

During the initial setup the integration tries to query data from the projector via the SDAP advertisement protocol to generate a unique entity id. The default SDAP interval is 30 seconds. You can shorten the interval to a minimum value of 10 seconds under Setup/Advanced Menu/Advertisement/Interval.

advertisement

Requirements

  • UCR2 firmware 1.7.4 or newer to support simple commands
  • Python 3.11
  • Install Libraries:
    (using a virtual environment is highly recommended)
pip3 install -r requirements.txt

Run

python3 intg-sonysdcp/driver.py

Run as a Docker container

For the mDNS advertisement to work correctly it's advised to start the integration in the host network (--net=host). You can also set the websocket listening port with the environment variable UC_INTEGRATION_HTTP_PORT, set the listening interface with UC_INTEGRATION_INTERFACE or change the default debug log level with UC_LOG_LEVEL. See available environment variables in the Python integration library.

All data is mounted to /usr/src/app:

docker run --net=host -n 'ucr2-integration-sonysdcp' -v './ucr2-integration-sonySDCP':'/usr/src/app/':'rw' 'python:3.11' /usr/src/app/docker-entry.sh

Build self-contained binary for Remote Two

Note: Uploading custom integrations to the remote is not yet supported with the current firmware. The status can be tracked in this issue: #79

Unfolded Circle recommends to create a single binary file that has everything in it as python on embedded systems is a nightmare.

To do that, we need to compile it on the target architecture as pyinstaller does not support cross compilation.

x86-64 Linux

On x86-64 Linux we need Qemu to emulate the aarch64 target platform:

sudo apt install qemu binfmt-support qemu-user-static
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

Run pyinstaller:

docker run --rm --name builder \
    --platform=aarch64 \
    --user=$(id -u):$(id -g) \
    -v "$PWD":/workspace \
    docker.io/unfoldedcircle/r2-pyinstaller:3.11.6  \
    bash -c \
      "python -m pip install -r requirements.txt && \
      pyinstaller --clean --onefile --name intg-sonysdcp intg-sonysdcp/driver.py"

aarch64 Linux / Mac

On an aarch64 host platform, the build image can be run directly (and much faster):

docker run --rm --name builder \
    --user=$(id -u):$(id -g) \
    -v "$PWD":/workspace \
    docker.io/unfoldedcircle/r2-pyinstaller:3.11.6  \
    bash -c \
      "python -m pip install -r requirements.txt && \
      pyinstaller --clean --onefile --name intg-sonysdcp intg-sonysdcp/driver.py"

Versioning

I use SemVer for versioning. For the versions available, see the tags and releases in this repository.

Changelog

The major changes found in each new release are listed in the changelog and under the GitHub releases.

Contributions

Contributions to add new feature, implement #TODOs from the code or improve the code quality and stability are welcome! First check whether there are other branches in this repository that maybe already include your feature. If not, please fork this repository first and then create a pull request to merge your commits and explain what you want to change or add.

License

This project is licensed under the GNU GENERAL PUBLIC LICENSE. See the LICENSE file for details.

ucr2-integration-sonysdcp's People

Contributors

kennymc-c avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.