openhab-scripting 4.28.1 → 4.28.2
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/dsl/rules/rule.rb +0 -31
- data/lib/openhab/dsl/rules/triggers/cron.rb +118 -0
- data/lib/openhab/dsl/rules/triggers/trigger.rb +2 -1
- data/lib/openhab/dsl/rules/triggers/watch.rb +1 -3
- data/lib/openhab/version.rb +1 -1
- metadata +2 -3
- data/lib/openhab/dsl/rules/cron_trigger_rule.rb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c9d9745b2590c4152baf18a82dbe0063ac4c73c94f6f452d9d848790d8eb06a
|
4
|
+
data.tar.gz: 276152f1a79cf44fb539f4bb0c73618263db8d4a944cf367fa0ef1db167d989a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d66efa237735b6a754e97eb933a301cb5dd639fa7cc715fa7d36c3e6f7ed14c11a3da874ea707792cb0913bb9e57396b33532746b7a63b08acf50ff15d4fc9f0
|
7
|
+
data.tar.gz: b2fcbb63e5e9da86909dd7b7b2bcb054b29aea1b80ae59fb26555a7aa678a7f4ebe04ee36dda69413c7cc8fbe08c7beeeaa5ad333e09d4bac08bbe2b769e85e7
|
@@ -5,7 +5,6 @@ require 'openhab/core/services'
|
|
5
5
|
require 'openhab/log/logger'
|
6
6
|
require_relative 'rule_config'
|
7
7
|
require_relative 'automation_rule'
|
8
|
-
require_relative 'cron_trigger_rule'
|
9
8
|
require_relative 'guard'
|
10
9
|
|
11
10
|
module OpenHAB
|
@@ -70,44 +69,14 @@ module OpenHAB
|
|
70
69
|
def process_rule_config(config)
|
71
70
|
return unless create_rule?(config)
|
72
71
|
|
73
|
-
cron_attach_triggers, other_triggers = partition_triggers(config)
|
74
|
-
logger.trace("Cron triggers: #{cron_attach_triggers} - Other triggers: #{other_triggers}")
|
75
|
-
config.triggers = other_triggers
|
76
|
-
|
77
72
|
rule = AutomationRule.new(config: config)
|
78
73
|
Rules.script_rules << rule
|
79
74
|
add_rule(rule)
|
80
75
|
|
81
|
-
process_cron_attach(cron_attach_triggers, config, rule)
|
82
|
-
|
83
76
|
rule.execute(nil, { 'event' => Struct.new(:attachment).new(config.start_attachment) }) if config.on_start?
|
84
77
|
rule
|
85
78
|
end
|
86
79
|
|
87
|
-
#
|
88
|
-
# Add cron triggers with attachments to rules
|
89
|
-
# @param [Array] cron_attach_triggers cron type triggers with attachments
|
90
|
-
#
|
91
|
-
def process_cron_attach(cron_attach_triggers, config, rule)
|
92
|
-
cron_attach_triggers&.map { |trigger| CronTriggerRule.new(rule_config: config, rule: rule, trigger: trigger) }
|
93
|
-
&.each { |trigger| add_rule(trigger) }
|
94
|
-
end
|
95
|
-
|
96
|
-
#
|
97
|
-
# Partitions triggers in a config, removing cron triggers with a corresponding attachment
|
98
|
-
# so they can be used with CronTriggerRules to support attachments
|
99
|
-
# @return [Array] Two element array the first element is cron triggers with attachments,
|
100
|
-
# second element is other triggers
|
101
|
-
#
|
102
|
-
def partition_triggers(config)
|
103
|
-
config
|
104
|
-
.triggers
|
105
|
-
.partition do |trigger|
|
106
|
-
trigger.typeUID == OpenHAB::DSL::Rules::Triggers::Trigger::CRON &&
|
107
|
-
config.attachments.key?(trigger.id)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
80
|
#
|
112
81
|
# Should a rule be created based on rule configuration
|
113
82
|
#
|
@@ -164,7 +164,125 @@ module OpenHAB
|
|
164
164
|
end
|
165
165
|
expression_map
|
166
166
|
end
|
167
|
+
|
168
|
+
#
|
169
|
+
# Cron trigger that provides trigger ID
|
170
|
+
#
|
171
|
+
module Cron
|
172
|
+
include OpenHAB::Log
|
173
|
+
|
174
|
+
#
|
175
|
+
# Creates trigger types and trigger type factories for OpenHAB
|
176
|
+
#
|
177
|
+
def self.add_script_cron_handler
|
178
|
+
java_import org.openhab.core.automation.type.TriggerType
|
179
|
+
OpenHAB::Core.automation_manager.add_trigger_handler(
|
180
|
+
OpenHAB::DSL::Rules::Triggers::Cron::CRON_TRIGGER_MODULE_ID,
|
181
|
+
OpenHAB::DSL::Rules::Triggers::Cron::CronTriggerHandlerFactory.new
|
182
|
+
)
|
183
|
+
|
184
|
+
OpenHAB::Core.automation_manager.add_trigger_type(cron_trigger_type)
|
185
|
+
OpenHAB::Log.logger(self).trace('Added script cron trigger handler')
|
186
|
+
end
|
187
|
+
|
188
|
+
#
|
189
|
+
# Creates trigger types and trigger type factories for OpenHAB
|
190
|
+
#
|
191
|
+
private_class_method def self.cron_trigger_type
|
192
|
+
TriggerType.new(
|
193
|
+
OpenHAB::DSL::Rules::Triggers::Cron::CRON_TRIGGER_MODULE_ID,
|
194
|
+
nil,
|
195
|
+
'A specific instant occurs',
|
196
|
+
'Triggers when the specified instant occurs',
|
197
|
+
nil,
|
198
|
+
org.openhab.core.automation.Visibility::VISIBLE,
|
199
|
+
nil
|
200
|
+
)
|
201
|
+
end
|
202
|
+
|
203
|
+
# Trigger ID for Watch Triggers
|
204
|
+
CRON_TRIGGER_MODULE_ID = 'jsr223.jruby.CronTrigger'
|
205
|
+
|
206
|
+
# Cron Trigger Handler that provides trigger IDs
|
207
|
+
# Unfortunatly because the CronTriggerHandler in OpenHAB core is marked internal
|
208
|
+
# the entire thing must be recreated here
|
209
|
+
class CronTriggerHandler < org.openhab.core.automation.handler.BaseTriggerModuleHandler
|
210
|
+
include OpenHAB::Log
|
211
|
+
include org.openhab.core.scheduler.SchedulerRunnable
|
212
|
+
include org.openhab.core.automation.handler.TimeBasedTriggerHandler
|
213
|
+
|
214
|
+
# Provides access to protected fields
|
215
|
+
field_accessor :callback
|
216
|
+
|
217
|
+
# Creates a new CronTriggerHandler
|
218
|
+
# @param [Trigger] OpenHAB trigger associated with handler
|
219
|
+
#
|
220
|
+
def initialize(trigger)
|
221
|
+
@trigger = trigger
|
222
|
+
@scheduler = OpenHAB::Core::OSGI.service('org.openhab.core.scheduler.CronScheduler')
|
223
|
+
@expression = trigger.configuration.get('cronExpression')
|
224
|
+
super(trigger)
|
225
|
+
end
|
226
|
+
|
227
|
+
#
|
228
|
+
# Set the callback to execute when cron trigger fires
|
229
|
+
# @param [Object] callback to run
|
230
|
+
#
|
231
|
+
def setCallback(callback) # rubocop:disable Naming/MethodName
|
232
|
+
synchronized do
|
233
|
+
super(callback)
|
234
|
+
@scheduler.schedule(self, @expression)
|
235
|
+
logger.trace("Scheduled cron job '#{@expression}' for trigger '#{@trigger.id}'.")
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
#
|
240
|
+
# Get the temporal adjuster
|
241
|
+
# @return [CronAdjuster]
|
242
|
+
#
|
243
|
+
def getTemporalAdjuster # rubocop:disable Naming/MethodName
|
244
|
+
org.openhab.core.scheduler.CronAdjuster.new(expression)
|
245
|
+
end
|
246
|
+
|
247
|
+
#
|
248
|
+
# Execute the callback
|
249
|
+
#
|
250
|
+
def run
|
251
|
+
callback&.triggered(@trigger, { 'module' => @trigger.id })
|
252
|
+
end
|
253
|
+
|
254
|
+
#
|
255
|
+
# Displose of the handler
|
256
|
+
# cancel the cron scheduled task
|
257
|
+
#
|
258
|
+
def dispose
|
259
|
+
synchronized do
|
260
|
+
super
|
261
|
+
return unless @schedule
|
262
|
+
|
263
|
+
@schedule&.cancel(true)
|
264
|
+
end
|
265
|
+
logger.trace("cancelled job for trigger '#{@trigger.id}'.")
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
# Implements the ScriptedTriggerHandlerFactory interface to create a new Cron Trigger Handler
|
270
|
+
class CronTriggerHandlerFactory
|
271
|
+
include org.openhab.core.automation.module.script.rulesupport.shared.factories.ScriptedTriggerHandlerFactory
|
272
|
+
|
273
|
+
# Invoked by the OpenHAB core to get a trigger handler for the supllied trigger
|
274
|
+
# @param [Trigger] OpenHAB trigger
|
275
|
+
#
|
276
|
+
# @return [WatchTriggerHandler] trigger handler for supplied trigger
|
277
|
+
def get(trigger)
|
278
|
+
CronTriggerHandler.new(trigger)
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
167
282
|
end
|
168
283
|
end
|
169
284
|
end
|
170
285
|
end
|
286
|
+
|
287
|
+
# Add the cron handler to OpenHAB
|
288
|
+
OpenHAB::DSL::Rules::Triggers::Cron.add_script_cron_handler
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'securerandom'
|
4
4
|
require 'java'
|
5
|
+
require_relative 'cron'
|
5
6
|
|
6
7
|
module OpenHAB
|
7
8
|
module DSL
|
@@ -111,7 +112,7 @@ module OpenHAB
|
|
111
112
|
TIME_OF_DAY = 'timer.TimeOfDayTrigger'
|
112
113
|
|
113
114
|
# @return [String] A cron trigger
|
114
|
-
CRON =
|
115
|
+
CRON = OpenHAB::DSL::Rules::Triggers::Cron::CRON_TRIGGER_MODULE_ID
|
115
116
|
|
116
117
|
#
|
117
118
|
# Create a trigger
|
@@ -138,11 +138,9 @@ module OpenHAB
|
|
138
138
|
|
139
139
|
# Called by OpenHAB to set the rule engine to invoke when triggered
|
140
140
|
# Must match java method name style
|
141
|
-
# rubocop:disable Naming/MethodName
|
142
|
-
def setCallback(callback)
|
141
|
+
def setCallback(callback) # rubocop:disable Naming/MethodName
|
143
142
|
@rule_engine_callback = callback
|
144
143
|
end
|
145
|
-
# rubocop:enable Naming/MethodName
|
146
144
|
|
147
145
|
#
|
148
146
|
# Dispose of handler which deactivates watcher
|
data/lib/openhab/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openhab-scripting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.28.
|
4
|
+
version: 4.28.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian O'Connell
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,7 +97,6 @@ files:
|
|
97
97
|
- lib/openhab/dsl/openhab.rb
|
98
98
|
- lib/openhab/dsl/persistence.rb
|
99
99
|
- lib/openhab/dsl/rules/automation_rule.rb
|
100
|
-
- lib/openhab/dsl/rules/cron_trigger_rule.rb
|
101
100
|
- lib/openhab/dsl/rules/guard.rb
|
102
101
|
- lib/openhab/dsl/rules/item_event.rb
|
103
102
|
- lib/openhab/dsl/rules/property.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'java'
|
4
|
-
require 'openhab/log/logger'
|
5
|
-
|
6
|
-
module OpenHAB
|
7
|
-
module DSL
|
8
|
-
#
|
9
|
-
# Creates and manages OpenHAB Rules
|
10
|
-
#
|
11
|
-
module Rules
|
12
|
-
#
|
13
|
-
# Specialized rule for cron triggers with attachments because OpenHAB does not provide trigger UID for cron rules
|
14
|
-
#
|
15
|
-
class CronTriggerRule < Java::OrgOpenhabCoreAutomationModuleScriptRulesupportSharedSimple::SimpleRule
|
16
|
-
include OpenHAB::Log
|
17
|
-
|
18
|
-
def initialize(rule_config:, rule:, trigger:)
|
19
|
-
super()
|
20
|
-
set_name("#{rule_config.name}-cron-#{trigger.id}")
|
21
|
-
set_triggers([trigger])
|
22
|
-
@rule = rule
|
23
|
-
@trigger = trigger
|
24
|
-
logger.trace("Created Cron Trigger Rule for #{@trigger}")
|
25
|
-
end
|
26
|
-
|
27
|
-
#
|
28
|
-
# Execute the rule
|
29
|
-
#
|
30
|
-
# @param [Map] mod map provided by OpenHAB rules engine
|
31
|
-
# @param [Map] inputs map provided by OpenHAB rules engine containing event and other information
|
32
|
-
#
|
33
|
-
#
|
34
|
-
def execute(mod = nil, _inputs = nil)
|
35
|
-
logger.trace "Trigger #{@trigger} fired for base rule #{@rule.inspect}"
|
36
|
-
inputs = { 'module' => @trigger.id }
|
37
|
-
@rule.execute(mod, inputs)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|