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,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Things
|
|
6
|
+
#
|
|
7
|
+
# Contains methods for {OpenHAB::DSL.profile profile}'s callback to forward commands between items
|
|
8
|
+
# and channels.
|
|
9
|
+
#
|
|
10
|
+
module ProfileCallback
|
|
11
|
+
class << self
|
|
12
|
+
#
|
|
13
|
+
# Wraps the parent class's method to format non-Types.
|
|
14
|
+
#
|
|
15
|
+
# @!macro def_state_parsing_method
|
|
16
|
+
# @!method $1($2)
|
|
17
|
+
# @return [void]
|
|
18
|
+
# @!visibility private
|
|
19
|
+
def def_state_parsing_method(method, param_name)
|
|
20
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
|
21
|
+
def #{method}(type) # def handle_command(type)
|
|
22
|
+
type = link.item.format_#{(param_name == :state) ? :update : param_name}(type) # type = link.item.format_command(type)
|
|
23
|
+
super(type) # super(type)
|
|
24
|
+
end # end
|
|
25
|
+
RUBY
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# Forward the given command to the respective thing handler.
|
|
31
|
+
#
|
|
32
|
+
# @param [Command] command
|
|
33
|
+
#
|
|
34
|
+
def_state_parsing_method(:handle_command, :command)
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Send a command to the framework.
|
|
38
|
+
#
|
|
39
|
+
# @param [Command] command
|
|
40
|
+
#
|
|
41
|
+
def_state_parsing_method(:send_command, :command)
|
|
42
|
+
|
|
43
|
+
#
|
|
44
|
+
# Send a state update to the framework.
|
|
45
|
+
#
|
|
46
|
+
# @param [State] state
|
|
47
|
+
#
|
|
48
|
+
def_state_parsing_method(:send_update, :state)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Things
|
|
6
|
+
#
|
|
7
|
+
# Provides {Thing Things} created in Ruby to openHAB
|
|
8
|
+
#
|
|
9
|
+
class Provider < Core::Provider
|
|
10
|
+
include org.openhab.core.thing.ThingProvider
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
#
|
|
14
|
+
# The Thing registry
|
|
15
|
+
#
|
|
16
|
+
# @return [org.openhab.core.thing.ThingRegistry]
|
|
17
|
+
#
|
|
18
|
+
def registry
|
|
19
|
+
$things
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
super(unload_priority: 60)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "delegate"
|
|
4
|
+
require "forwardable"
|
|
5
|
+
|
|
6
|
+
module OpenHAB
|
|
7
|
+
module Core
|
|
8
|
+
module Things
|
|
9
|
+
# Class is a proxy to underlying thing
|
|
10
|
+
# @!visibility private
|
|
11
|
+
class Proxy < Delegator
|
|
12
|
+
extend Forwardable
|
|
13
|
+
def_delegators :__getobj__, :class, :is_a?, :kind_of?
|
|
14
|
+
|
|
15
|
+
# @!visibility private
|
|
16
|
+
EVENTS = [Events::ThingAddedEvent::TYPE, Events::ThingUpdatedEvent::TYPE,
|
|
17
|
+
Events::ThingRemovedEvent::TYPE].freeze
|
|
18
|
+
# @!visibility private
|
|
19
|
+
UID_METHOD = :uid
|
|
20
|
+
|
|
21
|
+
include Core::Proxy
|
|
22
|
+
|
|
23
|
+
# Returns the list of channels associated with this Thing
|
|
24
|
+
#
|
|
25
|
+
# @note This is defined on this class, and not on {Thing}, because
|
|
26
|
+
# that's the interface and if you define it there, it will be hidden
|
|
27
|
+
# by the method on ThingImpl.
|
|
28
|
+
#
|
|
29
|
+
# @return [Array] channels
|
|
30
|
+
def channels
|
|
31
|
+
Thing::ChannelsArray.new(super.to_a)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Set the proxy item (called by super)
|
|
36
|
+
#
|
|
37
|
+
def __setobj__(thing)
|
|
38
|
+
@uid = thing.uid
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
#
|
|
42
|
+
# Lookup thing from thing registry
|
|
43
|
+
#
|
|
44
|
+
def __getobj__
|
|
45
|
+
$things.get(@uid)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#
|
|
49
|
+
# Need to check if `self` _or_ the delegate is an instance of the
|
|
50
|
+
# given class
|
|
51
|
+
#
|
|
52
|
+
# So that {#==} can work
|
|
53
|
+
#
|
|
54
|
+
# @return [true, false]
|
|
55
|
+
#
|
|
56
|
+
# @!visibility private
|
|
57
|
+
def instance_of?(klass)
|
|
58
|
+
__getobj__.instance_of?(klass) || super
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
#
|
|
62
|
+
# Check if delegates are equal for comparison
|
|
63
|
+
#
|
|
64
|
+
# Otherwise items can't be used in Java maps
|
|
65
|
+
#
|
|
66
|
+
# @return [true, false]
|
|
67
|
+
#
|
|
68
|
+
# @!visibility private
|
|
69
|
+
def ==(other)
|
|
70
|
+
return __getobj__ == other.__getobj__ if other.instance_of?(Proxy)
|
|
71
|
+
|
|
72
|
+
super
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# Non equality comparison
|
|
77
|
+
#
|
|
78
|
+
# @return [true, false]
|
|
79
|
+
#
|
|
80
|
+
# @!visibility private
|
|
81
|
+
def !=(other)
|
|
82
|
+
!(self == other) # rubocop:disable Style/InverseMethods
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "singleton"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module Core
|
|
7
|
+
module Things
|
|
8
|
+
#
|
|
9
|
+
# Provides access to all openHAB {Thing things}, and acts like an array.
|
|
10
|
+
#
|
|
11
|
+
class Registry
|
|
12
|
+
include LazyArray
|
|
13
|
+
include Singleton
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# Gets a specific {Thing}
|
|
17
|
+
#
|
|
18
|
+
# @param [String, ThingUID] uid Thing UID in the format `binding_id:type_id:thing_id`
|
|
19
|
+
# or via the ThingUID
|
|
20
|
+
# @return [Thing, nil]
|
|
21
|
+
#
|
|
22
|
+
def [](uid)
|
|
23
|
+
EntityLookup.lookup_thing(uid)
|
|
24
|
+
end
|
|
25
|
+
alias_method :include?, :[]
|
|
26
|
+
alias_method :key?, :[]
|
|
27
|
+
# @deprecated
|
|
28
|
+
alias_method :has_key?, :[]
|
|
29
|
+
|
|
30
|
+
#
|
|
31
|
+
# Explicit conversion to array
|
|
32
|
+
#
|
|
33
|
+
# @return [Array<Thing>]
|
|
34
|
+
#
|
|
35
|
+
def to_a
|
|
36
|
+
$things.all.map { |thing| Proxy.new(thing) }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Enter the Thing Builder DSL.
|
|
41
|
+
# @param (see Core::Provider.current)
|
|
42
|
+
# @yield Block executed in the context of a {DSL::Things::Builder}.
|
|
43
|
+
# @return [Object] The result of the block.
|
|
44
|
+
#
|
|
45
|
+
def build(preferred_provider = nil, &block)
|
|
46
|
+
DSL::Things::Builder.new(preferred_provider).instance_eval(&block)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Remove a Thing.
|
|
51
|
+
#
|
|
52
|
+
# The thing must be a managed thing (typically created by Ruby or in the UI).
|
|
53
|
+
#
|
|
54
|
+
# @param [String, Thing, ThingUID] thing_uid
|
|
55
|
+
# @return [Thing, nil] The removed item, if found.
|
|
56
|
+
def remove(thing_uid)
|
|
57
|
+
thing_uid = thing.uid if thing_uid.is_a?(Thing)
|
|
58
|
+
thing_uid = ThingUID.new(thing_uid) if thing_uid.is_a?(String)
|
|
59
|
+
provider = Provider.registry.provider_for(thing_uid)
|
|
60
|
+
unless provider.is_a?(org.openhab.core.common.registry.ManagedProvider)
|
|
61
|
+
raise "Cannot remove thing #{thing_uid} from non-managed provider #{provider.inspect}"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
Links::Provider.registry.providers.grep(ManagedProvider).each do |managed_provider|
|
|
65
|
+
managed_provider.remove_links_for_thing(thing_uid)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
provider.remove(thing_uid)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
module Things
|
|
6
|
+
# @interface
|
|
7
|
+
java_import org.openhab.core.thing.Thing
|
|
8
|
+
|
|
9
|
+
#
|
|
10
|
+
# A {Thing} is a representation of a connected part (e.g. physical device
|
|
11
|
+
# or cloud service) from the real world. It contains a list of
|
|
12
|
+
# {Channel Channels}, which can be bound to {Item Items}.
|
|
13
|
+
#
|
|
14
|
+
# @see OpenHAB::DSL.things things[]
|
|
15
|
+
# @see EntityLookup
|
|
16
|
+
#
|
|
17
|
+
# @example
|
|
18
|
+
# thing = things["chromecast:audiogroup:dd9f8622-eee-4eaf-b33f-cdcdcdeee001121"]
|
|
19
|
+
# logger.info("Audiogroup Status: #{thing&.status}")
|
|
20
|
+
# logger.info("Audiogroup Online? #{thing&.online?}")
|
|
21
|
+
# logger.info("Channel ids: #{thing.channels.map(&:uid)}")
|
|
22
|
+
# logger.info("Items linked to volume channel: #{thing.channels['volume']&.items&.map(&:name)&.join(', ')}")
|
|
23
|
+
# logger.info("Item linked to volume channel: #{thing.channels['volume']&.item&.name}")
|
|
24
|
+
#
|
|
25
|
+
# @example Thing actions can be called directly through a Thing object
|
|
26
|
+
# things["mqtt:broker:mosquitto"].publish_mqtt("zigbee2mqttt/bridge/config/permit_join", "true")
|
|
27
|
+
# things["mail:smtp:local"].send_mail("me@example.com", "Subject", "Email body")
|
|
28
|
+
#
|
|
29
|
+
# @example Thing can be accessed directly through {EntityLookup entity lookup}
|
|
30
|
+
# # replace ':' with '_' in thing uid
|
|
31
|
+
# mqtt_broker_mosquitto.online? # is mqtt:broker:mosquitto thing online?
|
|
32
|
+
#
|
|
33
|
+
# @!attribute [r] status
|
|
34
|
+
# Return the {https://www.openhab.org/docs/concepts/things.html#thing-status thing status}
|
|
35
|
+
# @return [org.openhab.core.thing.ThingStatus]
|
|
36
|
+
#
|
|
37
|
+
# @!attribute [r] channels
|
|
38
|
+
# @return [ChannelArray]
|
|
39
|
+
#
|
|
40
|
+
module Thing
|
|
41
|
+
# Array wrapper class to allow searching a list of channels
|
|
42
|
+
# by channel id
|
|
43
|
+
class ChannelsArray < Array
|
|
44
|
+
# Allows indexing by both integer as an array or channel id acting like a hash.
|
|
45
|
+
# @param [Integer, String] index Numeric index or string channel id to search for.
|
|
46
|
+
def [](index)
|
|
47
|
+
if index.respond_to?(:to_str)
|
|
48
|
+
key = index.to_str
|
|
49
|
+
return find { |channel| channel.uid.id == key }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
super
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class << self
|
|
57
|
+
# @!visibility private
|
|
58
|
+
#
|
|
59
|
+
# Override to support Proxy
|
|
60
|
+
#
|
|
61
|
+
def ===(other)
|
|
62
|
+
other.is_a?(self)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
#
|
|
67
|
+
# @!method uninitialized?
|
|
68
|
+
# Check if thing status == UNINITIALIZED
|
|
69
|
+
# @return [true,false]
|
|
70
|
+
#
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# @!method initialized?
|
|
74
|
+
# Check if thing status == INITIALIZED
|
|
75
|
+
# @return [true,false]
|
|
76
|
+
#
|
|
77
|
+
|
|
78
|
+
#
|
|
79
|
+
# @!method unknown?
|
|
80
|
+
# Check if thing status == UNKNOWN
|
|
81
|
+
# @return [true,false]
|
|
82
|
+
#
|
|
83
|
+
|
|
84
|
+
#
|
|
85
|
+
# @!method online?
|
|
86
|
+
# Check if thing status == ONLINE
|
|
87
|
+
# @return [true,false]
|
|
88
|
+
#
|
|
89
|
+
|
|
90
|
+
#
|
|
91
|
+
# @!method offline?
|
|
92
|
+
# Check if thing status == OFFLINE
|
|
93
|
+
# @return [true,false]
|
|
94
|
+
#
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# @!method removing?
|
|
98
|
+
# Check if thing status == REMOVING
|
|
99
|
+
# @return [true,false]
|
|
100
|
+
#
|
|
101
|
+
|
|
102
|
+
#
|
|
103
|
+
# @!method removed?
|
|
104
|
+
# Check if thing status == REMOVED
|
|
105
|
+
# @return [true,false]
|
|
106
|
+
#
|
|
107
|
+
|
|
108
|
+
ThingStatus.constants.each do |thingstatus|
|
|
109
|
+
define_method("#{thingstatus.to_s.downcase}?") { status == ThingStatus.value_of(thingstatus) }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Enable the Thing
|
|
114
|
+
#
|
|
115
|
+
# @param [true, false] enabled
|
|
116
|
+
# @return [void]
|
|
117
|
+
#
|
|
118
|
+
def enable(enabled: true)
|
|
119
|
+
Things.manager.set_enabled(uid, enabled)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Disable the Thing
|
|
124
|
+
#
|
|
125
|
+
# @return [void]
|
|
126
|
+
#
|
|
127
|
+
def disable
|
|
128
|
+
enable(enabled: false)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# @return [String]
|
|
132
|
+
def inspect
|
|
133
|
+
r = "#<OpenHAB::Core::Things::Thing #{uid}"
|
|
134
|
+
r += " #{label.inspect}" if label
|
|
135
|
+
r += " (#{location.inspect})" if location
|
|
136
|
+
r += " #{status}"
|
|
137
|
+
unless status_info.status_detail == org.openhab.core.thing.ThingStatusDetail::NONE
|
|
138
|
+
r += " (#{status_info.status_detail})"
|
|
139
|
+
end
|
|
140
|
+
r += " configuration=#{configuration.properties.to_h}" unless configuration.properties.empty?
|
|
141
|
+
r += " properties=#{properties.to_h}" unless properties.empty?
|
|
142
|
+
"#{r}>"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
#
|
|
146
|
+
# Return Thing's uid as a string
|
|
147
|
+
#
|
|
148
|
+
# @return [String]
|
|
149
|
+
#
|
|
150
|
+
def to_s
|
|
151
|
+
uid.to_s
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
#
|
|
155
|
+
# Fetches the actions available for this thing.
|
|
156
|
+
#
|
|
157
|
+
# Default scope actions are available directly on the thing object, via
|
|
158
|
+
# {#method_missing}.
|
|
159
|
+
#
|
|
160
|
+
# @param [String, nil] scope The action scope. Default's to the thing's binding.
|
|
161
|
+
# @return [Object, nil]
|
|
162
|
+
#
|
|
163
|
+
# @example
|
|
164
|
+
# things["max:thermostat:mybridge:thermostat"].actions("max-devices").delete_from_cube
|
|
165
|
+
#
|
|
166
|
+
# @example (see #method_missing)
|
|
167
|
+
#
|
|
168
|
+
def actions(scope = nil)
|
|
169
|
+
$actions.get(scope || uid.binding_id, uid.to_s)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#
|
|
173
|
+
# Delegate missing methods to the thing's default actions scope.
|
|
174
|
+
#
|
|
175
|
+
# @example
|
|
176
|
+
# things['mail:smtp:local'].send_email('me@example.com', 'subject', 'message')
|
|
177
|
+
#
|
|
178
|
+
def method_missing(method, *args, &block)
|
|
179
|
+
return actions.public_send(method, *args, &block) if actions.respond_to?(method)
|
|
180
|
+
|
|
181
|
+
super
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# @!visibility private
|
|
185
|
+
def respond_to_missing?(method_name, _include_private = false)
|
|
186
|
+
logger.trace("Checking if Thing #{uid} supports #{method_name} action")
|
|
187
|
+
return true if actions.respond_to?(method_name)
|
|
188
|
+
|
|
189
|
+
super
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OpenHAB
|
|
4
|
+
module Core
|
|
5
|
+
#
|
|
6
|
+
# Contains the core {Thing} that bindings use to represent connected devices,
|
|
7
|
+
# as well as related infrastructure.
|
|
8
|
+
#
|
|
9
|
+
module Things
|
|
10
|
+
java_import org.openhab.core.thing.ThingStatus,
|
|
11
|
+
org.openhab.core.thing.ThingUID,
|
|
12
|
+
org.openhab.core.thing.ThingTypeUID
|
|
13
|
+
|
|
14
|
+
class << self
|
|
15
|
+
# @!visibility private
|
|
16
|
+
def manager
|
|
17
|
+
@manager ||= OSGi.service("org.openhab.core.thing.ThingManager")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "forwardable"
|
|
4
|
+
|
|
5
|
+
module OpenHAB
|
|
6
|
+
module Core
|
|
7
|
+
#
|
|
8
|
+
# Timer allows you to administer the block of code that
|
|
9
|
+
# has been scheduled to run later with {OpenHAB::DSL.after after}.
|
|
10
|
+
#
|
|
11
|
+
class Timer
|
|
12
|
+
extend Forwardable
|
|
13
|
+
|
|
14
|
+
# @!method active?
|
|
15
|
+
# Check if the timer will execute in the future.
|
|
16
|
+
# @return [true,false]
|
|
17
|
+
|
|
18
|
+
# @!method cancelled?
|
|
19
|
+
# Check if the timer has been cancelled.
|
|
20
|
+
# @return [true,false]
|
|
21
|
+
|
|
22
|
+
# @!method running?
|
|
23
|
+
# Check if the timer code is currently running.
|
|
24
|
+
# @return [true,false]
|
|
25
|
+
|
|
26
|
+
# @!method terminated?
|
|
27
|
+
# Check if the timer has terminated.
|
|
28
|
+
# @return [true,false]
|
|
29
|
+
|
|
30
|
+
def_delegator :@timer, :has_terminated, :terminated?
|
|
31
|
+
def_delegators :@timer, :active?, :cancelled?, :running?, :execution_time
|
|
32
|
+
|
|
33
|
+
# @return [Object, nil]
|
|
34
|
+
attr_accessor :id
|
|
35
|
+
|
|
36
|
+
# @!visibility private
|
|
37
|
+
attr_reader :block
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# Create a new Timer Object
|
|
41
|
+
#
|
|
42
|
+
# @param [java.time.temporal.TemporalAmount, #to_zoned_date_time, Proc] time When to execute the block
|
|
43
|
+
# @yield Block to execute when timer fires
|
|
44
|
+
# @yieldparam [self]
|
|
45
|
+
#
|
|
46
|
+
# @!visibility private
|
|
47
|
+
def initialize(time, id:, thread_locals:, block:)
|
|
48
|
+
@time = time
|
|
49
|
+
@id = id
|
|
50
|
+
@thread_locals = thread_locals
|
|
51
|
+
@block = block
|
|
52
|
+
@timer = ScriptExecution.create_timer(1.minute.from_now) { execute }
|
|
53
|
+
reschedule!(@time)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @return [String]
|
|
57
|
+
def inspect
|
|
58
|
+
r = "#<#{self.class.name} #{"#{id.inspect} " if id}#{block.source_location.join(":")}"
|
|
59
|
+
if cancelled?
|
|
60
|
+
r += " (cancelled)"
|
|
61
|
+
else
|
|
62
|
+
r += " @ #{execution_time}"
|
|
63
|
+
r += " (executed)" if terminated?
|
|
64
|
+
end
|
|
65
|
+
"#{r}>"
|
|
66
|
+
end
|
|
67
|
+
alias_method :to_s, :inspect
|
|
68
|
+
|
|
69
|
+
# @!attribute [r] execution_time
|
|
70
|
+
# @return [ZonedDateTime, nil] the scheduled execution time, or `nil` if the timer was cancelled
|
|
71
|
+
|
|
72
|
+
#
|
|
73
|
+
# Reschedule timer.
|
|
74
|
+
#
|
|
75
|
+
# If the timer had been cancelled or executed, restart the timer.
|
|
76
|
+
#
|
|
77
|
+
# @param [java.time.temporal.TemporalAmount, ZonedDateTime, Proc, nil] time When to reschedule the timer for.
|
|
78
|
+
# If unspecified, the original time is used.
|
|
79
|
+
#
|
|
80
|
+
# @return [self]
|
|
81
|
+
#
|
|
82
|
+
def reschedule(time = nil)
|
|
83
|
+
return reschedule!(time) unless id
|
|
84
|
+
|
|
85
|
+
# re-add ourself to the TimerManager's @timers_by_id
|
|
86
|
+
DSL.timers.schedule(id) do |old_timer|
|
|
87
|
+
old_timer&.cancel unless old_timer.eql?(self)
|
|
88
|
+
self.id = nil
|
|
89
|
+
reschedule!(time)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# @return [self]
|
|
94
|
+
# @!visibility private
|
|
95
|
+
def reschedule!(time = nil)
|
|
96
|
+
Thread.current[:openhab_rescheduled_timer] = true if Thread.current[:openhab_rescheduled_timer] == self
|
|
97
|
+
DSL.timers.add(self)
|
|
98
|
+
@timer.reschedule(new_execution_time(time || @time))
|
|
99
|
+
self
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#
|
|
103
|
+
# Cancel timer
|
|
104
|
+
#
|
|
105
|
+
# @return [true,false] True if cancel was successful, false otherwise
|
|
106
|
+
#
|
|
107
|
+
def cancel
|
|
108
|
+
DSL.timers.delete(self)
|
|
109
|
+
cancel!
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Cancel the timer but do not remove self from the timer manager
|
|
114
|
+
#
|
|
115
|
+
# To be used internally by {TimerManager} from inside ConcurrentHashMap's compute blocks
|
|
116
|
+
#
|
|
117
|
+
# @return [true,false] True if cancel was successful, false otherwise
|
|
118
|
+
#
|
|
119
|
+
# @!visibility private
|
|
120
|
+
def cancel!
|
|
121
|
+
@timer.cancel
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
|
|
126
|
+
#
|
|
127
|
+
# Calls the block with thread locals set up, and cleans up after itself
|
|
128
|
+
#
|
|
129
|
+
# @return [void]
|
|
130
|
+
#
|
|
131
|
+
def execute
|
|
132
|
+
Thread.current[:openhab_rescheduled_timer] = self
|
|
133
|
+
DSL::ThreadLocal.thread_local(**@thread_locals) { @block.call(self) }
|
|
134
|
+
DSL.timers.delete(self) unless Thread.current[:openhab_rescheduled_timer] == true
|
|
135
|
+
Thread.current[:openhab_rescheduled_timer] = nil
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# @return [ZonedDateTime]
|
|
140
|
+
#
|
|
141
|
+
def new_execution_time(time)
|
|
142
|
+
time = time.call if time.is_a?(Proc)
|
|
143
|
+
time = time.from_now if time.is_a?(java.time.temporal.TemporalAmount)
|
|
144
|
+
time.to_zoned_date_time
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "type"
|
|
4
|
+
|
|
3
5
|
module OpenHAB
|
|
4
|
-
module
|
|
5
|
-
# Comparable
|
|
6
|
-
#
|
|
6
|
+
module Core
|
|
7
|
+
# `Comparable#==` is overwritten by Type, because {DecimalType} etc.
|
|
8
|
+
# inherit from `Comparable` on the Java side, so it's in the wrong place
|
|
7
9
|
# in the ancestor list
|
|
8
10
|
# @!visibility private
|
|
9
11
|
module ComparableType
|