ansible4ozw 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/lib/ansible.rb +47 -0
  2. data/lib/ansible/ansible_callback.rb +142 -0
  3. data/lib/ansible/ansible_device.rb +68 -0
  4. data/lib/ansible/ansible_value.rb +179 -0
  5. data/lib/ansible/config.rb +92 -0
  6. data/lib/ansible/devices/ansible_dimmer.rb +80 -0
  7. data/lib/ansible/devices/ansible_switch.rb +66 -0
  8. data/lib/ansible/knx/EIBConnection.rb +2371 -0
  9. data/lib/ansible/knx/dpt/canonical_1bit.rb +54 -0
  10. data/lib/ansible/knx/dpt/dpt1.rb +224 -0
  11. data/lib/ansible/knx/dpt/dpt10.rb +85 -0
  12. data/lib/ansible/knx/dpt/dpt11.rb +72 -0
  13. data/lib/ansible/knx/dpt/dpt12.rb +61 -0
  14. data/lib/ansible/knx/dpt/dpt13.rb +100 -0
  15. data/lib/ansible/knx/dpt/dpt14.rb +87 -0
  16. data/lib/ansible/knx/dpt/dpt15.rb +72 -0
  17. data/lib/ansible/knx/dpt/dpt16.rb +67 -0
  18. data/lib/ansible/knx/dpt/dpt17.rb +65 -0
  19. data/lib/ansible/knx/dpt/dpt18.rb +66 -0
  20. data/lib/ansible/knx/dpt/dpt19.rb +100 -0
  21. data/lib/ansible/knx/dpt/dpt2.rb +156 -0
  22. data/lib/ansible/knx/dpt/dpt3.rb +104 -0
  23. data/lib/ansible/knx/dpt/dpt4.rb +75 -0
  24. data/lib/ansible/knx/dpt/dpt5.rb +124 -0
  25. data/lib/ansible/knx/dpt/dpt6.rb +73 -0
  26. data/lib/ansible/knx/dpt/dpt7.rb +146 -0
  27. data/lib/ansible/knx/dpt/dpt8.rb +118 -0
  28. data/lib/ansible/knx/dpt/dpt9.rb +204 -0
  29. data/lib/ansible/knx/dpt/tests/test_dpt10.rb +45 -0
  30. data/lib/ansible/knx/dpt/tests/test_dpt9.rb +60 -0
  31. data/lib/ansible/knx/hexdump.rb +113 -0
  32. data/lib/ansible/knx/knx_dpt.rb +58 -0
  33. data/lib/ansible/knx/knx_dpt_scalar.rb +62 -0
  34. data/lib/ansible/knx/knx_eistypes.rb +76 -0
  35. data/lib/ansible/knx/knx_protocol.rb +99 -0
  36. data/lib/ansible/knx/knx_scene.rb +48 -0
  37. data/lib/ansible/knx/knx_tools.rb +76 -0
  38. data/lib/ansible/knx/knx_transceiver.rb +237 -0
  39. data/lib/ansible/knx/knx_value.rb +327 -0
  40. data/lib/ansible/openzwave/ozw_constants.rb +11 -0
  41. data/lib/ansible/openzwave/ozw_headers.rb +80 -0
  42. data/lib/ansible/openzwave/ozw_remote_manager.rb +7615 -0
  43. data/lib/ansible/openzwave/ozw_types.rb +406 -0
  44. data/lib/ansible/orbiter_proxy.rb +12 -0
  45. data/lib/ansible/transceiver.rb +63 -0
  46. data/lib/ansible/zwave/types/valuetype_bool.rb +74 -0
  47. data/lib/ansible/zwave/types/valuetype_button.rb +63 -0
  48. data/lib/ansible/zwave/types/valuetype_byte.rb +78 -0
  49. data/lib/ansible/zwave/types/valuetype_decimal.rb +64 -0
  50. data/lib/ansible/zwave/types/valuetype_int.rb +63 -0
  51. data/lib/ansible/zwave/types/valuetype_list.rb +64 -0
  52. data/lib/ansible/zwave/types/valuetype_short.rb +63 -0
  53. data/lib/ansible/zwave/types/valuetype_string.rb +61 -0
  54. data/lib/ansible/zwave/zwave_command_classes.rb +113 -0
  55. data/lib/ansible/zwave/zwave_node.rb +5 -0
  56. data/lib/ansible/zwave/zwave_protocol.rb +52 -0
  57. data/lib/ansible/zwave/zwave_transceiver.rb +435 -0
  58. data/lib/ansible/zwave/zwave_value.rb +193 -0
  59. metadata +108 -0
@@ -0,0 +1,100 @@
1
+ =begin
2
+ Project Ansible - An extensible home automation scripting framework
3
+ ----------------------------------------------------
4
+ Copyright (c) 2011 Elias Karakoulakis <elias.karakoulakis@gmail.com>
5
+
6
+ SOFTWARE NOTICE AND LICENSE
7
+
8
+ Project Ansible is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU Lesser General Public License as published
10
+ by the Free Software Foundation, either version 3 of the License,
11
+ or (at your option) any later version.
12
+
13
+ Project Ansible is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General Public License
19
+ along with Project Ansible. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ for more information on the LGPL, see:
22
+ http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
23
+ =end
24
+
25
+ module Ansible
26
+
27
+ module KNX
28
+
29
+ #
30
+ # DPT19: 8-byte Date and Time
31
+ #
32
+ module DPT19
33
+
34
+ class DPT19_Frame < DPTFrame
35
+ # byte 8 (MSB)
36
+ uint8 :year, {
37
+ :display_name => "Year"
38
+ }
39
+ # byte 7
40
+ bit4 :pad7
41
+ bit4 :month, {
42
+ :display_name => "Month"
43
+ }
44
+ # byte 6
45
+ bit3 :pad6
46
+ bit5 :dayofmonth, {
47
+ :display_name => "Day of month"
48
+ }
49
+ # byte 5
50
+ bit3 :dayofweek, {
51
+ :display_name => "Day of week"
52
+ }
53
+ bit5 :hourofday, {
54
+ :display_name => "Hour of day"
55
+ }
56
+ # byte 4
57
+ bit2 :pad4
58
+ bit6 :minutes, {
59
+ :display_name => "Minutes"
60
+ }
61
+ # byte 3
62
+ bit2 :pad3
63
+ bit6 :seconds, {
64
+ :display_name => "Seconds"
65
+ }
66
+ # byte 2
67
+ bit1 :flag_F #
68
+ bit1 :flag_WD #
69
+ bit1 :flag_NWD # no week day
70
+ bit1 :flag_NY # no year
71
+ bit1 :flag_ND # no day
72
+ bit1 :flag_NDOW # no day of week
73
+ bit1 :flag_NT # no time
74
+ bit1 :flag_SUTI # summertime
75
+ # byte 1
76
+ bit1 :flag_CLQ #clock accuracy
77
+ bit7 :pad1
78
+ end
79
+
80
+ # DPT18 basetype info
81
+ Basetype = {
82
+ :bitlength => 8,
83
+ :valuetype => :composite,
84
+ :desc => "8-bit Scene Activate/Learn + number"
85
+ }
86
+
87
+ # DPT9 subtypes
88
+ Subtypes = {
89
+ # 9.001 temperature (oC)
90
+ "001" => {
91
+ :name => "DPT_SceneControl", :desc => "scene control"
92
+ },
93
+ }
94
+
95
+ end
96
+
97
+ end
98
+
99
+ end
100
+
@@ -0,0 +1,156 @@
1
+ =begin
2
+ Project Ansible - An extensible home automation scripting framework
3
+ ----------------------------------------------------
4
+ Copyright (c) 2011 Elias Karakoulakis <elias.karakoulakis@gmail.com>
5
+
6
+ SOFTWARE NOTICE AND LICENSE
7
+
8
+ Project Ansible is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU Lesser General Public License as published
10
+ by the Free Software Foundation, either version 3 of the License,
11
+ or (at your option) any later version.
12
+
13
+ Project Ansible is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General Public License
19
+ along with Project Ansible. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ for more information on the LGPL, see:
22
+ http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
23
+ =end
24
+
25
+ require 'knx/dpt/canonical_1bit'
26
+
27
+ module Ansible
28
+
29
+ module KNX
30
+
31
+ #
32
+ # DPT2: 2-bit control value
33
+ #
34
+ module DPT2
35
+
36
+ # DPT2 frame description.
37
+ # Always 8-bit aligned.
38
+ class DPT2_Frame < DPTFrame
39
+ bit2 :apci_pad, {
40
+ :display_name => "APCI info (not useful)"
41
+ }
42
+ bit4 :pad1
43
+ bit1 :priority, {
44
+ :display_name => "0=No Control 1=Priority"
45
+ }
46
+ bit1 :data, :display_name => "Value"
47
+ end
48
+
49
+ include Canonical_1bit
50
+
51
+ # DPT basetype info hash
52
+ Basetype = {
53
+ :bitlength => 2,
54
+ :valuetype => :composite,
55
+ :desc => "1-bit value with priority"
56
+ }
57
+
58
+ # DPT subtypes info hash
59
+ Subtypes = {
60
+ # 2.001 switch control
61
+ "001" => { :use => "G",
62
+ :name => "DPT_Switch_Control",
63
+ :desc => "switch with priority",
64
+ :enc => { 0 => "Off", 1 => "On" }
65
+ },
66
+ # 2.002 boolean control
67
+ "002" => { :use => "G",
68
+ :name => "DPT_Bool_Control",
69
+ :desc => "boolean with priority",
70
+ :enc => { 0 => "false", 1 => "true" }
71
+ },
72
+ # 2.003 enable control
73
+ "003" => { :use => "FB",
74
+ :name => "DPT_Emable_Control",
75
+ :desc => "enable with priority",
76
+ :enc => { 0 => "Disabled", 1 => "Enabled" }
77
+ },
78
+
79
+ # 2.004 ramp control
80
+ "004" => { :use => "FB",
81
+ :name => "DPT_Ramp_Control",
82
+ :desc => "ramp with priority",
83
+ :enc => { 0 => "No ramp", 1 => "Ramp" }
84
+ },
85
+
86
+ # 2.005 alarm control
87
+ "005" => { :use => "FB",
88
+ :name => "DPT_Alarm_Control",
89
+ :desc => "alarm with priority",
90
+ :enc => { 0 => "No alarm", 1 => "Alarm" }
91
+ },
92
+
93
+ # 2.006 binary value control
94
+ "006" => { :use => "FB",
95
+ :name => "DPT_BinaryValue_Control",
96
+ :desc => "binary value with priority",
97
+ :enc => { 0 => "Off", 1 => "On" }
98
+ },
99
+
100
+ # 2.007 step control
101
+ "007" => { :use => "FB",
102
+ :name => "DPT_Step_Control",
103
+ :desc => "step with priority",
104
+ :enc => { 0 => "Off", 1 => "On" }
105
+ },
106
+
107
+ # 2.008 Direction1 control
108
+ "008" => { :use => "FB",
109
+ :name => "DPT_Direction1_Control",
110
+ :desc => "direction 1 with priority",
111
+ :enc => { 0 => "Off", 1 => "On" }
112
+ },
113
+
114
+ # 2.009 Direction2 control
115
+ "009" => { :use => "FB",
116
+ :name => "DPT_Direction2_Control",
117
+ :desc => "direction 2 with priority",
118
+ :enc => { 0 => "Off", 1 => "On" }
119
+ },
120
+
121
+ # 2.010 start control
122
+ "001" => { :use => "FB",
123
+ :name => "DPT_Start_Control",
124
+ :desc => "start with priority",
125
+ :enc => { 0..1 => "No control", 2 => "Off", 3 => "On" }
126
+ },
127
+
128
+ # 2.011 state control
129
+ "001" => { :use => "FB",
130
+ :name => "DPT_Switch_Control", :desc => "switch",
131
+ :enc => { 0..1 => "No control", 2 => "Off", 3 => "On" }
132
+ },
133
+
134
+ # 2.012 invert control
135
+ "001" => { :use => "FB",
136
+ :name => "DPT_Switch_Control", :desc => "switch",
137
+ :enc => { 0..1 => "No control", 2 => "Off", 3 => "On" }
138
+ }
139
+ }
140
+
141
+ end #class
142
+
143
+ end
144
+
145
+ end
146
+
147
+ =begin
148
+ puts KNX_DPT2.bit_length
149
+ puts KNX_DPT2.new([0x00].pack('c')).inspect #
150
+ puts KNX_DPT2.new([0x01].pack('c')).inspect #
151
+ puts KNX_DPT2.new([0x02].pack('c')).inspect #
152
+ puts KNX_DPT2.new([0x03].pack('c')).inspect #
153
+
154
+ puts [0x02].pack('c').inspect
155
+ =begin
156
+ =end
@@ -0,0 +1,104 @@
1
+ =begin
2
+ Project Ansible - An extensible home automation scripting framework
3
+ ----------------------------------------------------
4
+ Copyright (c) 2011 Elias Karakoulakis <elias.karakoulakis@gmail.com>
5
+
6
+ SOFTWARE NOTICE AND LICENSE
7
+
8
+ Project Ansible is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU Lesser General Public License as published
10
+ by the Free Software Foundation, either version 3 of the License,
11
+ or (at your option) any later version.
12
+
13
+ Project Ansible is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General Public License
19
+ along with Project Ansible. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ for more information on the LGPL, see:
22
+ http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
23
+ =end
24
+
25
+ module Ansible
26
+
27
+ module KNX
28
+
29
+ #
30
+ # DPT3.*: 4-bit dimming/blinds control
31
+ #
32
+ module DPT3
33
+
34
+ # Bitstruct to parse a DPT3 frame.
35
+ # Always 8-bit aligned.
36
+ class DPT3_Frame < DPTFrame
37
+ bit2 :apci_pad, :display_name => "APCI data"
38
+ bit2 :pad1
39
+ bit1 :decr_incr, :display_name => "Decrease(0) / Increase(1)"
40
+ bit3 :data, {
41
+ :display_name => "0=break, 1-7 = amount of intervals between 1..100%",
42
+ :enc => {
43
+ 0 => "break",
44
+ 1 => "ival=50%",
45
+ 2 => "ival=25%",
46
+ 3 => "ival=12,5%",
47
+ 4 => "ival=6,25%",
48
+ 5 => "ival=3,125%",
49
+ 6 => "ival=1,5625%",
50
+ 7 => "ival=0.78125%"
51
+ }
52
+ }
53
+ end
54
+
55
+ Basetype = {
56
+ :bitlength => 4,
57
+ :valuetype => :composite,
58
+ :desc => "4-bit relative dimming control"
59
+ }
60
+
61
+ Subtypes = {
62
+ # 3.007 dimming control
63
+ "3.007" => {
64
+ :name => "DPT_Control_Dimming",
65
+ :desc => "dimming control"
66
+ },
67
+
68
+ # 3.008 blind control
69
+ "3.008" => {
70
+ :name => "DPT_Control_Blinds",
71
+ :desc => "blinds control"
72
+ }
73
+ }
74
+
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ =begin
82
+ 2.6.3.5 Behavior
83
+ Status
84
+ off dimming actuator switched off
85
+ on dimming actuator switched on, constant brightness, at least
86
+ minimal brightness dimming
87
+ dimming actuator switched on, moving from actual value in direction of
88
+ set value
89
+ Events
90
+ position = 0 off command
91
+ position = 1 on command
92
+ control = up dX command, dX more bright dimming
93
+ control = down dX command, dX less bright dimming
94
+ control = stop stop command
95
+ value = 0 dimming value = off
96
+ value = x% dimming value = x% (not zero)
97
+ value_reached actual value reached set value
98
+
99
+ The step size dX for up and down dimming may be 1/1, 1/2, 1/4, 1/8, 1/16, 1/32 and 1/64 of
100
+ the full dimming range (0 - FFh).
101
+
102
+ 3.007 dimming control
103
+ 3.008 blind control
104
+ =end
@@ -0,0 +1,75 @@
1
+ =begin
2
+ Project Ansible - An extensible home automation scripting framework
3
+ ----------------------------------------------------
4
+ Copyright (c) 2011 Elias Karakoulakis <elias.karakoulakis@gmail.com>
5
+
6
+ SOFTWARE NOTICE AND LICENSE
7
+
8
+ Project Ansible is free software: you can redistribute it and/or modify
9
+ it under the terms of the GNU Lesser General Public License as published
10
+ by the Free Software Foundation, either version 3 of the License,
11
+ or (at your option) any later version.
12
+
13
+ Project Ansible is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU Lesser General Public License for more details.
17
+
18
+ You should have received a copy of the GNU Lesser General Public License
19
+ along with Project Ansible. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+ for more information on the LGPL, see:
22
+ http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
23
+ =end
24
+
25
+ module Ansible
26
+
27
+ module KNX
28
+
29
+ #
30
+ # DPT4: 8-bit character
31
+ #
32
+ module DPT4
33
+
34
+ # Bitstruct to parse a DPT4 frame.
35
+ # Always 8-bit aligned.
36
+ class DPT4_Frame < DPTFrame
37
+ uint8 :data, :display_name => "Character"
38
+ end
39
+
40
+ Basetype = {
41
+ :bitlength => 8,
42
+ :valuetype => :basic,
43
+ :desc => "8-bit character"
44
+ }
45
+
46
+ Subtypes = {
47
+ # 4.001 character (ASCII)
48
+ "001" => {
49
+ :name => "DPT_Char_ASCII",
50
+ :desc => "ASCII character (0-127)",
51
+ :range => 0..127,
52
+ :use => "G",
53
+ },
54
+ # 4.002 character (ISO-8859-1)
55
+ "002" => {
56
+ :name => "DPT_Char_8859_1",
57
+ :desc => "ISO-8859-1 character (0..255)",
58
+ :use => "G",
59
+ }
60
+ }
61
+
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+ =begin
68
+ puts KNX_DPT2.bit_length
69
+ puts KNX_DPT2.new([0x00].pack('c')).inspect #
70
+ puts KNX_DPT2.new([0x01].pack('c')).inspect #
71
+ puts KNX_DPT2.new([0x02].pack('c')).inspect #
72
+ puts KNX_DPT2.new([0x03].pack('c')).inspect #
73
+
74
+ puts [0x02].pack('c').inspect
75
+ =end
@@ -0,0 +1,124 @@
1
+ # encoding: ISO-8859-1
2
+
3
+ =begin
4
+ Project Ansible - An extensible home automation scripting framework
5
+ ----------------------------------------------------
6
+ Copyright (c) 2011 Elias Karakoulakis <elias.karakoulakis@gmail.com>
7
+
8
+ SOFTWARE NOTICE AND LICENSE
9
+
10
+ Project Ansible is free software: you can redistribute it and/or modify
11
+ it under the terms of the GNU Lesser General Public License as published
12
+ by the Free Software Foundation, either version 3 of the License,
13
+ or (at your option) any later version.
14
+
15
+ Project Ansible is distributed in the hope that it will be useful,
16
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ GNU Lesser General Public License for more details.
19
+
20
+ You should have received a copy of the GNU Lesser General Public License
21
+ along with Project Ansible. If not, see <http://www.gnu.org/licenses/>.
22
+
23
+ for more information on the LGPL, see:
24
+ http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License
25
+ =end
26
+
27
+ require 'knx_dpt_scalar'
28
+
29
+ module Ansible
30
+
31
+ module KNX
32
+
33
+ #
34
+ # DPT5: 8-bit unsigned value
35
+ #
36
+ module DPT5
37
+
38
+ # DPT5 is the only (AFAIK) DPT with scalar datatypes (5.001 and 5.003)
39
+ include ScalarValue
40
+
41
+ # Bitstruct to parse a DPT5 frame.
42
+ # Always 8-bit aligned.
43
+ class DPT5_Frame < DPTFrame
44
+ uint8 :data, {
45
+ :display_name => "8-bit unsigned value",
46
+ }
47
+ end
48
+
49
+ # DPT base type
50
+ Basetype = {
51
+ :bitlength => 8,
52
+ :range => 0..255,
53
+ :valuetype => :basic,
54
+ :desc => "8-bit unsigned value"
55
+ }
56
+
57
+ # DPT subtypes
58
+ Subtypes = {
59
+ # 5.001 percentage (0=0..ff=100%)
60
+ "001" => {
61
+ :name => "DPT_Scaling", :desc => "percent",
62
+ :unit => "%", :scalar_range => 0..100
63
+ },
64
+
65
+ # 5.003 angle (degrees 0=0, ff=360)
66
+ "003" => {
67
+ :name => "DPT_Angle", :desc => "angle degrees",
68
+ :unit => "°", :scalar_range => 0..360
69
+ },
70
+
71
+ # 5.004 percentage (0..255%)
72
+ "004" => {
73
+ :name => "DPT_Percent_U8", :desc => "percent",
74
+ :unit => "%",
75
+ },
76
+
77
+ # 5.005 ratio (0..255)
78
+ "005" => {
79
+ :name => "DPT_DecimalFactor", :desc => "ratio",
80
+ :unit => "ratio",
81
+ },
82
+
83
+ # 5.006 tariff (0..255)
84
+ "006" => {
85
+ :name => "DPT_Tariff", :desc => "tariff",
86
+ :unit => "tariff",
87
+ },
88
+
89
+ # 5.010 counter pulses (0..255)
90
+ "010" => {
91
+ :name => "DPT_Value_1_Ucount", :desc => "counter pulses",
92
+ :unit => "pulses",
93
+ },
94
+ }
95
+
96
+ # DPT5 canonical values
97
+ # ---------------------
98
+ # use scalar conversion, if applicable
99
+ # otherwise just return the data value
100
+ def as_canonical_value()
101
+ return nil if current_value.nil?
102
+ # get and apply field's scalar range, if any (only in DPT5 afaik)
103
+ if (sr = getparam(:scalar_range) and range = getparam(:range)) then
104
+ return to_scalar(current_value.data.value, range, sr)
105
+ else
106
+ return current_value.data.value
107
+ end
108
+ end
109
+
110
+ #
111
+ #
112
+ def to_protocol_value(v)
113
+ if (sr = getparam(:scalar_range) and range = getparam(:range)) then
114
+ return from_scalar(v, range, sr)
115
+ else
116
+ return v
117
+ end
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+
124
+ end