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
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "singleton"
4
+
5
+ require "openhab/core/entity_lookup"
6
+ require "openhab/core/lazy_array"
7
+ require "openhab/dsl/items/builder"
8
+
9
+ module OpenHAB
10
+ module Core
11
+ module Items
12
+ #
13
+ # Provides access to all openHAB {Item items}, and acts like an array.
14
+ #
15
+ class Registry
16
+ include LazyArray
17
+ include Singleton
18
+
19
+ # Fetches the named item from the the ItemRegistry
20
+ # @param [String] name
21
+ # @return [Item] Item from registry, nil if item missing or requested item is a Group Type
22
+ def [](name)
23
+ EntityLookup.lookup_item(name)
24
+ rescue org.openhab.core.items.ItemNotFoundException
25
+ nil
26
+ end
27
+
28
+ # Returns true if the given item name exists
29
+ # @param name [String] Item name to check
30
+ # @return [true,false] true if the item exists, false otherwise
31
+ def key?(name)
32
+ !$ir.getItems(name).empty?
33
+ end
34
+ alias_method :include?, :key?
35
+ # @deprecated
36
+ alias_method :has_key?, :key?
37
+
38
+ # Explicit conversion to array
39
+ # @return [Array]
40
+ def to_a
41
+ $ir.items.map { |item| Proxy.new(item) }
42
+ end
43
+
44
+ #
45
+ # Enter the Item Builder DSL.
46
+ #
47
+ # @param (see Core::Provider.current)
48
+ # @yield Block executed in the context of a {DSL::Items::Builder}
49
+ # @return [Object] The return value of the block.
50
+ #
51
+ # (see Items::Builder)
52
+ #
53
+ def build(preferred_provider = nil, &block)
54
+ DSL::Items::BaseBuilderDSL.new(preferred_provider).instance_eval_with_dummy_items(&block)
55
+ end
56
+
57
+ #
58
+ # Remove an item.
59
+ #
60
+ # The item must be a managed item (typically created by Ruby or in the UI).
61
+ #
62
+ # Any associated metadata or channel links are also removed.
63
+ #
64
+ # @param [String, Item] item_name
65
+ # @param recursive [true, false] Remove the item's members if it's a group
66
+ # @return [Item, nil] The removed item, if found.
67
+ def remove(item_name, recursive: false)
68
+ item_name = item_name.name if item_name.is_a?(Item)
69
+ provider = Provider.registry.provider_for(item_name)
70
+ unless provider.is_a?(ManagedProvider)
71
+ raise "Cannot remove item #{item_name} from non-managed provider #{provider.inspect}"
72
+ end
73
+
74
+ Metadata::Provider.registry.providers.grep(ManagedProvider).each do |managed_provider|
75
+ managed_provider.remove_item_metadata(item_name)
76
+ end
77
+
78
+ Things::Links::Provider.registry.providers.grep(ManagedProvider).each do |managed_provider|
79
+ managed_provider.remove_links_for_item(item_name)
80
+ end
81
+ provider.remove(item_name, recursive)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "generic_item"
4
+ require_relative "numeric_item"
5
+
6
+ module OpenHAB
7
+ module Core
8
+ module Items
9
+ java_import org.openhab.core.library.items.RollershutterItem
10
+
11
+ #
12
+ # A {RollershutterItem} allows the control of roller shutters, i.e.
13
+ # moving them up, down, stopping or setting it to close to a certain
14
+ # percentage.
15
+ #
16
+ # @!attribute [r] state
17
+ # @return [PercentType, UpDownType, nil]
18
+ #
19
+ # @example Roll up all Rollershutters in a group
20
+ # Shutters.up
21
+ #
22
+ # @example Log a warning for all rollershutters that are not up
23
+ # Shutters.reject(&:up?).each do |item|
24
+ # logger.warn("#{item.name} is not rolled up!")
25
+ # end
26
+ #
27
+ # @example Set rollershutter to a specified position
28
+ # Example_Rollershutter << 40
29
+ class RollershutterItem < GenericItem
30
+ include NumericItem
31
+
32
+ # @!method up?
33
+ # Check if the item state == {UP}
34
+ # @return [true,false]
35
+
36
+ # @!method down?
37
+ # Check if the item state == {DOWN}
38
+ # @return [true,false]
39
+
40
+ # @!method up
41
+ # Send the {UP} command to the item
42
+ # @return [RollershutterItem] `self`
43
+
44
+ # @!method down
45
+ # Send the {DOWN} command to the item
46
+ # @return [RollershutterItem] `self`
47
+
48
+ # @!method stop
49
+ # Send the {STOP} command to the item
50
+ # @return [RollershutterItem] `self`
51
+
52
+ # @!method move
53
+ # Send the {MOVE} command to the item
54
+ # @return [RollershutterItem] `self`
55
+
56
+ # raw numbers translate directly to PercentType, not a DecimalType
57
+ # @!visibility private
58
+ def format_type(command)
59
+ return Types::PercentType.new(command) if command.is_a?(Numeric)
60
+
61
+ super
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ # @!parse RollershutterItem = OpenHAB::Core::Items::RollershutterItem
@@ -0,0 +1,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Additions to Enumerable to allow easily filtering and commanding groups of items.
5
+ #
6
+ # @example Turn on all members of a group
7
+ # gOutsideLights.members.on
8
+ #
9
+ # @example Turn on all lights that are tagged `NightLights`
10
+ # items.tagged("NightLights").on
11
+ #
12
+ # @example Close all blinds in the same room when the TV is turned on
13
+ # rule "Close Blinds" do
14
+ # changed gTVPower.members, to: ON
15
+ # triggered do |item|
16
+ # item.location
17
+ # .equipments(Semantics::Blinds)
18
+ # .points(Semantics::OpenLevel)
19
+ # .down
20
+ # end
21
+ # end
22
+ #
23
+ # @example {OpenHAB::DSL::Items::Ensure::Ensurable Ensure} works on Enumerable
24
+ # gLights.members.ensure.on
25
+ # # or
26
+ # gLights.members.ensure << ON
27
+ #
28
+ # @example Send a command to a list of items
29
+ # [Light1, Light2, Light3].on
30
+ # # or
31
+ # [Light1, Light2, Light3].command(ON) # can't use <<, because that's already defined on Array
32
+ #
33
+ # @see OpenHAB::Core::Items::Semantics Semantics
34
+ #
35
+
36
+ module Enumerable
37
+ #
38
+ # @!group Filtering Methods
39
+ # Methods to help filter the members of the Enumerable
40
+ #
41
+
42
+ # Returns a new array of items that have at least one of the given tags
43
+ #
44
+ # @param tags [String, Module]
45
+ # @return [Array<Item>]
46
+ def tagged(*tags)
47
+ select { |i| i.tagged?(*tags) }
48
+ end
49
+
50
+ # Returns a new array of items that do not have any of the given tags
51
+ # @param tags [String, Module]
52
+ # @return [Array<Item>]
53
+ def not_tagged(*tags)
54
+ reject { |i| i.tagged?(*tags) }
55
+ end
56
+
57
+ # Returns a new array of items that are a member of at least one of the given groups
58
+ # @param groups [String, GroupItem]
59
+ # @return [Array<Item>]
60
+ def member_of(*groups)
61
+ select { |i| i.member_of?(*groups) }
62
+ end
63
+
64
+ # Returns a new array of items that are not a member of any of the given groups
65
+ # @param groups [String, GroupItem]
66
+ # @return [Array<Item>]
67
+ def not_member_of(*groups)
68
+ reject { |i| i.member_of?(*groups) }
69
+ end
70
+
71
+ # Returns the group members of all group elements
72
+ # @return [Array<Item>]
73
+ def members
74
+ grep(OpenHAB::Core::Items::GroupItem).flat_map(&:members).uniq
75
+ end
76
+
77
+ # Returns all non-group members of all group elements, recursively
78
+ # @return [Array<Item>]
79
+ def all_members
80
+ grep(OpenHAB::Core::Items::GroupItem).flat_map(&:all_members).uniq
81
+ end
82
+
83
+ # Returns the groups of all elements
84
+ # @return [Array<GroupItem>]
85
+ def groups
86
+ flat_map(&:groups).uniq
87
+ end
88
+
89
+ # Returns all groups all elements are a part of, recursively
90
+ # @return [Array<GroupItem>]
91
+ def all_groups
92
+ flat_map(&:all_groups).uniq
93
+ end
94
+
95
+ # @!group Items State and Command Methods
96
+
97
+ # Send a command to every item in the collection
98
+ # @return [self, nil] nil when `ensure` is in effect and all the items were already in the same state,
99
+ # otherwise self
100
+ def command(command)
101
+ self if count { |i| i.command(command) }.positive?
102
+ end
103
+
104
+ # Update the state of every item in the collection
105
+ # @return [self, nil] nil when `ensure` is in effect and all the items were already in the same state,
106
+ # otherwise self
107
+ def update(state)
108
+ self if count { |i| i.update(state) }.positive?
109
+ end
110
+
111
+ # @!method refresh
112
+ # Send the {REFRESH} command to every item in the collection
113
+ # @return [self]
114
+
115
+ # @!method on
116
+ # Send the {ON} command to every item in the collection
117
+ # @return [self]
118
+
119
+ # @!method off
120
+ # Send the {OFF} command to every item in the collection
121
+ # @return [self]
122
+
123
+ # @!method up
124
+ # Send the {UP} command to every item in the collection
125
+ # @return [self]
126
+
127
+ # @!method down
128
+ # Send the {DOWN} command to every item in the collection
129
+ # @return [self]
130
+
131
+ # @!method stop
132
+ # Send the {STOP} command to every item in the collection
133
+ # @return [self]
134
+
135
+ # @!method move
136
+ # Send the {MOVE} command to every item in the collection
137
+ # @return [self]
138
+
139
+ # @!method increase
140
+ # Send the {INCREASE} command to every item in the collection
141
+ # @return [self]
142
+
143
+ # @!method decrease
144
+ # Send the {DECREASE} command to every item in the collection
145
+ # @return [self]
146
+
147
+ # @!method play
148
+ # Send the {PLAY} command to every item in the collection
149
+ # @return [self]
150
+
151
+ # @!method pause
152
+ # Send the {PAUSE} command to every item in the collection
153
+ # @return [self]
154
+
155
+ # @!method rewind
156
+ # Send the {REWIND} command to every item in the collection
157
+ # @return [self]
158
+
159
+ # @!method fast_forward
160
+ # Send the {FASTFORWARD} command to every item in the collection
161
+ # @return [self]
162
+
163
+ # @!method next
164
+ # Send the {NEXT} command to every item in the collection
165
+ # @return [self]
166
+
167
+ # @!method previous
168
+ # Send the {PREVIOUS} command to every item in the collection
169
+ # @return [self]
170
+
171
+ # @!visibility private
172
+ # can't use `include`, because Enumerable has already been included
173
+ # in other classes
174
+ def ensure
175
+ OpenHAB::DSL::Items::Ensure::ItemDelegate.new(self)
176
+ end
177
+ end