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.
- checksums.yaml +4 -4
- data/lib/openhab/core/actions/audio.rb +47 -0
- data/lib/openhab/core/actions/ephemeris.rb +39 -0
- data/lib/openhab/core/actions/exec.rb +51 -0
- data/lib/openhab/core/actions/http.rb +80 -0
- data/lib/openhab/core/actions/ping.rb +30 -0
- data/lib/openhab/core/actions/transformation.rb +32 -0
- data/lib/openhab/core/actions/voice.rb +36 -0
- data/lib/openhab/core/actions.rb +82 -0
- data/lib/openhab/core/dependency_tracking.rb +34 -0
- data/lib/openhab/core/dto/item_channel_link.rb +33 -0
- data/lib/openhab/core/dto/thing.rb +27 -0
- data/lib/openhab/core/dto.rb +11 -0
- data/lib/openhab/core/entity_lookup.rb +152 -70
- data/lib/openhab/core/events/abstract_event.rb +18 -0
- data/lib/openhab/core/events/abstract_item_registry_event.rb +36 -0
- data/lib/openhab/core/events/abstract_thing_registry_event.rb +40 -0
- data/lib/openhab/core/events/item_command_event.rb +78 -0
- data/lib/openhab/core/events/item_event.rb +22 -0
- data/lib/openhab/core/events/item_state_changed_event.rb +75 -0
- data/lib/openhab/core/events/item_state_event.rb +79 -0
- data/lib/openhab/core/events/thing_status_info_event.rb +55 -0
- data/lib/openhab/core/events.rb +10 -0
- data/lib/openhab/core/items/accepted_data_types.rb +29 -0
- data/lib/openhab/core/items/color_item.rb +52 -0
- data/lib/openhab/core/items/contact_item.rb +52 -0
- data/lib/openhab/core/items/date_time_item.rb +59 -0
- data/lib/openhab/core/items/dimmer_item.rb +148 -0
- data/lib/openhab/core/items/generic_item.rb +292 -0
- data/lib/openhab/core/items/group_item.rb +176 -0
- data/lib/openhab/{dsl → core}/items/image_item.rb +35 -29
- data/lib/openhab/core/items/item.rb +273 -0
- data/lib/openhab/core/items/location_item.rb +34 -0
- data/lib/openhab/core/items/metadata/hash.rb +433 -0
- data/lib/openhab/core/items/metadata/namespace_hash.rb +475 -0
- data/lib/openhab/core/items/metadata/provider.rb +48 -0
- data/lib/openhab/core/items/metadata.rb +11 -0
- data/lib/openhab/core/items/number_item.rb +62 -0
- data/lib/openhab/core/items/numeric_item.rb +22 -0
- data/lib/openhab/core/items/persistence.rb +416 -0
- data/lib/openhab/core/items/player_item.rb +66 -0
- data/lib/openhab/core/items/provider.rb +44 -0
- data/lib/openhab/core/items/proxy.rb +136 -0
- data/lib/openhab/core/items/registry.rb +86 -0
- data/lib/openhab/core/items/rollershutter_item.rb +68 -0
- data/lib/openhab/core/items/semantics/enumerable.rb +177 -0
- data/lib/openhab/core/items/semantics.rb +473 -0
- data/lib/openhab/core/items/state_storage.rb +53 -0
- data/lib/openhab/core/items/string_item.rb +28 -0
- data/lib/openhab/core/items/switch_item.rb +78 -0
- data/lib/openhab/core/items.rb +108 -0
- data/lib/openhab/{dsl → core}/lazy_array.rb +9 -3
- data/lib/openhab/core/profile_factory.rb +132 -0
- data/lib/openhab/core/provider.rb +230 -0
- data/lib/openhab/core/proxy.rb +130 -0
- data/lib/openhab/core/registry.rb +40 -0
- data/lib/openhab/core/rules/module.rb +26 -0
- data/lib/openhab/core/rules/provider.rb +25 -0
- data/lib/openhab/core/rules/registry.rb +76 -0
- data/lib/openhab/core/rules/rule.rb +150 -0
- data/lib/openhab/core/rules.rb +25 -0
- data/lib/openhab/core/script_handling.rb +78 -20
- data/lib/openhab/core/things/channel.rb +48 -0
- data/lib/openhab/core/things/channel_uid.rb +51 -0
- data/lib/openhab/core/things/item_channel_link.rb +33 -0
- data/lib/openhab/core/things/links/provider.rb +78 -0
- data/lib/openhab/core/things/profile_callback.rb +52 -0
- data/lib/openhab/core/things/provider.rb +29 -0
- data/lib/openhab/core/things/proxy.rb +87 -0
- data/lib/openhab/core/things/registry.rb +73 -0
- data/lib/openhab/core/things/thing.rb +194 -0
- data/lib/openhab/core/things.rb +22 -0
- data/lib/openhab/core/timer.rb +148 -0
- data/lib/openhab/{dsl → core}/types/comparable_type.rb +5 -3
- data/lib/openhab/{dsl → core}/types/date_time_type.rb +55 -127
- data/lib/openhab/{dsl → core}/types/decimal_type.rb +50 -48
- data/lib/openhab/{dsl → core}/types/hsb_type.rb +35 -83
- data/lib/openhab/core/types/increase_decrease_type.rb +34 -0
- data/lib/openhab/core/types/next_previous_type.rb +34 -0
- data/lib/openhab/{dsl → core}/types/numeric_type.rb +20 -7
- data/lib/openhab/core/types/on_off_type.rb +46 -0
- data/lib/openhab/core/types/open_closed_type.rb +41 -0
- data/lib/openhab/{dsl → core}/types/percent_type.rb +19 -20
- data/lib/openhab/core/types/play_pause_type.rb +38 -0
- data/lib/openhab/core/types/point_type.rb +117 -0
- data/lib/openhab/core/types/quantity_type.rb +325 -0
- data/lib/openhab/core/types/raw_type.rb +26 -0
- data/lib/openhab/core/types/refresh_type.rb +27 -0
- data/lib/openhab/core/types/rewind_fastforward_type.rb +38 -0
- data/lib/openhab/core/types/stop_move_type.rb +34 -0
- data/lib/openhab/{dsl → core}/types/string_type.rb +17 -28
- data/lib/openhab/{dsl → core}/types/type.rb +42 -40
- data/lib/openhab/core/types/un_def_type.rb +38 -0
- data/lib/openhab/core/types/up_down_type.rb +50 -0
- data/lib/openhab/core/types.rb +82 -0
- data/lib/openhab/{dsl → core}/uid.rb +4 -23
- data/lib/openhab/core/value_cache.rb +188 -0
- data/lib/openhab/core.rb +98 -0
- data/lib/openhab/core_ext/between.rb +32 -0
- data/lib/openhab/core_ext/ephemeris.rb +53 -0
- data/lib/openhab/core_ext/java/class.rb +34 -0
- data/lib/openhab/core_ext/java/duration.rb +142 -0
- data/lib/openhab/core_ext/java/list.rb +436 -0
- data/lib/openhab/core_ext/java/local_date.rb +104 -0
- data/lib/openhab/core_ext/java/local_time.rb +118 -0
- data/lib/openhab/core_ext/java/map.rb +66 -0
- data/lib/openhab/core_ext/java/month.rb +71 -0
- data/lib/openhab/core_ext/java/month_day.rb +119 -0
- data/lib/openhab/core_ext/java/period.rb +103 -0
- data/lib/openhab/core_ext/java/temporal_amount.rb +34 -0
- data/lib/openhab/core_ext/java/time.rb +62 -0
- data/lib/openhab/core_ext/java/unit.rb +15 -0
- data/lib/openhab/core_ext/java/zoned_date_time.rb +213 -0
- data/lib/openhab/core_ext/ruby/array.rb +21 -0
- data/lib/openhab/core_ext/ruby/date.rb +96 -0
- data/lib/openhab/core_ext/ruby/date_time.rb +55 -0
- data/lib/openhab/core_ext/ruby/module.rb +15 -0
- data/lib/openhab/core_ext/ruby/numeric.rb +195 -0
- data/lib/openhab/core_ext/ruby/range.rb +70 -0
- data/lib/openhab/core_ext/ruby/symbol.rb +7 -0
- data/lib/openhab/core_ext/ruby/time.rb +108 -0
- data/lib/openhab/core_ext.rb +18 -0
- data/lib/openhab/dsl/debouncer.rb +259 -0
- data/lib/openhab/dsl/events/watch_event.rb +18 -0
- data/lib/openhab/dsl/events.rb +9 -0
- data/lib/openhab/dsl/gems.rb +1 -1
- data/lib/openhab/dsl/items/builder.rb +578 -0
- data/lib/openhab/dsl/items/ensure.rb +73 -82
- data/lib/openhab/dsl/items/timed_command.rb +214 -159
- data/lib/openhab/dsl/rules/automation_rule.rb +126 -115
- data/lib/openhab/dsl/rules/builder.rb +1935 -0
- data/lib/openhab/dsl/rules/guard.rb +51 -114
- data/lib/openhab/dsl/rules/name_inference.rb +66 -25
- data/lib/openhab/dsl/rules/property.rb +48 -75
- data/lib/openhab/dsl/rules/rule_triggers.rb +22 -27
- data/lib/openhab/dsl/rules/terse.rb +58 -14
- data/lib/openhab/dsl/rules/triggers/changed.rb +48 -94
- data/lib/openhab/dsl/rules/triggers/channel.rb +9 -40
- data/lib/openhab/dsl/rules/triggers/command.rb +14 -63
- data/lib/openhab/dsl/rules/triggers/conditions/duration.rb +34 -69
- data/lib/openhab/dsl/rules/triggers/conditions/proc.rb +6 -14
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +48 -82
- data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +30 -47
- data/lib/openhab/dsl/rules/triggers/trigger.rb +7 -28
- data/lib/openhab/dsl/rules/triggers/updated.rb +21 -45
- data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +257 -102
- data/lib/openhab/dsl/rules/triggers.rb +12 -0
- data/lib/openhab/dsl/rules.rb +8 -0
- data/lib/openhab/dsl/things/builder.rb +299 -0
- data/lib/openhab/{core → dsl}/thread_local.rb +27 -17
- data/lib/openhab/dsl/timer_manager.rb +204 -0
- data/lib/openhab/dsl/version.rb +9 -0
- data/lib/openhab/dsl.rb +979 -0
- data/lib/openhab/log.rb +355 -0
- data/lib/openhab/osgi.rb +68 -0
- data/lib/openhab/rspec/configuration.rb +56 -0
- data/lib/openhab/rspec/example_group.rb +132 -0
- data/lib/openhab/rspec/helpers.rb +458 -0
- data/lib/openhab/rspec/hooks.rb +113 -0
- data/lib/openhab/rspec/jruby.rb +46 -0
- data/lib/openhab/rspec/karaf.rb +851 -0
- data/lib/openhab/rspec/mocks/bundle_install_support.rb +25 -0
- data/lib/openhab/rspec/mocks/bundle_resolver.rb +30 -0
- data/lib/openhab/rspec/mocks/event_admin.rb +146 -0
- data/lib/openhab/rspec/mocks/instance_method_stasher.rb +22 -0
- data/lib/openhab/rspec/mocks/persistence_service.rb +155 -0
- data/lib/openhab/rspec/mocks/safe_caller.rb +40 -0
- data/lib/openhab/rspec/mocks/space.rb +23 -0
- data/lib/openhab/rspec/mocks/synchronous_executor.rb +63 -0
- data/lib/openhab/rspec/mocks/thing_handler.rb +76 -0
- data/lib/openhab/rspec/mocks/timer.rb +134 -0
- data/lib/openhab/rspec/openhab/core/actions.rb +38 -0
- data/lib/openhab/rspec/openhab/core/items/proxy.rb +15 -0
- data/lib/openhab/rspec/openhab/core/things/proxy.rb +27 -0
- data/lib/openhab/rspec/shell.rb +31 -0
- data/lib/openhab/rspec/suspend_rules.rb +50 -0
- data/lib/openhab/rspec.rb +26 -0
- data/lib/openhab/yard/base_helper.rb +19 -0
- data/lib/openhab/yard/cli/stats.rb +23 -0
- data/lib/openhab/yard/code_objects/group_object.rb +23 -0
- data/lib/openhab/yard/code_objects/java/base.rb +31 -0
- data/lib/openhab/yard/code_objects/java/class_object.rb +11 -0
- data/lib/openhab/yard/code_objects/java/field_object.rb +15 -0
- data/lib/openhab/yard/code_objects/java/interface_object.rb +15 -0
- data/lib/openhab/yard/code_objects/java/package_object.rb +11 -0
- data/lib/openhab/yard/code_objects/java/proxy.rb +23 -0
- data/lib/openhab/yard/coderay.rb +17 -0
- data/lib/openhab/yard/handlers/jruby/base.rb +58 -0
- data/lib/openhab/yard/handlers/jruby/class_handler.rb +18 -0
- data/lib/openhab/yard/handlers/jruby/constant_handler.rb +18 -0
- data/lib/openhab/yard/handlers/jruby/java_import_handler.rb +30 -0
- data/lib/openhab/yard/handlers/jruby/mixin_handler.rb +23 -0
- data/lib/openhab/yard/html_helper.rb +78 -0
- data/lib/openhab/yard/markdown_helper.rb +148 -0
- data/lib/openhab/yard/tags/constant_directive.rb +20 -0
- data/lib/openhab/yard/tags/group_directive.rb +24 -0
- data/lib/openhab/yard/tags/library.rb +3 -0
- data/lib/openhab/yard.rb +38 -0
- metadata +475 -106
- data/lib/openhab/core/item_proxy.rb +0 -29
- data/lib/openhab/core/load_path.rb +0 -19
- data/lib/openhab/core/openhab_setup.rb +0 -29
- data/lib/openhab/core/osgi.rb +0 -58
- data/lib/openhab/core/services.rb +0 -24
- data/lib/openhab/dsl/actions.rb +0 -114
- data/lib/openhab/dsl/between.rb +0 -25
- data/lib/openhab/dsl/channel.rb +0 -43
- data/lib/openhab/dsl/dsl.rb +0 -59
- data/lib/openhab/dsl/group.rb +0 -54
- data/lib/openhab/dsl/imports.rb +0 -21
- data/lib/openhab/dsl/items/color_item.rb +0 -76
- data/lib/openhab/dsl/items/comparable_item.rb +0 -62
- data/lib/openhab/dsl/items/contact_item.rb +0 -41
- data/lib/openhab/dsl/items/date_time_item.rb +0 -65
- data/lib/openhab/dsl/items/dimmer_item.rb +0 -65
- data/lib/openhab/dsl/items/generic_item.rb +0 -229
- data/lib/openhab/dsl/items/group_item.rb +0 -127
- data/lib/openhab/dsl/items/item_equality.rb +0 -59
- data/lib/openhab/dsl/items/item_registry.rb +0 -54
- data/lib/openhab/dsl/items/items.rb +0 -109
- data/lib/openhab/dsl/items/location_item.rb +0 -59
- data/lib/openhab/dsl/items/metadata.rb +0 -326
- data/lib/openhab/dsl/items/number_item.rb +0 -17
- data/lib/openhab/dsl/items/numeric_item.rb +0 -87
- data/lib/openhab/dsl/items/persistence.rb +0 -307
- data/lib/openhab/dsl/items/player_item.rb +0 -58
- data/lib/openhab/dsl/items/rollershutter_item.rb +0 -51
- data/lib/openhab/dsl/items/semantics/enumerable.rb +0 -91
- data/lib/openhab/dsl/items/semantics.rb +0 -227
- data/lib/openhab/dsl/items/string_item.rb +0 -51
- data/lib/openhab/dsl/items/switch_item.rb +0 -70
- data/lib/openhab/dsl/monkey_patch/actions/actions.rb +0 -4
- data/lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb +0 -39
- data/lib/openhab/dsl/monkey_patch/events/events.rb +0 -7
- data/lib/openhab/dsl/monkey_patch/events/item_command.rb +0 -85
- data/lib/openhab/dsl/monkey_patch/events/item_event.rb +0 -28
- data/lib/openhab/dsl/monkey_patch/events/item_state.rb +0 -61
- data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +0 -60
- data/lib/openhab/dsl/monkey_patch/events/thing_status_info.rb +0 -33
- data/lib/openhab/dsl/monkey_patch/java/java.rb +0 -4
- data/lib/openhab/dsl/monkey_patch/java/local_time.rb +0 -44
- data/lib/openhab/dsl/monkey_patch/java/time_extensions.rb +0 -50
- data/lib/openhab/dsl/monkey_patch/java/zoned_date_time.rb +0 -45
- data/lib/openhab/dsl/monkey_patch/ruby/number.rb +0 -104
- data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -6
- data/lib/openhab/dsl/monkey_patch/ruby/string.rb +0 -47
- data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -61
- data/lib/openhab/dsl/openhab.rb +0 -30
- data/lib/openhab/dsl/persistence.rb +0 -27
- data/lib/openhab/dsl/rules/item_event.rb +0 -19
- data/lib/openhab/dsl/rules/rule.rb +0 -160
- data/lib/openhab/dsl/rules/rule_config.rb +0 -147
- data/lib/openhab/dsl/rules/triggers/generic.rb +0 -31
- data/lib/openhab/dsl/rules/triggers/triggers.rb +0 -11
- data/lib/openhab/dsl/rules/triggers/watch/watch.rb +0 -81
- data/lib/openhab/dsl/states.rb +0 -89
- data/lib/openhab/dsl/things.rb +0 -147
- data/lib/openhab/dsl/time/month_day.rb +0 -180
- data/lib/openhab/dsl/time/time_of_day.rb +0 -235
- data/lib/openhab/dsl/timers/manager.rb +0 -119
- data/lib/openhab/dsl/timers/reentrant_timer.rb +0 -38
- data/lib/openhab/dsl/timers/timer.rb +0 -132
- data/lib/openhab/dsl/timers.rb +0 -77
- data/lib/openhab/dsl/types/increase_decrease_type.rb +0 -23
- data/lib/openhab/dsl/types/next_previous_type.rb +0 -23
- data/lib/openhab/dsl/types/on_off_type.rb +0 -28
- data/lib/openhab/dsl/types/open_closed_type.rb +0 -29
- data/lib/openhab/dsl/types/play_pause_type.rb +0 -27
- data/lib/openhab/dsl/types/point_type.rb +0 -180
- data/lib/openhab/dsl/types/quantity_type.rb +0 -265
- data/lib/openhab/dsl/types/refresh_type.rb +0 -18
- data/lib/openhab/dsl/types/rewind_fastforward_type.rb +0 -33
- data/lib/openhab/dsl/types/stop_move_type.rb +0 -23
- data/lib/openhab/dsl/types/types.rb +0 -83
- data/lib/openhab/dsl/types/un_def_type.rb +0 -22
- data/lib/openhab/dsl/types/up_down_type.rb +0 -32
- data/lib/openhab/dsl/units.rb +0 -45
- data/lib/openhab/log/configuration.rb +0 -21
- data/lib/openhab/log/logger.rb +0 -282
- data/lib/openhab/version.rb +0 -9
- data/lib/openhab.rb +0 -36
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "delegate"
|
|
4
|
+
|
|
5
|
+
require_relative "generic_item"
|
|
6
|
+
|
|
7
|
+
module OpenHAB
|
|
8
|
+
module Core
|
|
9
|
+
module Items
|
|
10
|
+
#
|
|
11
|
+
# Items extensions to support
|
|
12
|
+
# {https://www.openhab.org/docs/configuration/persistence.html openHAB's Persistence} feature.
|
|
13
|
+
#
|
|
14
|
+
# @see OpenHAB::DSL.persistence Persistence Block
|
|
15
|
+
#
|
|
16
|
+
# @example The following examples are based on these items
|
|
17
|
+
# Number UV_Index
|
|
18
|
+
# Number:Power Power_Usage "Power Usage [%.2f W]"
|
|
19
|
+
#
|
|
20
|
+
# @example Getting persistence data from the system default persistence service
|
|
21
|
+
# UV_Index.average_since(1.hour.ago) # returns a DecimalType
|
|
22
|
+
# Power_Usage.average_since(12.hours.ago) # returns a QuantityType that corresponds to the item's type
|
|
23
|
+
#
|
|
24
|
+
# @example Querying a non-default persistence service
|
|
25
|
+
# UV_Index.average_since(1.hour.ago, :influxdb)
|
|
26
|
+
# Power_Usage.average_since(12.hours.ago, :rrd4j)
|
|
27
|
+
#
|
|
28
|
+
# @example Comparison using Quantity
|
|
29
|
+
# # Because Power_Usage has a unit, the return value
|
|
30
|
+
# # from average_since is a QuantityType which can be
|
|
31
|
+
# # compared against a string with quantity
|
|
32
|
+
# if Power_Usage.average_since(15.minutes.ago) > 5 | "kW"
|
|
33
|
+
# logger.info("The power usage exceeded its 15 min average)
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# @example HistoricState
|
|
37
|
+
# max = Power_Usage.maximum_since(LocalTime::MIDNIGHT)
|
|
38
|
+
# logger.info("Max power usage today: #{max}, at: #{max.timestamp})
|
|
39
|
+
#
|
|
40
|
+
module Persistence
|
|
41
|
+
GenericItem.prepend(self)
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# A state class with an added timestamp attribute.
|
|
45
|
+
#
|
|
46
|
+
# This wraps {org.openhab.core.persistence.HistoricItem HistoricItem}
|
|
47
|
+
# to allow implicitly treating the object as its state, and wrapping of
|
|
48
|
+
# that state into a {QuantityType} as necessary.
|
|
49
|
+
#
|
|
50
|
+
class HistoricState < SimpleDelegator
|
|
51
|
+
# @!attribute [r] state
|
|
52
|
+
# @return [Types::State]
|
|
53
|
+
alias_method :state, :__getobj__
|
|
54
|
+
|
|
55
|
+
def initialize(state, historic_item)
|
|
56
|
+
@historic_item = historic_item
|
|
57
|
+
super(state)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @!attribute [r] timestamp
|
|
61
|
+
# @return [ZonedDateTime]
|
|
62
|
+
def timestamp
|
|
63
|
+
@historic_item.timestamp
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# All persistence methods that could return a QuantityType
|
|
68
|
+
QUANTITY_METHODS = %i[average_since
|
|
69
|
+
delta_since
|
|
70
|
+
deviation_since
|
|
71
|
+
sum_since
|
|
72
|
+
variance_since].freeze
|
|
73
|
+
|
|
74
|
+
# All persistence methods that require a timestamp
|
|
75
|
+
# Note the _between methods are automatically created from the _since methods
|
|
76
|
+
PERSISTENCE_METHODS = (QUANTITY_METHODS +
|
|
77
|
+
%i[changed_since?
|
|
78
|
+
count_since
|
|
79
|
+
count_state_changes_since
|
|
80
|
+
historic_state
|
|
81
|
+
maximum_since
|
|
82
|
+
minimum_since
|
|
83
|
+
updated_since?]).freeze
|
|
84
|
+
private_constant :QUANTITY_METHODS, :PERSISTENCE_METHODS
|
|
85
|
+
|
|
86
|
+
# @!method persist(service = nil)
|
|
87
|
+
# Persists the state of the item
|
|
88
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
89
|
+
# @return [void]
|
|
90
|
+
|
|
91
|
+
# @!method last_update(service = nil)
|
|
92
|
+
# Returns the time the item was last updated.
|
|
93
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
94
|
+
# @return [ZonedDateTime, nil] The timestamp of the last update
|
|
95
|
+
|
|
96
|
+
# @!method average_since(timestamp, service = nil)
|
|
97
|
+
# Returns the average value of the item's state since the given time
|
|
98
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
99
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
100
|
+
# @return [DecimalType, QuantityType, nil] The average value since `timestamp`,
|
|
101
|
+
# or nil if no previous state could be found.
|
|
102
|
+
|
|
103
|
+
# @!method average_between(start, finish, service = nil)
|
|
104
|
+
# Returns the average value of the item's state between two points in time
|
|
105
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
106
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
107
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
108
|
+
# @return [DecimalType, QuantityType, nil] The average value between `start` and `finish`,
|
|
109
|
+
# or nil if no previous state could be found.
|
|
110
|
+
|
|
111
|
+
# @!method delta_since(timestamp, service = nil)
|
|
112
|
+
# Returns the difference value of the item's state since the given time
|
|
113
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
114
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
115
|
+
# @return [DecimalType, QuantityType, nil] The difference value since `timestamp`,
|
|
116
|
+
# or nil if no previous state could be found.
|
|
117
|
+
|
|
118
|
+
# @!method delta_between(start, finish, service = nil)
|
|
119
|
+
# Returns the difference value of the item's state between two points in time
|
|
120
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
121
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
122
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
123
|
+
# @return [DecimalType, QuantityType, nil] The difference value between `start` and `finish`,
|
|
124
|
+
# or nil if no previous state could be found.
|
|
125
|
+
|
|
126
|
+
# @!method deviation_since(timestamp, service = nil)
|
|
127
|
+
# Returns the standard deviation of the item's state since the given time
|
|
128
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
129
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
130
|
+
# @return [DecimalType, QuantityType, nil] The standard deviation since `timestamp`,
|
|
131
|
+
# or nil if no previous state could be found.
|
|
132
|
+
|
|
133
|
+
# @!method deviation_between(start, finish, service = nil)
|
|
134
|
+
# Returns the standard deviation of the item's state between two points in time
|
|
135
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
136
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
137
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
138
|
+
# @return [DecimalType, QuantityType, nil] The standard deviation between `start` and `finish`,
|
|
139
|
+
# or nil if no previous state could be found.
|
|
140
|
+
|
|
141
|
+
# @!method sum_since(timestamp, service = nil)
|
|
142
|
+
# Returns the sum of the item's state since the given time
|
|
143
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
144
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
145
|
+
# @return [DecimalType, QuantityType, nil] The sum since `timestamp`,
|
|
146
|
+
# or nil if no previous state could be found.
|
|
147
|
+
|
|
148
|
+
# @!method sum_between(start, finish, service = nil)
|
|
149
|
+
# Returns the sum of the item's state between two points in time
|
|
150
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
151
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
152
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
153
|
+
# @return [DecimalType, QuantityType, nil] The sum between `start` and `finish`,
|
|
154
|
+
# or nil if no previous state could be found.
|
|
155
|
+
|
|
156
|
+
# @!method variance_since(timestamp, service = nil)
|
|
157
|
+
# Returns the variance of the item's state since the given time
|
|
158
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
159
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
160
|
+
# @return [DecimalType, QuantityType, nil] The variance since `timestamp`,
|
|
161
|
+
# or nil if no previous state could be found.
|
|
162
|
+
|
|
163
|
+
# @!method variance_between(start, finish, service = nil)
|
|
164
|
+
# Returns the variance of the item's state between two points in time
|
|
165
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
166
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
167
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
168
|
+
# @return [DecimalType, QuantityType, nil] The variance between `start` and `finish`,
|
|
169
|
+
# or nil if no previous state could be found.
|
|
170
|
+
|
|
171
|
+
# @!method changed_since?(timestamp, service = nil)
|
|
172
|
+
# Whether the item's state has changed since the given time
|
|
173
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
174
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
175
|
+
# @return [true,false] True if the item's state has changed since the given `timestamp`, False otherwise.
|
|
176
|
+
|
|
177
|
+
# @!method changed_between?(start, finish, service = nil)
|
|
178
|
+
# Whether the item's state changed between two points in time
|
|
179
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
180
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
181
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
182
|
+
# @return [true,false] True if the item's state changed between `start` and `finish`, False otherwise.
|
|
183
|
+
|
|
184
|
+
# @!method evolution_rate(timestamp, service = nil)
|
|
185
|
+
# Returns the evolution rate of the item's state
|
|
186
|
+
# @return [DecimalType, QuantityType, nil] The evolution rate since `timestamp`,
|
|
187
|
+
# or nil if no previous state could be found.
|
|
188
|
+
# @overload evolution_rate(timestamp, service = nil)
|
|
189
|
+
# Returns the evolution rate of the item's state since the given time
|
|
190
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
191
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
192
|
+
# @return [DecimalType, QuantityType, nil] The evolution rate since `timestamp`,
|
|
193
|
+
# or nil if no previous state could be found.
|
|
194
|
+
# @overload evolution_rate(start, finish, service = nil)
|
|
195
|
+
# Returns the evolution rate of the item's state between two points in time
|
|
196
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
197
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
198
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
199
|
+
# @return [DecimalType, QuantityType, nil] The evolution rate between `start` and `finish`,
|
|
200
|
+
# or nil if no previous state could be found.
|
|
201
|
+
|
|
202
|
+
# @!method historic_state(timestamp, service = nil)
|
|
203
|
+
# Returns the the item's state at the given time
|
|
204
|
+
# @param [#to_zoned_date_time] timestamp The point in time at which to search
|
|
205
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
206
|
+
# @return [HistoricState, nil] The item's state at `timestamp`,
|
|
207
|
+
# or nil if no previous state could be found.
|
|
208
|
+
|
|
209
|
+
# @!method maximum_since(timestamp, service = nil)
|
|
210
|
+
# Returns the maximum value of the item's state since the given time
|
|
211
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
212
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
213
|
+
# @return [HistoricState, nil] The maximum value since `timestamp`,
|
|
214
|
+
# or nil if no previous state could be found.
|
|
215
|
+
|
|
216
|
+
# @!method maximum_between(start, finish, service = nil)
|
|
217
|
+
# Returns the maximum value of the item's state between two points in time
|
|
218
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
219
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
220
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
221
|
+
# @return [HistoricState, nil] The maximum value between `start` and `finish`,
|
|
222
|
+
# or nil if no previous state could be found.
|
|
223
|
+
|
|
224
|
+
# @!method minimum_since(timestamp, service = nil)
|
|
225
|
+
# Returns the minimum value of the item's state since the given time
|
|
226
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
227
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
228
|
+
# @return [HistoricState, nil] The minimum value since `timestamp`,
|
|
229
|
+
# or nil if no previous state could be found.
|
|
230
|
+
|
|
231
|
+
# @!method minimum_between(start, finish, service = nil)
|
|
232
|
+
# Returns the minimum value of the item's state between two points in time
|
|
233
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
234
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
235
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
236
|
+
# @return [HistoricState, nil] The minimum value between `start` and `finish`,
|
|
237
|
+
# or nil if no previous state could be found.
|
|
238
|
+
|
|
239
|
+
# @!method updated_since?(timestamp, service = nil)
|
|
240
|
+
# Whether the item's state has been updated since the given time
|
|
241
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
242
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
243
|
+
# @return [true,false] True if the item's state has been updated since the given `timestamp`, False otherwise.
|
|
244
|
+
|
|
245
|
+
# @!method updated_between?(start, finish, service = nil)
|
|
246
|
+
# Whether the item's state was updated between two points in time
|
|
247
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
248
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
249
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
250
|
+
# @return [true,false] True if the item's state was updated between `start` and `finish`, False otherwise.
|
|
251
|
+
|
|
252
|
+
# @!method count_since(timestamp, service = nil)
|
|
253
|
+
# Returns the number of available historic data points from a point in time until now.
|
|
254
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
255
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
256
|
+
# @return [Integer] The number of values persisted for this item.
|
|
257
|
+
|
|
258
|
+
# @!method count_between(start, finish, service = nil)
|
|
259
|
+
# Returns the number of available historic data points between two points in time.
|
|
260
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
261
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
262
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
263
|
+
# @return [Integer] The number of values persisted for this item.
|
|
264
|
+
|
|
265
|
+
# @!method count_state_changes_since(timestamp, service = nil)
|
|
266
|
+
# Returns the number of changes in historic data points from a point in time until now.
|
|
267
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
|
268
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
269
|
+
# @return [Integer] The number of values persisted for this item.
|
|
270
|
+
|
|
271
|
+
# @!method count_state_changes_between(start, finish, service = nil)
|
|
272
|
+
# Returns the number of changes in historic data points between two points in time.
|
|
273
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
|
274
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
|
275
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
|
276
|
+
# @return [Integer] The number of values persisted for this item.
|
|
277
|
+
|
|
278
|
+
%i[persist last_update].each do |method|
|
|
279
|
+
define_method(method) do |service = nil|
|
|
280
|
+
service ||= persistence_service
|
|
281
|
+
Actions::PersistenceExtensions.public_send(method, self, service&.to_s)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
#
|
|
286
|
+
# Return the previous state of the item
|
|
287
|
+
#
|
|
288
|
+
# @param skip_equal [true,false] if true, skips equal state values and
|
|
289
|
+
# searches the first state not equal the current state
|
|
290
|
+
# @param service [String] the name of the PersistenceService to use
|
|
291
|
+
#
|
|
292
|
+
# @return [HistoricState, nil] the previous state or nil if no previous state could be found,
|
|
293
|
+
# or if the default persistence service is not configured or
|
|
294
|
+
# does not refer to a valid service
|
|
295
|
+
#
|
|
296
|
+
def previous_state(service = nil, skip_equal: false)
|
|
297
|
+
service ||= persistence_service
|
|
298
|
+
result = Actions::PersistenceExtensions.previous_state(self, skip_equal, service&.to_s)
|
|
299
|
+
HistoricState.new(quantify(result.state), result) if result
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
PERSISTENCE_METHODS.each do |method|
|
|
303
|
+
define_method(method) do |timestamp, service = nil|
|
|
304
|
+
service ||= persistence_service
|
|
305
|
+
result = Actions::PersistenceExtensions.public_send(
|
|
306
|
+
method.to_s.delete_suffix("?"),
|
|
307
|
+
self,
|
|
308
|
+
timestamp.to_zoned_date_time,
|
|
309
|
+
service&.to_s
|
|
310
|
+
)
|
|
311
|
+
wrap_result(result, method)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
next unless /_since\??$/.match?(method.to_s)
|
|
315
|
+
|
|
316
|
+
between_method = method.to_s.sub("_since", "_between").to_sym
|
|
317
|
+
define_method(between_method) do |start, finish, service = nil|
|
|
318
|
+
service ||= persistence_service
|
|
319
|
+
result = Actions::PersistenceExtensions.public_send(
|
|
320
|
+
between_method.to_s.delete_suffix("?"),
|
|
321
|
+
self,
|
|
322
|
+
start.to_zoned_date_time,
|
|
323
|
+
finish.to_zoned_date_time,
|
|
324
|
+
service&.to_s
|
|
325
|
+
)
|
|
326
|
+
wrap_result(result, method)
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
# evolution_rate's "between" method is overloaded with the same name
|
|
331
|
+
method = :evolution_rate
|
|
332
|
+
define_method(method) do |start, finish_or_service = nil, service = nil|
|
|
333
|
+
if service.nil?
|
|
334
|
+
if finish_or_service.respond_to?(:to_zoned_date_time)
|
|
335
|
+
service = persistence_service
|
|
336
|
+
finish = finish_or_service
|
|
337
|
+
else
|
|
338
|
+
service = finish_or_service || persistence_service
|
|
339
|
+
finish = nil
|
|
340
|
+
end
|
|
341
|
+
else
|
|
342
|
+
finish = finish_or_service
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
result = if finish
|
|
346
|
+
Actions::PersistenceExtensions.public_send(
|
|
347
|
+
method,
|
|
348
|
+
self,
|
|
349
|
+
start.to_zoned_date_time,
|
|
350
|
+
finish.to_zoned_date_time,
|
|
351
|
+
service&.to_s
|
|
352
|
+
)
|
|
353
|
+
else
|
|
354
|
+
Actions::PersistenceExtensions.public_send(
|
|
355
|
+
method,
|
|
356
|
+
self,
|
|
357
|
+
start.to_zoned_date_time,
|
|
358
|
+
service&.to_s
|
|
359
|
+
)
|
|
360
|
+
end
|
|
361
|
+
wrap_result(result, method)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
alias_method :state_changes_since, :count_state_changes_since
|
|
365
|
+
alias_method :state_changes_between, :count_state_changes_between
|
|
366
|
+
|
|
367
|
+
private
|
|
368
|
+
|
|
369
|
+
#
|
|
370
|
+
# Convert value to QuantityType if it is a DecimalType and a unit is defined
|
|
371
|
+
#
|
|
372
|
+
# @param [Object] value The value to convert
|
|
373
|
+
#
|
|
374
|
+
# @return [Object] QuantityType or the original value
|
|
375
|
+
#
|
|
376
|
+
def quantify(value)
|
|
377
|
+
if value.is_a?(DecimalType) && respond_to?(:unit) && unit
|
|
378
|
+
logger.trace("Unitizing #{value} with unit #{unit}")
|
|
379
|
+
QuantityType.new(value.to_big_decimal, unit)
|
|
380
|
+
else
|
|
381
|
+
value
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
#
|
|
386
|
+
# Wrap the result into a more convenient object type depending on the method and result.
|
|
387
|
+
#
|
|
388
|
+
# @param [Object] result the raw result type to be wrapped
|
|
389
|
+
# @param [Symbol] method the name of the called method
|
|
390
|
+
#
|
|
391
|
+
# @return [HistoricState] a {HistoricState} object if the result was a HistoricItem
|
|
392
|
+
# @return [QuantityType] a `QuantityType` object if the result was an average, delta, deviation,
|
|
393
|
+
# sum, or variance.
|
|
394
|
+
# @return [Object] the original result object otherwise.
|
|
395
|
+
#
|
|
396
|
+
def wrap_result(result, method)
|
|
397
|
+
if result.is_a?(org.openhab.core.persistence.HistoricItem)
|
|
398
|
+
return HistoricState.new(quantify(result.state), result)
|
|
399
|
+
end
|
|
400
|
+
return quantify(result) if QUANTITY_METHODS.include?(method)
|
|
401
|
+
|
|
402
|
+
result
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
#
|
|
406
|
+
# Get the specified persistence service from the current thread local variable
|
|
407
|
+
#
|
|
408
|
+
# @return [Object] Persistence service name as String or Symbol, or nil if not set
|
|
409
|
+
#
|
|
410
|
+
def persistence_service
|
|
411
|
+
Thread.current[:openhab_persistence_service]
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
end
|
|
416
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "generic_item"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module Core
|
|
7
|
+
module Items
|
|
8
|
+
java_import org.openhab.core.library.items.PlayerItem
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# A {PlayerItem} allows control of a player, e.g. an audio player.
|
|
12
|
+
#
|
|
13
|
+
# @!attribute [r] state
|
|
14
|
+
# @return [PlayPauseType, RewindFastforwardType, nil]
|
|
15
|
+
#
|
|
16
|
+
# @example Start playing on a player item
|
|
17
|
+
# Chromecast.play
|
|
18
|
+
# @example Check if a player is paused
|
|
19
|
+
# logger.warn("#{item.name} is paused") if Chromecast.paused?
|
|
20
|
+
#
|
|
21
|
+
class PlayerItem < GenericItem
|
|
22
|
+
# @!method play?
|
|
23
|
+
# Check if the item state == {PLAY}
|
|
24
|
+
# @return [true,false]
|
|
25
|
+
|
|
26
|
+
# @!method paused?
|
|
27
|
+
# Check if the item state == {PAUSE}
|
|
28
|
+
# @return [true,false]
|
|
29
|
+
|
|
30
|
+
# @!method rewinding?
|
|
31
|
+
# Check if the item state == {REWIND}
|
|
32
|
+
# @return [true,false]
|
|
33
|
+
|
|
34
|
+
# @!method fast_forwarding?
|
|
35
|
+
# Check if the item state == {FASTFORWARD}
|
|
36
|
+
# @return [true,false]
|
|
37
|
+
|
|
38
|
+
# @!method play
|
|
39
|
+
# Send the {PLAY} command to the item
|
|
40
|
+
# @return [PlayerItem] `self`
|
|
41
|
+
|
|
42
|
+
# @!method pause
|
|
43
|
+
# Send the {PAUSE} command to the item
|
|
44
|
+
# @return [PlayerItem] `self`
|
|
45
|
+
|
|
46
|
+
# @!method rewind
|
|
47
|
+
# Send the {REWIND} command to the item
|
|
48
|
+
# @return [PlayerItem] `self`
|
|
49
|
+
|
|
50
|
+
# @!method fast_forward
|
|
51
|
+
# Send the {FASTFORWARD} command to the item
|
|
52
|
+
# @return [PlayerItem] `self`
|
|
53
|
+
|
|
54
|
+
# @!method next
|
|
55
|
+
# Send the {NEXT} command to the item
|
|
56
|
+
# @return [PlayerItem] `self`
|
|
57
|
+
|
|
58
|
+
# @!method previous
|
|
59
|
+
# Send the {PREVIOUS} command to the item
|
|
60
|
+
# @return [PlayerItem] `self`
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @!parse PlayerItem = OpenHAB::Core::Items::PlayerItem
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Items
|
|
6
|
+
#
|
|
7
|
+
# Provides {Item Items} created in Ruby to openHAB
|
|
8
|
+
#
|
|
9
|
+
class Provider < Core::Provider
|
|
10
|
+
include org.openhab.core.items.ItemProvider
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
#
|
|
14
|
+
# The Item registry
|
|
15
|
+
#
|
|
16
|
+
# @return [org.openhab.core.items.ItemRegistry]
|
|
17
|
+
#
|
|
18
|
+
def registry
|
|
19
|
+
$ir
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# Remove an item from this provider
|
|
25
|
+
#
|
|
26
|
+
# @param [String] item_name
|
|
27
|
+
# @param [true, false] recursive
|
|
28
|
+
# @return [Item, nil] The removed item, if found.
|
|
29
|
+
#
|
|
30
|
+
def remove(item_name, recursive = false) # rubocop:disable Style/OptionalBooleanParameter matches Java method
|
|
31
|
+
return nil unless @elements.key?(item_name)
|
|
32
|
+
|
|
33
|
+
item = super(item_name)
|
|
34
|
+
item.members.each { |member| remove(member.name, true) } if recursive && item.is_a?(GroupItem)
|
|
35
|
+
item
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def initialize
|
|
39
|
+
super(unload_priority: 50)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "delegate"
|
|
4
|
+
require_relative "../proxy"
|
|
5
|
+
|
|
6
|
+
module OpenHAB
|
|
7
|
+
module Core
|
|
8
|
+
module Items
|
|
9
|
+
# Class is a proxy to underlying {Item}
|
|
10
|
+
# @!visibility private
|
|
11
|
+
class Proxy < Delegator
|
|
12
|
+
# Not really an Item, but pretends to be
|
|
13
|
+
# @!parse include Item
|
|
14
|
+
|
|
15
|
+
# @!visibility private
|
|
16
|
+
EVENTS = [Events::ItemAddedEvent::TYPE, Events::ItemUpdatedEvent::TYPE, Events::ItemRemovedEvent::TYPE].freeze
|
|
17
|
+
# @!visibility private
|
|
18
|
+
UID_METHOD = :name
|
|
19
|
+
|
|
20
|
+
include Core::Proxy
|
|
21
|
+
|
|
22
|
+
# @return [String]
|
|
23
|
+
attr_reader :name
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# Set the proxy item (called by super)
|
|
27
|
+
#
|
|
28
|
+
def __setobj__(item)
|
|
29
|
+
@item = item.is_a?(Item) ? item : nil
|
|
30
|
+
@name ||= item.name if item
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# @return [Item, nil]
|
|
35
|
+
#
|
|
36
|
+
def __getobj__
|
|
37
|
+
@item
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @return [Module]
|
|
41
|
+
def class
|
|
42
|
+
return Item if __getobj__.nil?
|
|
43
|
+
|
|
44
|
+
__getobj__.class
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @return [true, false]
|
|
48
|
+
def is_a?(klass)
|
|
49
|
+
obj = __getobj__
|
|
50
|
+
# only claim to be a Delegator if we're backed by an actual item at the moment
|
|
51
|
+
klass == Item || obj.is_a?(klass) || klass == Proxy || (!obj.nil? && super)
|
|
52
|
+
end
|
|
53
|
+
alias_method :kind_of?, :is_a?
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Need to check if `self` _or_ the delegate is an instance of the
|
|
57
|
+
# given class
|
|
58
|
+
#
|
|
59
|
+
# So that {#==} can work
|
|
60
|
+
#
|
|
61
|
+
# @return [true, false]
|
|
62
|
+
#
|
|
63
|
+
# @!visibility private
|
|
64
|
+
def instance_of?(klass)
|
|
65
|
+
__getobj__.instance_of?(klass) || super
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Check if delegates are equal for comparison
|
|
70
|
+
#
|
|
71
|
+
# Otherwise items can't be used in Java maps
|
|
72
|
+
#
|
|
73
|
+
# @return [true, false]
|
|
74
|
+
#
|
|
75
|
+
# @!visibility private
|
|
76
|
+
def ==(other)
|
|
77
|
+
return __getobj__ == other.__getobj__ if other.instance_of?(Proxy)
|
|
78
|
+
|
|
79
|
+
super
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# Non equality comparison
|
|
84
|
+
#
|
|
85
|
+
# @return [true, false]
|
|
86
|
+
#
|
|
87
|
+
# @!visibility private
|
|
88
|
+
def !=(other)
|
|
89
|
+
!(self == other) # rubocop:disable Style/InverseMethods
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @return [GroupItem::Members]
|
|
93
|
+
# @raise [NoMethodError] if item is not a GroupItem, or a dummy.
|
|
94
|
+
def members
|
|
95
|
+
return GroupItem::Members.new(self) if __getobj__.nil?
|
|
96
|
+
|
|
97
|
+
__getobj__.members
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @return [String]
|
|
101
|
+
def inspect
|
|
102
|
+
return super unless __getobj__.nil?
|
|
103
|
+
|
|
104
|
+
"#<OpenHAB::Core::Items::Proxy #{name}>"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
#
|
|
108
|
+
# Supports inspect from IRB when we're a dummy item.
|
|
109
|
+
#
|
|
110
|
+
# @return [void]
|
|
111
|
+
# @!visibility private
|
|
112
|
+
def pretty_print(printer)
|
|
113
|
+
return super unless __getobj__.nil?
|
|
114
|
+
|
|
115
|
+
printer.text(inspect)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# needs to return `false` if we know we're not a {GroupItem}
|
|
119
|
+
def respond_to?(method, *args)
|
|
120
|
+
obj = __getobj__
|
|
121
|
+
return obj.respond_to?(method, *args) if method.to_sym == :members && !obj.nil?
|
|
122
|
+
|
|
123
|
+
super
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# needs to return `false` if we know we're not a {GroupItem}
|
|
127
|
+
def respond_to_missing?(method, *args)
|
|
128
|
+
obj = __getobj__
|
|
129
|
+
return obj.respond_to_missing?(method, *args) if method.to_sym == :members && !obj.nil?
|
|
130
|
+
|
|
131
|
+
super
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|