Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

109 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Homex

CI License Version Hex Docs

This library aims to bring Elixir (and especially Nerves) closer to Home Assistant. This is a work in progress based on the initial idea.

Warning

Homex is being refactored towards a multi-adapter and multi-device architecture. The public API and Home Assistant compatibility will change: entity unique_ids change once (existing entities in Home Assistant will be re-created). Pin your version to 0.1.2 if you depend on the current behavior.

Example

There is a Livebook example example.livemd to get you started! There is also an example repository using Nerves at https://github.com/kevinschweikert/Homex-Nerves-Example

Installation

If available in Hex, the package can be installed by adding homex to your list of dependencies in mix.exs:

def deps do
  [
    {:homex, "~> 0.1.1"},
    # If you want to use the MQTT library without QUIC support add
    # {:emqtt, github: "emqx/emqtt.git", tag: "1.14.7", override: true, system_env: [{"BUILD_WITHOUT_QUIC", "1"}]}  ]
end

Usage

Supported entity types:

  • Sensor
  • Switch
  • Light
  • Camera
  • Button
  • DeviceTrigger

Define a module for the type of entity you want to use

defmodule MySwitch do
  use Homex.Entity.Switch, name: "my-switch"

  def handle_on(entity) do
    IO.puts("Switch turned on")
    entity
  end

  def handle_off(entity) do
    IO.puts("Switch turned off")
    entity
  end
end

Configure broker and entities. See Homex.Config module docs for options. Entities can also be added/removed at runtime with Homex.add_entity/1 or Homex.remove_entity/1.

import Config

config :homex,
  broker: [host: "localhost", port: 1883, username: "admin", password: "admin"],
  entities: [MySwitch]

Add homex to you supervision tree

defmodule MyApp.Application do

  def start(_type, _args) do
    children =
      [
        ...,
        Homex,
        ...
      ]

    opts = [strategy: :one_for_one, name: MyApp.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

Contribution

PRs and Feedback are very welcome!

Acknowledgements and Inspiration

About

A bridge between Elixir and Home Assistant

Topics

Resources

Stars

54 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages