openhab-scripting 4.46.2 → 5.0.0

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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab/core/actions/audio.rb +47 -0
  3. data/lib/openhab/core/actions/ephemeris.rb +39 -0
  4. data/lib/openhab/core/actions/exec.rb +51 -0
  5. data/lib/openhab/core/actions/http.rb +80 -0
  6. data/lib/openhab/core/actions/ping.rb +30 -0
  7. data/lib/openhab/core/actions/transformation.rb +32 -0
  8. data/lib/openhab/core/actions/voice.rb +36 -0
  9. data/lib/openhab/core/actions.rb +82 -0
  10. data/lib/openhab/core/dependency_tracking.rb +34 -0
  11. data/lib/openhab/core/dto/item_channel_link.rb +33 -0
  12. data/lib/openhab/core/dto/thing.rb +27 -0
  13. data/lib/openhab/core/dto.rb +11 -0
  14. data/lib/openhab/core/entity_lookup.rb +152 -70
  15. data/lib/openhab/core/events/abstract_event.rb +18 -0
  16. data/lib/openhab/core/events/abstract_item_registry_event.rb +36 -0
  17. data/lib/openhab/core/events/abstract_thing_registry_event.rb +40 -0
  18. data/lib/openhab/core/events/item_command_event.rb +78 -0
  19. data/lib/openhab/core/events/item_event.rb +22 -0
  20. data/lib/openhab/core/events/item_state_changed_event.rb +75 -0
  21. data/lib/openhab/core/events/item_state_event.rb +79 -0
  22. data/lib/openhab/core/events/thing_status_info_event.rb +55 -0
  23. data/lib/openhab/core/events.rb +10 -0
  24. data/lib/openhab/core/items/accepted_data_types.rb +29 -0
  25. data/lib/openhab/core/items/color_item.rb +52 -0
  26. data/lib/openhab/core/items/contact_item.rb +52 -0
  27. data/lib/openhab/core/items/date_time_item.rb +59 -0
  28. data/lib/openhab/core/items/dimmer_item.rb +148 -0
  29. data/lib/openhab/core/items/generic_item.rb +292 -0
  30. data/lib/openhab/core/items/group_item.rb +176 -0
  31. data/lib/openhab/{dsl → core}/items/image_item.rb +35 -29
  32. data/lib/openhab/core/items/item.rb +273 -0
  33. data/lib/openhab/core/items/location_item.rb +34 -0
  34. data/lib/openhab/core/items/metadata/hash.rb +433 -0
  35. data/lib/openhab/core/items/metadata/namespace_hash.rb +475 -0
  36. data/lib/openhab/core/items/metadata/provider.rb +48 -0
  37. data/lib/openhab/core/items/metadata.rb +11 -0
  38. data/lib/openhab/core/items/number_item.rb +62 -0
  39. data/lib/openhab/core/items/numeric_item.rb +22 -0
  40. data/lib/openhab/core/items/persistence.rb +416 -0
  41. data/lib/openhab/core/items/player_item.rb +66 -0
  42. data/lib/openhab/core/items/provider.rb +44 -0
  43. data/lib/openhab/core/items/proxy.rb +136 -0
  44. data/lib/openhab/core/items/registry.rb +86 -0
  45. data/lib/openhab/core/items/rollershutter_item.rb +68 -0
  46. data/lib/openhab/core/items/semantics/enumerable.rb +177 -0
  47. data/lib/openhab/core/items/semantics.rb +473 -0
  48. data/lib/openhab/core/items/state_storage.rb +53 -0
  49. data/lib/openhab/core/items/string_item.rb +28 -0
  50. data/lib/openhab/core/items/switch_item.rb +78 -0
  51. data/lib/openhab/core/items.rb +108 -0
  52. data/lib/openhab/{dsl → core}/lazy_array.rb +9 -3
  53. data/lib/openhab/core/profile_factory.rb +132 -0
  54. data/lib/openhab/core/provider.rb +230 -0
  55. data/lib/openhab/core/proxy.rb +130 -0
  56. data/lib/openhab/core/registry.rb +40 -0
  57. data/lib/openhab/core/rules/module.rb +26 -0
  58. data/lib/openhab/core/rules/provider.rb +25 -0
  59. data/lib/openhab/core/rules/registry.rb +76 -0
  60. data/lib/openhab/core/rules/rule.rb +150 -0
  61. data/lib/openhab/core/rules.rb +25 -0
  62. data/lib/openhab/core/script_handling.rb +78 -20
  63. data/lib/openhab/core/things/channel.rb +48 -0
  64. data/lib/openhab/core/things/channel_uid.rb +51 -0
  65. data/lib/openhab/core/things/item_channel_link.rb +33 -0
  66. data/lib/openhab/core/things/links/provider.rb +78 -0
  67. data/lib/openhab/core/things/profile_callback.rb +52 -0
  68. data/lib/openhab/core/things/provider.rb +29 -0
  69. data/lib/openhab/core/things/proxy.rb +87 -0
  70. data/lib/openhab/core/things/registry.rb +73 -0
  71. data/lib/openhab/core/things/thing.rb +194 -0
  72. data/lib/openhab/core/things.rb +22 -0
  73. data/lib/openhab/core/timer.rb +148 -0
  74. data/lib/openhab/{dsl → core}/types/comparable_type.rb +5 -3
  75. data/lib/openhab/{dsl → core}/types/date_time_type.rb +55 -127
  76. data/lib/openhab/{dsl → core}/types/decimal_type.rb +50 -48
  77. data/lib/openhab/{dsl → core}/types/hsb_type.rb +35 -83
  78. data/lib/openhab/core/types/increase_decrease_type.rb +34 -0
  79. data/lib/openhab/core/types/next_previous_type.rb +34 -0
  80. data/lib/openhab/{dsl → core}/types/numeric_type.rb +20 -7
  81. data/lib/openhab/core/types/on_off_type.rb +46 -0
  82. data/lib/openhab/core/types/open_closed_type.rb +41 -0
  83. data/lib/openhab/{dsl → core}/types/percent_type.rb +19 -20
  84. data/lib/openhab/core/types/play_pause_type.rb +38 -0
  85. data/lib/openhab/core/types/point_type.rb +117 -0
  86. data/lib/openhab/core/types/quantity_type.rb +325 -0
  87. data/lib/openhab/core/types/raw_type.rb +26 -0
  88. data/lib/openhab/core/types/refresh_type.rb +27 -0
  89. data/lib/openhab/core/types/rewind_fastforward_type.rb +38 -0
  90. data/lib/openhab/core/types/stop_move_type.rb +34 -0
  91. data/lib/openhab/{dsl → core}/types/string_type.rb +17 -28
  92. data/lib/openhab/{dsl → core}/types/type.rb +42 -40
  93. data/lib/openhab/core/types/un_def_type.rb +38 -0
  94. data/lib/openhab/core/types/up_down_type.rb +50 -0
  95. data/lib/openhab/core/types.rb +82 -0
  96. data/lib/openhab/{dsl → core}/uid.rb +4 -23
  97. data/lib/openhab/core/value_cache.rb +188 -0
  98. data/lib/openhab/core.rb +98 -0
  99. data/lib/openhab/core_ext/between.rb +32 -0
  100. data/lib/openhab/core_ext/ephemeris.rb +53 -0
  101. data/lib/openhab/core_ext/java/class.rb +34 -0
  102. data/lib/openhab/core_ext/java/duration.rb +142 -0
  103. data/lib/openhab/core_ext/java/list.rb +436 -0
  104. data/lib/openhab/core_ext/java/local_date.rb +104 -0
  105. data/lib/openhab/core_ext/java/local_time.rb +118 -0
  106. data/lib/openhab/core_ext/java/map.rb +66 -0
  107. data/lib/openhab/core_ext/java/month.rb +71 -0
  108. data/lib/openhab/core_ext/java/month_day.rb +119 -0
  109. data/lib/openhab/core_ext/java/period.rb +103 -0
  110. data/lib/openhab/core_ext/java/temporal_amount.rb +34 -0
  111. data/lib/openhab/core_ext/java/time.rb +62 -0
  112. data/lib/openhab/core_ext/java/unit.rb +15 -0
  113. data/lib/openhab/core_ext/java/zoned_date_time.rb +213 -0
  114. data/lib/openhab/core_ext/ruby/array.rb +21 -0
  115. data/lib/openhab/core_ext/ruby/date.rb +96 -0
  116. data/lib/openhab/core_ext/ruby/date_time.rb +55 -0
  117. data/lib/openhab/core_ext/ruby/module.rb +15 -0
  118. data/lib/openhab/core_ext/ruby/numeric.rb +195 -0
  119. data/lib/openhab/core_ext/ruby/range.rb +70 -0
  120. data/lib/openhab/core_ext/ruby/symbol.rb +7 -0
  121. data/lib/openhab/core_ext/ruby/time.rb +108 -0
  122. data/lib/openhab/core_ext.rb +18 -0
  123. data/lib/openhab/dsl/debouncer.rb +259 -0
  124. data/lib/openhab/dsl/events/watch_event.rb +18 -0
  125. data/lib/openhab/dsl/events.rb +9 -0
  126. data/lib/openhab/dsl/gems.rb +1 -1
  127. data/lib/openhab/dsl/items/builder.rb +578 -0
  128. data/lib/openhab/dsl/items/ensure.rb +73 -82
  129. data/lib/openhab/dsl/items/timed_command.rb +214 -159
  130. data/lib/openhab/dsl/rules/automation_rule.rb +126 -115
  131. data/lib/openhab/dsl/rules/builder.rb +1935 -0
  132. data/lib/openhab/dsl/rules/guard.rb +51 -114
  133. data/lib/openhab/dsl/rules/name_inference.rb +66 -25
  134. data/lib/openhab/dsl/rules/property.rb +48 -75
  135. data/lib/openhab/dsl/rules/rule_triggers.rb +22 -27
  136. data/lib/openhab/dsl/rules/terse.rb +58 -14
  137. data/lib/openhab/dsl/rules/triggers/changed.rb +48 -94
  138. data/lib/openhab/dsl/rules/triggers/channel.rb +9 -40
  139. data/lib/openhab/dsl/rules/triggers/command.rb +14 -63
  140. data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +34 -69
  141. data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +6 -14
  142. data/lib/openhab/dsl/rules/triggers/cron/cron.rb +48 -82
  143. data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +30 -47
  144. data/lib/openhab/dsl/rules/triggers/trigger.rb +7 -28
  145. data/lib/openhab/dsl/rules/triggers/updated.rb +21 -45
  146. data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +257 -102
  147. data/lib/openhab/dsl/rules/triggers.rb +12 -0
  148. data/lib/openhab/dsl/rules.rb +8 -0
  149. data/lib/openhab/dsl/things/builder.rb +299 -0
  150. data/lib/openhab/{core → dsl}/thread_local.rb +27 -17
  151. data/lib/openhab/dsl/timer_manager.rb +204 -0
  152. data/lib/openhab/dsl/version.rb +9 -0
  153. data/lib/openhab/dsl.rb +979 -0
  154. data/lib/openhab/log.rb +355 -0
  155. data/lib/openhab/osgi.rb +68 -0
  156. data/lib/openhab/rspec/configuration.rb +56 -0
  157. data/lib/openhab/rspec/example_group.rb +132 -0
  158. data/lib/openhab/rspec/helpers.rb +458 -0
  159. data/lib/openhab/rspec/hooks.rb +113 -0
  160. data/lib/openhab/rspec/jruby.rb +46 -0
  161. data/lib/openhab/rspec/karaf.rb +851 -0
  162. data/lib/openhab/rspec/mocks/bundle_install_support.rb +25 -0
  163. data/lib/openhab/rspec/mocks/bundle_resolver.rb +30 -0
  164. data/lib/openhab/rspec/mocks/event_admin.rb +146 -0
  165. data/lib/openhab/rspec/mocks/instance_method_stasher.rb +22 -0
  166. data/lib/openhab/rspec/mocks/persistence_service.rb +155 -0
  167. data/lib/openhab/rspec/mocks/safe_caller.rb +40 -0
  168. data/lib/openhab/rspec/mocks/space.rb +23 -0
  169. data/lib/openhab/rspec/mocks/synchronous_executor.rb +63 -0
  170. data/lib/openhab/rspec/mocks/thing_handler.rb +76 -0
  171. data/lib/openhab/rspec/mocks/timer.rb +134 -0
  172. data/lib/openhab/rspec/openhab/core/actions.rb +38 -0
  173. data/lib/openhab/rspec/openhab/core/items/proxy.rb +15 -0
  174. data/lib/openhab/rspec/openhab/core/things/proxy.rb +27 -0
  175. data/lib/openhab/rspec/shell.rb +31 -0
  176. data/lib/openhab/rspec/suspend_rules.rb +50 -0
  177. data/lib/openhab/rspec.rb +26 -0
  178. data/lib/openhab/yard/base_helper.rb +19 -0
  179. data/lib/openhab/yard/cli/stats.rb +23 -0
  180. data/lib/openhab/yard/code_objects/group_object.rb +23 -0
  181. data/lib/openhab/yard/code_objects/java/base.rb +31 -0
  182. data/lib/openhab/yard/code_objects/java/class_object.rb +11 -0
  183. data/lib/openhab/yard/code_objects/java/field_object.rb +15 -0
  184. data/lib/openhab/yard/code_objects/java/interface_object.rb +15 -0
  185. data/lib/openhab/yard/code_objects/java/package_object.rb +11 -0
  186. data/lib/openhab/yard/code_objects/java/proxy.rb +23 -0
  187. data/lib/openhab/yard/coderay.rb +17 -0
  188. data/lib/openhab/yard/handlers/jruby/base.rb +58 -0
  189. data/lib/openhab/yard/handlers/jruby/class_handler.rb +18 -0
  190. data/lib/openhab/yard/handlers/jruby/constant_handler.rb +18 -0
  191. data/lib/openhab/yard/handlers/jruby/java_import_handler.rb +30 -0
  192. data/lib/openhab/yard/handlers/jruby/mixin_handler.rb +23 -0
  193. data/lib/openhab/yard/html_helper.rb +78 -0
  194. data/lib/openhab/yard/markdown_helper.rb +148 -0
  195. data/lib/openhab/yard/tags/constant_directive.rb +20 -0
  196. data/lib/openhab/yard/tags/group_directive.rb +24 -0
  197. data/lib/openhab/yard/tags/library.rb +3 -0
  198. data/lib/openhab/yard.rb +38 -0
  199. metadata +475 -106
  200. data/lib/openhab/core/item_proxy.rb +0 -29
  201. data/lib/openhab/core/load_path.rb +0 -19
  202. data/lib/openhab/core/openhab_setup.rb +0 -29
  203. data/lib/openhab/core/osgi.rb +0 -58
  204. data/lib/openhab/core/services.rb +0 -24
  205. data/lib/openhab/dsl/actions.rb +0 -114
  206. data/lib/openhab/dsl/between.rb +0 -25
  207. data/lib/openhab/dsl/channel.rb +0 -43
  208. data/lib/openhab/dsl/dsl.rb +0 -59
  209. data/lib/openhab/dsl/group.rb +0 -54
  210. data/lib/openhab/dsl/imports.rb +0 -21
  211. data/lib/openhab/dsl/items/color_item.rb +0 -76
  212. data/lib/openhab/dsl/items/comparable_item.rb +0 -62
  213. data/lib/openhab/dsl/items/contact_item.rb +0 -41
  214. data/lib/openhab/dsl/items/date_time_item.rb +0 -65
  215. data/lib/openhab/dsl/items/dimmer_item.rb +0 -65
  216. data/lib/openhab/dsl/items/generic_item.rb +0 -229
  217. data/lib/openhab/dsl/items/group_item.rb +0 -127
  218. data/lib/openhab/dsl/items/item_equality.rb +0 -59
  219. data/lib/openhab/dsl/items/item_registry.rb +0 -54
  220. data/lib/openhab/dsl/items/items.rb +0 -109
  221. data/lib/openhab/dsl/items/location_item.rb +0 -59
  222. data/lib/openhab/dsl/items/metadata.rb +0 -326
  223. data/lib/openhab/dsl/items/number_item.rb +0 -17
  224. data/lib/openhab/dsl/items/numeric_item.rb +0 -87
  225. data/lib/openhab/dsl/items/persistence.rb +0 -307
  226. data/lib/openhab/dsl/items/player_item.rb +0 -58
  227. data/lib/openhab/dsl/items/rollershutter_item.rb +0 -51
  228. data/lib/openhab/dsl/items/semantics/enumerable.rb +0 -91
  229. data/lib/openhab/dsl/items/semantics.rb +0 -227
  230. data/lib/openhab/dsl/items/string_item.rb +0 -51
  231. data/lib/openhab/dsl/items/switch_item.rb +0 -70
  232. data/lib/openhab/dsl/monkey_patch/actions/actions.rb +0 -4
  233. data/lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb +0 -39
  234. data/lib/openhab/dsl/monkey_patch/events/events.rb +0 -7
  235. data/lib/openhab/dsl/monkey_patch/events/item_command.rb +0 -85
  236. data/lib/openhab/dsl/monkey_patch/events/item_event.rb +0 -28
  237. data/lib/openhab/dsl/monkey_patch/events/item_state.rb +0 -61
  238. data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +0 -60
  239. data/lib/openhab/dsl/monkey_patch/events/thing_status_info.rb +0 -33
  240. data/lib/openhab/dsl/monkey_patch/java/java.rb +0 -4
  241. data/lib/openhab/dsl/monkey_patch/java/local_time.rb +0 -44
  242. data/lib/openhab/dsl/monkey_patch/java/time_extensions.rb +0 -50
  243. data/lib/openhab/dsl/monkey_patch/java/zoned_date_time.rb +0 -45
  244. data/lib/openhab/dsl/monkey_patch/ruby/number.rb +0 -104
  245. data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -6
  246. data/lib/openhab/dsl/monkey_patch/ruby/string.rb +0 -47
  247. data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -61
  248. data/lib/openhab/dsl/openhab.rb +0 -30
  249. data/lib/openhab/dsl/persistence.rb +0 -27
  250. data/lib/openhab/dsl/rules/item_event.rb +0 -19
  251. data/lib/openhab/dsl/rules/rule.rb +0 -160
  252. data/lib/openhab/dsl/rules/rule_config.rb +0 -147
  253. data/lib/openhab/dsl/rules/triggers/generic.rb +0 -31
  254. data/lib/openhab/dsl/rules/triggers/triggers.rb +0 -11
  255. data/lib/openhab/dsl/rules/triggers/watch/watch.rb +0 -81
  256. data/lib/openhab/dsl/states.rb +0 -89
  257. data/lib/openhab/dsl/things.rb +0 -147
  258. data/lib/openhab/dsl/time/month_day.rb +0 -180
  259. data/lib/openhab/dsl/time/time_of_day.rb +0 -235
  260. data/lib/openhab/dsl/timers/manager.rb +0 -119
  261. data/lib/openhab/dsl/timers/reentrant_timer.rb +0 -38
  262. data/lib/openhab/dsl/timers/timer.rb +0 -132
  263. data/lib/openhab/dsl/timers.rb +0 -77
  264. data/lib/openhab/dsl/types/increase_decrease_type.rb +0 -23
  265. data/lib/openhab/dsl/types/next_previous_type.rb +0 -23
  266. data/lib/openhab/dsl/types/on_off_type.rb +0 -28
  267. data/lib/openhab/dsl/types/open_closed_type.rb +0 -29
  268. data/lib/openhab/dsl/types/play_pause_type.rb +0 -27
  269. data/lib/openhab/dsl/types/point_type.rb +0 -180
  270. data/lib/openhab/dsl/types/quantity_type.rb +0 -265
  271. data/lib/openhab/dsl/types/refresh_type.rb +0 -18
  272. data/lib/openhab/dsl/types/rewind_fastforward_type.rb +0 -33
  273. data/lib/openhab/dsl/types/stop_move_type.rb +0 -23
  274. data/lib/openhab/dsl/types/types.rb +0 -83
  275. data/lib/openhab/dsl/types/un_def_type.rb +0 -22
  276. data/lib/openhab/dsl/types/up_down_type.rb +0 -32
  277. data/lib/openhab/dsl/units.rb +0 -45
  278. data/lib/openhab/log/configuration.rb +0 -21
  279. data/lib/openhab/log/logger.rb +0 -282
  280. data/lib/openhab/version.rb +0 -9
  281. data/lib/openhab.rb +0 -36
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'openhab/log/logger'
4
- require 'openhab/core/services'
5
-
6
- module OpenHAB
7
- #
8
- # Core support for OpenHAB JRuby Library
9
- #
10
- module Core
11
- include OpenHAB::Log
12
-
13
- # @return [Integer] Number of seconds to wait between checks for automation manager
14
- CHECK_DELAY = 10
15
- private_constant :CHECK_DELAY
16
-
17
- #
18
- # Wait until OpenHAB engine ready to process
19
- #
20
- def self.wait_till_openhab_ready
21
- logger.trace('Checking readiness of OpenHAB')
22
- until OpenHAB::Core.automation_manager
23
- logger.trace("Automation manager not loaded, checking again in #{CHECK_DELAY} seconds.")
24
- sleep CHECK_DELAY
25
- end
26
- logger.trace 'Automation manager instantiated, OpenHAB ready for rule processing.'
27
- end
28
- end
29
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
- require 'openhab/log/logger'
5
-
6
- module OpenHAB
7
- module Core
8
- #
9
- # OSGI services interface
10
- #
11
- class OSGI
12
- include OpenHAB::Log
13
-
14
- java_import org.osgi.framework.FrameworkUtil
15
-
16
- #
17
- # @param name [String] The service name
18
- #
19
- # @return [Service]
20
- #
21
- def self.service(name)
22
- ref = bundle_context.getServiceReference(name)
23
- service = bundle_context.getService(ref) if ref
24
- logger.trace "OSGI service(#{service}) found for '#{name}' using OSGI Service Reference #{ref}"
25
-
26
- service
27
- end
28
-
29
- #
30
- # @param name [String] The service name
31
- # @param filter [String] Filter for service names. See https://docs.osgi.org/javadoc/r4v43/core/org/osgi/framework/Filter.html
32
- #
33
- # @return [Array] An array of services
34
- #
35
- def self.services(name, filter: nil)
36
- bundle_context.getServiceReferences(name, filter)&.map do |reference|
37
- bundle_context.getService(reference)
38
- end
39
- end
40
-
41
- #
42
- # Get the bundle context
43
- #
44
- # @return [java::org::osgi::framework::BundleContext] OSGI bundle context
45
- #
46
- def self.bundle_context
47
- @bundle_context ||= bundle.getBundleContext
48
- end
49
- private_class_method :bundle_context
50
-
51
- # Get the OSGI Bundle for ScriptExtension Class
52
- def self.bundle
53
- @bundle ||= FrameworkUtil.getBundle($scriptExtension.class)
54
- end
55
- private_class_method :bundle
56
- end
57
- end
58
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OpenHAB
4
- #
5
- # Core support for OpenHAB JRuby Library
6
- #
7
- module Core
8
- #
9
- # Access OpenHAB services
10
- #
11
-
12
- # Get the OpenHAB automation manager
13
- # @return [AutomationManager] OpenHAB Automation manager
14
- def self.automation_manager
15
- $scriptExtension.get('automationManager')
16
- end
17
-
18
- # Get the OpenHAB rule registry
19
- # @return [Registory] OpenHAB rule registry
20
- def self.rule_registry
21
- $scriptExtension.get('ruleRegistry')
22
- end
23
- end
24
- end
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
- require 'openhab/core/osgi'
5
-
6
- module OpenHAB
7
- module DSL
8
- #
9
- # Module to import and streamline access to OpenHAB actions
10
- #
11
- module Actions
12
- include OpenHAB::Log
13
-
14
- OpenHAB::Core::OSGI.services('org.openhab.core.model.script.engine.action.ActionService')&.each do |service|
15
- java_import service.actionClass.to_s
16
- logger.trace("Loaded ACTION: #{service.actionClass}")
17
- end
18
- # Import common actions
19
- %w[Exec HTTP Ping].each { |action| java_import "org.openhab.core.model.script.actions.#{action}" }
20
-
21
- module_function
22
-
23
- #
24
- # Return an OpenHAB Action object for the given scope and thing
25
- #
26
- # @param scope [String] The action scope
27
- # @param thing_uid [String] Thing UID
28
- #
29
- # @return [Object] OpenHAB action
30
- #
31
- def actions(scope, thing_uid)
32
- $actions.get(scope, thing_uid)
33
- end
34
-
35
- #
36
- # Gets the list of action objects associated with a specific ThingUID
37
- #
38
- # @param [org.openhab.core.thing.ThingUID] thing_uid to get associated actions for
39
- #
40
- # @return [Array] of action objects associated with thing_uid, may be empty
41
- #
42
- def actions_for_thing(thing_uid)
43
- thing_uid = thing_uid.to_s
44
- action_keys = $actions.action_keys
45
- logger.trace("Registered actions: '#{action_keys}' for thing '#{thing_uid}'")
46
- action_keys.map { |action_key| action_key.split('-', 2) }
47
- .select { |action_pair| action_pair.last == thing_uid }
48
- .map(&:first)
49
- .map { |scope| actions(scope, thing_uid) }
50
- end
51
-
52
- #
53
- # Send notification to an email or broadcast
54
- #
55
- # @param msg [String] The notification message to send
56
- # @param email [String] The email address to send to. If nil, the message will be broadcasted
57
- #
58
- # @return [void]
59
- #
60
- def notify(msg, email: nil)
61
- unless defined? NotificationAction
62
- raise NoMethodError, 'NotificationAction is not available. Please install the OpenHAB cloud addon'
63
- end
64
-
65
- if email
66
- NotificationAction.sendNotification email.to_s, msg.to_s
67
- else
68
- NotificationAction.sendBroadcastNotification msg.to_s
69
- end
70
- end
71
-
72
- #
73
- # Say text via OpenHAB Text-To-Speech service, Voice.say()
74
- #
75
- # @param text [String] The text to say
76
- # @param voice [String] Specify a particular voice to use
77
- # @param sink [String] Specify a particular sink to output the speech
78
- # @param volume [PercentType] Specify the volume for the speech
79
- #
80
- # @return [void]
81
- #
82
- def say(text, voice: nil, sink: nil, volume: nil)
83
- volume = Types::PercentType.new(volume) unless volume.is_a?(Types::PercentType) || volume.nil?
84
- Voice.say text.to_s, voice&.to_s, sink&.to_s, volume
85
- end
86
-
87
- #
88
- # Play an audio file via OpenHAB sound service, Audio.playSound()
89
- #
90
- # @param filename [String] The sound file to play
91
- # @param sink [String] Specify a particular sink to output the speech
92
- # @param volume [PercentType] Specify the volume for the speech
93
- #
94
- # @return [void]
95
- #
96
- def play_sound(filename, sink: nil, volume: nil)
97
- volume = Types::PercentType.new(volume) unless volume.is_a?(Types::PercentType) || volume.nil?
98
- Audio.playSound sink&.to_s, filename.to_s, volume
99
- end
100
-
101
- #
102
- # Play an audio stream from an URL to the given sink(s). Set url to nil if streaming should be stopped
103
- #
104
- # @param [String] url The URL of the audio stream
105
- # @param [String] sink The audio sink, or nil to use the default audio sink
106
- #
107
- # @return [void]
108
- #
109
- def play_stream(url, sink: nil)
110
- Audio.playStream sink&.to_s, url
111
- end
112
- end
113
- end
114
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'time/time_of_day'
4
- require_relative 'time/month_day'
5
-
6
- module OpenHAB
7
- module DSL
8
- # Supports between range syntax
9
- module Between
10
- module_function
11
-
12
- # Creates a range that can be compared against time of day/month days or strings
13
- # to see if they are within the range
14
- # @since 2.4.0
15
- # @return Range object representing a TimeOfDay Range
16
- def between(range)
17
- raise ArgumentError, 'Supplied object must be a range' unless range.is_a? Range
18
-
19
- return OpenHAB::DSL::Between::MonthDayRange.range(range) if OpenHAB::DSL::Between::MonthDayRange.range?(range)
20
-
21
- OpenHAB::DSL::Between::TimeOfDay.between(range)
22
- end
23
- end
24
- end
25
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
-
5
- module OpenHAB
6
- module DSL
7
- java_import org.openhab.core.thing.Channel
8
- java_import org.openhab.core.thing.ChannelUID
9
-
10
- # Adds methods to core OpenHAB Channel to make it more natural in Ruby
11
- class Channel
12
- extend Forwardable
13
-
14
- delegate %i[thing item items] => :uid
15
- end
16
-
17
- # Adds methods to core OpenHAB ChannelUID to make it more natural in Ruby
18
- class ChannelUID
19
- # Return the thing this channel is associated with.
20
- #
21
- # @return [Thing] The thing associated with this channel or nil
22
- def thing
23
- things[thing_uid]
24
- end
25
-
26
- # Return the item if this channel is linked with an item. If a channel is linked to more than one item,
27
- # this method only returns the first item.
28
- #
29
- # @return [GenericItem] The item associated with this channel or nil
30
- def item
31
- items.first
32
- end
33
-
34
- # Returns all of the channel's linked items.
35
- #
36
- # @return [Array<GenericItem>] An array of things or an empty array
37
- def items
38
- registry = OpenHAB::Core::OSGI.service('org.openhab.core.thing.link.ItemChannelLinkRegistry')
39
- registry.get_linked_items(self).to_a
40
- end
41
- end
42
- end
43
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'imports'
4
-
5
- OpenHAB::DSL.import_presets
6
-
7
- require 'openhab/log/logger'
8
-
9
- # the order of these is important
10
- require_relative 'types/types'
11
- require_relative 'items/items'
12
-
13
- require_relative 'monkey_patch/ruby/ruby'
14
- require_relative 'monkey_patch/java/java'
15
- require_relative 'monkey_patch/events/events'
16
- require_relative 'monkey_patch/actions/actions'
17
-
18
- require_relative 'rules/rule'
19
- require_relative 'rules/terse'
20
- require_relative 'actions'
21
- require_relative 'channel'
22
- require_relative 'timers'
23
- require_relative 'group'
24
- require_relative 'things'
25
- require_relative 'between'
26
- require_relative 'gems'
27
- require_relative 'persistence'
28
- require_relative 'uid'
29
- require_relative 'units'
30
- require_relative 'states'
31
- require_relative 'openhab'
32
-
33
- module OpenHAB
34
- #
35
- # Module to be extended to access the OpenHAB Ruby DSL
36
- #
37
- module DSL
38
- # Extend the calling module/class with the DSL
39
- # Disabling method length because they are all includes
40
- # rubocop:disable Metrics/MethodLength
41
- def self.extended(base)
42
- base.send :include, OpenHAB::DSL::Actions
43
- base.send :include, OpenHAB::DSL::Between
44
- base.send :include, OpenHAB::DSL::Core
45
- base.send :include, OpenHAB::DSL::Groups
46
- base.send :include, OpenHAB::DSL::Items
47
- base.send :include, OpenHAB::DSL::Persistence
48
- base.send :include, OpenHAB::DSL::Rules::Rule
49
- base.send :include, OpenHAB::DSL::Rules::TerseRule
50
- base.send :include, OpenHAB::DSL::States
51
- base.send :include, OpenHAB::DSL::Things
52
- base.send :include, OpenHAB::DSL::Timers
53
- base.send :include, OpenHAB::DSL::Between
54
- base.send :include, OpenHAB::DSL::Types
55
- base.send :include, OpenHAB::DSL::Units
56
- end
57
- # rubocop:enable Metrics/MethodLength
58
- end
59
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'singleton'
4
-
5
- require 'openhab/core/entity_lookup'
6
- require 'openhab/dsl/lazy_array'
7
-
8
- module OpenHAB
9
- module DSL
10
- #
11
- # Provides access to OpenHAB Groups
12
- #
13
- module Groups
14
- module_function
15
-
16
- #
17
- # Retrieve all OpenHAB groups
18
- #
19
- # @return [Set] of OpenHAB Groups
20
- #
21
- def groups
22
- OpenHAB::DSL::Support::Groups.instance
23
- end
24
- end
25
-
26
- module Support
27
- #
28
- # Provide access to groups as a set
29
- #
30
- class Groups
31
- include LazyArray
32
- include Singleton
33
-
34
- #
35
- # Get a OpenHAB Group by name
36
- # @param [String] name of the group to retrieve
37
- #
38
- # @return [Set] of OpenHAB Groups
39
- #
40
- def [](name)
41
- group = OpenHAB::Core::EntityLookup.lookup_item(name)
42
- group.is_a?(OpenHAB::DSL::Items::GroupItem) ? group : nil
43
- end
44
- alias include? []
45
- alias key? include?
46
-
47
- # explicit conversion to array
48
- def to_a
49
- $ir.items.grep(org.openhab.core.items.GroupItem)
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OpenHAB
4
- module DSL
5
- include OpenHAB::Log
6
- #
7
- # Import required java classes
8
- #
9
- def self.import_presets # rubocop:disable Metrics/AbcSize
10
- return if Object.const_get(:ZonedDateTime).is_a?(Class)
11
-
12
- # Fix the import problem in OpenHAB 3.2 addon. Not required in 3.3+
13
- [java.time.Duration,
14
- java.time.ZonedDateTime,
15
- java.time.ZoneId,
16
- java.time.temporal.ChronoUnit].each do |klass|
17
- Object.const_set(klass.java_class.simple_name.to_sym, klass)
18
- end
19
- end
20
- end
21
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
-
5
- require_relative 'comparable_item'
6
- require 'openhab/dsl/types/hsb_type'
7
-
8
- module OpenHAB
9
- module DSL
10
- module Items
11
- java_import org.openhab.core.library.items.ColorItem
12
-
13
- # Adds methods to core OpenHAB ColorItem type to make it more natural in
14
- # Ruby
15
- class ColorItem < DimmerItem
16
- extend Forwardable
17
- include ComparableItem
18
-
19
- # !@visibility private
20
- def ==(other)
21
- # need to check if we're referring to the same item before
22
- # forwarding to <=> (and thus checking equality with state)
23
- return true if equal?(other) || eql?(other)
24
-
25
- super
26
- end
27
-
28
- #
29
- # Type Coercion
30
- #
31
- # Coerce object to a HSBType
32
- #
33
- # @param [Types::HSBType, String] other object to coerce to a
34
- # HSBType
35
- #
36
- # @return [[Types::HSBType, Types::HSBType]]
37
- #
38
- def coerce(other)
39
- logger.trace("Coercing #{self} as a request from #{other.class}")
40
- return [other, nil] unless state?
41
- return [other, state] if other.is_a?(Types::HSBType) || other.respond_to?(:to_str)
42
- end
43
-
44
- # any method that exists on {Types::HSBType} gets forwarded to +state+
45
- delegate (Types::HSBType.instance_methods - instance_methods) => :state
46
-
47
- # string commands aren't allowed on ColorItems, so try to implicitly
48
- # convert it to an HSBType
49
- # @!visibility private
50
- def format_type(command)
51
- return format_hash(command.to_hash) if command.respond_to?(:to_hash)
52
- return Types::HSBType.new(command) if command.respond_to?(:to_str)
53
-
54
- super
55
- end
56
-
57
- private
58
-
59
- # Mapping of hash values sets to conversion methods
60
- HASH_KEYS = { %i[r g b] => :from_rgb,
61
- %i[red green blue] => :from_rgb,
62
- %i[h s b] => :from_hsb,
63
- %i[hue saturation brightness] => :from_hsb }.freeze
64
-
65
- def format_hash(hash)
66
- hash = hash.transform_keys(&:to_sym)
67
- HASH_KEYS.each do |key_set, method|
68
- values = hash.values_at(*key_set).compact
69
- return Types::HSBType.public_send(method, *values) if values.length == 3
70
- end
71
- raise ArgumentError, "Supplied hash (#{hash}) must contain one of the following keysets #{keys.keys}"
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OpenHAB
4
- module DSL
5
- module Items
6
- # Mixin for implementing the comparison operator for Item types that
7
- # support it
8
- module ComparableItem
9
- #
10
- # Comparison
11
- #
12
- # @param [GenericItem, Types::Type, Object, GenericItemObject] other object to
13
- # compare to
14
- #
15
- # When comparing GenericItemObject on either side, perform object comparison
16
- # return 0 if the object is equal, or nil otherwise.
17
- #
18
- # If this item is +NULL+ or +UNDEF+, and +other+ is nil, they are
19
- # considered equal
20
- #
21
- # If this item is +NULL+ or +UNDEF+, and other is a {GenericItem}, they
22
- # are only considered equal if the other item is in the exact same
23
- # state (i.e. +NULL+ != +UNDEF+)
24
- #
25
- # Otherwise, the state of this item is compared with +other+
26
- #
27
- # @return [Integer, nil] -1, 0, +1 depending on whether +other+ is
28
- # less than, equal to, or greater than self
29
- #
30
- # nil is returned if the two values are incomparable
31
- #
32
- def <=>(other)
33
- logger.trace("(#{self.class}) #{self} <=> #{other} (#{other.class})")
34
-
35
- if is_a?(OpenHAB::DSL::GenericItemObject) || other.is_a?(OpenHAB::DSL::GenericItemObject)
36
- return eql?(other) ? 0 : nil
37
- end
38
-
39
- # if we're NULL or UNDEF, implement special logic
40
- return nil_comparison(other) unless state?
41
-
42
- # delegate to how the state compares to the other object
43
- state <=> other
44
- end
45
-
46
- # Special logic for NULL/UNDEF state comparison
47
- # @!visibility private
48
- def nil_comparison(other)
49
- # if comparing to nil, consider ourselves equal
50
- return 0 if other.nil?
51
-
52
- # if the other object is an Item, only consider equal if we're
53
- # in the same _kind_ of UnDefType state
54
- return raw_state == other.raw_state if other.is_a?(GenericItem) && !other.state?
55
-
56
- # otherwise, it's a non-nil thing comparing to nil, which is undefined
57
- nil
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OpenHAB
4
- module DSL
5
- #
6
- # Patches OpenHAB items
7
- #
8
- module Items
9
- java_import org.openhab.core.library.items.ContactItem
10
-
11
- # Alias class for ContactItem
12
- ::Contact = ContactItem
13
-
14
- # Adds methods to core OpenHAB ContactItem type to make it more natural
15
- # in Ruby
16
- class ContactItem < GenericItem
17
- remove_method :==
18
-
19
- #
20
- # Return the inverted state of the contact: +CLOSED+ if the contact is
21
- # +OPEN+, +UNDEF+ or +NULL+; +OPEN+ if the contact is +CLOSED+
22
- #
23
- # @return [Types::OpenClosedType] Inverted state
24
- #
25
- def !
26
- return !state if state?
27
-
28
- CLOSED
29
- end
30
-
31
- # @!method open?
32
- # Check if the item state == +OPEN+
33
- # @return [Boolean]
34
-
35
- # @!method closed?
36
- # Check if the item state == +CLOSED+
37
- # @return [Boolean]
38
- end
39
- end
40
- end
41
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
- require 'time'
5
- require 'java'
6
-
7
- require 'openhab/dsl/items/comparable_item'
8
-
9
- module OpenHAB
10
- module DSL
11
- module Items
12
- java_import org.openhab.core.library.items.DateTimeItem
13
- java_import java.time.format.DateTimeFormatter
14
-
15
- # Adds methods to core OpenHAB DateTimeItem type to make it more natural
16
- # in Ruby
17
- class DateTimeItem < GenericItem
18
- extend Forwardable
19
- include Comparable
20
- include ComparableItem
21
-
22
- # !@visibility private
23
- def ==(other)
24
- # need to check if we're referring to the same item before
25
- # forwarding to <=> (and thus checking equality with state)
26
- return true if equal?(other) || eql?(other)
27
-
28
- super
29
- end
30
-
31
- #
32
- # Type Coercion
33
- #
34
- # Coerce object to a DateTimeType
35
- #
36
- # @param [Types::DateTimeType, Time] other object to coerce to a
37
- # DateTimeType
38
- #
39
- # @return [[Types::DateTimeType, Types::DateTimeType]]
40
- #
41
- def coerce(other)
42
- logger.trace("Coercing #{self} as a request from #{other.class}")
43
- return [other, nil] unless state?
44
- return [other, state] if other.is_a?(Types::DateTimeType) || other.respond_to?(:to_time)
45
- end
46
-
47
- # any method that exists on DateTimeType, Java's ZonedDateTime, or
48
- # Ruby's Time class gets forwarded to state (which will forward as
49
- # necessary)
50
- delegate ((Types::DateTimeType.instance_methods +
51
- java.time.ZonedDateTime.instance_methods +
52
- Time.instance_methods) - instance_methods) => :state
53
-
54
- # Time types need formatted as ISO8601
55
- # @!visibility private
56
- def format_type(command)
57
- return command.iso8601 if command.respond_to?(:iso8601)
58
- return DateTimeFormatter::ISO_OFFSET_DATE_TIME.format(command) if command.is_a? java.time.ZonedDateTime
59
-
60
- super
61
- end
62
- end
63
- end
64
- end
65
- end