Awesome Open Source
Awesome Open Source



Houseflow is open source home automation system, it lets you configure various accessories like lights, switches, gates, sensors, and much more.


  • [x] Fast, written in high-performance languague, Rust.
  • [x] Fully configurable and fully reproducable from config files.

Supported accessories

Supported clients


Hub configuration

Hub must be configured, by default it's placed in $XDG_CONFIG_HOME/houseflow/hub.toml.

Example configuration

# Houseflow hub configuration

# UUID of the Hub, generate using `uuidgen` command
id = "00000000-0000-0000-0000-000000000000"

# Uncomment to allow outside network accesss
# [network]
# address = ""

id = "1c59f25a-a5b4-4248-810f-01422cee16b0"
name = "super termometr"
room-name = "Bedroom"
manufacturer = "xiaomi-mijia"
model = "hygro-thermometer"
mac-address = "A4:C1:38:EF:77:51"


pin = "11122333"
name = "ExampleHub"



Controllers control the accessories from the outside.

HomeKit Accessory Protocol

Allows you to integrate Apple Home app with Houseflow Hub.

Example configuration:

# The `Pin` struct represents the server's 8 digit pin used for pairing.
# The pin consists of eight digits between 0 and 9 and defaults to `11122333`.
# The following pins are considered too easy and are therefore not allowed:
# - `00000000`
# - `11111111`
# - `22222222`
# - `33333333`
# - `44444444`
# - `55555555`
# - `66666666`
# - `77777777`
# - `88888888`
# - `99999999`
# - `12345678`
# - `87654321`
pin = "11122333"
# Name of the Hub. The name will be visible in the Apple Home app
name = "ExampleHub"

To clear caches, remove ~/.local/share/houseflow/hap/ folder.


Provides HTTP API for Houseflow Hub communication. Check Meta HTTP API Scheme for more details.

Remember to add /controllers/meta/ in the URL Path before. For example

GET houseflow_hub.local:5001/controller/meta/characteristic/00000000-0000-0000-0000-000000000000/temperature-sensor/current-temperature

Example configuration:



Providers provide accessories for the hub.


Allows Xiaomi Mijia devices to connect

Example configuration:


Meta HTTP API Scheme

Read characteristic


GET /characteristic/:accessory-id/:service-name/:characteristic-name


    "name": :characteristc_name
    // ... values of the characteristic


Reading characteristic with following params:

accessory-id: 00000000-0000-0000-0000-000000000000
service-name: temperature-sensor
characteristic-name: current-temperature
GET /characteristic/00000000-0000-0000-0000-000000000000/temperature-sensor/current-temperature

And if the accessory is connected, and implements the service with the characteristic, it should return

    "name": "current-temperature",
    "temperature": 21.89 // or whatever the current temperature is

Write characteristic


POST /characteristic/:accessory-id/:service-name
Content-Type: application/json
    "name": :characteristic-name,
    // ... values of the characteristic


If status is OK, then it returns empty body, otherwise it returns error message in JSON format.


Reading characteristic with following params:

accessory-id: 00000000-0000-0000-0000-000000000000
service-name: garage-door-opener target-door-state 80
POST /characteristic/00000000-0000-0000-0000-000000000000/garage-door-opener
    "name": "target-door-state",
    "open-percent": 80 // or whatever the current temperature is


Contributors are very welcome! No contribution is too small and all contributions are valued.

Getting help

Get in touch with me on Discord gbaranski#5119, or via email [email protected].

Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Rust (57,337
Raspberry Pi (22,304
Firebase (21,013
Iot (11,908
Mqtt (7,886
Uuid (3,117
Ble (2,945
Firestore (2,846
Home Automation (2,211
Smarthome (1,591