openhab-scripting 5.3.0 → 5.4.1
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/items/generic_item.rb +19 -16
- data/lib/openhab/core/rules/registry.rb +4 -4
- data/lib/openhab/core/rules/tagged_array.rb +44 -0
- data/lib/openhab/core/types/quantity_type.rb +2 -2
- 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
- data/lib/openhab/rspec/karaf.rb +2 -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: 63a0ce6f1514492eb9e576ddcdcad35b2d10311f0eb4f25bd27dccef521495be
|
4
|
+
data.tar.gz: df77ba04c98b1cbc0a3595ccb6a6813159ac89b34fe33b914ae20398a9936934
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 124a9d294d2e55204af25ec01861d3891d74fbbb03b9b96b181e8d5b8f0967926d245e7f6c42772894c99763f9a3caa586b81a5137960583c38304eb56609fd1
|
7
|
+
data.tar.gz: f6255e787a44419ea44ef763fff95a3a6609fe8d2beb179fb81d78ee4ff44485196d5bb1ada9ae4dd1dc7962ddac2817076420d306ed2662c2cf2d24ad700fa4
|
@@ -38,6 +38,24 @@ module OpenHAB
|
|
38
38
|
def ===(other)
|
39
39
|
other.is_a?(self)
|
40
40
|
end
|
41
|
+
|
42
|
+
# @!visibility private
|
43
|
+
def item_states_event_builder
|
44
|
+
@item_states_event_builder ||=
|
45
|
+
OpenHAB::OSGi.service("org.openhab.core.io.rest.sse.internal.SseItemStatesEventBuilder")&.tap do |builder|
|
46
|
+
m = builder.class.java_class.get_declared_method("getDisplayState", Item, java.util.Locale)
|
47
|
+
m.accessible = true
|
48
|
+
builder.instance_variable_set(:@getDisplayState, m)
|
49
|
+
# Disable "singleton on non-persistent Java type"
|
50
|
+
original_verbose = $VERBOSE
|
51
|
+
$VERBOSE = nil
|
52
|
+
def builder.get_display_state(item)
|
53
|
+
@getDisplayState.invoke(self, item, nil)
|
54
|
+
end
|
55
|
+
ensure
|
56
|
+
$VERBOSE = original_verbose
|
57
|
+
end
|
58
|
+
end
|
41
59
|
end
|
42
60
|
# rubocop:enable Naming/MethodName
|
43
61
|
|
@@ -83,22 +101,7 @@ module OpenHAB
|
|
83
101
|
# logger.info(Exterior_WindDirection.formatted_state) # => "NE (36°)"
|
84
102
|
#
|
85
103
|
def formatted_state
|
86
|
-
|
87
|
-
# the JRuby library has defined
|
88
|
-
raw_state_string = raw_state.to_string
|
89
|
-
|
90
|
-
return raw_state_string unless (pattern = state_description&.pattern)
|
91
|
-
|
92
|
-
transformed_state_string = org.openhab.core.transform.TransformationHelper.transform(OSGi.bundle_context,
|
93
|
-
pattern,
|
94
|
-
raw_state_string)
|
95
|
-
if transformed_state_string.nil? || transformed_state_string == raw_state_string
|
96
|
-
return state&.format(pattern) || raw_state_string
|
97
|
-
end
|
98
|
-
|
99
|
-
transformed_state_string
|
100
|
-
rescue org.openhab.core.transform.TransformationException
|
101
|
-
raw_state_string
|
104
|
+
GenericItem.item_states_event_builder.get_display_state(self)
|
102
105
|
end
|
103
106
|
|
104
107
|
#
|
@@ -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
|
@@ -112,9 +112,9 @@ module OpenHAB
|
|
112
112
|
# # @example
|
113
113
|
# # NumberC.state | ImperialUnits::FAHRENHEIT
|
114
114
|
# #
|
115
|
-
# def
|
115
|
+
# def to_invertible_unit(unit); end
|
116
116
|
|
117
|
-
alias_method :|, :
|
117
|
+
alias_method :|, :to_invertible_unit
|
118
118
|
|
119
119
|
#
|
120
120
|
# Comparison
|
@@ -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) }
|
data/lib/openhab/rspec/karaf.rb
CHANGED
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.1
|
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-07-17 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
|