WIP A lightweight, customizable smart home management platform.
- ESPHome (using my library
esphomebridge-rs
) - MQTT (coming soon)
- Zones
- Devices
- Entities
Zones are a group of devices which are groups of entities.
Usually a device is its own connection. For example, you have an ESPHome Light - the connection to the light is a Device and it contains a few entities: a light bulb, a safe mode button, an uptime sensor, etc.
Igloo is centered around an powerful and intuitive command-line interface. I have chosen do it this was so there one standard way to interact with igloo, whether is from the API, front-end, or scripts.
Examples:
- List:
list devices kitchen
list users
list entities kitchen.sink
- Entity Control:
light all off
-> control all zoneslight kitchen off
-> control one zonelight kitchen.sink off
-> control one devicelight kicthen.sink.rgbct_bulb off
-> control a specific entitylight kitchen brightness 50
- View Logs:
logs system
logs device kitchen.sink
logs script example_script
- Scripts:
script run example_script
script cancel 40
-> cancel one script by IDscript cancel_all example_script
-> cancel all running versions of script
- And more! Note: see the code or CLI help menu for the most up-to-date documentation.
A big part of Igloo is the declarative configuration file.
The configuration uses ron
(Rust Object Notation) for its
clear syntax and flexibility. See example_config.ron
.
The configuration file declares:
- Users and User Groups
- Permissions (who can access what zones)
- Provider Configuration
- Devices and Zones
- UI Elements
- Scripts
Igloo has a very powerful scripting system. Small scripts can be written straight in the Ron configuration file, and more advanced scripts can be written in Rust as builtin scripts, or in Python as external scripts.
Scripts are ran through the CLI. They can target hard-coded devices/entities or take arguments.
Any scripting, regardless of language, has a bit of metadata:
auto_run
(default:false
) -> whether the script should be run at bootclaims
-> what entities the script controlsauto_cancel
(default:true
) -> whether the script should be cancelled if a command conflicts with its claims- for example, if this script claims
Light: ["kitchen.sink"]
and the user tries to turn that light off, should it cancel this script or reject their command
- for example, if this script claims
- Frontend: SolidJS (JS + SCSS)
- Backend: Axum (Rust)
- API endpoint at
/
which allows one-time login using the authorization header - Basic endpoints for front-end (files,
/login
, and/logout
)- Auth tokens are saved in cookies and
tokens.sqlite
and last 30 days
- Auth tokens are saved in cookies and
- Websocket
/ws
for the front-end which allows for syncing state and sending commands
- API endpoint at
This project is currently in Alpha and has no releases. Future releases will contain all necessary files (including pre built binaries).
- Clone repository
- Build for target platform
- Copy binary,
example_config.ron
, andweb/dist
to computer - Run the binary or create a systemd file