openhab-scripting 5.16.0 → 5.18.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/entity_lookup.rb +5 -5
- data/lib/openhab/core/events/item_state_updated_event.rb +11 -11
- data/lib/openhab/core/events/item_time_series_updated_event.rb +23 -0
- data/lib/openhab/core/events/timer_event.rb +32 -32
- data/lib/openhab/core/items/generic_item.rb +12 -0
- data/lib/openhab/core/items/numeric_item.rb +1 -1
- data/lib/openhab/core/items/persistence.rb +2 -4
- data/lib/openhab/core/items/registry.rb +1 -3
- data/lib/openhab/core/items/semantics/enumerable.rb +2 -2
- data/lib/openhab/core/items/semantics.rb +1 -4
- data/lib/openhab/core/profile_factory.rb +16 -1
- data/lib/openhab/core/rules/registry.rb +2 -1
- data/lib/openhab/core/rules/rule.rb +1 -0
- data/lib/openhab/core/sitemaps/provider.rb +3 -1
- data/lib/openhab/core/things/channel.rb +1 -1
- data/lib/openhab/core/things/profile_callback.rb +5 -0
- data/lib/openhab/core/things/thing.rb +6 -0
- data/lib/openhab/core/types/string_type.rb +1 -1
- data/lib/openhab/core/types/time_series.rb +131 -0
- data/lib/openhab/core.rb +14 -1
- data/lib/openhab/core_ext/java/instant.rb +14 -0
- data/lib/openhab/dsl/items/builder.rb +0 -1
- data/lib/openhab/dsl/items/timed_command.rb +1 -0
- data/lib/openhab/dsl/rules/builder.rb +140 -39
- data/lib/openhab/dsl/rules/name_inference.rb +16 -8
- data/lib/openhab/dsl/rules/property.rb +4 -1
- data/lib/openhab/dsl/rules/rule_triggers.rb +5 -3
- data/lib/openhab/dsl/rules/terse.rb +32 -15
- data/lib/openhab/dsl/rules/triggers/changed.rb +15 -7
- data/lib/openhab/dsl/rules/triggers/cron/cron.rb +3 -2
- data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +98 -100
- data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +2 -2
- data/lib/openhab/dsl/sitemaps/builder.rb +1 -1
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/dsl.rb +30 -4
- data/lib/openhab/rspec/mocks/persistence_service.rb +10 -3
- data/lib/openhab/rspec/mocks/synchronous_executor.rb +2 -1
- data/lib/openhab/rspec/mocks/thing_handler.rb +4 -0
- metadata +6 -3
@@ -1,120 +1,118 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# @deprecated OH3.4 this module is not needed in OH4+
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
4
|
+
return unless OpenHAB::Core.version < OpenHAB::Core::V4_0
|
5
|
+
|
6
|
+
require "singleton"
|
7
|
+
|
8
|
+
require_relative "cron"
|
9
|
+
|
10
|
+
module OpenHAB
|
11
|
+
module DSL
|
12
|
+
module Rules
|
13
|
+
module Triggers
|
14
|
+
# @!visibility private
|
15
|
+
#
|
16
|
+
# Cron trigger handler that provides trigger ID
|
17
|
+
#
|
18
|
+
module CronHandler
|
19
|
+
# Cron Trigger Handler that provides trigger IDs
|
20
|
+
# Unfortunatly because the CronTriggerHandler in openHAB core is marked internal
|
21
|
+
# the entire thing must be recreated here
|
22
|
+
class CronTriggerHandler < org.openhab.core.automation.handler.BaseTriggerModuleHandler
|
23
|
+
include org.openhab.core.scheduler.SchedulerRunnable
|
24
|
+
include org.openhab.core.automation.handler.TimeBasedTriggerHandler
|
25
|
+
|
26
|
+
# Provides access to protected fields
|
27
|
+
field_accessor :callback
|
28
|
+
|
29
|
+
# Creates a new CronTriggerHandler
|
30
|
+
# @param [org.openhab.core.automation.Trigger] trigger openHAB trigger associated with handler
|
31
|
+
#
|
32
|
+
def initialize(trigger)
|
33
|
+
@trigger = trigger
|
34
|
+
@scheduler = OSGi.service("org.openhab.core.scheduler.CronScheduler")
|
35
|
+
@schedule = nil
|
36
|
+
@expression = trigger.configuration.get("cronExpression")
|
37
|
+
super(trigger)
|
38
|
+
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
40
|
+
#
|
41
|
+
# Set the callback to execute when cron trigger fires
|
42
|
+
# @param [Object] callback to run
|
43
|
+
#
|
44
|
+
def setCallback(callback) # rubocop:disable Naming/MethodName
|
45
|
+
synchronized do
|
46
|
+
super(callback)
|
47
|
+
@schedule = @scheduler.schedule(self, @expression)
|
48
|
+
logger.trace("Scheduled cron job '#{@expression}' for trigger '#{@trigger.id}'.")
|
50
49
|
end
|
50
|
+
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
52
|
+
#
|
53
|
+
# Get the temporal adjuster
|
54
|
+
# @return [CronAdjuster]
|
55
|
+
#
|
56
|
+
def getTemporalAdjuster # rubocop:disable Naming/MethodName
|
57
|
+
org.openhab.core.scheduler.CronAdjuster.new(@expression)
|
58
|
+
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
#
|
61
|
+
# Execute the callback
|
62
|
+
#
|
63
|
+
def run
|
64
|
+
callback&.triggered(@trigger, { "module" => @trigger.id })
|
65
|
+
end
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
67
|
+
#
|
68
|
+
# Dispose of the handler
|
69
|
+
# cancel the cron scheduled task
|
70
|
+
#
|
71
|
+
def dispose
|
72
|
+
synchronized do
|
73
|
+
super
|
74
|
+
return unless @schedule
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
logger.trace("cancelled job for trigger '#{@trigger.id}'.")
|
76
|
+
@schedule.cancel(true)
|
77
|
+
@schedule = nil
|
80
78
|
end
|
79
|
+
logger.trace("cancelled job for trigger '#{@trigger.id}'.")
|
81
80
|
end
|
81
|
+
end
|
82
82
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
83
|
+
# Implements the ScriptedTriggerHandlerFactory interface to create a new Cron Trigger Handler
|
84
|
+
class CronTriggerHandlerFactory
|
85
|
+
include Singleton
|
86
|
+
include org.openhab.core.automation.module.script.rulesupport.shared.factories.ScriptedTriggerHandlerFactory
|
87
|
+
|
88
|
+
def initialize
|
89
|
+
Core.automation_manager.add_trigger_handler(
|
90
|
+
Cron::CRON_TRIGGER_MODULE_ID,
|
91
|
+
self
|
92
|
+
)
|
93
|
+
|
94
|
+
Core.automation_manager.add_trigger_type(org.openhab.core.automation.type.TriggerType.new(
|
95
|
+
Cron::CRON_TRIGGER_MODULE_ID,
|
96
|
+
nil,
|
97
|
+
"A specific instant occurs",
|
98
|
+
"Triggers when the specified instant occurs",
|
99
|
+
nil,
|
100
|
+
org.openhab.core.automation.Visibility::VISIBLE,
|
101
|
+
nil
|
102
|
+
))
|
103
|
+
logger.trace("Added script cron trigger handler")
|
104
|
+
end
|
105
105
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
end
|
106
|
+
# Invoked by openHAB core to get a trigger handler for the supplied trigger
|
107
|
+
# @param [org.openhab.core.automation.Trigger] trigger
|
108
|
+
#
|
109
|
+
# @return [CronTriggerHandler] trigger handler for supplied trigger
|
110
|
+
def get(trigger)
|
111
|
+
CronTriggerHandler.new(trigger)
|
113
112
|
end
|
114
113
|
end
|
115
114
|
end
|
116
115
|
end
|
117
116
|
end
|
118
117
|
end
|
119
|
-
|
120
118
|
end
|
@@ -301,7 +301,7 @@ module OpenHAB
|
|
301
301
|
Core.automation_manager.add_trigger_type(org.openhab.core.automation.type.TriggerType.new(
|
302
302
|
WATCH_TRIGGER_MODULE_ID,
|
303
303
|
nil,
|
304
|
-
"
|
304
|
+
"a path change event is detected",
|
305
305
|
"Triggers when a path change event is detected",
|
306
306
|
nil,
|
307
307
|
org.openhab.core.automation.Visibility::VISIBLE,
|
@@ -310,7 +310,7 @@ module OpenHAB
|
|
310
310
|
logger.trace("Added watch trigger handler")
|
311
311
|
end
|
312
312
|
|
313
|
-
# Invoked by openHAB core to get a trigger handler for the
|
313
|
+
# Invoked by openHAB core to get a trigger handler for the supplied trigger
|
314
314
|
# @param [org.openhab.core.automation.Trigger] trigger
|
315
315
|
#
|
316
316
|
# @return [WatchTriggerHandler] trigger handler for supplied trigger
|
@@ -144,7 +144,7 @@ module OpenHAB
|
|
144
144
|
if @builder_proxy
|
145
145
|
old_obj = @builder_proxy.__getobj__
|
146
146
|
@builder_proxy.__setobj__(self)
|
147
|
-
|
147
|
+
DSL::ThreadLocal.thread_local(openhab_create_dummy_items: true) do
|
148
148
|
yield @builder_proxy
|
149
149
|
ensure
|
150
150
|
@builder_proxy.__setobj__(old_obj)
|
data/lib/openhab/dsl/version.rb
CHANGED
data/lib/openhab/dsl.rb
CHANGED
@@ -56,8 +56,14 @@ module OpenHAB
|
|
56
56
|
# @!group Rule Creation
|
57
57
|
|
58
58
|
# (see Rules::Builder#rule)
|
59
|
-
def rule(name = nil, **kwargs, &block)
|
60
|
-
rules.build { rule(name, **kwargs, &block) }
|
59
|
+
def rule(name = nil, id: nil, **kwargs, &block)
|
60
|
+
rules.build { rule(name, id: id, **kwargs, &block) }
|
61
|
+
end
|
62
|
+
|
63
|
+
# Creates a rule that will remove existing rules with the same id, even when the id has been inferred.
|
64
|
+
# @see rule
|
65
|
+
def rule!(name = nil, id: nil, **kwargs, &block)
|
66
|
+
rules.build { rule(name, id: id, replace: true, **kwargs, &block) }
|
61
67
|
end
|
62
68
|
|
63
69
|
# (see Rules::Builder#scene)
|
@@ -65,11 +71,27 @@ module OpenHAB
|
|
65
71
|
rules.build { scene(name, description: description, id: id, tag: tag, tags: tags, **kwargs, &block) }
|
66
72
|
end
|
67
73
|
|
74
|
+
# Creates a scene that will remove existing rules/scenes with the same id, even when the id has been inferred.
|
75
|
+
# @see scene
|
76
|
+
def scene!(name = nil, description: nil, id: nil, tag: nil, tags: nil, **kwargs, &block)
|
77
|
+
rules.build do
|
78
|
+
scene(name, description: description, id: id, tag: tag, tags: tags, replace: true, **kwargs, &block)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
68
82
|
# (see Rules::Builder#script)
|
69
83
|
def script(name = nil, description: nil, id: nil, tag: nil, tags: nil, **kwargs, &block)
|
70
84
|
rules.build { script(name, description: description, id: id, tag: tag, tags: tags, **kwargs, &block) }
|
71
85
|
end
|
72
86
|
|
87
|
+
# Creates a script that will remove existing rules/scripts with the same id, even when the id has been inferred.
|
88
|
+
# @see script
|
89
|
+
def script!(name = nil, description: nil, id: nil, tag: nil, tags: nil, **kwargs, &block)
|
90
|
+
rules.build do
|
91
|
+
script(name, description: description, id: id, tag: tag, tags: tags, replace: true, **kwargs, &block)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
73
95
|
# @!group Rule Support
|
74
96
|
|
75
97
|
# rubocop:disable Layout/LineLength
|
@@ -84,14 +106,17 @@ module OpenHAB
|
|
84
106
|
# @param [String, nil] label The label for the profile. When nil, the profile will not be visible in the UI.
|
85
107
|
# @param [org.openhab.core.config.core.ConfigDescription, nil] config_description
|
86
108
|
# The configuration description for the profile so that it can be configured in the UI.
|
87
|
-
# @yield [event, command: nil, state: nil, callback:, link:, item:, channel_uid:, configuration:, context:]
|
109
|
+
# @yield [event, command: nil, state: nil, time_series: nil, callback:, link:, item:, channel_uid:, configuration:, context:]
|
88
110
|
# All keyword params are optional. Any that aren't defined won't be passed.
|
89
|
-
# @yieldparam [:command_from_item, :state_from_item, :command_from_handler, :state_from_handler] event
|
111
|
+
# @yieldparam [:command_from_item, :state_from_item, :command_from_handler, :state_from_handler, :time_series_from_handler] event
|
90
112
|
# The event that needs to be processed.
|
91
113
|
# @yieldparam [Command, nil] command
|
92
114
|
# The command being sent for `:command_from_item` and `:command_from_handler` events.
|
93
115
|
# @yieldparam [State, nil] state
|
94
116
|
# The state being sent for `:state_from_item` and `:state_from_handler` events.
|
117
|
+
# @yieldparam [TimeSeries] time_series
|
118
|
+
# The time series for `:time_series_from_handler` events.
|
119
|
+
# Only available since openHAB 4.1.
|
95
120
|
# @yieldparam [Core::Things::ProfileCallback] callback
|
96
121
|
# The callback to be used to customize the action taken.
|
97
122
|
# @yieldparam [Core::Things::ItemChannelLink] link
|
@@ -105,6 +130,7 @@ module OpenHAB
|
|
105
130
|
#
|
106
131
|
# @see org.openhab.core.thing.profiles.Profile
|
107
132
|
# @see org.openhab.core.thing.profiles.StateProfile
|
133
|
+
# @see org.openhab.core.thing.profiles.TimeSeriesProfile
|
108
134
|
#
|
109
135
|
# @example Vetoing a command
|
110
136
|
# profile(:veto_closing_shades) do |event, item:, command:|
|
@@ -7,6 +7,15 @@ module OpenHAB
|
|
7
7
|
include org.openhab.core.persistence.ModifiablePersistenceService
|
8
8
|
include Singleton
|
9
9
|
|
10
|
+
OPERATOR_TO_SYMBOL = {
|
11
|
+
EQ: :==,
|
12
|
+
NEQ: :!=,
|
13
|
+
GT: :>,
|
14
|
+
LT: :<,
|
15
|
+
GTE: :>=,
|
16
|
+
LTE: :<=
|
17
|
+
}.freeze
|
18
|
+
|
10
19
|
class HistoricItem
|
11
20
|
include org.openhab.core.persistence.HistoricItem
|
12
21
|
|
@@ -134,9 +143,7 @@ module OpenHAB
|
|
134
143
|
|
135
144
|
range = first_index...last_index
|
136
145
|
|
137
|
-
operator = filter.operator
|
138
|
-
operator = "==" if operator == "="
|
139
|
-
|
146
|
+
operator = OPERATOR_TO_SYMBOL[filter.operator]
|
140
147
|
block = lambda do |i|
|
141
148
|
next if filter.state && !item_history[i].state.send(operator, filter.state)
|
142
149
|
|
@@ -37,6 +37,10 @@ module OpenHAB
|
|
37
37
|
callback&.state_updated(channel_uid, command) if command.is_a?(Core::Types::State)
|
38
38
|
end
|
39
39
|
|
40
|
+
def send_time_series(channel_uid, time_series)
|
41
|
+
@callback&.send_time_series(channel_uid, time_series)
|
42
|
+
end
|
43
|
+
|
40
44
|
def set_callback(callback)
|
41
45
|
@callback = callback
|
42
46
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openhab-scripting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian O'Connell
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-03-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -258,6 +258,7 @@ files:
|
|
258
258
|
- lib/openhab/core/events/item_state_changed_event.rb
|
259
259
|
- lib/openhab/core/events/item_state_event.rb
|
260
260
|
- lib/openhab/core/events/item_state_updated_event.rb
|
261
|
+
- lib/openhab/core/events/item_time_series_updated_event.rb
|
261
262
|
- lib/openhab/core/events/thing_status_info_event.rb
|
262
263
|
- lib/openhab/core/events/timer_event.rb
|
263
264
|
- lib/openhab/core/items.rb
|
@@ -348,6 +349,7 @@ files:
|
|
348
349
|
- lib/openhab/core/types/rewind_fastforward_type.rb
|
349
350
|
- lib/openhab/core/types/stop_move_type.rb
|
350
351
|
- lib/openhab/core/types/string_type.rb
|
352
|
+
- lib/openhab/core/types/time_series.rb
|
351
353
|
- lib/openhab/core/types/type.rb
|
352
354
|
- lib/openhab/core/types/un_def_type.rb
|
353
355
|
- lib/openhab/core/types/up_down_type.rb
|
@@ -357,6 +359,7 @@ files:
|
|
357
359
|
- lib/openhab/core_ext/ephemeris.rb
|
358
360
|
- lib/openhab/core_ext/java/class.rb
|
359
361
|
- lib/openhab/core_ext/java/duration.rb
|
362
|
+
- lib/openhab/core_ext/java/instant.rb
|
360
363
|
- lib/openhab/core_ext/java/list.rb
|
361
364
|
- lib/openhab/core_ext/java/local_date.rb
|
362
365
|
- lib/openhab/core_ext/java/local_time.rb
|
@@ -482,7 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
482
485
|
- !ruby/object:Gem::Version
|
483
486
|
version: '0'
|
484
487
|
requirements: []
|
485
|
-
rubygems_version: 3.5.
|
488
|
+
rubygems_version: 3.5.6
|
486
489
|
signing_key:
|
487
490
|
specification_version: 4
|
488
491
|
summary: JRuby Helper Libraries for openHAB Scripting
|