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
data/lib/ansible.rb ADDED
@@ -0,0 +1,47 @@
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
+ $:.push(File.join(Dir.getwd, 'lib/ansible'))
26
+ $:.push(File.join(Dir.getwd, 'lib/ansible/devices'))
27
+ $:.push(File.join(Dir.getwd, 'lib/ansible/knx'))
28
+ $:.push(File.join(Dir.getwd, 'lib/ansible/openzwave'))
29
+ $:.push(File.join(Dir.getwd, 'lib/ansible/zwave'))
30
+
31
+ require "rubygems"
32
+ require "bundler/setup"
33
+ require 'config'
34
+
35
+ require 'transceiver'
36
+ require 'zwave_transceiver'
37
+ require 'zwave_command_classes'
38
+
39
+ require 'knx_transceiver'
40
+ require 'knx_tools'
41
+ require 'knx_value'
42
+
43
+ require 'ansible_device'
44
+
45
+ include Ansible
46
+ include Ansible::ZWave
47
+ include Ansible::KNX
@@ -0,0 +1,142 @@
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 'weakref'
26
+
27
+ module Ansible
28
+
29
+ #
30
+ # Callback module for project Ansible
31
+ #
32
+ module AnsibleCallback
33
+
34
+
35
+ # callback declaration mechanism.
36
+ #
37
+ # ===Arguments:
38
+ # [event] a Symbol for the event (eg :onChange)
39
+ # A special case is :default , this callback gets called at all events.
40
+ # [target] a unique hashable target (so as to register a target-specific callback
41
+ # for an event) - you can pass any value, if it can be hashed.
42
+ # TODO: use WeakRef,so that the target can be reclaimed by Ruby's GC
43
+ # when its fixed on Ruby1.9 (http://bugs.ruby-lang.org/issues/4168)
44
+ # [cb_body] the Proc to call when a callback is fired.
45
+ #
46
+ # the callback Proc block always gets these arguments supplied:
47
+ # [obj] 1st argument to callback proc is the AnsibleValue instance
48
+ # which generated the callback
49
+ # [cb] 2nd argument is the callback symbol (eg :onChange)
50
+ # Very useful when declaring a default callback
51
+ # [*args] 3rd and later arguments: event-specific data
52
+ #
53
+ # examples:
54
+ # obj.add_callback(:onChange) { |o| puts "Object #{o} has changed!" }
55
+ # obj.add_callback(:onChange, 'SPECIAL') { |o| puts "Object #{o} has changed!" }
56
+ # obj.add_callback(:default) { |o, cb, *args| puts "Object #{o}: callback #{cb}!" }
57
+ def add_callback(event, target=nil, &cb_body)
58
+ raise "add_callback: last argument must be a Proc" unless cb_body.is_a?Proc
59
+ init_callbacks(event)
60
+ puts "#{self}: Registering #{event} callback" + (target.nil? ? '' : " especially for target #{target}")
61
+ if target.nil? then
62
+ @callbacks[event].default = cb_body
63
+ else
64
+ @callbacks[event][target] = cb_body
65
+ end
66
+ end
67
+
68
+ # remove a callback
69
+ #
70
+ # ===Arguments:
71
+ # [event] a Symbol for the event (eg :onChange)
72
+ # A special case is :default , this callback gets called at all events.
73
+ # [target] a unique hashable target - you can pass any value
74
+ #
75
+ # ===Examples:
76
+ # obj.remove_callback(:onUpdate)
77
+ def remove_callback(event, target=nil)
78
+ init_callbacks(event)
79
+ @callbacks[event].delete(target)
80
+ end
81
+
82
+ # callback firing processor.
83
+ #
84
+ # Checks if a proc is stored for a ginen event, then calls it
85
+ # with the object instance as its first argument, the callback symbol
86
+ # as its second arg, and all other *args appended to the call
87
+ #
88
+ # ===Arguments:
89
+ # [event] a Symbol for the event (eg :onChange)
90
+ # [target] the unique id of target (so as to fire target-specific callbacks for a specific event)
91
+ #
92
+ # ===Notes:
93
+ # 1) its prohibited to fire the DEFAULT callback programmatically (it will get fired
94
+ # anyway at ANY event)
95
+ # 2) if a target_id is given, then try to fire target-specific callbacks. If none is found,
96
+ # fall-back to the generic callback for this event
97
+ #
98
+ # ===Example:
99
+ # obj.fire_callback(:onChange, 'GROUPADDR', :arg1, :arg2, :arg3)
100
+ #
101
+ def fire_callback(event, target=nil, *args)
102
+ raise "cannot fire DEFAULT callback programmatically!" if event.to_s == "default"
103
+ #puts "fire_callback called by #{self}.#{event}, args: #{args.inspect}"
104
+ init_callbacks(event)
105
+ # array of callback Procs to get called
106
+ cb_procs = []
107
+ # first add callbacks for this specific event
108
+ if defined?(@callbacks) and @callbacks.is_a?Hash then
109
+ [@callbacks[event], @callbacks[:default]].each { |hsh|
110
+ if hsh.is_a?Hash then
111
+ puts "#{self}.fire_callback, event #{event}: about to fire: #{hsh.inspect}"
112
+ if target.nil? then
113
+ # add all targets to the list of procs to call
114
+ # including the default
115
+ cb_procs << [hsh.values, hsh.default].flatten
116
+ else
117
+ # only add target-specific procs to the list
118
+ cb_procs << hsh[target]
119
+ end
120
+ end
121
+ }
122
+ end
123
+ #puts cb_procs.inspect
124
+ # time to fire callbacks
125
+ cb_procs.flatten.compact.each { |cb_proc|
126
+ raise "ooops, found a #{cb_proc.class} stored as a callback!" unless cb_proc.is_a?Proc
127
+ puts "firing #{event} callback, args: #{args.inspect}"
128
+ cb_proc.call(self, event.to_s, *args)
129
+ }
130
+ end
131
+
132
+ private
133
+ # initialize callback hash for a given event
134
+ def init_callbacks(event)
135
+ md = caller[1].match(/`(\w*)'/); clr = md and md[1] or caller[1]
136
+ raise "#{clr}: no event Symbol supplied!" unless event.is_a?Symbol
137
+ @callbacks = {} unless defined?(@callbacks) and @callbacks.is_a?Hash
138
+ @callbacks[event] = {} unless @callbacks[event].is_a?Hash
139
+ end
140
+ end
141
+
142
+ end #module
@@ -0,0 +1,68 @@
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
+ # root class describing an Ansible Device, i.e. a device controlled
28
+ # at least by one automation protocol supported by Ansible
29
+ #
30
+ # ===Arguments:
31
+ # [hashmap]
32
+ # hash consisting of Symbol => AnsibleValue pairs e.g.
33
+ # {
34
+ # :onoff => KNXValue.new("1.001", "1/0/20")
35
+ # }
36
+ #
37
+ # ===Example:
38
+ # obj.fire_callback(:onChange, 'GROUPADDR', :arg1, :arg2, :arg3)
39
+ #
40
+ class Device
41
+
42
+ # initialize an Ansible Device
43
+ def initialize(hashmap)
44
+ # sanity check: check argument validity
45
+ args_valid = true
46
+ if hashmap.is_a?Hash then
47
+ hashmap.each { |k,v|
48
+ args_valid = args_valid and (k.is_a?Symbol) and (v.is_a?AnsibleValue)
49
+ }
50
+ else
51
+ args_valid = false
52
+ end
53
+ raise "#{self.class}.new requires a hash map of Symbol => AnsibleValue!!!" unless args_valid
54
+ #
55
+ # store hashmap
56
+ @hashmap = hashmap
57
+ # link values
58
+ link()
59
+ end
60
+
61
+ end
62
+
63
+
64
+ #
65
+ # load all known Ansible Device classes
66
+ Dir["devices/*.rb"].each { |f| load f }
67
+
68
+ end
@@ -0,0 +1,179 @@
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 'ansible_callback'
26
+
27
+ module Ansible
28
+
29
+ # A base module for Ansible Values, which is the most basic form to declare a
30
+ # protocol-agnostic control endpoint, be it an input (a button or event), or
31
+ # an output (a device such as a relay or dimmer)
32
+ module AnsibleValue
33
+
34
+ include AnsibleCallback
35
+
36
+ attr_reader :previous_value, :current_value
37
+ attr_reader :last_update
38
+ attr_reader :flags
39
+
40
+ # return true if a value's instance variable (whose symbol is iv_symbol) matches a filter value (as a regexp)
41
+ # e.g. value.matches?(:name => /elias/, :telephone => /210/)
42
+ def matches?(hash)
43
+ raise "#{self.class}: AnsibleValue.match? single argument must be a hash.." unless hash.is_a?Hash
44
+ result = true
45
+ hash.each { |iv_symbol, filter|
46
+ raise "#{self.class}: AnsibleValue.match?(hash)'s keys must be Symbols.." unless iv_symbol.is_a?Symbol
47
+ if respond_to?(iv_symbol) and (val = instance_eval(iv_symbol.to_s)) then
48
+ #puts "match.val(#{iv_symbol}) == #{val.inspect}" if $DEBUG
49
+ result = result & case filter
50
+ # if the filter is a regular expression, use it to match the instance value
51
+ when Regexp then filter.match(val.to_s)
52
+ # if the filter is an array, use set intersection
53
+ when Array then (filter & val).length > 0
54
+ else filter == val
55
+ end
56
+ else
57
+ return false
58
+ end
59
+ }
60
+ return(result)
61
+ end
62
+
63
+ # singleton array of all known Values
64
+ @@AllValues = []
65
+ @@AllValuesMutex = Mutex.new
66
+
67
+ # lookup an AnsibleValue by a filter hash
68
+ # returns an array of matching values
69
+ def AnsibleValue.[](filter_hash)
70
+ result_set = []
71
+ @@AllValuesMutex.synchronize {
72
+ puts "AnsibleValue[] called, filter_hash=#{filter_hash}" if $DEBUG
73
+ @@AllValues.each { |v|
74
+ raise "ooops! @@AllValues contains a non-AnsibleValue!" unless v.is_a?(AnsibleValue)
75
+ if v.matches?(filter_hash) then
76
+ puts "Found a matching value! #{v}" if $DEBUG
77
+ result_set << v
78
+ end
79
+ }
80
+ puts "AnsibleValue[] returns=#{result_set}" if $DEBUG
81
+ }
82
+ return result_set
83
+ end
84
+
85
+ #
86
+ # add an AnsibleValue to the singleton @@AllValues
87
+ # returns the newvalue, or the existing value (using equality test ==), if found
88
+ def AnsibleValue.insert(newvalue)
89
+ result = nil
90
+ @@AllValuesMutex.synchronize {
91
+ # check if newvalue is already stored in @@AllValues, find it and return it
92
+ if (result = @@AllValues.find{|val| newvalue == val}).nil? then
93
+ puts "Adding a new value to @@AllValues (#{newvalue})" if $DEBUG
94
+ @@AllValues << (result = newvalue)
95
+ # get initial state
96
+ newvalue.get
97
+ end
98
+ }
99
+ return(result)
100
+ end
101
+
102
+ #
103
+ # get a value's current state
104
+ # returns: the value, if found in eibd's cache or nil otherwise
105
+ def get
106
+ return if write_only?
107
+ #
108
+ puts "get() called for #{self.inspect} by:\n\t" + caller[1] if $DEBUG
109
+ #
110
+ fire_callback(:onBeforeGet)
111
+ if read_value() then
112
+ fire_callback(:onAfterGetSuccess)
113
+ else
114
+ fire_callback(:onAfterGetFail)
115
+ #raise "get value failed for #{self}"
116
+ end
117
+ end
118
+
119
+ #
120
+ # set a value
121
+ # new_val: the new value, must be ruby-castable to OpenZWave's type system
122
+ # returns: true on success, raises exception on error
123
+ #WARNING: a true return value doesn't mean the command actually succeeded,
124
+ # it only means that it was queued for delivery to the target node
125
+ def set(new_val)
126
+ return if read_only?
127
+ #
128
+ puts "set() called for #{self.inspect} by:\n\t" + caller[1] if $DEBUG
129
+ #
130
+ fire_callback(:onBeforeSet)
131
+ if write_value(new_val) then
132
+ fire_callback(:onSetSuccess)
133
+ else
134
+ fire_callback(:onSetFail)
135
+ raise "set value #{self}: call to #{write_operation} failed!!"
136
+ end
137
+ end
138
+
139
+ #
140
+ # update internal instance variable representing the current state of the value
141
+ # called by read_value() and write_value()
142
+ def update(newval)
143
+ validate_ranges() if respond_to?(:validate_ranges)
144
+ unless newval == @current_value then
145
+ @last_update = Time.now
146
+ puts "+++ updating value #{self}, with #{newval.class}:#{newval.inspect}"
147
+
148
+ # previous value was different, update it and fire onUpdate handler
149
+ @previous_value = @current_value if defined?(@current_value)
150
+ @current_value = newval
151
+ # trigger onUpdate callback, if any
152
+ fire_callback(:onUpdate, nil, newval)
153
+ end
154
+ return(@current_value)
155
+ end
156
+
157
+ # GENERICS
158
+ # --------
159
+
160
+ # write value to the protocol
161
+ def write_value()
162
+ raise "#{self.class}.write_value() must be overriden!!!"
163
+ end
164
+
165
+ # value convertion from protocol-specific to its canonical form
166
+ # must be overriden by protocol value subclass
167
+ def as_canonical_value()
168
+ raise "#{self.class}.as_canonical_value() must be overriden!!!"
169
+ end
170
+
171
+ # convert a canonical value back to its protocol-specific form
172
+ # must be overriden by protocol value subclass
173
+ def to_protocol_value(v)
174
+ raise "#{self.class}.to_protocol_value() must be overriden!!!"
175
+ end
176
+
177
+ end
178
+
179
+ end #module
@@ -0,0 +1,92 @@
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
+ #
26
+ # global configuration options file
27
+ #
28
+
29
+ module Ansible
30
+
31
+ # STOMP Server URL
32
+ STOMP_URL = 'stomp://192.168.10.14'
33
+
34
+ #
35
+ # KNX subsystem configuration
36
+ #
37
+ module KNX
38
+
39
+ # KNX eibd server URL (not the actual KNX interface URL!)
40
+ KNX_URL = "local:/tmp/eib"
41
+ #KNX_URL = "ip:localhost"
42
+
43
+ ###################
44
+ # KNX MONITOR TOPIC:
45
+ # passes all KNX activity to STOMP
46
+ # KNX frame headers as defined in knx_protocol.rb
47
+ KNX_MONITOR_TOPIC = "/queue/knx/monitor"
48
+
49
+ #################
50
+ # KNX COMMAND_TOPIC
51
+ # header "dest_addr" => KNX destination address (group/phys) in 16-bit unsigned integer format i.e. "1024" meaning "1/0/0" in 3-level fmt
52
+ # body => the raw APDU for transmission (command flags+data) in Marshal.dump(CGI.escape()) format
53
+ KNX_COMMAND_TOPIC = "/queue/knx/command"
54
+
55
+ end
56
+
57
+ #
58
+ # ZWave sybsustem configuration
59
+ #
60
+ module ZWave
61
+
62
+ ###################
63
+ #ZWAVE MONITOR TOPIC:
64
+ # passes all ZWave activity to STOMP
65
+ # ZWave frame headers as defined in zwave-protocol.rb
66
+ ZWAVE_MONITOR_TOPIC = "/queue/zwave/monitor"
67
+
68
+ #################
69
+ # ZWAVE_COMMAND_TOPIC
70
+ # header =>
71
+ # body =>
72
+ #ZWAVE_COMMAND_TOPIC = "/queue/knx/command"
73
+
74
+ #################
75
+ # OpenZWave Thrift Server URL
76
+ THRIFT_URL = 'thrift://192.168.10.14'
77
+ #THRIFT_URL = 'thrift://192.168.0.100'
78
+
79
+ ThriftPort = 9090
80
+
81
+ end
82
+
83
+ end
84
+
85
+ #
86
+
87
+ module OpenZWave
88
+
89
+ # path to OpenZWave source
90
+ OZW_SRC = "lib/ansible/openzwave/src"
91
+
92
+ end