openhab-scripting 5.16.0 → 5.18.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/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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1a3e61eb7613c8235e61cf99dc8d97d4c8403d8c2af21f873434ebf89ecff49
|
4
|
+
data.tar.gz: '09330d12003c08cd0af744d14c52287e9588c9b440975839e3cbd18d4914e027'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ee2f0a8eb080aaed28d4484f23828d3e926f957a574e67ab5231ab44cf2dcb46897e841a9a481cdadfa30e1d026b4f4375755ee85f75954707208001d3442d5
|
7
|
+
data.tar.gz: 95ff1eb5298403900d9fb3370efaf9c3ffa7f356c40d5176a5d9ccf64fce3b6f701b8ddbb2f1103cb3102f3628cf9f27b0e9209cc44e97537eb0e832cc64061d
|
@@ -74,7 +74,7 @@ module OpenHAB
|
|
74
74
|
ruby2_keywords def method_missing(method, *args)
|
75
75
|
return super unless args.empty? && !block_given?
|
76
76
|
|
77
|
-
logger.trace
|
77
|
+
logger.trace { "method missing, performing openHAB Lookup for: #{method}" }
|
78
78
|
EntityLookup.lookup_entity(method,
|
79
79
|
create_dummy_items: self.class.respond_to?(:create_dummy_items?) &&
|
80
80
|
self.class.create_dummy_items?) || super
|
@@ -82,7 +82,7 @@ module OpenHAB
|
|
82
82
|
|
83
83
|
# @!visibility private
|
84
84
|
def respond_to_missing?(method, *)
|
85
|
-
logger.trace
|
85
|
+
logger.trace { "Checking if openHAB entities exist for #{method}" }
|
86
86
|
EntityLookup.lookup_entity(method) || super
|
87
87
|
end
|
88
88
|
|
@@ -121,14 +121,14 @@ module OpenHAB
|
|
121
121
|
# @return [Things::Thing, nil]
|
122
122
|
#
|
123
123
|
def lookup_thing(uid)
|
124
|
-
logger.trace
|
124
|
+
logger.trace { "Looking up thing '#{uid}'" }
|
125
125
|
uid = uid.to_s if uid.is_a?(Symbol)
|
126
126
|
|
127
127
|
uid = Things::ThingUID.new(uid) unless uid.is_a?(Things::ThingUID)
|
128
128
|
thing = $things.get(uid)
|
129
129
|
return unless thing
|
130
130
|
|
131
|
-
logger.trace
|
131
|
+
logger.trace { "Retrieved Thing(#{thing}) from registry for uid: #{uid}" }
|
132
132
|
Things::Proxy.new(thing)
|
133
133
|
end
|
134
134
|
|
@@ -164,7 +164,7 @@ module OpenHAB
|
|
164
164
|
# @return [Item, nil]
|
165
165
|
#
|
166
166
|
def lookup_item(name)
|
167
|
-
logger.trace
|
167
|
+
logger.trace { "Looking up item '#{name}'" }
|
168
168
|
name = name.to_s if name.is_a?(Symbol)
|
169
169
|
item = $ir.get(name)
|
170
170
|
Items::Proxy.new(item) unless item.nil?
|
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
require_relative "item_state_event"
|
4
4
|
|
5
|
+
# @deprecated OH3.4 guard only needed in OH 3.4
|
6
|
+
return unless OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
7
|
+
|
5
8
|
module OpenHAB
|
6
9
|
module Core
|
7
10
|
module Events
|
8
|
-
|
9
|
-
if Gem::Version.new(OpenHAB::Core::VERSION) >= Gem::Version.new("4.0.0")
|
10
|
-
java_import org.openhab.core.items.events.ItemStateUpdatedEvent
|
11
|
+
java_import org.openhab.core.items.events.ItemStateUpdatedEvent
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
13
|
+
#
|
14
|
+
# {AbstractEvent} sent when an item's state has updated.
|
15
|
+
#
|
16
|
+
# @since openHAB 4.0
|
17
|
+
#
|
18
|
+
class ItemStateUpdatedEvent < ItemEvent
|
19
|
+
include ItemState
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @deprecated OH4.0 guard not needed in OH 4.1
|
4
|
+
return unless OpenHAB::Core.version >= OpenHAB::Core::V4_1
|
5
|
+
|
6
|
+
module OpenHAB
|
7
|
+
module Core
|
8
|
+
module Events
|
9
|
+
java_import org.openhab.core.items.events.ItemTimeSeriesUpdatedEvent
|
10
|
+
|
11
|
+
#
|
12
|
+
# {AbstractEvent} sent when an item received a time series update.
|
13
|
+
#
|
14
|
+
# @!attribute [r] time_series
|
15
|
+
# @return [TimeSeries] The updated time series.
|
16
|
+
#
|
17
|
+
# @since openHAB 4.1
|
18
|
+
# @see DSL::Rules::BuilderDSL#time_series_updated #time_series_updated rule trigger
|
19
|
+
#
|
20
|
+
class ItemTimeSeriesUpdatedEvent < ItemEvent; end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,46 +1,46 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# @deprecated OH3.4 this guard is not needed on OH4
|
4
|
+
return unless OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
5
|
+
|
3
6
|
module OpenHAB
|
4
7
|
module Core
|
5
8
|
module Events
|
6
|
-
|
7
|
-
if Gem::Version.new(OpenHAB::Core::VERSION) >= Gem::Version.new("4.0.0")
|
8
|
-
java_import org.openhab.core.automation.events.TimerEvent
|
9
|
+
java_import org.openhab.core.automation.events.TimerEvent
|
9
10
|
|
11
|
+
#
|
12
|
+
# Adds methods to core openHAB TimerEvent to make it more natural in Ruby
|
13
|
+
#
|
14
|
+
# This event can be triggered by a `DateTimeTrigger`, `cron`, or `TimeOfDay` trigger.
|
15
|
+
#
|
16
|
+
# @since openHAB 4.0
|
17
|
+
#
|
18
|
+
class TimerEvent < AbstractEvent
|
10
19
|
#
|
11
|
-
#
|
20
|
+
# @!attribute [r] cron_expression
|
21
|
+
# @return [String, nil] The cron expression that triggered this event.
|
22
|
+
# `nil` when this event wasn't triggered by a cron trigger.
|
12
23
|
#
|
13
|
-
|
24
|
+
def cron_expression
|
25
|
+
payload&.[](:cronExpression)
|
26
|
+
end
|
27
|
+
|
14
28
|
#
|
15
|
-
#
|
29
|
+
# @!attribute [r] item
|
30
|
+
# @return [Item, nil] The DateTime item that triggered this event.
|
31
|
+
# `nil` when this event wasn't triggered by a DateTimeItem trigger.
|
16
32
|
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
# @return [String, nil] The cron expression that triggered this event.
|
21
|
-
# `nil` when this event wasn't triggered by a cron trigger.
|
22
|
-
#
|
23
|
-
def cron_expression
|
24
|
-
payload&.[](:cronExpression)
|
25
|
-
end
|
26
|
-
|
27
|
-
#
|
28
|
-
# @!attribute [r] item
|
29
|
-
# @return [Item, nil] The DateTime item that triggered this event.
|
30
|
-
# `nil` when this event wasn't triggered by a DateTimeItem trigger.
|
31
|
-
#
|
32
|
-
def item
|
33
|
-
payload&.[](:itemName)&.then { |item_name| EntityLookup.lookup_item(item_name) }
|
34
|
-
end
|
33
|
+
def item
|
34
|
+
payload&.[](:itemName)&.then { |item_name| EntityLookup.lookup_item(item_name) }
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
37
|
+
#
|
38
|
+
# @!attribute [r] time
|
39
|
+
# @return [LocalTime, nil] The configured time for this TimeOfDay trigger event.
|
40
|
+
# `nil` when this event wasn't triggered by a TimeOfDay trigger.
|
41
|
+
#
|
42
|
+
def time
|
43
|
+
payload&.[](:time)&.then { |time| LocalTime.parse(time) }
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -207,6 +207,18 @@ module OpenHAB
|
|
207
207
|
type.to_s
|
208
208
|
end
|
209
209
|
|
210
|
+
#
|
211
|
+
# @method time_series=(time_series)
|
212
|
+
# Set a new time series.
|
213
|
+
#
|
214
|
+
# This will trigger a {DSL::Rules::BuilderDSL#time_series_updated time_series_updated} event.
|
215
|
+
#
|
216
|
+
# @param [Core::Types::TimeSeries] time_series New time series to set.
|
217
|
+
# @return [void]
|
218
|
+
#
|
219
|
+
# @since openHAB 4.1
|
220
|
+
#
|
221
|
+
|
210
222
|
#
|
211
223
|
# Defers notifying openHAB of modifications to multiple attributes until the block is complete.
|
212
224
|
#
|
@@ -7,7 +7,7 @@ module OpenHAB
|
|
7
7
|
module Items
|
8
8
|
# Mixin for implementing type coercion for number-like items
|
9
9
|
module NumericItem
|
10
|
-
%i[positive? negative? zero?].each do |predicate|
|
10
|
+
%i[positive? negative? zero? nonzero?].each do |predicate|
|
11
11
|
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
12
12
|
def #{predicate} # def positive?
|
13
13
|
return false unless state? # return false unless state?
|
@@ -83,9 +83,7 @@ module OpenHAB
|
|
83
83
|
updated_since?])
|
84
84
|
|
85
85
|
# @deprecated OH3.4 - in openHAB 4, just add :get_all_states_since and freeze the list above
|
86
|
-
if
|
87
|
-
PERSISTENCE_METHODS << :get_all_states_since
|
88
|
-
end
|
86
|
+
PERSISTENCE_METHODS << :get_all_states_since if OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
89
87
|
PERSISTENCE_METHODS.freeze
|
90
88
|
|
91
89
|
private_constant :QUANTITY_METHODS, :PERSISTENCE_METHODS
|
@@ -386,7 +384,7 @@ module OpenHAB
|
|
386
384
|
alias_method :state_changes_since, :count_state_changes_since
|
387
385
|
alias_method :state_changes_between, :count_state_changes_between
|
388
386
|
# @deprecated OH 3.4 - if guard is unnecessary in OH4
|
389
|
-
if
|
387
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_0
|
390
388
|
alias_method :all_states_since, :get_all_states_since
|
391
389
|
alias_method :all_states_between, :get_all_states_between
|
392
390
|
end
|
@@ -21,15 +21,13 @@ module OpenHAB
|
|
21
21
|
# @return [Item] Item from registry, nil if item missing or requested item is a Group Type
|
22
22
|
def [](name)
|
23
23
|
EntityLookup.lookup_item(name)
|
24
|
-
rescue org.openhab.core.items.ItemNotFoundException
|
25
|
-
nil
|
26
24
|
end
|
27
25
|
|
28
26
|
# Returns true if the given item name exists
|
29
27
|
# @param name [String] Item name to check
|
30
28
|
# @return [true,false] true if the item exists, false otherwise
|
31
29
|
def key?(name)
|
32
|
-
!$ir.
|
30
|
+
!$ir.get(name).nil?
|
33
31
|
end
|
34
32
|
alias_method :include?, :key?
|
35
33
|
# @deprecated
|
@@ -97,8 +97,8 @@ module Enumerable
|
|
97
97
|
# Send a command to every item in the collection
|
98
98
|
# @return [self, nil] nil when `ensure` is in effect and all the items were already in the same state,
|
99
99
|
# otherwise self
|
100
|
-
def command(command)
|
101
|
-
self if count { |i| i.command(command) }.positive?
|
100
|
+
def command(command, **kwargs)
|
101
|
+
self if count { |i| i.command(command, **kwargs) }.positive?
|
102
102
|
end
|
103
103
|
|
104
104
|
# Send a command to every item in the collection, even when {OpenHAB::DSL.ensure_states! ensure_states!} is in effect.
|
@@ -226,10 +226,7 @@ module OpenHAB
|
|
226
226
|
|
227
227
|
# @deprecated OH3.4 - the Property tag had an ID of "MeasurementProperty" in OH3.4.
|
228
228
|
# This was corrected in OH4.
|
229
|
-
|
230
|
-
if id == "Property" && Gem::Version.new(Core::VERSION) < Gem::Version.new("4.0.0.M1")
|
231
|
-
id = "MeasurementProperty"
|
232
|
-
end
|
229
|
+
id = "MeasurementProperty" if id == "Property" && Core.version < Core::V4_0
|
233
230
|
|
234
231
|
# @deprecated OH3.4 missing registry
|
235
232
|
if Provider.registry
|
@@ -15,7 +15,12 @@ module OpenHAB
|
|
15
15
|
include Singleton
|
16
16
|
|
17
17
|
class Profile
|
18
|
-
include
|
18
|
+
# @deprecated OH 4.0 only include TimeSeriesProfile in OH 4.1, because it extends StateProfile
|
19
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_1
|
20
|
+
include org.openhab.core.thing.profiles.TimeSeriesProfile
|
21
|
+
else
|
22
|
+
include org.openhab.core.thing.profiles.StateProfile
|
23
|
+
end
|
19
24
|
|
20
25
|
def initialize(callback, context, uid, thread_locals, block)
|
21
26
|
unless callback.class.ancestors.include?(Things::ProfileCallback)
|
@@ -64,6 +69,14 @@ module OpenHAB
|
|
64
69
|
process_event(:state_from_item, state: state)
|
65
70
|
end
|
66
71
|
|
72
|
+
# @deprecated OH 4.0 guard is only needed for < OH 4.1
|
73
|
+
if OpenHAB::Core.version >= OpenHAB::Core::V4_1
|
74
|
+
# @!visibility private
|
75
|
+
def onTimeSeriesFromHandler(time_series)
|
76
|
+
process_event(:time_series_from_handler, time_series: time_series)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
67
80
|
private
|
68
81
|
|
69
82
|
def process_event(event, **params)
|
@@ -77,6 +90,8 @@ module OpenHAB
|
|
77
90
|
params[:channel_uid] = @callback.link.linked_uid
|
78
91
|
params[:state] ||= nil
|
79
92
|
params[:command] ||= nil
|
93
|
+
# @deprecated OH 4.0 guard is only needed for < OH 4.1
|
94
|
+
params[:time_series] ||= nil if OpenHAB::Core.version >= OpenHAB::Core::V4_1
|
80
95
|
|
81
96
|
kwargs = {}
|
82
97
|
@block.parameters.each do |(param_type, name)|
|
@@ -63,7 +63,8 @@ module OpenHAB
|
|
63
63
|
#
|
64
64
|
def remove(rule_uid)
|
65
65
|
rule_uid = rule_uid.uid if rule_uid.is_a?(Rule)
|
66
|
-
provider = Provider.registry.provider_for(rule_uid)
|
66
|
+
return nil unless (provider = Provider.registry.provider_for(rule_uid))
|
67
|
+
|
67
68
|
unless provider.is_a?(org.openhab.core.common.registry.ManagedProvider)
|
68
69
|
raise "Cannot remove rule #{rule_uid} from non-managed provider #{provider.inspect}"
|
69
70
|
end
|
@@ -149,6 +149,7 @@ module OpenHAB
|
|
149
149
|
r += " #{visibility}" unless visible?
|
150
150
|
r += " #{status || "<detached>"}"
|
151
151
|
r += " (#{status_info.status_detail})" if status_info && status_info.status_detail != RuleStatusDetail::NONE
|
152
|
+
r += " description=#{description.inspect}" if description
|
152
153
|
r += " tags=#{tags.to_a.inspect}" unless tags.empty?
|
153
154
|
r += " configuration=#{configuration.properties.to_h}" if configuration && !configuration.properties.empty?
|
154
155
|
"#{r}>"
|
@@ -132,7 +132,9 @@ module OpenHAB
|
|
132
132
|
builder = DSL::Sitemaps::Builder.new(self, builder_proxy, update: update)
|
133
133
|
if block.arity == 1
|
134
134
|
builder_proxy.__setobj__(builder)
|
135
|
-
|
135
|
+
DSL::ThreadLocal.thread_local(openhab_create_dummy_items: true) do
|
136
|
+
yield builder_proxy
|
137
|
+
end
|
136
138
|
else
|
137
139
|
builder.instance_eval(&block)
|
138
140
|
end
|
@@ -58,7 +58,7 @@ module OpenHAB
|
|
58
58
|
end
|
59
59
|
|
60
60
|
# @deprecated OH3.4 this whole section is not needed in OH4+. Also see Thing#config_eql?
|
61
|
-
if
|
61
|
+
if Core.version < Core::V4_0
|
62
62
|
# @!visibility private
|
63
63
|
module ChannelComparable
|
64
64
|
# @!visibility private
|
@@ -165,6 +165,12 @@ module OpenHAB
|
|
165
165
|
ThingType.registry.get_thing_type(thing_type_uid)
|
166
166
|
end
|
167
167
|
|
168
|
+
# @!attribute [r] bridge
|
169
|
+
# @return [Thing, nil]
|
170
|
+
def bridge
|
171
|
+
bridge_uid && EntityLookup.lookup_thing(bridge_uid)
|
172
|
+
end
|
173
|
+
|
168
174
|
# @return [String]
|
169
175
|
def inspect
|
170
176
|
r = "#<OpenHAB::Core::Things::Thing #{uid}"
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @deprecated OH4.0 this guard is not needed on OH4.1
|
4
|
+
return unless OpenHAB::Core.version >= OpenHAB::Core::V4_1
|
5
|
+
|
6
|
+
require "forwardable"
|
7
|
+
|
8
|
+
module OpenHAB
|
9
|
+
module Core
|
10
|
+
module Types
|
11
|
+
TimeSeries = org.openhab.core.types.TimeSeries
|
12
|
+
|
13
|
+
#
|
14
|
+
# {TimeSeries} is used to transport a set of states together with their timestamp.
|
15
|
+
#
|
16
|
+
# The states are sorted chronologically. The entries can be accessed like an array.
|
17
|
+
#
|
18
|
+
# @since openHAB 4.1
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# time_series = TimeSeries.new # defaults to :add policy
|
22
|
+
# .add(Time.at(2), DecimalType.new(2))
|
23
|
+
# .add(Time.at(1), DecimalType.new(1))
|
24
|
+
# .add(Time.at(3), DecimalType.new(3))
|
25
|
+
# logger.info "first entry: #{time_series.first.state}" # => 1
|
26
|
+
# logger.info "last entry: #{time_series.last.state}" # => 3
|
27
|
+
# logger.info "second entry: #{time_series[1].state}" # => 2
|
28
|
+
# logger.info "sum: #{time_series.sum(&:state)}" # => 6
|
29
|
+
#
|
30
|
+
# @see DSL::Rules::BuilderDSL#time_series_updated #time_series_updated rule trigger
|
31
|
+
#
|
32
|
+
class TimeSeries
|
33
|
+
extend Forwardable
|
34
|
+
|
35
|
+
# @!attribute [r] policy
|
36
|
+
# Returns the persistence policy of this series.
|
37
|
+
# @see org.openhab.core.types.TimeSeries#getPolicy()
|
38
|
+
# @return [org.openhab.core.types.TimeSeries.Policy]
|
39
|
+
|
40
|
+
# @!attribute [r] begin
|
41
|
+
# Returns the timestamp of the first element in this series.
|
42
|
+
# @return [Instant]
|
43
|
+
|
44
|
+
# @!attribute [r] end
|
45
|
+
# Returns the timestamp of the last element in this series.
|
46
|
+
# @return [Instant]
|
47
|
+
|
48
|
+
# @!attribute [r] size
|
49
|
+
# Returns the number of elements in this series.
|
50
|
+
# @return [Integer]
|
51
|
+
|
52
|
+
#
|
53
|
+
# Create a new instance of TimeSeries
|
54
|
+
#
|
55
|
+
# @param [:add, :replace, org.openhab.core.types.TimeSeries.Policy] policy
|
56
|
+
# The persistence policy of this series.
|
57
|
+
#
|
58
|
+
def initialize(policy = :replace)
|
59
|
+
policy = Policy.value_of(policy.to_s.upcase) if policy.is_a?(Symbol)
|
60
|
+
super
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns true if the series' policy is `ADD`.
|
64
|
+
# @return [true,false]
|
65
|
+
def add?
|
66
|
+
policy == Policy::ADD
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns true if the series' policy is `REPLACE`.
|
70
|
+
# @return [true,false]
|
71
|
+
def replace?
|
72
|
+
policy == Policy::REPLACE
|
73
|
+
end
|
74
|
+
|
75
|
+
# @!visibility private
|
76
|
+
def inspect
|
77
|
+
"#<OpenHAB::Core::Types::TimeSeries " \
|
78
|
+
"policy=#{policy} " \
|
79
|
+
"begin=#{self.begin} " \
|
80
|
+
"end=#{self.end} " \
|
81
|
+
"size=#{size}>"
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
# Returns the content of this series.
|
86
|
+
# @return [Array<org.openhab.core.types.TimeSeries.Entry>]
|
87
|
+
#
|
88
|
+
def states
|
89
|
+
get_states.to_array.to_a.freeze
|
90
|
+
end
|
91
|
+
|
92
|
+
# rename raw methods so we can overwrite them
|
93
|
+
# @!visibility private
|
94
|
+
alias_method :add_instant, :add
|
95
|
+
|
96
|
+
#
|
97
|
+
# Adds a new element to this series.
|
98
|
+
#
|
99
|
+
# Elements can be added in an arbitrary order and are sorted chronologically.
|
100
|
+
#
|
101
|
+
# @note This method returns self so it can be chained, unlike the Java version.
|
102
|
+
#
|
103
|
+
# @param [Instant, #to_zoned_date_time, #to_instant] instant An instant for the given state.
|
104
|
+
# @param [State, String, Numeric] state The State at the given timestamp.
|
105
|
+
# If a String is given, it will be converted to {StringType}.
|
106
|
+
# If a {Numeric} is given, it will be converted to {DecimalType}.
|
107
|
+
# @return [self]
|
108
|
+
# @raise [ArgumentError] if state is not a {State}, String or {Numeric}
|
109
|
+
#
|
110
|
+
def add(instant, state)
|
111
|
+
instant = instant.to_zoned_date_time if instant.respond_to?(:to_zoned_date_time)
|
112
|
+
instant = instant.to_instant if instant.respond_to?(:to_instant)
|
113
|
+
state = case state
|
114
|
+
when State then state
|
115
|
+
when String then StringType.new(state)
|
116
|
+
when Numeric then DecimalType.new(state)
|
117
|
+
else
|
118
|
+
raise ArgumentError, "state must be a State, String or Numeric, but was #{state.class}"
|
119
|
+
end
|
120
|
+
add_instant(instant, state)
|
121
|
+
self
|
122
|
+
end
|
123
|
+
|
124
|
+
# any method that exists on Array gets forwarded to states
|
125
|
+
delegate (Array.instance_methods - instance_methods) => :states
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
TimeSeries = OpenHAB::Core::Types::TimeSeries unless Object.const_defined?(:TimeSeries)
|
data/lib/openhab/core.rb
CHANGED
@@ -7,7 +7,20 @@ module OpenHAB
|
|
7
7
|
# @return [String]
|
8
8
|
VERSION = org.openhab.core.OpenHAB.version.freeze
|
9
9
|
|
10
|
-
|
10
|
+
# @!visibility private
|
11
|
+
V4_0 = Gem::Version.new("4.0.0").freeze
|
12
|
+
# @!visibility private
|
13
|
+
V4_1 = Gem::Version.new("4.1.0").freeze
|
14
|
+
# @!visibility private
|
15
|
+
V4_2 = Gem::Version.new("4.2.0").freeze
|
16
|
+
|
17
|
+
# @return [Gem::Version] Returns the current openHAB version as a Gem::Version object
|
18
|
+
# @!visibility private
|
19
|
+
def self.version
|
20
|
+
@version ||= Gem::Version.new(VERSION).freeze
|
21
|
+
end
|
22
|
+
|
23
|
+
raise "`openhab-scripting` requires openHAB >= 3.4.0" unless version >= Gem::Version.new("3.4.0")
|
11
24
|
|
12
25
|
# @return [Integer] Number of seconds to wait between checks for automation manager
|
13
26
|
CHECK_DELAY = 10
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenHAB
|
4
|
+
module CoreExt
|
5
|
+
module Java
|
6
|
+
java_import java.time.Instant
|
7
|
+
|
8
|
+
# Extensions to {java.time.Instant}
|
9
|
+
class Instant < java.lang.Object; end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
Instant = OpenHAB::CoreExt::Java::Instant unless Object.const_defined?(:Instant)
|
@@ -672,7 +672,6 @@ module OpenHAB
|
|
672
672
|
# @param (see ItemBuilder#initialize)
|
673
673
|
def initialize(*args, type: nil, function: nil, thing: nil, **kwargs)
|
674
674
|
raise ArgumentError, "invalid function #{function}" if function && !function.match?(FUNCTION_REGEX)
|
675
|
-
raise ArgumentError, "state cannot be set on GroupItems" if kwargs[:state]
|
676
675
|
|
677
676
|
super(type, *args, **kwargs)
|
678
677
|
@function = function
|