Open source network attached universal remote; aiming to become a drop-in replacement for Logitech's discontinued Harmony Hub.
This software is in a very early stage of development and every update should be considered breaking!
Don't use this if you're looking for a stable piece of equipment that you can rely on!
The setup currently requires at least some basic understanding of the Linux terminal, python and GPIO hardware.
If you run into any issues, check the Troubleshooting section. If you think you found a bug, please create an issue here on GitHub.
- Record and send infrared commands
- Emulate a bluetooth keyboard to control devices like the Apple TV (WIP)
- Configurable scenes (activities) with user-definable start and stop macros
- Track device state to make scene switches only execute necessary commands (WIP)
- iOS app to control and manage the hub (Beta available in Testflight, source code)
- Works with the original Harmony companion remote
- Frontend for Android/Web (Beta available here)
- Expand support for physical remotes
- Home Assistant integration
- Philips Hue integration?
- Amazon Alexa integration?
- Improve set up guide
- Add some form of IR database
I've created a Wiki in this repo to cover the basic setup and usage of Equilibrium.
Equilibrium can also be run in Docker.
scripts/setup_host.sh sets up the host (Docker, SPI, IR overlays) and
creates a ready-to-use ~/Equilibrium/ directory for you:
curl -fsSL https://raw.githubusercontent.com/LeoKlaus/Equilibrium/main/scripts/setup_host.sh | bashOr, if you already have docker-compose.yml (e.g. from a clone):
docker compose up -dThe container runs privileged with host networking to reach the RF24
radio (SPI/GPIO), the IR blaster/receiver (/dev/lircX), Bluetooth
(D-Bus) and mDNS. Your database, uploaded images and other settings are
stored in ./config on the host and persist across container
recreation.
Log verbosity is set via the LOG_LEVEL environment variable in
docker-compose.yml (DEBUG, INFO, WARNING, ERROR or
CRITICAL).
The name Equilibrium advertises over mDNS/Bonjour is set via the
INSTANCE_NAME environment variable (defaults to Equilibrium).
If you run more than one hub on the same network, each one has to have its own name.
If an error occurs, you should check the output from Equilibrium. If you have daemonized it, you can do so via journalctl.
In some cases, you may want to use the --verbose or --debug flags to get more verbose logs, though I don't recommend using either for longer times due to the number of log entries they create.

