4ch1m / pixoo-rest

A RESTful API to easily interact with the Wi-Fi enabled Divoom Pixoo devices.
MIT License
242 stars 17 forks source link
container divoom docker pixoo pixoo64 python rest swagger

Pixoo REST

A RESTful API to easily interact with the Wi-Fi enabled Divoom Pixoo devices.


:information_source: INFORMATION

This project was created back in February 2022; aiming to provide a REST-like interface for the pixoo library.
With an update from August 2024, the library's creator decided to implement/integrate a dedicated REST-interface himself.

However, pixoo-rest still offers unique features like ...

So... I'll keep maintaining the project as long as there's enough interest.


Table of Contents

Introduction

The main purpose of this app is to provide an easy-to-use Swagger UI to interact with your Pixoo device.

Making it easier to ...

... from your own applications or home-automation tasks.

Pixoo REST makes use of the great Pixoo Python library by SomethingWithComputers; which offers various helpful features like automatic image conversion. :thumbsup:

However, it is also possible to simply pass through raw JSON-data to the Pixoo's built-in HTTP-API via this Swagger UI.
(The Swagger UI will provide handy example payloads (for easy editing) in this case.)

Disclaimer

This REST API is by no means a by-the-books reference on how proper REST APIs should be implemented; but simply a "convenience wrapper" for the aforementioned Pixoo library.

The actual HTTP API of the Pixoo device leaves a lot to be desired.
First and foremost proper/official documentation. :wink:
Most of the pass-through payload objects got discovered via reverse engineering, try-and-error, or this website: doc.divoom-gz.com.

:warning: Use at your own risk.

Changelog

A (more or less) detailed changelog can be found here: :open_book:

Getting started

Clone

Clone this repo ...

git clone https://github.com/4ch1m/pixoo-rest.git

... and change directory:

cd pixoo-rest

Configure

Create an .env-file alongside the app.py-file / docker-compose.yml-file and put your individual settings in it; like so:

# MANDATORY: the hostname of your Pixoo device; defaults to "Pixoo64" if omitted
PIXOO_HOST=192.168.178.11

# OPTIONAL: enable debug mode for the Pixoo-library; defaults to "false" if omitted
PIXOO_DEBUG=true

# OPTIONAL: the screen size of your Pixoo device (which gets passed to the Pixoo-library); defaults to "64" if omitted
PIXOO_SCREEN_SIZE=64

# OPTIONAL: enable (Flask) debug mode for the REST-app; defaults to "false" if omitted
PIXOO_REST_DEBUG=true

# OPTIONAL: the hostname to listen on; defaults to "127.0.0.1" if omitted
PIXOO_REST_HOST=0.0.0.0

# OPTIONAL: the port being used; defaults to "5000" if omitted
PIXOO_REST_PORT=5000

# OPTIONAL: the amount of retries that should be performed to connect to the Pixoo-device when starting the app; defaults to "infinity" when omitted
PIXOO_TEST_CONNECTION_RETRIES=10

# OPTIONAL: WSGI-conform way to configure a base-path/prefix-url (which may be needed when running behind a reverse proxy); NOTE -> this string must start with a slash!
# (CAUTION! Only set this if you really need it.)
SCRIPT_NAME=/pixoo-rest

Running

The app can now be run ...

or

Direct

Create a virtual environment and activate it (optional; but recommended):

python3 -m venv venv
. venv/bin/activate

Install all dependencies:

pip install -r requirements.txt

Finally, run the app:

python app.py

Containerized

Simply execute ...

docker compose up

... to automatically build the container and run it.

NEW :star:

If you don't want to build the container image yourself, you now can use the pre-built image from hub.docker.com.

Simply uncomment the image-attribute in docker-compose.yml, and comment out the build-attribute:

  app:
    image: 4ch1m/pixoo-rest:latest
    #build: .

There's also a Helm chart you can use for deployments to K8s.

Usage

Open http://localhost:5000 in a web browser and make some requests using the Swagger UI:

Screenshot

NOTE:
For every executed request you'll get a handy curl command-line (ideal for reuse in home-automation scripts).

Examples

A few example (shell-)scripts can be found here: :toolbox:

Credits

Example animation file (duck.gif) by kotnaszynce / OpenGameArt.

License

Please read the LICENSE file.