openhab-jrubyscripting 5.0.0.rc1

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 (164) hide show
  1. checksums.yaml +7 -0
  2. data/lib/openhab/core/actions.rb +163 -0
  3. data/lib/openhab/core/entity_lookup.rb +144 -0
  4. data/lib/openhab/core/events/abstract_event.rb +17 -0
  5. data/lib/openhab/core/events/item_channel_link.rb +36 -0
  6. data/lib/openhab/core/events/item_command_event.rb +78 -0
  7. data/lib/openhab/core/events/item_event.rb +22 -0
  8. data/lib/openhab/core/events/item_state_changed_event.rb +52 -0
  9. data/lib/openhab/core/events/item_state_event.rb +51 -0
  10. data/lib/openhab/core/events/thing.rb +29 -0
  11. data/lib/openhab/core/events/thing_status_info_event.rb +53 -0
  12. data/lib/openhab/core/events.rb +10 -0
  13. data/lib/openhab/core/items/accepted_data_types.rb +29 -0
  14. data/lib/openhab/core/items/color_item.rb +52 -0
  15. data/lib/openhab/core/items/contact_item.rb +52 -0
  16. data/lib/openhab/core/items/date_time_item.rb +58 -0
  17. data/lib/openhab/core/items/dimmer_item.rb +148 -0
  18. data/lib/openhab/core/items/generic_item.rb +344 -0
  19. data/lib/openhab/core/items/group_item.rb +174 -0
  20. data/lib/openhab/core/items/image_item.rb +109 -0
  21. data/lib/openhab/core/items/location_item.rb +34 -0
  22. data/lib/openhab/core/items/metadata/hash.rb +390 -0
  23. data/lib/openhab/core/items/metadata/namespace_hash.rb +469 -0
  24. data/lib/openhab/core/items/metadata.rb +11 -0
  25. data/lib/openhab/core/items/number_item.rb +62 -0
  26. data/lib/openhab/core/items/numeric_item.rb +22 -0
  27. data/lib/openhab/core/items/persistence.rb +327 -0
  28. data/lib/openhab/core/items/player_item.rb +66 -0
  29. data/lib/openhab/core/items/proxy.rb +59 -0
  30. data/lib/openhab/core/items/registry.rb +66 -0
  31. data/lib/openhab/core/items/rollershutter_item.rb +68 -0
  32. data/lib/openhab/core/items/semantics/enumerable.rb +152 -0
  33. data/lib/openhab/core/items/semantics.rb +476 -0
  34. data/lib/openhab/core/items/state_storage.rb +53 -0
  35. data/lib/openhab/core/items/string_item.rb +28 -0
  36. data/lib/openhab/core/items/switch_item.rb +78 -0
  37. data/lib/openhab/core/items.rb +114 -0
  38. data/lib/openhab/core/lazy_array.rb +52 -0
  39. data/lib/openhab/core/profile_factory.rb +118 -0
  40. data/lib/openhab/core/script_handling.rb +55 -0
  41. data/lib/openhab/core/things/channel.rb +48 -0
  42. data/lib/openhab/core/things/channel_uid.rb +51 -0
  43. data/lib/openhab/core/things/item_channel_link.rb +33 -0
  44. data/lib/openhab/core/things/profile_callback.rb +52 -0
  45. data/lib/openhab/core/things/proxy.rb +69 -0
  46. data/lib/openhab/core/things/registry.rb +46 -0
  47. data/lib/openhab/core/things/thing.rb +194 -0
  48. data/lib/openhab/core/things.rb +22 -0
  49. data/lib/openhab/core/timer.rb +128 -0
  50. data/lib/openhab/core/types/comparable_type.rb +23 -0
  51. data/lib/openhab/core/types/date_time_type.rb +259 -0
  52. data/lib/openhab/core/types/decimal_type.rb +192 -0
  53. data/lib/openhab/core/types/hsb_type.rb +183 -0
  54. data/lib/openhab/core/types/increase_decrease_type.rb +34 -0
  55. data/lib/openhab/core/types/next_previous_type.rb +34 -0
  56. data/lib/openhab/core/types/numeric_type.rb +52 -0
  57. data/lib/openhab/core/types/on_off_type.rb +46 -0
  58. data/lib/openhab/core/types/open_closed_type.rb +41 -0
  59. data/lib/openhab/core/types/percent_type.rb +95 -0
  60. data/lib/openhab/core/types/play_pause_type.rb +38 -0
  61. data/lib/openhab/core/types/point_type.rb +117 -0
  62. data/lib/openhab/core/types/quantity_type.rb +327 -0
  63. data/lib/openhab/core/types/raw_type.rb +26 -0
  64. data/lib/openhab/core/types/refresh_type.rb +27 -0
  65. data/lib/openhab/core/types/rewind_fastforward_type.rb +38 -0
  66. data/lib/openhab/core/types/stop_move_type.rb +34 -0
  67. data/lib/openhab/core/types/string_type.rb +76 -0
  68. data/lib/openhab/core/types/type.rb +117 -0
  69. data/lib/openhab/core/types/un_def_type.rb +38 -0
  70. data/lib/openhab/core/types/up_down_type.rb +50 -0
  71. data/lib/openhab/core/types.rb +69 -0
  72. data/lib/openhab/core/uid.rb +36 -0
  73. data/lib/openhab/core.rb +85 -0
  74. data/lib/openhab/core_ext/java/duration.rb +115 -0
  75. data/lib/openhab/core_ext/java/local_date.rb +93 -0
  76. data/lib/openhab/core_ext/java/local_time.rb +106 -0
  77. data/lib/openhab/core_ext/java/month.rb +59 -0
  78. data/lib/openhab/core_ext/java/month_day.rb +105 -0
  79. data/lib/openhab/core_ext/java/period.rb +103 -0
  80. data/lib/openhab/core_ext/java/temporal_amount.rb +34 -0
  81. data/lib/openhab/core_ext/java/time.rb +58 -0
  82. data/lib/openhab/core_ext/java/unit.rb +15 -0
  83. data/lib/openhab/core_ext/java/zoned_date_time.rb +116 -0
  84. data/lib/openhab/core_ext/ruby/array.rb +21 -0
  85. data/lib/openhab/core_ext/ruby/class.rb +15 -0
  86. data/lib/openhab/core_ext/ruby/date.rb +89 -0
  87. data/lib/openhab/core_ext/ruby/numeric.rb +190 -0
  88. data/lib/openhab/core_ext/ruby/range.rb +70 -0
  89. data/lib/openhab/core_ext/ruby/time.rb +104 -0
  90. data/lib/openhab/core_ext.rb +18 -0
  91. data/lib/openhab/dsl/events/watch_event.rb +18 -0
  92. data/lib/openhab/dsl/events.rb +9 -0
  93. data/lib/openhab/dsl/gems.rb +3 -0
  94. data/lib/openhab/dsl/items/builder.rb +618 -0
  95. data/lib/openhab/dsl/items/ensure.rb +93 -0
  96. data/lib/openhab/dsl/items/timed_command.rb +236 -0
  97. data/lib/openhab/dsl/rules/automation_rule.rb +308 -0
  98. data/lib/openhab/dsl/rules/builder.rb +1373 -0
  99. data/lib/openhab/dsl/rules/guard.rb +115 -0
  100. data/lib/openhab/dsl/rules/name_inference.rb +160 -0
  101. data/lib/openhab/dsl/rules/property.rb +76 -0
  102. data/lib/openhab/dsl/rules/rule_triggers.rb +96 -0
  103. data/lib/openhab/dsl/rules/terse.rb +63 -0
  104. data/lib/openhab/dsl/rules/triggers/changed.rb +169 -0
  105. data/lib/openhab/dsl/rules/triggers/channel.rb +57 -0
  106. data/lib/openhab/dsl/rules/triggers/command.rb +107 -0
  107. data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +161 -0
  108. data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +164 -0
  109. data/lib/openhab/dsl/rules/triggers/cron/cron.rb +195 -0
  110. data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +127 -0
  111. data/lib/openhab/dsl/rules/triggers/trigger.rb +56 -0
  112. data/lib/openhab/dsl/rules/triggers/updated.rb +130 -0
  113. data/lib/openhab/dsl/rules/triggers/watch/watch.rb +55 -0
  114. data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +155 -0
  115. data/lib/openhab/dsl/rules/triggers.rb +12 -0
  116. data/lib/openhab/dsl/rules.rb +29 -0
  117. data/lib/openhab/dsl/script_handling.rb +55 -0
  118. data/lib/openhab/dsl/things/builder.rb +263 -0
  119. data/lib/openhab/dsl/thread_local.rb +48 -0
  120. data/lib/openhab/dsl/timer_manager.rb +191 -0
  121. data/lib/openhab/dsl/version.rb +9 -0
  122. data/lib/openhab/dsl.rb +686 -0
  123. data/lib/openhab/log.rb +348 -0
  124. data/lib/openhab/osgi.rb +70 -0
  125. data/lib/openhab/rspec/configuration.rb +56 -0
  126. data/lib/openhab/rspec/example_group.rb +90 -0
  127. data/lib/openhab/rspec/helpers.rb +439 -0
  128. data/lib/openhab/rspec/hooks.rb +93 -0
  129. data/lib/openhab/rspec/jruby.rb +46 -0
  130. data/lib/openhab/rspec/karaf.rb +811 -0
  131. data/lib/openhab/rspec/mocks/bundle_install_support.rb +25 -0
  132. data/lib/openhab/rspec/mocks/bundle_resolver.rb +30 -0
  133. data/lib/openhab/rspec/mocks/event_admin.rb +146 -0
  134. data/lib/openhab/rspec/mocks/metadata_provider.rb +75 -0
  135. data/lib/openhab/rspec/mocks/persistence_service.rb +140 -0
  136. data/lib/openhab/rspec/mocks/safe_caller.rb +40 -0
  137. data/lib/openhab/rspec/mocks/synchronous_executor.rb +56 -0
  138. data/lib/openhab/rspec/mocks/thing_handler.rb +76 -0
  139. data/lib/openhab/rspec/mocks/timer.rb +95 -0
  140. data/lib/openhab/rspec/openhab/core/actions.rb +26 -0
  141. data/lib/openhab/rspec/openhab/core/items/proxy.rb +27 -0
  142. data/lib/openhab/rspec/openhab/core/things/proxy.rb +27 -0
  143. data/lib/openhab/rspec/shell.rb +31 -0
  144. data/lib/openhab/rspec/suspend_rules.rb +60 -0
  145. data/lib/openhab/rspec.rb +17 -0
  146. data/lib/openhab/yard/cli/stats.rb +23 -0
  147. data/lib/openhab/yard/code_objects/group_object.rb +17 -0
  148. data/lib/openhab/yard/code_objects/java/base.rb +31 -0
  149. data/lib/openhab/yard/code_objects/java/class_object.rb +11 -0
  150. data/lib/openhab/yard/code_objects/java/field_object.rb +15 -0
  151. data/lib/openhab/yard/code_objects/java/interface_object.rb +15 -0
  152. data/lib/openhab/yard/code_objects/java/package_object.rb +11 -0
  153. data/lib/openhab/yard/code_objects/java/proxy.rb +23 -0
  154. data/lib/openhab/yard/handlers/jruby/base.rb +49 -0
  155. data/lib/openhab/yard/handlers/jruby/class_handler.rb +18 -0
  156. data/lib/openhab/yard/handlers/jruby/constant_handler.rb +18 -0
  157. data/lib/openhab/yard/handlers/jruby/java_import_handler.rb +27 -0
  158. data/lib/openhab/yard/handlers/jruby/mixin_handler.rb +23 -0
  159. data/lib/openhab/yard/html_helper.rb +44 -0
  160. data/lib/openhab/yard/tags/constant_directive.rb +20 -0
  161. data/lib/openhab/yard/tags/group_directive.rb +24 -0
  162. data/lib/openhab/yard/tags/library.rb +3 -0
  163. data/lib/openhab/yard.rb +32 -0
  164. metadata +504 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cd7a4eed6a2398fd34734d9b3dc15a8f5e2bcc74f7309aede27be29501c21698
4
+ data.tar.gz: a1f70554ada415e7de0325ea259ac9edcad48355ef6000a4877057fa06b343ce
5
+ SHA512:
6
+ metadata.gz: f27aa8940df9441a5318c32d1c0d84f15fdd70b2336cf95dd09383b73b97d14bbc7c924ba3e3df24f48d5f289d410ec1d6d0df9f99a40141ac34d88152e9a76a
7
+ data.tar.gz: c369de38091c4486a492b88ef990537b5a4cc667becca6be5a99a56227a8a2b0339b14e9ce1e11e6e73b56d8b055d3876917916ee7ec52b66c5b23e85b33a95b
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ #
6
+ # Access to global actions.
7
+ #
8
+ # All OpenHAB's actions including those provided by add-ons are available, notably:
9
+ # * Audio
10
+ # * Voice
11
+ # * Things
12
+ # * Ephemeris
13
+ # * Exec
14
+ # * HTTP
15
+ # * Ping
16
+ #
17
+ # From add-ons, e.g.:
18
+ # * Transformation
19
+ # * PersistenceExtensions (see {Items::Persistence})
20
+ # * NotificationAction (from [OpenHAB Cloud Connector](https://www.openhab.org/addons/integrations/openhabcloud/))
21
+ #
22
+ # Global actions are available as "global" methods on {OpenHAB::DSL}, or
23
+ # explicitly from this {Actions} module, or you can explicitly reference a
24
+ # specific action.
25
+ #
26
+ # Thing-specific actions can be accessed from the {Things::Thing Thing} object.
27
+ # See {Things::Thing#actions Thing#actions}.
28
+ #
29
+ # @example Run the TTS engine and output to the default audio sink. For more information see [Voice](https://www.openhab.org/docs/configuration/multimedia.html#voice)
30
+ # rule 'Say the time every hour' do
31
+ # every :hour
32
+ # run { say "The time is #{TimeOfDay.now}" }
33
+ # end
34
+ #
35
+ # rule 'Play an audio file' do
36
+ # every :hour
37
+ # run { play_sound "beep.mp3", volume: 100 }
38
+ # end
39
+ #
40
+ # play_stream 'example.com'
41
+ #
42
+ # @example Send a broadcast notification via the OpenHAB Cloud
43
+ # rule 'Send an alert' do
44
+ # changed Alarm_Triggered, to: ON
45
+ # run { notify 'Red Alert!' }
46
+ # end
47
+ #
48
+ # @example Execute an external command
49
+ # rule 'Run a command' do
50
+ # every :day
51
+ # run do
52
+ # execute_command_line('/bin/true')
53
+ # end
54
+ # end
55
+ #
56
+ # @example Execute an external command, referencing the Exec module directly
57
+ # rule 'Run a command' do
58
+ # every :day
59
+ # run do
60
+ # OpenHAB::Core::Actions::Exec::execute_command_line('/bin/true')
61
+ # end
62
+ # end
63
+ #
64
+ # @example Run a transformation
65
+ # transform("MAP", "myfan.map", "0")
66
+ #
67
+ module Actions
68
+ OSGi.services("org.openhab.core.model.script.engine.action.ActionService")&.each do |service|
69
+ java_import service.action_class.ruby_class
70
+ logger.trace("Loaded ACTION: #{service.action_class}")
71
+ end
72
+ # Import common actions
73
+ %w[Exec HTTP Ping].each { |action| java_import "org.openhab.core.model.script.actions.#{action}" }
74
+
75
+ module_function
76
+
77
+ #
78
+ # Send notification to an email or broadcast
79
+ #
80
+ # @param msg [String] The notification message to send
81
+ # @param email [String, nil] The email address to send to. If nil, the message will be broadcast
82
+ # @param icon [String, Symbol, nil]
83
+ # @param severity [String, Symbol, nil]
84
+ #
85
+ # @return [void]
86
+ #
87
+ def notify(msg, email: nil, icon: nil, severity: nil)
88
+ unless Actions.const_defined?(:NotificationAction)
89
+ raise NoMethodError, "NotificationAction is not available. Please install the OpenHAB cloud addon"
90
+ end
91
+
92
+ if email
93
+ NotificationAction.send_notification(email.to_s, msg.to_s, icon&.to_s, severity&.to_s)
94
+ else
95
+ NotificationAction.send_broadcast_notification(msg.to_s, icon&.to_s, severity&.to_s)
96
+ end
97
+ end
98
+
99
+ #
100
+ # Say text via OpenHAB Text-To-Speech service, Voice.say()
101
+ #
102
+ # @param text [String] The text to say
103
+ # @param voice [String] Specify a particular voice to use
104
+ # @param sink [String] Specify a particular sink to output the speech
105
+ # @param volume [PercentType] Specify the volume for the speech
106
+ #
107
+ # @return [void]
108
+ #
109
+ def say(text, voice: nil, sink: nil, volume: nil)
110
+ volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
111
+ Voice.say(text.to_s, voice&.to_s, sink&.to_s, volume)
112
+ end
113
+
114
+ #
115
+ # Play an audio file via OpenHAB sound service, Audio.playSound()
116
+ #
117
+ # @param filename [String] The sound file to play
118
+ # @param sink [String] Specify a particular sink to output the speech
119
+ # @param volume [PercentType] Specify the volume for the speech
120
+ #
121
+ # @return [void]
122
+ #
123
+ def play_sound(filename, sink: nil, volume: nil)
124
+ volume = PercentType.new(volume) unless volume.is_a?(PercentType) || volume.nil?
125
+ Audio.play_sound(sink&.to_s, filename.to_s, volume)
126
+ end
127
+
128
+ #
129
+ # Play an audio stream from an URL to the given sink(s). Set url to nil if streaming should be stopped
130
+ #
131
+ # @param [String] url The URL of the audio stream
132
+ # @param [String] sink The audio sink, or nil to use the default audio sink
133
+ #
134
+ # @return [void]
135
+ #
136
+ def play_stream(url, sink: nil)
137
+ Audio.play_stream(sink&.to_s, url)
138
+ end
139
+
140
+ #
141
+ # Delegate missing methods to any available global actions.
142
+ #
143
+ def method_missing(method, *args, &block)
144
+ Actions.constants.each do |constant|
145
+ mod = Actions.const_get(constant)
146
+ return mod.public_send(method, *args, &block) if mod.respond_to?(method)
147
+ end
148
+
149
+ super
150
+ end
151
+
152
+ # @!visibility private
153
+ def respond_to_missing?(method_name, _include_private = false)
154
+ Actions.constants.each do |constant|
155
+ mod = Actions.const_get(constant)
156
+ return true if mod.respond_to?(method_name)
157
+ end
158
+
159
+ super
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ #
6
+ # Manages access to OpenHAB entities
7
+ #
8
+ # You can access OpenHAB items and things directly using their name, anywhere `EntityLookup` is available.
9
+ #
10
+ # @note Thing UIDs are separated by a colon `:`. Since it is not a valid symbol for an identifier,
11
+ # it must be replaced with an underscore `_`. So to access `astro:sun:home`, use `astro_sun_home`
12
+ # as an alternative to `things["astro:sun:home"]`
13
+ #
14
+ # @see OpenHAB::DSL.items items[]
15
+ # @see OpenHAB::DSL.things things[]
16
+ #
17
+ # @example Accessing Items and Groups
18
+ # gAll_Lights # Access the gAll_Lights group. It is the same as items["gAll_Lights"]
19
+ # Kitchen_Light.on # The OpenHAB object for the Kitchen_Light item and send an ON command
20
+ #
21
+ # @example Accessing Things
22
+ # smtp_mail_local.send_mail('me@example.com', 'Subject', 'Dear Person, ...')
23
+ # # Is equivalent to:
24
+ # things['smtp:mail:local'].send_mail('me@example.com', 'Subject', 'Dear Person, ...')
25
+ #
26
+ module EntityLookup
27
+ #
28
+ # Automatically looks up OpenHAB items and things in appropriate registries
29
+ #
30
+ # @return [GenericItem, Things::Thing, nil]
31
+ #
32
+ def method_missing(method, *args, &block)
33
+ logger.trace("method missing, performing OpenHab Lookup for: #{method}")
34
+ EntityLookup.lookup_entity(method) || super
35
+ end
36
+
37
+ # @!visibility private
38
+ def respond_to_missing?(method_name, _include_private = false)
39
+ logger.trace("Checking if OpenHAB entities exist for #{method_name}")
40
+ method_name = method_name.to_s if method_name.is_a?(Symbol)
41
+
42
+ method_name == "scriptLoaded" ||
43
+ method_name == "scriptUnloaded" ||
44
+ EntityLookup.lookup_entity(method_name) ||
45
+ super
46
+ end
47
+
48
+ #
49
+ # Looks up an OpenHAB entity
50
+ # items are checked first, then things
51
+ #
52
+ # @!visibility private
53
+ #
54
+ # @param [String] name of entity to lookup in item or thing registry
55
+ #
56
+ # @return [GenericItem, Things::Thing, nil]
57
+ #
58
+ def self.lookup_entity(name)
59
+ lookup_item(name) || lookup_thing_const(name)
60
+ end
61
+
62
+ #
63
+ # Looks up a Thing in the OpenHAB registry
64
+ #
65
+ # @!visibility private
66
+ #
67
+ # @param [String] uid name of Thing to lookup in Thing registry
68
+ #
69
+ # @return [Things::Thing, nil]
70
+ #
71
+ def self.lookup_thing(uid)
72
+ logger.trace("Looking up thing '#{uid}'")
73
+ uid = uid.to_s if uid.is_a?(Symbol)
74
+
75
+ uid = generate_thing_uid(uid) unless uid.is_a?(org.openhab.core.thing.ThingUID)
76
+ thing = $things.get(uid)
77
+ return unless thing
78
+
79
+ logger.trace("Retrieved Thing(#{thing}) from registry for uid: #{uid}")
80
+ Things::Proxy.new(thing)
81
+ end
82
+
83
+ #
84
+ # Looks up a Thing in the OpenHAB registry replacing `_` with `:`
85
+ #
86
+ # @!visibility private
87
+ #
88
+ # @param [String] name of Thing to lookup in Thing registry
89
+ #
90
+ # @return [Things::Thing, nil]
91
+ #
92
+ def self.lookup_thing_const(name)
93
+ name = name.to_s if name.is_a?(Symbol)
94
+
95
+ if name.is_a?(String)
96
+ # Thing UIDs have at least 3 segments, separated by `_`
97
+ return if name.count("_") < 2
98
+
99
+ # Convert from _ syntax to :
100
+ name = name.tr("_", ":")
101
+ end
102
+ lookup_thing(name)
103
+ end
104
+
105
+ #
106
+ # Lookup OpenHAB items in item registry
107
+ #
108
+ # @!visibility private
109
+ #
110
+ # @param [String] name of item to lookup
111
+ #
112
+ # @return [GenericItem, nil]
113
+ #
114
+ def self.lookup_item(name)
115
+ logger.trace("Looking up item '#{name}'")
116
+ name = name.to_s if name.is_a?(Symbol)
117
+ item = $ir.get(name)
118
+ Items::Proxy.new(item) unless item.nil?
119
+ end
120
+
121
+ #
122
+ # Returns a ThingUID given a string like object
123
+ #
124
+ # @!visibility private
125
+ #
126
+ # @return [Things::ThingUID]
127
+ #
128
+ def self.generate_thing_uid(uid)
129
+ org.openhab.core.thing.ThingUID.new(*uid.split(":"))
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ #
136
+ # Implements const_missing to return OpenHAB items or things if mapping to missing name if they exist
137
+ #
138
+ # @param [String] name Capital string that was not set as a constant and to be looked up
139
+ #
140
+ # @return [Object] OpenHAB Item or Thing if their name exist in OpenHAB item and thing regestries
141
+ #
142
+ def Object.const_missing(name)
143
+ OpenHAB::Core::EntityLookup.lookup_entity(name) || super
144
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.events.AbstractEvent
7
+
8
+ # Add attachments event data.
9
+ class AbstractEvent
10
+ # @return [Object]
11
+ attr_accessor :attachment
12
+
13
+ alias_method :inspect, :to_s
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.thing.link.dto.ItemChannelLinkDTO
7
+
8
+ # Strictly speaking this class isn't an event, but it's accessed from an AbstractItemChannelLinkEvent
9
+
10
+ # Adds methods to core OpenHAB ItemChannelLinkDTO to make it more natural in Ruby
11
+ class ItemChannelLinkDTO
12
+ #
13
+ # @!attribute [r] item_name
14
+ # @return [String] The name of the item that was linked or unlinked.
15
+ #
16
+ alias_method :item_name, :itemName
17
+
18
+ #
19
+ # @!attribute [r] item
20
+ # @return [GenericItem] The item that was linked or unlinked
21
+ #
22
+ def item
23
+ EntityLookup.lookup_item(itemName)
24
+ end
25
+
26
+ #
27
+ # @!attribute [r] channel_uid
28
+ # @return [Things::ChannelUID] The UID of the channel that was linked or unlinked.
29
+ #
30
+ def channel_uid
31
+ Things::ChannelUID.new(channelUID)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "item_event"
4
+
5
+ module OpenHAB
6
+ module Core
7
+ module Events
8
+ java_import org.openhab.core.items.events.ItemCommandEvent
9
+
10
+ # Adds methods to core OpenHAB ItemCommandEvent to make it more natural in Ruby
11
+ class ItemCommandEvent < ItemEvent
12
+ # @!attribute [r] command
13
+ # @return [Type] The command sent to the item.
14
+ alias_method :command, :item_command
15
+
16
+ # @!method refresh?
17
+ # Check if `self == REFRESH`
18
+ # @return [true,false]
19
+
20
+ # @!method on?
21
+ # Check if `self == ON`
22
+ # @return [true,false]
23
+
24
+ # @!method off?
25
+ # Check if `self == OFF`
26
+ # @return [true,false]
27
+
28
+ # @!method up?
29
+ # Check if `self == UP`
30
+ # @return [true,false]
31
+
32
+ # @!method down?
33
+ # Check if `self == DOWN`
34
+ # @return [true,false]
35
+
36
+ # @!method stop?
37
+ # Check if `self == STOP`
38
+ # @return [true,false]
39
+
40
+ # @!method move?
41
+ # Check if `self == MOVE`
42
+ # @return [true,false]
43
+
44
+ # @!method increase?
45
+ # Check if `self == INCREASE`
46
+ # @return [true,false]
47
+
48
+ # @!method decrease?
49
+ # Check if `self == DECREASE`
50
+ # @return [true,false]
51
+
52
+ # @!method play?
53
+ # Check if `self == PLAY`
54
+ # @return [true,false]
55
+
56
+ # @!method pause?
57
+ # Check if `self == PAUSE`
58
+ # @return [true,false]
59
+
60
+ # @!method rewind?
61
+ # Check if `self == REWIND`
62
+ # @return [true,false]
63
+
64
+ # @!method fast_forward?
65
+ # Check if `self == FASTFORWARD`
66
+ # @return [true,false]
67
+
68
+ # @!method next?
69
+ # Check if `self == NEXT`
70
+ # @return [true,false]
71
+
72
+ # @!method previous?
73
+ # Check if `self == PREVIOUS`
74
+ # @return [true,false]
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.items.events.ItemEvent
7
+
8
+ #
9
+ # Adds methods to core OpenHAB ItemEvent to make it more natural in Ruby
10
+ #
11
+ class ItemEvent < AbstractEvent
12
+ #
13
+ # @!attribute [r] item
14
+ # @return [GenericItem] The item that triggered this event.
15
+ #
16
+ def item
17
+ EntityLookup.lookup_item(item_name)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "item_state_event"
4
+
5
+ module OpenHAB
6
+ module Core
7
+ module Events
8
+ java_import org.openhab.core.items.events.ItemStateChangedEvent
9
+
10
+ #
11
+ # Adds methods to core OpenHAB ItemStateChangedEvent to make it more natural in Ruby
12
+ #
13
+ class ItemStateChangedEvent < ItemEvent
14
+ include ItemState
15
+
16
+ #
17
+ # Check if state was == UNDEF
18
+ #
19
+ # @return [true,false] True if the state is UNDEF, false otherwise
20
+ #
21
+ def was_undef?
22
+ old_item_state == UNDEF
23
+ end
24
+
25
+ #
26
+ # Check if state was == NULL
27
+ #
28
+ # @return [true,false] True if the state is NULL, false otherwise
29
+ def was_null?
30
+ old_item_state == NULL
31
+ end
32
+
33
+ #
34
+ # Check if state was defined (not UNDEF or NULL)
35
+ #
36
+ # @return [true,false] True if state is not UNDEF or NULL
37
+ #
38
+ def was?
39
+ !old_item_state.is_a?(UnDefType)
40
+ end
41
+
42
+ #
43
+ # @!attribute [r] was
44
+ # @return [State, nil] The state of the item if it was not {UNDEF} or {NULL}, `nil` otherwise.
45
+ #
46
+ def was
47
+ old_item_state if was?
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.items.events.ItemStateEvent
7
+
8
+ # Helpers common to {ItemStateEvent} and {ItemStateChangedEvent}.
9
+ module ItemState
10
+ #
11
+ # Check if the state == UNDEF
12
+ #
13
+ # @return [true,false] True if the state is UNDEF, false otherwise
14
+ #
15
+ def undef?
16
+ item_state == UNDEF
17
+ end
18
+
19
+ #
20
+ # Check if the state == NULL
21
+ #
22
+ # @return [true,false] True if the state is NULL, false otherwise
23
+ def null?
24
+ item_state == NULL
25
+ end
26
+
27
+ #
28
+ # Check if the state is defined (not UNDEF or NULL)
29
+ #
30
+ # @return [true,false] True if state is not UNDEF or NULL
31
+ #
32
+ def state?
33
+ !item_state.is_a?(UnDefType)
34
+ end
35
+
36
+ #
37
+ # @!attribute [r] state
38
+ # @return [State, nil] The state of the item if it is not {UNDEF} or {NULL}, `nil` otherwise.
39
+ #
40
+ def state
41
+ item_state if state?
42
+ end
43
+ end
44
+
45
+ # {AbstractEvent} sent when an item's state is updated (regardless of if it changed or not).
46
+ class ItemStateEvent < ItemEvent
47
+ include ItemState
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.thing.dto.AbstractThingDTO
7
+
8
+ # Strictly speaking this class isn't an event, but it's accessed from an AbstractThingRegistryEvent
9
+
10
+ # Adds methods to core OpenHAB AbstractThingDTO to make it more natural in Ruby
11
+ class AbstractThingDTO
12
+ # @!method uid
13
+ # The thing's UID
14
+ # @return [String]
15
+ alias_method :uid, :UID
16
+
17
+ # @!method thing_type_uid
18
+ # The thing type's UID
19
+ # @return [String]
20
+ alias_method :thing_type_uid, :thingTypeUID
21
+
22
+ # @!method bridge_uid
23
+ # The bridge's UID
24
+ # @return [String]
25
+ alias_method :bridge_uid, :bridgeUID
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Events
6
+ java_import org.openhab.core.thing.events.ThingStatusInfoChangedEvent,
7
+ org.openhab.core.thing.events.ThingStatusInfoEvent
8
+
9
+ # The {AbstractEvent} sent when a {Things::Thing}'s status has changed.
10
+ class ThingStatusInfoChangedEvent < AbstractEvent
11
+ # @!attribute [r] uid
12
+ # @return [Things::ThingUID] The UID of the [Things::Thing] that triggered this event.
13
+ alias_method :uid, :get_thing_uid
14
+ # @!attribute [r] was
15
+ # @return [Things::ThingStatusInfo] The thing's prior status.
16
+ alias_method :was, :get_old_status_info
17
+ # @!attribute [r] status
18
+ # @return [Things::ThingStatusInfo] The thing's status.
19
+ alias_method :status, :status_info
20
+
21
+ #
22
+ # @!attribute [r] thing
23
+ # @return [Things::Thing] The thing that triggered this event.
24
+ #
25
+ def thing
26
+ EntityLookup.lookup_thing(uid)
27
+ end
28
+ end
29
+
30
+ # The {AbstractEvent} sent when a {Things::Thing}'s status is set.
31
+ class ThingStatusInfoEvent < AbstractEvent
32
+ #
33
+ # @!attribute [r] uid
34
+ # @return [Things::ThingUID] The UID of the [Things::Thing] that triggered this event.
35
+ #
36
+ alias_method :uid, :get_thing_uid
37
+ #
38
+ # @!attribute [r] status
39
+ # @return [Things::ThingStatusInfo] The thing's status.
40
+ #
41
+ alias_method :status, :status_info
42
+
43
+ #
44
+ # @!attribute [r] thing
45
+ # @return [Things::Thing] The thing that triggered this event.
46
+ #
47
+ def thing
48
+ EntityLookup.lookup_thing(uid)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ # Contains objects sent to event handlers containing context around the
6
+ # triggered event.
7
+ module Events
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module Core
5
+ module Items
6
+ class << self
7
+ # @!visibility private
8
+ def prepend_accepted_data_types
9
+ concrete_item_classes.each do |k|
10
+ k.prepend(AcceptedDataTypes)
11
+ end
12
+ end
13
+ end
14
+
15
+ module AcceptedDataTypes
16
+ # @see GenericItem#accepted_command_types
17
+ def accepted_command_types
18
+ super.map { |k| k.is_a?(java.lang.Class) ? k.ruby_class : k }
19
+ end
20
+
21
+ # @see GenericItem#accepted_data_types
22
+ def accepted_data_types
23
+ super.map { |k| k.is_a?(java.lang.Class) ? k.ruby_class : k }
24
+ end
25
+ end
26
+ private_constant :AcceptedDataTypes
27
+ end
28
+ end
29
+ end