Packages
grizzly
0.6.3
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_setback.ex
defmodule Grizzly.CommandClass.ThermostatSetback do
@moduledoc """
Module for generating the thermostat setback command
"""
require Logger
@typedoc """
Type for the different setback types.
"""
@type setback_type :: :no_override | :temporary_override | :permanent_override
@type setback_state :: :frost_protection | :energy_saving_mode | integer
@spec encode_setback_type(setback_type) :: {:ok, byte} | {:error, :invalid_arg, any()}
def encode_setback_type(:no_override), do: {:ok, 0x00}
def encode_setback_type(:temporary_override), do: {:ok, 0x01}
def encode_setback_type(:permanent_override), do: {:ok, 0x02}
def encode_setback_type(byte) when byte in 0..2, do: {:ok, byte}
def encode_setback_type(other), do: {:error, :invalid_arg, other}
@spec decode_setback_type(byte) :: setback_type
def decode_setback_type(0x00), do: :no_override
def decode_setback_type(0x01), do: :temporary_override
def decode_setback_type(0x02), do: :permanent_override
def decode_setback_type(byte), do: byte
@spec encode_setback_state(setback_state) :: {:ok, byte} | {:error, :invalid_arg, any()}
def encode_setback_state(:frost_protection), do: {:ok, 0x79}
def encode_setback_state(:energy_saving_mode), do: {:ok, 0x7A}
def encode_setback_state(state) when state in 0x7B..0x7E, do: {:error, :invalid_arg, state}
def encode_setback_state(0x7F), do: {:error, :invalid_arg, 0x7F}
def encode_setback_state(state) do
<<num>> = <<state::8-integer-signed>>
{:ok, num}
end
@spec decode_setback_state(byte) :: setback_state
def decode_setback_state(0x79), do: :frost_protection
def decode_setback_state(0x7A), do: :energy_saving_mode
def decode_setback_state(val) when val not in 0x7B..0x7F do
<<state::8-integer-signed>> = <<val>>
state
end
def decode_setback_state(byte) do
_ = Logger.warn("Unused or reserved setback state: #{byte}: Decoding to 0x00")
0x00
end
end