openhab-scripting 5.18.1 → 5.19.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/dto/item_channel_link.rb +5 -0
- data/lib/openhab/core/items/item.rb +2 -2
- data/lib/openhab/core/items/item_channel_links.rb +8 -4
- data/lib/openhab/core/items/persistence.rb +437 -150
- data/lib/openhab/core/things/channel.rb +120 -0
- data/lib/openhab/core/things/links/provider.rb +2 -1
- data/lib/openhab/dsl/rules/builder.rb +52 -24
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/rspec/mocks/persistence_service.rb +10 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 806939292f4f749b0fd1db95f1b99a35365f8de972e96b90bb824a217f151743
|
4
|
+
data.tar.gz: 783bd04b6bcb2d6fedef08d69aecb150f3578a9a6a011015b968cb4614949263
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11e236b0c0c642d154e0340ce1330311fcaec8f60c180af58ec4bfc2fd013a2de64d54ae327316b90bf565f5255c76c1f3d810595225d9c8b22ff40c8fb12e7b
|
7
|
+
data.tar.gz: 47d995352bb04ced923551adcf16f7022823b2cf4e2aed9d758be688fa9a75cc40b0778700e2e0e04f15e8092453ae2c0323565de9dc73047faaeff37d0bd397
|
@@ -288,7 +288,7 @@ module OpenHAB
|
|
288
288
|
end
|
289
289
|
|
290
290
|
# @!attribute channel [r]
|
291
|
-
# Return the
|
291
|
+
# Return the channel this item is linked to. If an item is linked to more than one channel,
|
292
292
|
# this method only returns the first channel.
|
293
293
|
#
|
294
294
|
# @return [Things::Channel, nil]
|
@@ -320,7 +320,7 @@ module OpenHAB
|
|
320
320
|
# @see unlink
|
321
321
|
#
|
322
322
|
def links
|
323
|
-
ItemChannelLinks.new(
|
323
|
+
ItemChannelLinks.new(name, Things::Links::Provider.registry.get_links(name))
|
324
324
|
end
|
325
325
|
|
326
326
|
#
|
@@ -12,13 +12,13 @@ module OpenHAB
|
|
12
12
|
#
|
13
13
|
class ItemChannelLinks < SimpleDelegator
|
14
14
|
#
|
15
|
-
# @param [
|
15
|
+
# @param [String, UID] owner The owner that the links belong to
|
16
16
|
# @param [Set<ItemChannelLink>] links The set of links to delegate to
|
17
17
|
#
|
18
18
|
# @!visibility private
|
19
|
-
def initialize(
|
19
|
+
def initialize(owner, links)
|
20
20
|
super(links)
|
21
|
-
@
|
21
|
+
@owner = owner
|
22
22
|
end
|
23
23
|
|
24
24
|
#
|
@@ -27,7 +27,11 @@ module OpenHAB
|
|
27
27
|
#
|
28
28
|
def clear
|
29
29
|
Things::Links::Provider.registry.all.each do |link|
|
30
|
-
|
30
|
+
if @owner.is_a?(String)
|
31
|
+
next unless link.item_name == @owner
|
32
|
+
else
|
33
|
+
next unless link.linked_uid == @owner
|
34
|
+
end
|
31
35
|
|
32
36
|
provider = Things::Links::Provider.registry.provider_for(link.uid)
|
33
37
|
if provider.is_a?(ManagedProvider)
|
@@ -33,7 +33,7 @@ module OpenHAB
|
|
33
33
|
# logger.info("The power usage exceeded its 15 min average)
|
34
34
|
# end
|
35
35
|
#
|
36
|
-
# @example
|
36
|
+
# @example PersistedState
|
37
37
|
# max = Power_Usage.maximum_since(LocalTime::MIDNIGHT)
|
38
38
|
# logger.info("Max power usage today: #{max}, at: #{max.timestamp})
|
39
39
|
#
|
@@ -41,69 +41,50 @@ module OpenHAB
|
|
41
41
|
GenericItem.prepend(self)
|
42
42
|
|
43
43
|
#
|
44
|
-
# A
|
44
|
+
# A wrapper for {org.openhab.core.persistence.HistoricItem HistoricItem} that delegates to its state.
|
45
45
|
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
46
|
+
# @example
|
47
|
+
# max = Power_Usage.maximum_since(LocalTime::MIDNIGHT)
|
48
|
+
# logger.info "Highest power usage: #{max} occurred at #{max.timestamp}" if max > 5 | "kW"
|
49
49
|
#
|
50
|
-
class
|
50
|
+
class PersistedState < SimpleDelegator
|
51
|
+
extend Forwardable
|
52
|
+
|
51
53
|
# @!attribute [r] state
|
52
54
|
# @return [Types::State]
|
53
55
|
alias_method :state, :__getobj__
|
54
56
|
|
55
|
-
def initialize(state, historic_item)
|
56
|
-
@historic_item = historic_item
|
57
|
-
super(state)
|
58
|
-
end
|
59
|
-
|
60
57
|
# @!attribute [r] timestamp
|
61
58
|
# @return [ZonedDateTime]
|
62
|
-
|
63
|
-
|
59
|
+
|
60
|
+
# @!attribute [r] name
|
61
|
+
# @return [String] Item name
|
62
|
+
|
63
|
+
delegate %i[timestamp name] => :@historic_item
|
64
|
+
|
65
|
+
def initialize(historic_item, state = nil)
|
66
|
+
@historic_item = historic_item
|
67
|
+
super(state || historic_item.state)
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
67
|
-
#
|
68
|
-
|
69
|
-
delta_since
|
70
|
-
deviation_since
|
71
|
-
sum_since
|
72
|
-
variance_since].freeze
|
73
|
-
|
74
|
-
# All persistence methods that require a timestamp
|
75
|
-
# Note the _between methods are automatically created from the _since methods
|
76
|
-
PERSISTENCE_METHODS = (QUANTITY_METHODS +
|
77
|
-
%i[ changed_since?
|
78
|
-
count_since
|
79
|
-
count_state_changes_since
|
80
|
-
historic_state
|
81
|
-
maximum_since
|
82
|
-
minimum_since
|
83
|
-
updated_since?])
|
84
|
-
|
85
|
-
# @deprecated OH3.4 - in openHAB 4, just add :get_all_states_since and freeze the list above
|
86
|
-
PERSISTENCE_METHODS << :get_all_states_since if OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
87
|
-
PERSISTENCE_METHODS.freeze
|
88
|
-
|
89
|
-
private_constant :QUANTITY_METHODS, :PERSISTENCE_METHODS
|
90
|
-
|
91
|
-
# @!method persist(service = nil)
|
92
|
-
# Persists the state of the item
|
93
|
-
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
94
|
-
# @return [void]
|
95
|
-
|
96
|
-
# @!method last_update(service = nil)
|
97
|
-
# Returns the time the item was last updated.
|
98
|
-
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
99
|
-
# @return [ZonedDateTime, nil] The timestamp of the last update
|
71
|
+
# @deprecated Use {PersistedState} instead
|
72
|
+
HistoricState = PersistedState
|
100
73
|
|
101
74
|
# @!method average_since(timestamp, service = nil)
|
102
75
|
# Returns the average value of the item's state since the given time
|
103
76
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
104
77
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
105
78
|
# @return [DecimalType, QuantityType, nil] The average value since `timestamp`,
|
106
|
-
# or nil if no previous
|
79
|
+
# or nil if no previous states could be found.
|
80
|
+
|
81
|
+
# @!method average_until(timestamp, service = nil)
|
82
|
+
# Returns the average value of the item's state between now until the given time
|
83
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
84
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
85
|
+
# @return [DecimalType, QuantityType, nil] The average value until `timestamp`,
|
86
|
+
# or nil if no future states could be found.
|
87
|
+
# @since openHAB 4.2
|
107
88
|
|
108
89
|
# @!method average_between(start, finish, service = nil)
|
109
90
|
# Returns the average value of the item's state between two points in time
|
@@ -111,14 +92,22 @@ module OpenHAB
|
|
111
92
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
112
93
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
113
94
|
# @return [DecimalType, QuantityType, nil] The average value between `start` and `finish`,
|
114
|
-
# or nil if no
|
95
|
+
# or nil if no states could be found.
|
115
96
|
|
116
97
|
# @!method delta_since(timestamp, service = nil)
|
117
98
|
# Returns the difference value of the item's state since the given time
|
118
99
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
119
100
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
120
101
|
# @return [DecimalType, QuantityType, nil] The difference value since `timestamp`,
|
121
|
-
# or nil if no previous
|
102
|
+
# or nil if no previous states could be found.
|
103
|
+
|
104
|
+
# @!method delta_until(timestamp, service = nil)
|
105
|
+
# Returns the difference value of the item's state between now until the given time
|
106
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
107
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
108
|
+
# @return [DecimalType, QuantityType, nil] The difference value until `timestamp`,
|
109
|
+
# or nil if no future states could be found.
|
110
|
+
# @since openHAB 4.2
|
122
111
|
|
123
112
|
# @!method delta_between(start, finish, service = nil)
|
124
113
|
# Returns the difference value of the item's state between two points in time
|
@@ -126,14 +115,22 @@ module OpenHAB
|
|
126
115
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
127
116
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
128
117
|
# @return [DecimalType, QuantityType, nil] The difference value between `start` and `finish`,
|
129
|
-
# or nil if no
|
118
|
+
# or nil if no states could be found.
|
130
119
|
|
131
120
|
# @!method deviation_since(timestamp, service = nil)
|
132
121
|
# Returns the standard deviation of the item's state since the given time
|
133
122
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
134
123
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
135
124
|
# @return [DecimalType, QuantityType, nil] The standard deviation since `timestamp`,
|
136
|
-
# or nil if no previous
|
125
|
+
# or nil if no previous states could be found.
|
126
|
+
|
127
|
+
# @!method deviation_until(timestamp, service = nil)
|
128
|
+
# Returns the standard deviation of the item's state beetween now until the given time
|
129
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
130
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
131
|
+
# @return [DecimalType, QuantityType, nil] The standard deviation until `timestamp`,
|
132
|
+
# or nil if no future states could be found.
|
133
|
+
# @since openHAB 4.2
|
137
134
|
|
138
135
|
# @!method deviation_between(start, finish, service = nil)
|
139
136
|
# Returns the standard deviation of the item's state between two points in time
|
@@ -141,14 +138,22 @@ module OpenHAB
|
|
141
138
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
142
139
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
143
140
|
# @return [DecimalType, QuantityType, nil] The standard deviation between `start` and `finish`,
|
144
|
-
# or nil if no
|
141
|
+
# or nil if no states could be found.
|
145
142
|
|
146
143
|
# @!method sum_since(timestamp, service = nil)
|
147
144
|
# Returns the sum of the item's state since the given time
|
148
145
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
149
146
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
150
147
|
# @return [DecimalType, QuantityType, nil] The sum since `timestamp`,
|
151
|
-
# or nil if no previous
|
148
|
+
# or nil if no previous states could be found.
|
149
|
+
|
150
|
+
# @!method sum_until(timestamp, service = nil)
|
151
|
+
# Returns the sum of the item's state between now until the given time
|
152
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
153
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
154
|
+
# @return [DecimalType, QuantityType, nil] The sum until `timestamp`,
|
155
|
+
# or nil if no future states could be found.
|
156
|
+
# @since openHAB 4.2
|
152
157
|
|
153
158
|
# @!method sum_between(start, finish, service = nil)
|
154
159
|
# Returns the sum of the item's state between two points in time
|
@@ -156,14 +161,22 @@ module OpenHAB
|
|
156
161
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
157
162
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
158
163
|
# @return [DecimalType, QuantityType, nil] The sum between `start` and `finish`,
|
159
|
-
# or nil if no
|
164
|
+
# or nil if no states could be found.
|
160
165
|
|
161
166
|
# @!method variance_since(timestamp, service = nil)
|
162
167
|
# Returns the variance of the item's state since the given time
|
163
168
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
164
169
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
165
170
|
# @return [DecimalType, QuantityType, nil] The variance since `timestamp`,
|
166
|
-
# or nil if no previous
|
171
|
+
# or nil if no previous states could be found.
|
172
|
+
|
173
|
+
# @!method variance_until(timestamp, service = nil)
|
174
|
+
# Returns the variance of the item's state between now until the given time
|
175
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
176
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
177
|
+
# @return [DecimalType, QuantityType, nil] The variance until `timestamp`,
|
178
|
+
# or nil if no future states could be found.
|
179
|
+
# @since openHAB 4.2
|
167
180
|
|
168
181
|
# @!method variance_between(start, finish, service = nil)
|
169
182
|
# Returns the variance of the item's state between two points in time
|
@@ -171,7 +184,7 @@ module OpenHAB
|
|
171
184
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
172
185
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
173
186
|
# @return [DecimalType, QuantityType, nil] The variance between `start` and `finish`,
|
174
|
-
# or nil if no
|
187
|
+
# or nil if no states could be found.
|
175
188
|
|
176
189
|
# @!method changed_since?(timestamp, service = nil)
|
177
190
|
# Whether the item's state has changed since the given time
|
@@ -179,6 +192,13 @@ module OpenHAB
|
|
179
192
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
180
193
|
# @return [true,false] True if the item's state has changed since the given `timestamp`, False otherwise.
|
181
194
|
|
195
|
+
# @!method changed_until?(timestamp, service = nil)
|
196
|
+
# Whether the item's state has changed between now until the given time
|
197
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
198
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
199
|
+
# @return [true,false] True if the item's state has changed until the given `timestamp`, False otherwise.
|
200
|
+
# @since openHAB 4.2
|
201
|
+
|
182
202
|
# @!method changed_between?(start, finish, service = nil)
|
183
203
|
# Whether the item's state changed between two points in time
|
184
204
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
@@ -188,58 +208,111 @@ module OpenHAB
|
|
188
208
|
|
189
209
|
# @!method evolution_rate(timestamp, service = nil)
|
190
210
|
# Returns the evolution rate of the item's state
|
191
|
-
# @return [DecimalType,
|
192
|
-
#
|
211
|
+
# @return [DecimalType, nil] The evolution rate or nil if no previous state could be found.
|
212
|
+
# @deprecated This method has been deprecated in openHAB 4.2.
|
213
|
+
# Use {#evolution_rate_since} or {#evolution_rate_between} instead.
|
193
214
|
# @overload evolution_rate(timestamp, service = nil)
|
194
215
|
# Returns the evolution rate of the item's state since the given time
|
195
216
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
196
217
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
197
|
-
# @return [DecimalType,
|
218
|
+
# @return [DecimalType, nil] The evolution rate since `timestamp`,
|
198
219
|
# or nil if no previous state could be found.
|
220
|
+
# @deprecated In openHAB 4.2, use {#evolution_rate_since} instead
|
199
221
|
# @overload evolution_rate(start, finish, service = nil)
|
200
222
|
# Returns the evolution rate of the item's state between two points in time
|
201
223
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
202
224
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
203
225
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
204
|
-
# @return [DecimalType,
|
226
|
+
# @return [DecimalType, nil] The evolution rate between `start` and `finish`,
|
205
227
|
# or nil if no previous state could be found.
|
228
|
+
# @deprecated In openHAB 4.2, use {#evolution_rate_between} instead
|
229
|
+
|
230
|
+
# @!method evolution_rate_since(timestamp, service = nil)
|
231
|
+
# Returns the evolution rate of the item's state since the given time
|
232
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
233
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
234
|
+
# @return [DecimalType, nil] The evolution rate since `timestamp`,
|
235
|
+
# or nil if no previous states could be found.
|
236
|
+
# @since openHAB 4.2
|
237
|
+
|
238
|
+
# @!method evolution_rate_until(timestamp, service = nil)
|
239
|
+
# Returns the evolution rate of the item's state between now until the given time
|
240
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
241
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
242
|
+
# @return [DecimalType, nil] The evolution rate until `timestamp`,
|
243
|
+
# or nil if no future states could be found.
|
244
|
+
# @since openHAB 4.2
|
245
|
+
|
246
|
+
# @!method evolution_rate_between(start, finish, service = nil)
|
247
|
+
# Returns the evolution rate of the item's state between two points in time
|
248
|
+
# @param [#to_zoned_date_time] start The point in time from which to search
|
249
|
+
# @param [#to_zoned_date_time] finish The point in time to which to search
|
250
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
251
|
+
# @return [DecimalType, nil] The evolution rate between `start` and `finish`,
|
252
|
+
# or nil if no states could be found.
|
253
|
+
# @since openHAB 4.2
|
206
254
|
|
207
255
|
# @!method historic_state(timestamp, service = nil)
|
208
256
|
# Returns the the item's state at the given time
|
209
257
|
# @param [#to_zoned_date_time] timestamp The point in time at which to search
|
210
258
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
211
|
-
# @return [
|
259
|
+
# @return [PersistedState, nil] The item's state at `timestamp`,
|
212
260
|
# or nil if no previous state could be found.
|
261
|
+
# @deprecated In openHAB 4.2, use {#persisted_state} instead
|
262
|
+
|
263
|
+
# @!method persisted_state(timestamp, service = nil)
|
264
|
+
# Returns the the item's state at the given time
|
265
|
+
# @param [#to_zoned_date_time] timestamp The point in time at which to search
|
266
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
267
|
+
# @return [PersistedState, nil] The item's state at `timestamp`,
|
268
|
+
# or nil if no state could be found.
|
269
|
+
# @since openHAB 4.2
|
213
270
|
|
214
271
|
# @!method maximum_since(timestamp, service = nil)
|
215
272
|
# Returns the maximum value of the item's state since the given time
|
216
273
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
217
274
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
218
|
-
# @return [
|
219
|
-
# or nil if no previous
|
275
|
+
# @return [PersistedState, nil] The maximum value since `timestamp`,
|
276
|
+
# or nil if no previous states could be found.
|
277
|
+
|
278
|
+
# @!method maximum_until(timestamp, service = nil)
|
279
|
+
# Returns the maximum value of the item's state between now until the given time
|
280
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
281
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
282
|
+
# @return [PersistedState, nil] The maximum value until `timestamp`,
|
283
|
+
# or nil if no future states could be found.
|
284
|
+
# @since openHAB 4.2
|
220
285
|
|
221
286
|
# @!method maximum_between(start, finish, service = nil)
|
222
287
|
# Returns the maximum value of the item's state between two points in time
|
223
288
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
224
289
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
225
290
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
226
|
-
# @return [
|
227
|
-
# or nil if no
|
291
|
+
# @return [PersistedState, nil] The maximum value between `start` and `finish`,
|
292
|
+
# or nil if no states could be found.
|
228
293
|
|
229
294
|
# @!method minimum_since(timestamp, service = nil)
|
230
295
|
# Returns the minimum value of the item's state since the given time
|
231
296
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
232
297
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
233
|
-
# @return [
|
234
|
-
# or nil if no previous
|
298
|
+
# @return [PersistedState, nil] The minimum value since `timestamp`,
|
299
|
+
# or nil if no previous states could be found.
|
300
|
+
|
301
|
+
# @!method minimum_until(timestamp, service = nil)
|
302
|
+
# Returns the minimum value of the item's state between now until the given time
|
303
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
304
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
305
|
+
# @return [PersistedState, nil] The minimum value until `timestamp`,
|
306
|
+
# or nil if no future states could be found.
|
307
|
+
# @since openHAB 4.2
|
235
308
|
|
236
309
|
# @!method minimum_between(start, finish, service = nil)
|
237
310
|
# Returns the minimum value of the item's state between two points in time
|
238
311
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
239
312
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
240
313
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
241
|
-
# @return [
|
242
|
-
# or nil if no
|
314
|
+
# @return [PersistedState, nil] The minimum value between `start` and `finish`,
|
315
|
+
# or nil if no states could be found.
|
243
316
|
|
244
317
|
# @!method updated_since?(timestamp, service = nil)
|
245
318
|
# Whether the item's state has been updated since the given time
|
@@ -247,6 +320,13 @@ module OpenHAB
|
|
247
320
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
248
321
|
# @return [true,false] True if the item's state has been updated since the given `timestamp`, False otherwise.
|
249
322
|
|
323
|
+
# @!method updated_until?(timestamp, service = nil)
|
324
|
+
# Whether the item's state will be updated between now until the given time
|
325
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
326
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
327
|
+
# @return [true,false] True if the item's state will be updated until the given `timestamp`, False otherwise.
|
328
|
+
# @since openHAB 4.2
|
329
|
+
|
250
330
|
# @!method updated_between?(start, finish, service = nil)
|
251
331
|
# Whether the item's state was updated between two points in time
|
252
332
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
@@ -260,8 +340,15 @@ module OpenHAB
|
|
260
340
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
261
341
|
# @return [Integer] The number of values persisted for this item.
|
262
342
|
|
343
|
+
# @!method count_until(timestamp, service = nil)
|
344
|
+
# Returns the number of available data points between now until the given time.
|
345
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
346
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
347
|
+
# @return [Integer] The number of values persisted for this item.
|
348
|
+
# @since openHAB 4.2
|
349
|
+
|
263
350
|
# @!method count_between(start, finish, service = nil)
|
264
|
-
# Returns the number of available
|
351
|
+
# Returns the number of available data points between two points in time.
|
265
352
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
266
353
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
267
354
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
@@ -273,83 +360,293 @@ module OpenHAB
|
|
273
360
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
274
361
|
# @return [Integer] The number of values persisted for this item.
|
275
362
|
|
363
|
+
# @!method count_state_changes_until(timestamp, service = nil)
|
364
|
+
# Returns the number of changes in data points between now until the given time.
|
365
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
366
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
367
|
+
# @return [Integer] The number of values persisted for this item.
|
368
|
+
# @since openHAB 4.2
|
369
|
+
|
276
370
|
# @!method count_state_changes_between(start, finish, service = nil)
|
277
|
-
# Returns the number of changes in
|
371
|
+
# Returns the number of changes in data points between two points in time.
|
278
372
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
279
373
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
280
374
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
281
375
|
# @return [Integer] The number of values persisted for this item.
|
282
376
|
|
283
377
|
# @!method all_states_since(timestamp, service = nil)
|
284
|
-
# @since openHAB 4.0
|
285
378
|
# Returns all the states from a point in time until now.
|
286
379
|
# @param [#to_zoned_date_time] timestamp The point in time from which to search
|
287
380
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
288
|
-
# @return [Array<
|
381
|
+
# @return [Array<PersistedState>] An array of {PersistedState} persisted for this item.
|
382
|
+
# @since openHAB 4.0
|
383
|
+
|
384
|
+
# @!method all_states_until(timestamp, service = nil)
|
385
|
+
# Returns all the states between now until the given time.
|
386
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to search
|
387
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
388
|
+
# @return [Array<PersistedState>] An array of {PersistedState} persisted for this item.
|
389
|
+
# @since openHAB 4.2
|
289
390
|
|
290
391
|
# @!method all_states_between(start, finish, service = nil)
|
291
|
-
# @since openHAB 4.0
|
292
392
|
# Returns all the states between two points in time.
|
293
393
|
# @param [#to_zoned_date_time] start The point in time from which to search
|
294
394
|
# @param [#to_zoned_date_time] finish The point in time to which to search
|
295
395
|
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
296
|
-
# @return [Array<
|
396
|
+
# @return [Array<PersistedState>] An array of {PersistedState} persisted for this item.
|
397
|
+
# @since openHAB 4.0
|
398
|
+
|
399
|
+
# @!method remove_all_states_since(timestamp, service = nil)
|
400
|
+
# Removes persisted data points since a certain point in time.
|
401
|
+
# @param [#to_zoned_date_time] timestamp The point in time from which to remove
|
402
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
403
|
+
# @return [void]
|
404
|
+
# @since openHAB 4.2
|
405
|
+
|
406
|
+
# @!method remove_all_states_until(timestamp, service = nil)
|
407
|
+
# Removes persisted data points from now until the given point in time.
|
408
|
+
# @param [#to_zoned_date_time] timestamp The point in time until which to remove
|
409
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
410
|
+
# @return [void]
|
411
|
+
# @since openHAB 4.2
|
412
|
+
|
413
|
+
# @!method remove_all_states_between(start, finish, service = nil)
|
414
|
+
# Removes persisted data points between two points in time.
|
415
|
+
# @param [#to_zoned_date_time] start The point in time from which to remove
|
416
|
+
# @param [#to_zoned_date_time] finish The point in time to which to remove
|
417
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
418
|
+
# @return [void]
|
419
|
+
# @since openHAB 4.2
|
420
|
+
|
421
|
+
#
|
422
|
+
# Persist item state to the persistence service
|
423
|
+
#
|
424
|
+
# @overload persist(service = nil)
|
425
|
+
# Persists the current state of the item
|
426
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
427
|
+
# @return [void]
|
428
|
+
#
|
429
|
+
# @overload persist(timestamp, state, service = nil)
|
430
|
+
# Persists a state at a given timestamp
|
431
|
+
# @param [#to_zoned_date_time] timestamp The timestamp for the given state to be stored
|
432
|
+
# @param [Types::State] state The state to be stored
|
433
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
434
|
+
# @return [void]
|
435
|
+
# @since openHAB 4.2
|
436
|
+
#
|
437
|
+
# @overload persist(time_series, service = nil)
|
438
|
+
# Persists a time series
|
439
|
+
# @param [Types::TimeSeries] time_series The time series of states to be stored
|
440
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
441
|
+
# @return [void]
|
442
|
+
# @since openHAB 4.2
|
443
|
+
#
|
444
|
+
def persist(*args)
|
445
|
+
# @deprecated OH 4.1 this if block content can be removed when dropping OH 4.1 support
|
446
|
+
if Core.version < Core::V4_2
|
447
|
+
raise ArgumentError, "wrong number of arguments (given #{args.size}, expected 0..1)" if args.size > 1
|
448
|
+
|
449
|
+
service = args.last || persistence_service
|
450
|
+
Actions::PersistenceExtensions.persist(self, service&.to_s)
|
451
|
+
return
|
452
|
+
end
|
453
|
+
|
454
|
+
first_arg = args.first
|
455
|
+
if first_arg.is_a?(TimeSeries)
|
456
|
+
if args.size > 2
|
457
|
+
raise ArgumentError,
|
458
|
+
"wrong number of arguments to persist a time series (given #{args.size}, expected 1..2)"
|
459
|
+
end
|
460
|
+
|
461
|
+
service = args[1] || persistence_service
|
462
|
+
Actions::PersistenceExtensions.java_send :persist,
|
463
|
+
[Item.java_class, Types::TimeSeries.java_class, java.lang.String],
|
464
|
+
self,
|
465
|
+
first_arg,
|
466
|
+
service&.to_s
|
467
|
+
elsif first_arg.respond_to?(:to_zoned_date_time)
|
468
|
+
unless args.size.between?(2, 3)
|
469
|
+
raise ArgumentError, "wrong number of arguments to persist a state (given #{args.size}, expected 2..3)"
|
470
|
+
end
|
471
|
+
|
472
|
+
timestamp = first_arg.to_zoned_date_time
|
473
|
+
state = format_update(args[1])
|
474
|
+
service = args[2] || persistence_service
|
475
|
+
Actions::PersistenceExtensions.java_send :persist,
|
476
|
+
[Item.java_class,
|
477
|
+
ZonedDateTime.java_class,
|
478
|
+
org.openhab.core.types.State,
|
479
|
+
java.lang.String],
|
480
|
+
self,
|
481
|
+
timestamp,
|
482
|
+
state,
|
483
|
+
service&.to_s
|
484
|
+
|
485
|
+
else
|
486
|
+
if args.size > 1
|
487
|
+
raise ArgumentError,
|
488
|
+
"wrong number of arguments to persist the current state (given #{args.size}, expected 0..1)"
|
489
|
+
end
|
490
|
+
service = first_arg || persistence_service
|
491
|
+
Actions::PersistenceExtensions.java_send :persist,
|
492
|
+
[Item.java_class, java.lang.String],
|
493
|
+
self,
|
494
|
+
service&.to_s
|
297
495
|
|
298
|
-
%i[persist last_update].each do |method|
|
299
|
-
define_method(method) do |service = nil|
|
300
|
-
service ||= persistence_service
|
301
|
-
Actions::PersistenceExtensions.public_send(method, self, service&.to_s)
|
302
496
|
end
|
303
497
|
end
|
304
498
|
|
499
|
+
# @!method last_update(service = nil)
|
500
|
+
# Returns the time the item was last updated.
|
501
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
502
|
+
# @return [ZonedDateTime, nil] The timestamp of the last update
|
503
|
+
|
504
|
+
# @!method next_update(service = nil)
|
505
|
+
# Returns the first future update time of the item.
|
506
|
+
# @param [Symbol, String] service An optional persistence id instead of the default persistence service.
|
507
|
+
# @return [ZonedDateTime, nil] The timestamp of the next update
|
508
|
+
# @see last_update
|
509
|
+
# @since openHAB 4.2
|
510
|
+
|
511
|
+
%i[last_update next_update].each do |method|
|
512
|
+
# @deprecated OH 4.1 remove this guard when dropping OH 4.1
|
513
|
+
next unless Actions::PersistenceExtensions.respond_to?(method)
|
514
|
+
|
515
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
516
|
+
def #{method}(service = nil) # def last_update(service = nil)
|
517
|
+
service ||= persistence_service # service ||= persistence_service
|
518
|
+
result = Actions::PersistenceExtensions.#{method}( # result = Actions::PersistenceExtensions.last_update(
|
519
|
+
self, # self,
|
520
|
+
service&.to_s # service&.to_s
|
521
|
+
) # )
|
522
|
+
wrap_result(result) # wrap_result(result)
|
523
|
+
end # end
|
524
|
+
RUBY
|
525
|
+
end
|
526
|
+
|
527
|
+
# @!method previous_state(service = nil, skip_equal: false)
|
528
|
+
# Return the previous state of the item
|
529
|
+
#
|
530
|
+
# @param skip_equal [true,false] if true, skips equal state values and
|
531
|
+
# searches the first state not equal the current state
|
532
|
+
# @param service [String] the name of the PersistenceService to use
|
305
533
|
#
|
306
|
-
#
|
534
|
+
# @return [PersistedState, nil] the previous state or nil if no previous state could be found,
|
535
|
+
# or if the default persistence service is not configured or
|
536
|
+
# does not refer to a valid service
|
537
|
+
|
538
|
+
# @!method next_state(service = nil, skip_equal: false)
|
539
|
+
# Return the next state of the item
|
307
540
|
#
|
308
|
-
#
|
309
|
-
#
|
310
|
-
#
|
541
|
+
# @param skip_equal [true,false] if true, skips equal state values and
|
542
|
+
# searches the first state not equal the current state
|
543
|
+
# @param service [String] the name of the PersistenceService to use
|
311
544
|
#
|
312
|
-
#
|
313
|
-
#
|
314
|
-
#
|
545
|
+
# @return [PersistedState, nil] the previous state or nil if no previous state could be found,
|
546
|
+
# or if the default persistence service is not configured or
|
547
|
+
# does not refer to a valid service
|
315
548
|
#
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
549
|
+
# @since openHAB 4.2
|
550
|
+
|
551
|
+
%i[previous_state next_state].each do |method|
|
552
|
+
# @deprecated OH 4.1 remove this guard when dropping OH 4.1
|
553
|
+
next unless Actions::PersistenceExtensions.respond_to?(method)
|
554
|
+
|
555
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
556
|
+
def #{method}(service = nil, skip_equal: false) # def previous_state(service = nil, skip_equal: false)
|
557
|
+
service ||= persistence_service # service ||= persistence_service
|
558
|
+
result = Actions::PersistenceExtensions.#{method}( # result = Actions::PersistenceExtensions.previous_state(
|
559
|
+
self, # self,
|
560
|
+
skip_equal, # skip_equal,
|
561
|
+
service&.to_s # service&.to_s
|
562
|
+
) # )
|
563
|
+
wrap_result(result, quantify: true) # wrap_result(result, quantify: true)
|
564
|
+
end # end
|
565
|
+
RUBY
|
320
566
|
end
|
321
567
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
service
|
330
|
-
|
331
|
-
|
568
|
+
class << self
|
569
|
+
# @!visibility private
|
570
|
+
def def_persistence_method(method, quantify: false)
|
571
|
+
method = method.to_s.dup
|
572
|
+
suffix = method.delete_suffix!("?") && "?"
|
573
|
+
|
574
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
575
|
+
def #{method}#{suffix}(timestamp, service = nil) # def changed_since?(timestamp, service = nil)
|
576
|
+
service ||= persistence_service # service ||= persistence_service
|
577
|
+
result = Actions::PersistenceExtensions.#{method}( # result = Actions::PersistenceExtensions.changed_since(
|
578
|
+
self, # self,
|
579
|
+
timestamp.to_zoned_date_time, # timestamp.to_zoned_date_time,
|
580
|
+
service&.to_s # service&.to_s
|
581
|
+
) # )
|
582
|
+
wrap_result(result, quantify: #{quantify}) # wrap_result(result, quantify: false)
|
583
|
+
end # end
|
584
|
+
RUBY
|
332
585
|
end
|
333
586
|
|
334
|
-
|
587
|
+
# @!visibility private
|
588
|
+
def def_persistence_methods(method, quantify: false)
|
589
|
+
method = method.to_s.dup
|
590
|
+
suffix = method.delete_suffix!("?") && "?"
|
335
591
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
service
|
345
|
-
|
346
|
-
|
592
|
+
def_persistence_method("#{method}_since#{suffix}", quantify: quantify)
|
593
|
+
# @deprecated OH 4.1 remove if guard, keeping the content, when dropping OH 4.1
|
594
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_2
|
595
|
+
def_persistence_method("#{method}_until#{suffix}", quantify: quantify)
|
596
|
+
end
|
597
|
+
|
598
|
+
method = "#{method}_between"
|
599
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
600
|
+
def #{method}#{suffix}(start, finish, service = nil) # def changed_between?(start, finish, service = nil)
|
601
|
+
service ||= persistence_service # service ||= persistence_service
|
602
|
+
result = Actions::PersistenceExtensions.#{method}( # result = Actions::PersistenceExtensions.changed_between?(
|
603
|
+
self, # self,
|
604
|
+
start.to_zoned_date_time, # start.to_zoned_date_time,
|
605
|
+
finish.to_zoned_date_time, # finish.to_zoned_date_time,
|
606
|
+
service&.to_s # service&.to_s
|
607
|
+
) # )
|
608
|
+
wrap_result(result, quantify: #{quantify}) # wrap_result(result, quantify: false)
|
609
|
+
end # end
|
610
|
+
RUBY
|
347
611
|
end
|
348
612
|
end
|
349
613
|
|
350
|
-
|
351
|
-
|
352
|
-
|
614
|
+
def_persistence_methods(:average, quantify: true)
|
615
|
+
def_persistence_methods(:delta, quantify: true)
|
616
|
+
def_persistence_methods(:deviation, quantify: true)
|
617
|
+
def_persistence_methods(:sum, quantify: true)
|
618
|
+
def_persistence_methods(:variance, quantify: true)
|
619
|
+
|
620
|
+
def_persistence_methods(:changed?)
|
621
|
+
def_persistence_methods(:count)
|
622
|
+
def_persistence_methods(:count_state_changes)
|
623
|
+
alias_method :state_changes_since, :count_state_changes_since
|
624
|
+
alias_method :state_changes_until, :count_state_changes_until if OpenHAB::Core.version >= OpenHAB::Core::V4_2
|
625
|
+
alias_method :state_changes_between, :count_state_changes_between
|
626
|
+
|
627
|
+
# @deprecated OH 4.2 - this still exists in OH 4.2 but logs a deprecation warning
|
628
|
+
def_persistence_method(:historic_state, quantify: true)
|
629
|
+
|
630
|
+
def_persistence_methods(:maximum, quantify: true)
|
631
|
+
def_persistence_methods(:minimum, quantify: true)
|
632
|
+
def_persistence_methods(:updated?)
|
633
|
+
|
634
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
635
|
+
def_persistence_methods(:get_all_states, quantify: true)
|
636
|
+
alias_method :all_states_since, :get_all_states_since
|
637
|
+
alias_method :all_states_until, :get_all_states_until if OpenHAB::Core.version >= OpenHAB::Core::V4_2
|
638
|
+
alias_method :all_states_between, :get_all_states_between
|
639
|
+
end
|
640
|
+
|
641
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_2
|
642
|
+
def_persistence_method(:persisted_state) # already quantified in core
|
643
|
+
|
644
|
+
def_persistence_methods(:evolution_rate)
|
645
|
+
def_persistence_methods(:remove_all_states)
|
646
|
+
end
|
647
|
+
|
648
|
+
# @deprecated OH 4.2 this method is deprecated in OH 4.2 and may be removed in a future version
|
649
|
+
def evolution_rate(start, finish_or_service = nil, service = nil)
|
353
650
|
if service.nil?
|
354
651
|
if finish_or_service.respond_to?(:to_zoned_date_time)
|
355
652
|
service = persistence_service
|
@@ -362,31 +659,20 @@ module OpenHAB
|
|
362
659
|
finish = finish_or_service
|
363
660
|
end
|
364
661
|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
)
|
380
|
-
end
|
381
|
-
wrap_result(result, method)
|
382
|
-
end
|
383
|
-
|
384
|
-
alias_method :state_changes_since, :count_state_changes_since
|
385
|
-
alias_method :state_changes_between, :count_state_changes_between
|
386
|
-
# @deprecated OH 3.4 - if guard is unnecessary in OH4
|
387
|
-
if OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
388
|
-
alias_method :all_states_since, :get_all_states_since
|
389
|
-
alias_method :all_states_between, :get_all_states_between
|
662
|
+
if finish
|
663
|
+
Actions::PersistenceExtensions.evolution_rate(
|
664
|
+
self,
|
665
|
+
start.to_zoned_date_time,
|
666
|
+
finish.to_zoned_date_time,
|
667
|
+
service&.to_s
|
668
|
+
)
|
669
|
+
else
|
670
|
+
Actions::PersistenceExtensions.java_send :evolutionRate,
|
671
|
+
[Item.java_class, ZonedDateTime.java_class, java.lang.String],
|
672
|
+
self,
|
673
|
+
start.to_zoned_date_time,
|
674
|
+
service&.to_s
|
675
|
+
end
|
390
676
|
end
|
391
677
|
|
392
678
|
private
|
@@ -398,9 +684,10 @@ module OpenHAB
|
|
398
684
|
#
|
399
685
|
# @return [Object] QuantityType or the original value
|
400
686
|
#
|
687
|
+
# @deprecated OH 4.1 in OH4.2, quantify is no longer needed because it is done inside core
|
401
688
|
def quantify(value)
|
402
689
|
if value.is_a?(DecimalType) && respond_to?(:unit) && unit
|
403
|
-
logger.trace
|
690
|
+
logger.trace { "Unitizing #{value} with unit #{unit}" }
|
404
691
|
QuantityType.new(value.to_big_decimal, unit)
|
405
692
|
else
|
406
693
|
value
|
@@ -411,23 +698,23 @@ module OpenHAB
|
|
411
698
|
# Wrap the result into a more convenient object type depending on the method and result.
|
412
699
|
#
|
413
700
|
# @param [Object] result the raw result type to be wrapped
|
414
|
-
# @param [
|
701
|
+
# @param [true, false] quantify whether to quantify the result
|
415
702
|
#
|
416
|
-
# @return [
|
703
|
+
# @return [PersistedState] a {PersistedState} object if the result was a HistoricItem
|
704
|
+
# @return [Array<PersistedState>] an array of {PersistedState} objects if the result was an array
|
705
|
+
# of HistoricItem
|
417
706
|
# @return [QuantityType] a `QuantityType` object if the result was an average, delta, deviation,
|
418
|
-
#
|
419
|
-
# @return [Array<HistoricState>] an array of {HistoricState} objects if the result was an array
|
420
|
-
# of HistoricItem
|
707
|
+
# sum, or variance.
|
421
708
|
# @return [Object] the original result object otherwise.
|
422
709
|
#
|
423
|
-
def wrap_result(result,
|
710
|
+
def wrap_result(result, quantify: false)
|
424
711
|
case result
|
425
712
|
when org.openhab.core.persistence.HistoricItem
|
426
|
-
|
713
|
+
PersistedState.new(result, quantify ? quantify(result.state) : nil)
|
427
714
|
when java.util.Collection, Array
|
428
|
-
result.to_a.map { |historic_item| wrap_result(historic_item,
|
715
|
+
result.to_a.map { |historic_item| wrap_result(historic_item, quantify: quantify) }
|
429
716
|
else
|
430
|
-
return quantify(result) if
|
717
|
+
return quantify(result) if quantify
|
431
718
|
|
432
719
|
result
|
433
720
|
end
|
@@ -57,6 +57,126 @@ module OpenHAB
|
|
57
57
|
uid.to_s
|
58
58
|
end
|
59
59
|
|
60
|
+
# @!attribute item_name [r]
|
61
|
+
# Return the name of the item this channel is linked to. If a channel is linked to more than one item,
|
62
|
+
# this method only returns the first item.
|
63
|
+
#
|
64
|
+
# @return [String, nil]
|
65
|
+
def item_name
|
66
|
+
item_names.first
|
67
|
+
end
|
68
|
+
|
69
|
+
# @!attribute item_names [r]
|
70
|
+
# Return the names of all of the items this channel is linked to.
|
71
|
+
#
|
72
|
+
# @return [Array<String>]
|
73
|
+
def item_names
|
74
|
+
Things::Links::Provider.registry.get_linked_item_names(uid)
|
75
|
+
end
|
76
|
+
|
77
|
+
# @!attribute item [r]
|
78
|
+
# Return the item this channel is linked to. If a channel is linked to more than one item,
|
79
|
+
# this method only returns the first item.
|
80
|
+
#
|
81
|
+
# @return [Items::Item, nil]
|
82
|
+
def item
|
83
|
+
items.first
|
84
|
+
end
|
85
|
+
|
86
|
+
# @!attribute items [r]
|
87
|
+
# Return all of the items this channel is linked to.
|
88
|
+
#
|
89
|
+
# @return [Array<Items::Item>]
|
90
|
+
def items
|
91
|
+
Things::Links::Provider.registry.get_linked_items(uid).map { |item| Items::Proxy.new(item) }
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# @!attribute links [r]
|
96
|
+
# Returns all of the channel's links (items and link configurations).
|
97
|
+
#
|
98
|
+
# @return [Items::ItemChannelLinks] An array of ItemChannelLink or an empty array
|
99
|
+
#
|
100
|
+
# @example Get the configuration of the first link
|
101
|
+
# things["mqtt:topic:livingroom-light"].channel["power"].links.first.configuration
|
102
|
+
#
|
103
|
+
# @example Remove all managed links
|
104
|
+
# things["mqtt:topic:livingroom-light"].channel["power"].links.clear
|
105
|
+
#
|
106
|
+
# @see link
|
107
|
+
# @see unlink
|
108
|
+
#
|
109
|
+
def links
|
110
|
+
Items::ItemChannelLinks.new(uid, Things::Links::Provider.registry.get_links(uid))
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# @return [ItemChannelLink, nil]
|
115
|
+
#
|
116
|
+
# @overload link
|
117
|
+
# Returns the channel's link. If an channel is linked to more than one item,
|
118
|
+
# this method only returns the first link.
|
119
|
+
#
|
120
|
+
# @return [Things::ItemChannelLink, nil]
|
121
|
+
#
|
122
|
+
# @overload link(item, config = {})
|
123
|
+
#
|
124
|
+
# Links the channel to an item.
|
125
|
+
#
|
126
|
+
# @param [String, Items::Item] channel The channel to link to.
|
127
|
+
# @param [Hash] config The configuration for the link.
|
128
|
+
#
|
129
|
+
# @return [Things::ItemChannelLink] The created link.
|
130
|
+
#
|
131
|
+
# @example Link a channel to an item
|
132
|
+
# things["mqtt:topic:livingroom-light"].channels["power"].link(LivingRoom_Light_Power)
|
133
|
+
#
|
134
|
+
# @example Specify a link configuration
|
135
|
+
# things["mqtt:topic:outdoor-thermometer"].channels["temperature"].link(
|
136
|
+
# High_Temperature_Alert,
|
137
|
+
# profile: "system:hysteresis",
|
138
|
+
# lower: "29 °C",
|
139
|
+
# upper: "30 °C")
|
140
|
+
#
|
141
|
+
# @see links
|
142
|
+
# @see unlink
|
143
|
+
#
|
144
|
+
def link(item = nil, config = nil)
|
145
|
+
return Things::Links::Provider.registry.get_links(uid).first if item.nil? && config.nil?
|
146
|
+
|
147
|
+
config ||= {}
|
148
|
+
Core::Things::Links::Provider.create_link(item, self, config).tap do |new_link|
|
149
|
+
provider = Core::Things::Links::Provider.current
|
150
|
+
if !(current_link = provider.get(new_link.uid))
|
151
|
+
provider.add(new_link)
|
152
|
+
elsif current_link.configuration != config
|
153
|
+
provider.update(new_link)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
#
|
159
|
+
# Removes a link to an item from managed link providers.
|
160
|
+
#
|
161
|
+
# @param [String, Items::Item] item The item to remove the link to.
|
162
|
+
#
|
163
|
+
# @return [Things::ItemChannelLink, nil] The removed link, if found.
|
164
|
+
# @raise [FrozenError] if the link is not managed by a managed link provider.
|
165
|
+
#
|
166
|
+
# @see link
|
167
|
+
# @see links
|
168
|
+
#
|
169
|
+
def unlink(item)
|
170
|
+
link_to_delete = Things::Links::Provider.create_link(item, self, {})
|
171
|
+
provider = Things::Links::Provider.registry.provider_for(link_to_delete.uid)
|
172
|
+
unless provider.is_a?(ManagedProvider)
|
173
|
+
raise FrozenError,
|
174
|
+
"Cannot remove the link #{link_to_delete.uid} from non-managed provider #{provider.inspect}"
|
175
|
+
end
|
176
|
+
|
177
|
+
provider.remove(link_to_delete.uid)
|
178
|
+
end
|
179
|
+
|
60
180
|
# @deprecated OH3.4 this whole section is not needed in OH4+. Also see Thing#config_eql?
|
61
181
|
if Core.version < Core::V4_0
|
62
182
|
# @!visibility private
|
@@ -28,7 +28,8 @@ module OpenHAB
|
|
28
28
|
config = Configuration.new(config.transform_keys(&:to_s))
|
29
29
|
channel = ChannelUID.new(channel) if channel.is_a?(String)
|
30
30
|
channel = channel.uid if channel.is_a?(Channel)
|
31
|
-
|
31
|
+
item = item.name if item.is_a?(Item)
|
32
|
+
org.openhab.core.thing.link.ItemChannelLink.new(item, channel, config)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -992,9 +992,14 @@ module OpenHAB
|
|
992
992
|
#
|
993
993
|
# Creates a channel linked trigger
|
994
994
|
#
|
995
|
+
# @param [Item, String, nil] item The item to create a trigger for. If nil, all items are matched.
|
996
|
+
# @param [Core::Things::Channel, Core::Things::ChannelUID, String, nil] channel
|
997
|
+
# The channel to create a trigger for. If nil, all channels are matched.
|
995
998
|
# @param [Object] attach object to be attached to the trigger
|
996
999
|
# @return [void]
|
997
1000
|
#
|
1001
|
+
# @since openHAB 4.0 Support for filtering with item and channel was added
|
1002
|
+
#
|
998
1003
|
# @example
|
999
1004
|
# rule "channel linked" do
|
1000
1005
|
# channel_linked
|
@@ -1002,9 +1007,10 @@ module OpenHAB
|
|
1002
1007
|
# logger.info("#{event.link.item.name} linked to #{event.link.channel_uid}.")
|
1003
1008
|
# end
|
1004
1009
|
# end
|
1005
|
-
def channel_linked(attach: nil)
|
1006
|
-
|
1007
|
-
|
1010
|
+
def channel_linked(item: nil, channel: nil, attach: nil)
|
1011
|
+
pattern = (item.nil? && channel.nil?) ? "*" : "#{item || "*"}-#{channel || "*"}"
|
1012
|
+
@ruby_triggers << [:channel_linked, pattern]
|
1013
|
+
event("openhab/links/#{pattern}/added", types: "ItemChannelLinkAddedEvent", attach: attach)
|
1008
1014
|
end
|
1009
1015
|
|
1010
1016
|
#
|
@@ -1013,9 +1019,14 @@ module OpenHAB
|
|
1013
1019
|
# Note that the item or the thing it's linked to may no longer exist,
|
1014
1020
|
# so if you try to access those objects they'll be nil.
|
1015
1021
|
#
|
1022
|
+
# @param [Item, String, nil] item The item to create a trigger for. If nil, all items are matched.
|
1023
|
+
# @param [Core::Things::Channel, Core::Things::ChannelUID, String, nil] channel
|
1024
|
+
# The channel to create a trigger for. If nil, all channels are matched.
|
1016
1025
|
# @param [Object] attach object to be attached to the trigger
|
1017
1026
|
# @return [void]
|
1018
1027
|
#
|
1028
|
+
# @since openHAB 4.0 Support for filtering with item and channel was added
|
1029
|
+
#
|
1019
1030
|
# @example
|
1020
1031
|
# rule "channel unlinked" do
|
1021
1032
|
# channel_unlinked
|
@@ -1023,9 +1034,10 @@ module OpenHAB
|
|
1023
1034
|
# logger.info("#{event.link.item_name} unlinked from #{event.link.channel_uid}.")
|
1024
1035
|
# end
|
1025
1036
|
# end
|
1026
|
-
def channel_unlinked(attach: nil)
|
1027
|
-
|
1028
|
-
|
1037
|
+
def channel_unlinked(item: nil, channel: nil, attach: nil)
|
1038
|
+
pattern = (item.nil? && channel.nil?) ? "*" : "#{item || "*"}-#{channel || "*"}"
|
1039
|
+
@ruby_triggers << [:channel_unlinked, pattern]
|
1040
|
+
event("openhab/links/#{pattern}/removed", types: "ItemChannelLinkRemovedEvent", attach: attach)
|
1029
1041
|
end
|
1030
1042
|
|
1031
1043
|
#
|
@@ -1556,9 +1568,12 @@ module OpenHAB
|
|
1556
1568
|
#
|
1557
1569
|
# Creates an item added trigger
|
1558
1570
|
#
|
1571
|
+
# @param [String, nil] pattern The pattern to match items against
|
1559
1572
|
# @param [Object] attach object to be attached to the trigger
|
1560
1573
|
# @return [void]
|
1561
1574
|
#
|
1575
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1576
|
+
#
|
1562
1577
|
# @example
|
1563
1578
|
# rule "item added" do
|
1564
1579
|
# item_added
|
@@ -1566,17 +1581,20 @@ module OpenHAB
|
|
1566
1581
|
# logger.info("#{event.item.name} added.")
|
1567
1582
|
# end
|
1568
1583
|
# end
|
1569
|
-
def item_added(attach: nil)
|
1570
|
-
@ruby_triggers << [:item_added]
|
1571
|
-
event("openhab/items
|
1584
|
+
def item_added(pattern = "*", attach: nil)
|
1585
|
+
@ruby_triggers << [:item_added, pattern]
|
1586
|
+
event("openhab/items/#{pattern}/added", types: "ItemAddedEvent", attach: attach)
|
1572
1587
|
end
|
1573
1588
|
|
1574
1589
|
#
|
1575
1590
|
# Creates an item removed trigger
|
1576
1591
|
#
|
1592
|
+
# @param [String, nil] pattern The pattern to match items against
|
1577
1593
|
# @param [Object] attach object to be attached to the trigger
|
1578
1594
|
# @return [void]
|
1579
1595
|
#
|
1596
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1597
|
+
#
|
1580
1598
|
# @example
|
1581
1599
|
# rule "item removed" do
|
1582
1600
|
# item_removed
|
@@ -1584,14 +1602,15 @@ module OpenHAB
|
|
1584
1602
|
# logger.info("#{event.item.name} removed.")
|
1585
1603
|
# end
|
1586
1604
|
# end
|
1587
|
-
def item_removed(attach: nil)
|
1588
|
-
@ruby_triggers << [:item_removed]
|
1589
|
-
event("openhab/items
|
1605
|
+
def item_removed(pattern = "*", attach: nil)
|
1606
|
+
@ruby_triggers << [:item_removed, pattern]
|
1607
|
+
event("openhab/items/#{pattern}/removed", types: "ItemRemovedEvent", attach: attach)
|
1590
1608
|
end
|
1591
1609
|
|
1592
1610
|
#
|
1593
1611
|
# Creates an item updated trigger
|
1594
1612
|
#
|
1613
|
+
# @param [String, nil] pattern The pattern to match items against
|
1595
1614
|
# @param [Object] attach object to be attached to the trigger
|
1596
1615
|
# @return [void]
|
1597
1616
|
#
|
@@ -1603,17 +1622,20 @@ module OpenHAB
|
|
1603
1622
|
# end
|
1604
1623
|
# end
|
1605
1624
|
#
|
1606
|
-
def item_updated(attach: nil)
|
1607
|
-
@ruby_triggers << [:item_updated]
|
1608
|
-
event("openhab/items
|
1625
|
+
def item_updated(pattern = "*", attach: nil)
|
1626
|
+
@ruby_triggers << [:item_updated, pattern]
|
1627
|
+
event("openhab/items/#{pattern}/updated", types: "ItemUpdatedEvent", attach: attach)
|
1609
1628
|
end
|
1610
1629
|
|
1611
1630
|
#
|
1612
1631
|
# Creates a thing added trigger
|
1613
1632
|
#
|
1633
|
+
# @param [String, nil] pattern The pattern to match things against
|
1614
1634
|
# @param [Object] attach object to be attached to the trigger
|
1615
1635
|
# @return [void]
|
1616
1636
|
#
|
1637
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1638
|
+
#
|
1617
1639
|
# @example
|
1618
1640
|
# rule "thing added" do
|
1619
1641
|
# thing_added
|
@@ -1621,17 +1643,20 @@ module OpenHAB
|
|
1621
1643
|
# logger.info("#{event.thing.uid} added.")
|
1622
1644
|
# end
|
1623
1645
|
# end
|
1624
|
-
def thing_added(attach: nil)
|
1625
|
-
@ruby_triggers << [:thing_added]
|
1626
|
-
event("openhab/things
|
1646
|
+
def thing_added(pattern = "*", attach: nil)
|
1647
|
+
@ruby_triggers << [:thing_added, pattern]
|
1648
|
+
event("openhab/things/#{pattern}/added", types: "ThingAddedEvent", attach: attach)
|
1627
1649
|
end
|
1628
1650
|
|
1629
1651
|
#
|
1630
1652
|
# Creates a thing removed trigger
|
1631
1653
|
#
|
1654
|
+
# @param [String, nil] pattern The pattern to match things against
|
1632
1655
|
# @param [Object] attach object to be attached to the trigger
|
1633
1656
|
# @return [void]
|
1634
1657
|
#
|
1658
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1659
|
+
#
|
1635
1660
|
# @example
|
1636
1661
|
# rule "thing removed" do
|
1637
1662
|
# thing_removed
|
@@ -1639,17 +1664,20 @@ module OpenHAB
|
|
1639
1664
|
# logger.info("#{event.thing.uid} removed.")
|
1640
1665
|
# end
|
1641
1666
|
# end
|
1642
|
-
def thing_removed(attach: nil)
|
1643
|
-
@ruby_triggers << [:thing_removed]
|
1644
|
-
event("openhab/things
|
1667
|
+
def thing_removed(pattern = "*", attach: nil)
|
1668
|
+
@ruby_triggers << [:thing_removed, pattern]
|
1669
|
+
event("openhab/things/#{pattern}/removed", types: "ThingRemovedEvent", attach: attach)
|
1645
1670
|
end
|
1646
1671
|
|
1647
1672
|
#
|
1648
1673
|
# Creates a thing updated trigger
|
1649
1674
|
#
|
1675
|
+
# @param [String, nil] pattern The pattern to match things against
|
1650
1676
|
# @param [Object] attach object to be attached to the trigger
|
1651
1677
|
# @return [void]
|
1652
1678
|
#
|
1679
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1680
|
+
#
|
1653
1681
|
# @example
|
1654
1682
|
# rule "thing updated" do
|
1655
1683
|
# thing_updated
|
@@ -1658,9 +1686,9 @@ module OpenHAB
|
|
1658
1686
|
# end
|
1659
1687
|
# end
|
1660
1688
|
#
|
1661
|
-
def thing_updated(attach: nil)
|
1662
|
-
@ruby_triggers << [:thing_updated]
|
1663
|
-
event("openhab/things
|
1689
|
+
def thing_updated(pattern = "*", attach: nil)
|
1690
|
+
@ruby_triggers << [:thing_updated, pattern]
|
1691
|
+
event("openhab/things/#{pattern}/updated", types: "ThingUpdatedEvent", attach: attach)
|
1664
1692
|
end
|
1665
1693
|
|
1666
1694
|
#
|
data/lib/openhab/dsl/version.rb
CHANGED
@@ -28,7 +28,7 @@ module OpenHAB
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
module
|
31
|
+
module PersistedState
|
32
32
|
def timestamp
|
33
33
|
# PersistenceExtensions uses an anonymous class to wrap the current
|
34
34
|
# state if that happens to be an answer. Except it calls
|
@@ -41,7 +41,7 @@ module OpenHAB
|
|
41
41
|
super
|
42
42
|
end
|
43
43
|
end
|
44
|
-
Core::Items::Persistence::
|
44
|
+
Core::Items::Persistence::PersistedState.prepend(PersistedState)
|
45
45
|
|
46
46
|
attr_reader :id
|
47
47
|
|
@@ -54,14 +54,18 @@ module OpenHAB
|
|
54
54
|
@data = Hash.new { |h, k| h[k] = [] }
|
55
55
|
end
|
56
56
|
|
57
|
-
def store(item, date = nil, state = nil)
|
58
|
-
|
57
|
+
def store(item, date = nil, state = nil, item_alias = nil)
|
58
|
+
if date.is_a?(String) # alias overload
|
59
|
+
item_alias = date
|
60
|
+
date = nil
|
61
|
+
end
|
59
62
|
state ||= item.state
|
60
63
|
date ||= ZonedDateTime.now
|
64
|
+
item_alias ||= item.name
|
61
65
|
|
62
66
|
new_item = HistoricItem.new(date, state, item.name)
|
63
67
|
|
64
|
-
item_history = @data[
|
68
|
+
item_history = @data[item_alias]
|
65
69
|
|
66
70
|
insert_index = item_history.bsearch_index do |i|
|
67
71
|
i.timestamp.compare_to(date).positive?
|
@@ -79,6 +83,7 @@ module OpenHAB
|
|
79
83
|
historic_item = item_history.delete_at(index)
|
80
84
|
@data.delete(historic_item.name) if item_history.empty?
|
81
85
|
end
|
86
|
+
true
|
82
87
|
end
|
83
88
|
|
84
89
|
def query(filter)
|
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.19.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-05-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -485,7 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
485
485
|
- !ruby/object:Gem::Version
|
486
486
|
version: '0'
|
487
487
|
requirements: []
|
488
|
-
rubygems_version: 3.5.
|
488
|
+
rubygems_version: 3.5.10
|
489
489
|
signing_key:
|
490
490
|
specification_version: 4
|
491
491
|
summary: JRuby Helper Libraries for openHAB Scripting
|