Packages
grizzly
5.2.4
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/switch_binary.ex
defmodule Grizzly.SwitchBinary do
@moduledoc """
Commands for working with devices that support the Switch Binary command class
"""
alias Grizzly.ZWave
alias Grizzly.ZWave.Command
alias Grizzly.ZWave.Commands.SwitchBinaryReport
@typedoc """
Optional parameters used when setting the switch state
- `:duration` - the duration that the transition from current state to target
state should take (version 2).
"""
@type set_opt() :: {:duration, non_neg_integer()}
@typedoc """
The value the switch's state can be set to
"""
@type set_value() :: :on | :off
@typedoc """
The report received after requesting the state fo the switch using the
`get/1` function.
"""
@type report() :: %{
target_value: SwitchBinaryReport.value(),
current_value: SwitchBinaryReport.value() | nil,
duration: byte() | nil,
version: 1 | 2
}
@doc """
Request the current state of the switch
This command will return a `report()` in response.
"""
@spec get(ZWave.node_id(), [Grizzly.command_opt()]) ::
{:ok, report()}
| {:queued, reference(), non_neg_integer()}
| {:error, :timeout | :including | :updating_firmware | :nack_response | any()}
def get(node_id, command_opts \\ []) do
case Grizzly.send_command_no_warn(node_id, :switch_binary_get, [], command_opts) do
{:ok, %{type: :command} = report} ->
target_value = Command.param!(report.command, :target_value)
duration = Command.param(report.command, :duration)
current_value = Command.param(report.command, :current_value)
version = if duration, do: 2, else: 1
report = %{
current_value: current_value,
duration: duration,
target_value: target_value,
version: version
}
{:ok, report}
{:ok, %{type: :queued_delay} = report} ->
{:queued, report.command_ref, report.queued_delay}
{:ok, %{type: :timeout}} ->
{:error, :timeout}
{:error, _reason} = error ->
error
end
end
@doc """
Set the target value of the binary switch
Devices that support version 2 of the switch binary command class and
optionally be passed a duration that specifies the duration of the
transition from the current value to the target value.
"""
@spec set(ZWave.node_id(), set_value(), [set_opt() | Grizzly.command_opt()]) ::
:ok
| {:queued, reference(), non_neg_integer()}
| {:error, :timeout | :including | :updating_firmware | :nack_response | any()}
def set(node_id, target_value, opts \\ []) do
duration = Keyword.get(opts, :duration)
send_opts = Keyword.drop(opts, [:duration])
case Grizzly.send_command_no_warn(
node_id,
:switch_binary_set,
[target_value: target_value, duration: duration],
send_opts
) do
{:ok, %{type: :ack_response}} ->
:ok
{:ok, %{type: :queued_delay} = report} ->
{:queued, report.command_ref, report.queued_delay}
{:ok, %{type: :timeout}} ->
{:error, :timeout}
{:error, _reason} = error ->
error
end
end
end