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,193 @@
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
+ # load thrift-generated code
26
+ require 'thrift'
27
+ require 'ozw_constants'
28
+ require 'ozw_headers'
29
+ require "ozw_remote_manager"
30
+
31
+ require 'ansible_value'
32
+ require 'ansible_callback'
33
+
34
+ require 'zwave_protocol'
35
+ require 'zwave_command_classes'
36
+
37
+ module Ansible
38
+
39
+ module ZWave
40
+
41
+ RefreshedNodes = {}
42
+
43
+ # extend the Thrift ValueID interface with some interesting stuff
44
+ class ValueID < OpenZWave::RemoteValueID
45
+ include AnsibleValue
46
+ include AnsibleCallback
47
+
48
+ #
49
+ # ------ CLASS VARIABLES & METHODS
50
+ #
51
+ @@transceiver = nil
52
+ def ValueID.transceiver; return @@transceiver; end
53
+ def ValueID.transceiver=(other);
54
+ @@transceiver = other if other.is_a? Ansible::ZWave::ZWave_Transceiver
55
+ end
56
+
57
+ # get existing ValueID object, or else create it
58
+ def ValueID.get_or_create(homeid_str, valueid_str)
59
+ query = AnsibleValue[:_homeId => homeid_str.to_i(16), :valueId => valueid_str.to_i(16)]
60
+ value = (query.is_a?Array and query.size>0 and query[0]) or
61
+ ValueID.new(homeid_str, valueid_str)
62
+ return value
63
+ end
64
+
65
+ #
66
+ # ----- INSTANCE VARIABLES & METHODS
67
+ #
68
+
69
+ attr_reader :valueId
70
+
71
+ # equality checking
72
+ def == (other)
73
+ return (
74
+ other.is_a?(ValueID) and
75
+ (@_homeId == other._homeId) and (@valueId == other.valueId)
76
+ )
77
+ end
78
+
79
+ # initialize ValueID by home and value id (both hex strings)
80
+ def initialize( homeid_str, valueid_str)
81
+ raise 'both arguments must be strings' if [homeid_str, valueid_str].find{|s| not s.is_a?String}
82
+
83
+ # wARNING: instance variable naming must be consistent with ozw_types.rb (Thrift interface)
84
+ @_homeId = homeid_str.to_i(16)
85
+ @valueId = valueid_str.to_i(16)
86
+ # parse all fields
87
+ m_id = OZW_ValueID_id.read([valueid_str.delete(' ')[-8..-1].to_i(16)].pack("N"))
88
+ m_id1 = OZW_ValueID_id1.read([valueid_str.delete(' ')[0..-9].to_i(16)].pack("N"))
89
+ # and store them
90
+ @_nodeId = m_id.node_id
91
+ @_genre = m_id.value_genre
92
+ @_type = m_id.value_type
93
+ @_valueIndex = m_id.value_idx
94
+ @_commandClassId = m_id.cmd_class
95
+ @_instance = m_id1.cmd_class_instance
96
+ # access flags, default R/W
97
+ @flags = {:r => true, :w => true}
98
+ puts "NEW ZWAVE VALUE CREATED: #{self.inspect}" if $DEBUG
99
+
100
+ if @_homeId > 0 then
101
+ # fill in some useful info so as not to query OpenZWave all the time
102
+ @flags[:readonly] = @@transceiver.manager_send(:IsValueReadOnly, self)
103
+ @flags[:writeonly] = @@transceiver.manager_send(:IsValueWriteOnly, self)
104
+ end
105
+
106
+ # time of last update
107
+ @last_update = nil
108
+
109
+ # a boolean flag set to true so as to know all subsequent notifications
110
+ # by OpenZWave regarding this value have been caused by us
111
+ @poll_delayed = false
112
+
113
+ # dynamic binding to the corresponding OpenZWave data type
114
+ @typename, @typedescr = OpenZWave::ValueTypes[@_type]
115
+ @typemod = Ansible::ZWave.module_eval(@typename)
116
+ raise "unknown/undeclared ZWave type module #{@typename}" unless @typemod.is_a?Module
117
+ # extend this ValueID with type-specific module
118
+ self.extend(@typemod)
119
+ # store this ZWave ValueID in the Ansible database
120
+ AnsibleValue.insert(self)
121
+ end
122
+
123
+
124
+ # is this ZWave value read only?
125
+ def read_only?
126
+ (defined?@flags) and @flags[:readonly]
127
+ end
128
+
129
+ # is this ZWave value write only?
130
+ def write_only?
131
+ (defined?@flags) and @flags[:writeonly]
132
+ end
133
+
134
+ #
135
+ # ZWave-specific: read value from the bus
136
+ #
137
+ def read_value()
138
+ return(false) unless respond_to? :read_operation
139
+ result = @@transceiver.manager_send(read_operation, self)
140
+ if result and result.retval then
141
+ puts "#{self}.read_value() result == #{result.o_value}, Refreshed=#{RefreshedNodes[@_nodeId]}"
142
+ update(result.o_value)
143
+ return(true)
144
+ else
145
+ return(false)
146
+ end
147
+ end
148
+
149
+ #
150
+ # ZWave-specific: write new value to OpenZWave
151
+ # new_val must be in protocol form
152
+ # return true if successful, false otherwise
153
+ def write_value(new_val)
154
+ return(false) unless respond_to? :write_operation
155
+ if @@transceiver.manager_send(write_operation, self, new_val) then
156
+ # value can also be updated by ValueChanged notification
157
+ update(new_val)
158
+ return(true)
159
+ else
160
+ return(false)
161
+ end
162
+ end
163
+
164
+ # return a reasonable string representation of the ZWave value
165
+ def to_s
166
+ return "ZWaveValue[n:#{@_nodeId} g:#{@_genre} cc:#{@_commandClassId} i:#{@_instance} vi:#{@_valueIndex} t:#{@_type}]==#{@current_value}(#{@current_value.class})"
167
+ end
168
+
169
+ # fetch all available ValueID info from OpenZWave
170
+ def explain
171
+ return(%Q{
172
+ Value Label: #{ @@transceiver.manager_send(:GetValueLabel, self)}
173
+ Value Help: #{ @@transceiver.manager_send(:GetValueHelp, self)}
174
+
175
+ Value Units: #{ @@transceiver.manager_send(:GetValueUnits, self)}
176
+ Value Min: #{ @@transceiver.manager_send(:GetValueMin, self)}
177
+ Value Max: #{ @@transceiver.manager_send(:GetValueMax, self)}
178
+
179
+ Value read-only? #{ @@transceiver.manager_send(:IsValueReadOnly, self)}
180
+ Value write-only? #{ @@transceiver.manager_send(:IsValueWriteOnly, self)}
181
+ Value set? #{ @@transceiver.manager_send(:IsValueSet, self)}
182
+ })
183
+ end
184
+
185
+ end # class
186
+
187
+ #
188
+ # load all known ZWave type modules
189
+ Dir["lib/ansible/zwave/types/*.rb"].each { |f| load f }
190
+
191
+ end #module ZWave
192
+
193
+ end #module Ansible
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ansible4ozw
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Elias Karakoulakis (ekarak)
9
+ - Justin Grevich (jgrevich)
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-10-22 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: A simple hello world gem
16
+ email:
17
+ - elias.karakoulakis@gmail.com
18
+ - justin@grevi.ch
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - lib/ansible/ansible_callback.rb
24
+ - lib/ansible/ansible_device.rb
25
+ - lib/ansible/ansible_value.rb
26
+ - lib/ansible/config.rb
27
+ - lib/ansible/devices/ansible_dimmer.rb
28
+ - lib/ansible/devices/ansible_switch.rb
29
+ - lib/ansible/knx/dpt/canonical_1bit.rb
30
+ - lib/ansible/knx/dpt/dpt1.rb
31
+ - lib/ansible/knx/dpt/dpt10.rb
32
+ - lib/ansible/knx/dpt/dpt11.rb
33
+ - lib/ansible/knx/dpt/dpt12.rb
34
+ - lib/ansible/knx/dpt/dpt13.rb
35
+ - lib/ansible/knx/dpt/dpt14.rb
36
+ - lib/ansible/knx/dpt/dpt15.rb
37
+ - lib/ansible/knx/dpt/dpt16.rb
38
+ - lib/ansible/knx/dpt/dpt17.rb
39
+ - lib/ansible/knx/dpt/dpt18.rb
40
+ - lib/ansible/knx/dpt/dpt19.rb
41
+ - lib/ansible/knx/dpt/dpt2.rb
42
+ - lib/ansible/knx/dpt/dpt3.rb
43
+ - lib/ansible/knx/dpt/dpt4.rb
44
+ - lib/ansible/knx/dpt/dpt5.rb
45
+ - lib/ansible/knx/dpt/dpt6.rb
46
+ - lib/ansible/knx/dpt/dpt7.rb
47
+ - lib/ansible/knx/dpt/dpt8.rb
48
+ - lib/ansible/knx/dpt/dpt9.rb
49
+ - lib/ansible/knx/dpt/tests/test_dpt10.rb
50
+ - lib/ansible/knx/dpt/tests/test_dpt9.rb
51
+ - lib/ansible/knx/EIBConnection.rb
52
+ - lib/ansible/knx/hexdump.rb
53
+ - lib/ansible/knx/knx_dpt.rb
54
+ - lib/ansible/knx/knx_dpt_scalar.rb
55
+ - lib/ansible/knx/knx_eistypes.rb
56
+ - lib/ansible/knx/knx_protocol.rb
57
+ - lib/ansible/knx/knx_scene.rb
58
+ - lib/ansible/knx/knx_tools.rb
59
+ - lib/ansible/knx/knx_transceiver.rb
60
+ - lib/ansible/knx/knx_value.rb
61
+ - lib/ansible/openzwave/ozw_constants.rb
62
+ - lib/ansible/openzwave/ozw_headers.rb
63
+ - lib/ansible/openzwave/ozw_remote_manager.rb
64
+ - lib/ansible/openzwave/ozw_types.rb
65
+ - lib/ansible/orbiter_proxy.rb
66
+ - lib/ansible/transceiver.rb
67
+ - lib/ansible/zwave/types/valuetype_bool.rb
68
+ - lib/ansible/zwave/types/valuetype_button.rb
69
+ - lib/ansible/zwave/types/valuetype_byte.rb
70
+ - lib/ansible/zwave/types/valuetype_decimal.rb
71
+ - lib/ansible/zwave/types/valuetype_int.rb
72
+ - lib/ansible/zwave/types/valuetype_list.rb
73
+ - lib/ansible/zwave/types/valuetype_short.rb
74
+ - lib/ansible/zwave/types/valuetype_string.rb
75
+ - lib/ansible/zwave/zwave_command_classes.rb
76
+ - lib/ansible/zwave/zwave_node.rb
77
+ - lib/ansible/zwave/zwave_protocol.rb
78
+ - lib/ansible/zwave/zwave_transceiver.rb
79
+ - lib/ansible/zwave/zwave_value.rb
80
+ - lib/ansible.rb
81
+ homepage: https://github.com/jgrevich/ansible
82
+ licenses: []
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements:
100
+ - KNX or ZWave controller + Devices
101
+ - stompserver_ng
102
+ - Thrift4OZW
103
+ rubyforge_project:
104
+ rubygems_version: 1.8.24
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: Ruby-based home automation scripting framework for KNX and ZWave devices.
108
+ test_files: []