GitPedia

Homex

A bridge between Elixir and Home Assistant

From kevinschweikert·Updated June 16, 2026·View on GitHub·

This library aims to bring Elixir (and especially Nerves) closer to Home Assistant. This is a work in progress based on the [initial idea](https://elixirforum.com/t/nerves-home-assistant-integration/70920). The project is written primarily in Elixir, distributed under the MIT License license, first published in 2025. Key topics include: elixir-lang, home-assistant, nerves, smarthome.

Latest release: v0.1.1
February 24, 2026View Changelog →

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.

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:

elixir
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

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

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

Add homex to you supervision tree

elixir
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

Contributors

Showing top 3 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from kevinschweikert/homex via the GitHub API.Last fetched: 6/28/2026