Code Monkey home page Code Monkey logo

houseflow's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.