Packages
grizzly
0.6.0
9.1.4
9.1.2
9.1.1
9.1.0
9.0.0
8.15.3
8.15.2
8.15.1
8.15.0
8.14.0
8.13.0
8.12.0
8.11.3
8.11.2
8.11.1
8.11.0
8.10.0
8.9.0
8.8.1
8.8.0
8.7.1
8.7.0
8.6.12
8.6.11
8.6.10
8.6.9
8.6.8
8.6.7
retired
8.6.6
8.6.5
8.6.4
8.6.3
8.6.2
8.6.1
8.6.0
8.5.3
8.5.2
8.5.1
8.5.0
8.4.0
8.3.0
8.2.3
8.2.2
8.2.1
8.2.0
8.1.0
8.0.1
8.0.0
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.0
7.1.4
7.1.3
7.1.2
7.1.1
7.1.0
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.8.8
6.8.7
6.8.6
6.8.5
6.8.4
6.8.3
6.8.2
6.8.1
6.8.0
6.7.1
6.7.0
6.6.1
6.6.0
6.5.1
6.5.0
6.4.0
6.3.0
6.2.0
6.1.1
6.1.0
6.0.1
6.0.0
5.4.1
5.4.0
5.3.0
5.2.8
5.2.7
5.2.6
5.2.5
5.2.4
5.2.3
5.2.2
5.2.1
5.2.0
5.1.2
5.1.1
5.1.0
5.0.2
5.0.1
5.0.0
4.0.1
4.0.0
3.0.0
2.1.0
2.0.0
1.0.1
1.0.0
0.22.7
0.22.6
0.22.5
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.7
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.9.0-rc.4
0.9.0-rc.3
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
Elixir Z-Wave library
Current section
Files
Jump to
Current section
Files
lib/grizzly/command_class/thermostat_setpoint.ex
defmodule Grizzly.CommandClass.ThermostatSetpoint do
@moduledoc """
Module for generating the thermostat setpoint command
"""
import Bitwise
@typedoc """
Type for the different setpoint types.
Possible to send raw byte for a different setpoint type if
needed. Otherwise, `:cooling` and `:heating` atoms are the
explicitly supported setpoint types.
"""
@type setpoint_type ::
:cooling
| :heating
| :furnace
| :dry_air
| :moist_air
| :auto_changeover
| :energy_save_heating
| :energy_save_cooling
| :away_heating
| :away_cooling
| :full_power
| byte
@type setpoint_value :: non_neg_integer
@spec encode_opts(opts :: keyword) :: {:ok, byte} | {:error, :invalid_arg, any()}
def encode_opts(opts) do
if Enum.all?(Keyword.values(opts), &(&1 in 0..255)) do
encoded =
opts
|> Enum.reduce(0, fn {_, byte}, mask -> mask ||| byte end)
{:ok, encoded}
else
{:error, :invalid_arg, opts}
end
end
@spec encode_setpoint_type(setpoint_type) :: {:ok, byte} | {:error, :invalid_arg, any()}
def encode_setpoint_type(:heating), do: {:ok, 0x01}
def encode_setpoint_type(:cooling), do: {:ok, 0x02}
def encode_setpoint_type(:furnace), do: {:ok, 0x07}
def encode_setpoint_type(:dry_air), do: {:ok, 0x08}
def encode_setpoint_type(:moist_air), do: {:ok, 0x09}
def encode_setpoint_type(:auto_changeover), do: {:ok, 0x0A}
def encode_setpoint_type(:energy_save_heating), do: {:ok, 0x0B}
def encode_setpoint_type(:energy_save_cooling), do: {:ok, 0x0C}
def encode_setpoint_type(:away_heating), do: {:ok, 0x0D}
def encode_setpoint_type(:away_cooling), do: {:ok, 0x0E}
def encode_setpoint_type(:full_power), do: {:ok, 0x0F}
def encode_setpoint_type(0x00), do: {:error, :invalid_arg, 0x00}
def encode_setpoint_type(byte) when byte in 0x03..0x06, do: {:error, :invalid_arg, byte}
def encode_setpoint_type(byte), do: byte
@spec decode_setpoint_type(byte) :: setpoint_type
def decode_setpoint_type(0x01), do: :heating
def decode_setpoint_type(0x02), do: :cooling
def decode_setpoint_type(0x07), do: :furnace
def decode_setpoint_type(0x08), do: :dry_air
def decode_setpoint_type(0x09), do: :moist_air
def decode_setpoint_type(0x0A), do: :auto_changeover
def decode_setpoint_type(0x0B), do: :energy_save_heating
def decode_setpoint_type(0x0C), do: :energy_save_cooling
def decode_setpoint_type(0x0D), do: :away_heating
def decode_setpoint_type(0x0E), do: :away_cooling
def decode_setpoint_type(0x0F), do: :full_power
def decode_setpoint_type(byte), do: byte
end