From 28e4972dee44c45534f570ce384477b04d7b7330 Mon Sep 17 00:00:00 2001 From: Kevin Schweikert Date: Wed, 19 Nov 2025 20:39:41 +0100 Subject: [PATCH] feat: add homex entities --- lib/homex.ex | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ mix.exs | 3 ++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 lib/homex.ex diff --git a/lib/homex.ex b/lib/homex.ex new file mode 100644 index 0000000..ddac3b0 --- /dev/null +++ b/lib/homex.ex @@ -0,0 +1,63 @@ +if Code.ensure_loaded?(Homex) do + defmodule Soleil.Homex.BatteryCharge do + use Homex.Entity.Sensor, + name: "soleil battery charge", + device_class: "battery", + unit_of_measurement: "%" + + def handle_timer(entity) do + battery_info = Soleil.battery_info() + entity |> set_value(battery_info.state_of_charge) + end + end + + defmodule Soleil.Homex.BatteryVoltage do + use Homex.Entity.Sensor, + name: "soleil battery voltage", + device_class: "voltage", + unit_of_measurement: "V" + + def handle_timer(entity) do + battery_info = Soleil.battery_info() + entity |> set_value(battery_info.voltage) + end + end + + defmodule Soleil.Homex.BatteryCurrent do + use Homex.Entity.Sensor, + name: "soleil battery current", + device_class: "current", + unit_of_measurement: "A" + + def handle_timer(entity) do + battery_info = Soleil.battery_info() + entity |> set_value(battery_info.current) + end + end + + defmodule Soleil.Homex.BatteryTemperature do + use Homex.Entity.Sensor, + name: "soleil battery temperature", + device_class: "temperature", + unit_of_measurement: "°C" + + def handle_timer(entity) do + battery_info = Soleil.battery_info() + entity |> set_value(battery_info.temperature) + end + end + + defmodule Soleil.Homex.Power do + use Homex.Entity.Switch, + name: "soleil power off" + + def handle_init(entity) do + entity |> set_on() + end + + def handle_off(entity) do + Soleil.power_off() + entity + end + end +end diff --git a/mix.exs b/mix.exs index 73f7edd..b1192dd 100644 --- a/mix.exs +++ b/mix.exs @@ -38,7 +38,8 @@ defmodule Soleil.MixProject do {:nerves_time, "~> 0.4.0"}, {:nerves_hub_link, "~> 2.7", optional: true}, {:dialyxir, "~> 1.4", only: :dev, runtime: false}, - {:ex_doc, "~> 0.34", only: :dev, runtime: false} + {:ex_doc, "~> 0.34", only: :dev, runtime: false}, + {:homex, "~> 0.1", optional: true} ] end