Home
Softono

Houseflow

Open source Rust
189
Stars
17
Forks
26
Issues
6
Watchers
3 years
Last Commit

 About Houseflow

Home automation platform made in Rust 🦀.

Platforms

Web Self-hosted

Languages

Rust

Links

Need Help Installing Houseflow?

We provide expert installation service for this software. Our team will install, configure, and secure Houseflow on your server. plans start at just $30.

Houseflow

lines-of-code

Houseflow is an open-source home automation system supporting various accessories like lights, switches, gates, sensors, and much more.

Features

  • Fast, written in high-performance languague, Rust.
  • Configurable and reproducable using config files.

Supported accessories

Supported clients

Architecture

Hub configuration

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

Example configuration

# Houseflow hub configuration

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

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

[[accessories]]
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"

[providers.mijia]

[controllers.hap]
pin = "11122333"
name = "ExampleHub"

[controllers.meta]

Controllers

Controllers control the accessories from the outside.

HomeKit Accessory Protocol

Allows you to integrate Apple Home app with Houseflow Hub.

Example configuration:

[controllers.hap]
# 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.

Meta HTTP API

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:

[controllers.metea]

Providers

Providers provide accessories for the hub.

Mijia

Allows Xiaomi Mijia devices to connect

Example configuration:

[providers.mijia]

Meta HTTP API Scheme

Read characteristic

Request

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

Response

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

Example

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

Request

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

Response

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

Example

Reading characteristic with following params:

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

Contributing

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].