Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Homex

example.livemd

Homex

Mix.install([
  {:homex, path: __DIR__},
  ], config: [
  homex: [
    entities: [MySwitch, MyTemperature, MyHumidity, MyLight]
  ]
])

Homex

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

defmodule MyTemperature do
  use Homex.Entity.Sensor,
    name: "my-temperature",
    unit_of_measurement: "°C",
    device_class: "temperature"

  def handle_timer(entity) do
    entity |> set_value(Enum.random(-40..40//1))
  end

end

defmodule MyHumidity do
  use Homex.Entity.Sensor,
    name: "my-humidiy",
    unit_of_measurement: "%",
    device_class: "humidity"

  def handle_timer(entity) do
    entity |> set_value(Enum.random(20..90//1))
  end
end

defmodule MyLight do
  use Homex.Entity.Light, name: "my-light", modes: [:brightness]

  def handle_init(entity) do
    entity |> set_on() |> set_brightness(50)
  end
  
  def handle_brightness(entity, brightness) do
    IO.puts("Light set to #{brightness}%")
    entity
  end
end
Logger.put_application_level(:emqtt, :info)
Logger.put_application_level(:homex, :info)
{:ok, pid} = Homex.start_link()