Giter Club home page Giter Club logo

hue-entertainment-pykit's Introduction

Hue Entertainment PyKit

GitHub Actions Workflow Status GitHub Actions Workflow Status GitHub Tag Python Version from PEP 621 TOML PyPI - Version PyPI - License

HEPK logo

Introduction

Unlock the full spectrum of Philips Hue lighting with the Hue Entertainment PyKit. This Python library simplifies connecting to the Hue Bridge and controlling lights with minimal latency, empowering developers to create dynamic and responsive lighting environments.

Motivation

Confronted with the complexity of the official Hue EDK and challenges in DTLS handshake implementation which many in the community had, Hue Entertainment PyKit was crafted to provide a straightforward, Python-centric approach to light control using the Philips Hue Entertainment API.

Quick Start

Installing

To install Hue Entertainment PyKit, ensure you have Python installed on your system, and then run the following command:

pip install hue-entertainment-pykit

Usage

To interact with your Philips Hue lights you can do:

Logging Configuration (Optional)

For an enhanced development experience when utilizing this library, logging capabilities have been integrated:

import logging
from hue_entertainment_pykit import setup_logs

# Initialize default logging
setup_logs()

# Or customize the logging level (e.g., exclude DEBUG messages)
setup_logs(level=logging.INFO)

# You can also further customize logging by specifying the maximum log file size and the number of backup files
setup_logs(level=logging.INFO, max_file_size=1024 * 1024, backup_count=1)

# Each parameter is optional and comes with predefined default values

Discovery (Optional)

Use only on your Local Area Network (LAN) to discover and fetch all Bridges that can be used then for streaming

from hue_entertainment_pykit import Discovery

discovery = Discovery()

# returns dict[str, Bridge] where the key is name of the bridge and value is the Bridge model with all important info for connecting to Entertainment API
bridges = discovery.discover_bridges()  

Streaming

The Streaming service in Hue Entertainment PyKit provides thread-safe communication with Hue lights, ensuring smooth and uninterrupted interactions. To prevent connection timeouts, the service implements a keep-alive feature: if no command is sent for 9.5 seconds, the last message is automatically resent to maintain the connection.

Below is a streamlined example to set up and manage your streaming session:

import time
from hue_entertainment_pykit import create_bridge, Entertainment, Streaming

# Set up the Bridge instance with the all needed configuration
bridge = create_bridge(
    identification="4abb74df-5b6b-410e-819b-bf4448355dff",
    rid="d476df48-83ad-4430-a104-53c30b46b4d0",
    ip_address="192.168.1.100",
    swversion=1962097030,
    username="8nuTIcK2nOf5oi88-5zPvV1YCt0wTHZIGG8MwXpu",
    hue_app_id="94530efc-933a-4f7c-97e5-ccf1a9fc79af",
    client_key="B42753E1E1605A1AB90E1B6A0ECF9C51",
    name="1st Bridge"
)

# Set up the Entertainment API service
entertainment_service = Entertainment(bridge)

# Fetch all Entertainment Configurations on the Hue bridge
entertainment_configs = entertainment_service.get_entertainment_configs()

# Add some Entertainment Area selection logic
# For the purposes of example I'm going to do manual selection
entertainment_config = list(entertainment_configs.values())[0]

# Set up the Streaming service
streaming = Streaming(
    bridge, entertainment_config, entertainment_service.get_ent_conf_repo()
)

# Start streaming messages to the bridge
streaming.start_stream()

# Set the color space to xyb or rgb
streaming.set_color_space("xyb")

# Set input commands for the lights
# First three values in the tuple are placeholders for the color RGB8(int) or (in this case) XYB(float) and the last integer is light ID inside the Entertainment API
streaming.set_input((0.0, 0.63435, 0.3, 0))  # Light command for the first light
streaming.set_input((0.63435, 0.0, 0.3, 1))  # Light command for the second light
# ... Add more inputs as needed for additional lights and logic

# For the purpose of example sleep is used for all inputs to process before stop_stream is called
# Inputs are set inside Event queue meaning they're on another thread so user can interact with application continuously
time.sleep(0.1)

# Stop the streaming session
streaming.stop_stream()

Replace the placeholders in the set_input method with actual light IDs and the color and brightness values you intend to use. The start_stream method initiates the streaming session, set_color_space configures the color space, and stop_stream terminates the session.

hue-entertainment-pykit's People

Contributors

hrdasdominik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

hue-entertainment-pykit's Issues

Philips Hue root-bridge certificate

Discussed in #9

Currently fetching the data from the bridge using the Discovery (HTTPS) gives a warning about the CA certificate now being used in the request. Just adding the CA certificate that Philips gives is not enough for the requests library. Hence, a custom adapter needs to be created that will work with the requests library and solve the problem.
For more instructions on how HTTPS needs to be set up check the Philips Hue dev page: https://developers.meethue.com/develop/application-design-guidance/using-https/

Originally posted by JohnConnett February 9, 2024
I have been trying to use Hue Entertainment PyKit but have been hitting problems with InsecureRequestWarning: Unverified HTTPS request is being made to host '192.168.199.25'. For example, I see it when running example/example.py from the github repository.

On Ubuntu, I have installed the root-bridge certificate as /usr/local/share/ca-certificates/Philips-Hue-root-bridge.crt and run sudo update-ca-certificates. There is a symlink /etc/ssl/certs/Philips-Hue-root-bridge.pem that points to the certificate. I copied the certificate from my bridge and that is verified by openssl verify bridge.pem.

Is there somewhere else I should be installing the root-bridge certificate?

Do I need to configure a certificate path or file in Hue Entertainment PyKit?

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.