Packages
grizzly
0.4.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/schedule_entry_lock.ex
defmodule Grizzly.CommandClass.ScheduleEntryLock do
@type enabled_value :: :enabled | :disabled
@type enable_action :: :enable | :disable
@type enabled_value_byte :: 0x00 | 0x01
@type supported_report :: %{
week_day_slots: non_neg_integer,
year_day_slots: non_neg_integer,
daily_repeating: non_neg_integer
}
@type weekday :: :monday | :tuesday | :wednesday | :thursday | :friday | :saturday | :sunday
@type weekdays :: [weekday]
@type daily_repeating_report :: %{
user_id: non_neg_integer,
slot_id: non_neg_integer,
week_days: weekdays(),
start_hour: non_neg_integer,
start_minute: non_neg_integer,
duration_hour: non_neg_integer,
duration_minute: non_neg_integer
}
@type year_day_report :: %{
user_id: non_neg_integer,
slot_id: non_neg_integer,
start_year: non_neg_integer,
start_month: non_neg_integer,
start_day: non_neg_integer,
start_hour: non_neg_integer,
start_minute: non_neg_integer,
stop_year: non_neg_integer,
stop_month: non_neg_integer,
stop_day: non_neg_integer,
stop_hour: non_neg_integer,
stop_minute: non_neg_integer
}
@spec encode_enabled_value(enabled_value) :: enabled_value_byte
def encode_enabled_value(:enabled), do: 0x01
def encode_enabled_value(:disabled), do: 0x00
@spec encode_enable_action(enable_action) :: enabled_value_byte
def encode_enable_action(:enable), do: 0x01
def encode_enable_action(:disable), do: 0x00
@spec encode_weekdays(weekdays()) :: binary()
def encode_weekdays(weekdays) do
days = [:saturday, :friday, :thursday, :wednesday, :tuesday, :monday, :sunday]
bits =
Enum.reduce(
days,
%{},
fn day, acc ->
if day in weekdays do
Map.put(acc, day, 1)
else
Map.put(acc, day, 0)
end
end
)
<<
0::size(1),
Map.get(bits, :saturday)::size(1),
Map.get(bits, :friday)::size(1),
Map.get(bits, :thursday)::size(1),
Map.get(bits, :wednesday)::size(1),
Map.get(bits, :tuesday)::size(1),
Map.get(bits, :monday)::size(1),
Map.get(bits, :sunday)::size(1)
>>
end
@spec decode_weekdays(byte) :: weekdays()
def decode_weekdays(mask) do
<<
_reserved::size(1),
sat::size(1),
fri::size(1),
thu::size(1),
wed::size(1),
tue::size(1),
mon::size(1),
sun::size(1)
>> = <<mask::size(8)>>
bits = [sat, fri, thu, wed, tue, mon, sun]
days = [:saturday, :friday, :thursday, :wednesday, :tuesday, :monday, :sunday]
Enum.zip(days, bits)
|> Enum.reduce([], fn {day, bit}, acc -> if bit == 1, do: [day | acc], else: acc end)
end
@spec decode_year(non_neg_integer) :: non_neg_integer
@doc "Given the last two digits of a year, return the year"
def decode_year(decade) when decade in 0..99 do
2000 + decade
end
def decode_year(_decade) do
0
end
@spec encode_year(non_neg_integer) :: non_neg_integer
@doc "Given a year, return the last two digits of it"
def encode_year(year) when year in 2000..2099 do
year - 2000
end
def encode_year(_year) do
0
end
end