openhab-scripting 5.3.0 → 5.4.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/rules/registry.rb +4 -4
- data/lib/openhab/core/rules/tagged_array.rb +44 -0
- data/lib/openhab/dsl/rules/automation_rule.rb +1 -2
- data/lib/openhab/dsl/rules/builder.rb +46 -3
- data/lib/openhab/dsl/rules/triggers/cron/cron_handler.rb +1 -1
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/dsl.rb +5 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0522f086fca640c17a05634e13924dd9e39fc0630fba03954d4c0ffcfc1739c7
|
4
|
+
data.tar.gz: 9c01b1545d9e999ecc9ff0836691ef858794085ffb09433a3636c7594251e13b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1c7e125bb92764cc330924cacc30b03bf8759633bf34e51000897614af32efa2bcddfd2c48e5514be160d6c2d625eb38449c4d6203c5ca418bf67868d302aa2
|
7
|
+
data.tar.gz: 61742a93f67041588c6f6af954f95dd7515d8ee2d913812f5ac32212a8ddc49f979da4712125d1b15ca327b130ec81102308edbe5689f43e386d24b46f185357
|
@@ -74,19 +74,19 @@ module OpenHAB
|
|
74
74
|
#
|
75
75
|
# Returns all Scenes (rules tagged with "Scene")
|
76
76
|
#
|
77
|
-
# @return [
|
77
|
+
# @return [TaggedArray] A list of all the scenes
|
78
78
|
#
|
79
79
|
def scenes
|
80
|
-
|
80
|
+
@scenes ||= TaggedArray.new("Scene")
|
81
81
|
end
|
82
82
|
|
83
83
|
#
|
84
84
|
# Returns all Scripts (rules tagged with "Script")
|
85
85
|
#
|
86
|
-
# @return [
|
86
|
+
# @return [TaggedArray] A list of all the scripts
|
87
87
|
#
|
88
88
|
def scripts
|
89
|
-
|
89
|
+
@scripts ||= TaggedArray.new("Script")
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "singleton"
|
4
|
+
|
5
|
+
module OpenHAB
|
6
|
+
module Core
|
7
|
+
module Rules
|
8
|
+
#
|
9
|
+
# Provides access to a set of openHAB {Rule rules}, and acts like an array.
|
10
|
+
#
|
11
|
+
class TaggedArray
|
12
|
+
include LazyArray
|
13
|
+
|
14
|
+
def initialize(tag)
|
15
|
+
@tag = tag
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Gets a specific Rule
|
20
|
+
#
|
21
|
+
# @param [String] uid Rule UID
|
22
|
+
# @return [Rule, nil]
|
23
|
+
#
|
24
|
+
def [](uid)
|
25
|
+
rule = $rules.get(uid)
|
26
|
+
rule.tagged?(@tag) ? rule : nil
|
27
|
+
end
|
28
|
+
alias_method :include?, :[]
|
29
|
+
alias_method :key?, :[]
|
30
|
+
# @deprecated
|
31
|
+
alias_method :has_key?, :[]
|
32
|
+
|
33
|
+
#
|
34
|
+
# Explicit conversion to array
|
35
|
+
#
|
36
|
+
# @return [Array<Rule>]
|
37
|
+
#
|
38
|
+
def to_a
|
39
|
+
$rules.all.to_a.tagged(@tag)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -35,8 +35,7 @@ module OpenHAB
|
|
35
35
|
super()
|
36
36
|
set_name(config.name)
|
37
37
|
set_description(config.description)
|
38
|
-
|
39
|
-
set_tags(tags.to_set)
|
38
|
+
set_tags(config.tags.to_set)
|
40
39
|
set_triggers(config.triggers)
|
41
40
|
self.uid = config.uid
|
42
41
|
@run_context = config.caller
|
@@ -104,7 +104,37 @@ module OpenHAB
|
|
104
104
|
ThreadLocal.thread_local(openhab_rule_type: "script", openhab_rule_uid: id) do
|
105
105
|
builder = BuilderDSL.new(block.binding)
|
106
106
|
builder.uid(id)
|
107
|
-
builder.tags(
|
107
|
+
builder.tags("Script")
|
108
|
+
builder.name(name)
|
109
|
+
builder.script(&block)
|
110
|
+
logger.trace { builder.inspect }
|
111
|
+
builder.build(provider, script)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
# Create a new scene
|
117
|
+
#
|
118
|
+
# A scene is a rule with no triggers. It can be called by various other actions,
|
119
|
+
# such as the Run Rules action.
|
120
|
+
#
|
121
|
+
# @param [String] name A descriptive name
|
122
|
+
# @param [String] id The script's ID
|
123
|
+
# @yield [] Block executed when the script is executed.
|
124
|
+
# @return [Core::Rules::Rule]
|
125
|
+
#
|
126
|
+
def scene(name = nil, id: nil, script: nil, &block)
|
127
|
+
raise ArgumentError, "Block is required" unless block
|
128
|
+
|
129
|
+
id ||= NameInference.infer_rule_id_from_block(block)
|
130
|
+
name ||= id
|
131
|
+
script ||= block.source rescue nil # rubocop:disable Style/RescueModifier
|
132
|
+
|
133
|
+
builder = nil
|
134
|
+
ThreadLocal.thread_local(openhab_rule_type: "script", openhab_rule_uid: id) do
|
135
|
+
builder = BuilderDSL.new(block.binding)
|
136
|
+
builder.uid(id)
|
137
|
+
builder.tags("Scene")
|
108
138
|
builder.name(name)
|
109
139
|
builder.script(&block)
|
110
140
|
logger.trace { builder.inspect }
|
@@ -354,7 +384,7 @@ module OpenHAB
|
|
354
384
|
prop :description
|
355
385
|
|
356
386
|
#
|
357
|
-
# @!method tags(tags)
|
387
|
+
# @!method tags(*tags)
|
358
388
|
#
|
359
389
|
# Set the rule's tags.
|
360
390
|
#
|
@@ -1082,6 +1112,7 @@ module OpenHAB
|
|
1082
1112
|
|
1083
1113
|
raise ArgumentError, "Missing cron expression or elements" unless expression
|
1084
1114
|
|
1115
|
+
add_tag("Schedule")
|
1085
1116
|
cron = Cron.new(rule_triggers: @rule_triggers)
|
1086
1117
|
cron.trigger(config: { "cronExpression" => expression }, attach: attach)
|
1087
1118
|
end
|
@@ -1180,6 +1211,7 @@ module OpenHAB
|
|
1180
1211
|
if value == :day && at.is_a?(Item)
|
1181
1212
|
raise ArgumentError, "Attachments are not supported with dynamic datetime triggers" unless attach.nil?
|
1182
1213
|
|
1214
|
+
add_tag("Schedule")
|
1183
1215
|
return trigger("timer.DateTimeTrigger", itemName: at.name, timeOnly: true)
|
1184
1216
|
end
|
1185
1217
|
|
@@ -1561,6 +1593,7 @@ module OpenHAB
|
|
1561
1593
|
#
|
1562
1594
|
def at(item)
|
1563
1595
|
item = item.name if item.is_a?(Item)
|
1596
|
+
add_tag("Schedule")
|
1564
1597
|
trigger("timer.DateTimeTrigger", itemName: item.to_s)
|
1565
1598
|
end
|
1566
1599
|
|
@@ -1847,6 +1880,15 @@ module OpenHAB
|
|
1847
1880
|
|
1848
1881
|
private
|
1849
1882
|
|
1883
|
+
# Adds a single tag to this rule
|
1884
|
+
# @param [String] tag The tag (it will not be normalized)
|
1885
|
+
# @return [void]
|
1886
|
+
def add_tag(tag)
|
1887
|
+
# have to normalize tags first
|
1888
|
+
@tags = DSL::Items::ItemBuilder.normalize_tags(*tags)
|
1889
|
+
@tags << tag unless @tags.include?(tag)
|
1890
|
+
end
|
1891
|
+
|
1850
1892
|
# Calls the on_load block, with a delay if specified
|
1851
1893
|
# @yield block to execute on load time
|
1852
1894
|
# @yieldparam [String] module The module ID that identifies this on_load event
|
@@ -1871,7 +1913,8 @@ module OpenHAB
|
|
1871
1913
|
# @return [true,false] true if it should be created, false otherwise
|
1872
1914
|
#
|
1873
1915
|
def create_rule?
|
1874
|
-
|
1916
|
+
@tags = DSL::Items::ItemBuilder.normalize_tags(*tags)
|
1917
|
+
return true unless (tags & %w[Script Scene]).empty?
|
1875
1918
|
|
1876
1919
|
if !triggers?
|
1877
1920
|
logger.warn "Rule '#{uid}' has no triggers, not creating rule"
|
data/lib/openhab/dsl/version.rb
CHANGED
data/lib/openhab/dsl.rb
CHANGED
@@ -59,6 +59,11 @@ module OpenHAB
|
|
59
59
|
rules.build { rule(name, **kwargs, &block) }
|
60
60
|
end
|
61
61
|
|
62
|
+
# (see Rules::Builder#scene)
|
63
|
+
def scene(name = nil, id: nil, **kwargs, &block)
|
64
|
+
rules.build { scene(name, id: id, **kwargs, &block) }
|
65
|
+
end
|
66
|
+
|
62
67
|
# (see Rules::Builder#script)
|
63
68
|
def script(name = nil, id: nil, **kwargs, &block)
|
64
69
|
rules.build { script(name, id: id, **kwargs, &block) }
|
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.4.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: 2023-
|
13
|
+
date: 2023-06-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -447,6 +447,7 @@ files:
|
|
447
447
|
- lib/openhab/core/rules/provider.rb
|
448
448
|
- lib/openhab/core/rules/registry.rb
|
449
449
|
- lib/openhab/core/rules/rule.rb
|
450
|
+
- lib/openhab/core/rules/tagged_array.rb
|
450
451
|
- lib/openhab/core/script_handling.rb
|
451
452
|
- lib/openhab/core/things.rb
|
452
453
|
- lib/openhab/core/things/channel.rb
|