openhab-scripting 5.16.0 → 5.18.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|