ansible4ozw 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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