openhab-scripting 2.13.0 → 2.14.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openhab.rb +3 -0
- data/lib/openhab/core/dsl/actions.rb +1 -1
- data/lib/openhab/core/dsl/entities.rb +41 -4
- data/lib/openhab/core/dsl/gems.rb +1 -1
- data/lib/openhab/core/dsl/group.rb +3 -1
- data/lib/openhab/core/dsl/items/items.rb +3 -1
- data/lib/openhab/core/dsl/items/number_item.rb +151 -50
- data/lib/openhab/core/dsl/items/string_item.rb +21 -3
- data/lib/openhab/core/dsl/monkey_patch/items/metadata.rb +66 -42
- data/lib/openhab/core/dsl/monkey_patch/items/switch_item.rb +2 -1
- data/lib/openhab/core/dsl/monkey_patch/ruby/number.rb +7 -35
- data/lib/openhab/core/dsl/monkey_patch/ruby/range.rb +2 -1
- data/lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb +1 -0
- data/lib/openhab/core/dsl/property.rb +15 -4
- data/lib/openhab/core/dsl/rule/automation_rule.rb +348 -0
- data/lib/openhab/core/dsl/rule/guard.rb +43 -6
- data/lib/openhab/core/dsl/rule/rule.rb +80 -354
- data/lib/openhab/core/dsl/rule/rule_config.rb +153 -0
- data/lib/openhab/core/dsl/rule/triggers/changed.rb +145 -0
- data/lib/openhab/core/dsl/rule/{channel.rb → triggers/channel.rb} +22 -8
- data/lib/openhab/core/dsl/rule/triggers/command.rb +106 -0
- data/lib/openhab/core/dsl/rule/{cron.rb → triggers/cron.rb} +58 -13
- data/lib/openhab/core/dsl/rule/triggers/trigger.rb +126 -0
- data/lib/openhab/core/dsl/rule/triggers/updated.rb +100 -0
- data/lib/openhab/core/dsl/time_of_day.rb +50 -24
- data/lib/openhab/core/dsl/timers.rb +3 -9
- data/lib/openhab/core/dsl/types/quantity.rb +106 -69
- data/lib/openhab/core/log.rb +3 -8
- data/lib/openhab/core/startup_delay.rb +1 -0
- data/lib/openhab/osgi.rb +7 -0
- data/lib/openhab/version.rb +1 -1
- metadata +10 -7
- data/lib/openhab/core/dsl/rule/item.rb +0 -208
- data/lib/openhab/core/dsl/rule/triggers.rb +0 -77
- data/lib/openhab/core/duration.rb +0 -78
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'securerandom'
|
4
|
-
|
5
|
-
module OpenHAB
|
6
|
-
module Core
|
7
|
-
module DSL
|
8
|
-
module Rule
|
9
|
-
#
|
10
|
-
# Class for creating and managing triggers
|
11
|
-
#
|
12
|
-
class Trigger
|
13
|
-
java_import org.openhab.core.automation.util.TriggerBuilder
|
14
|
-
java_import org.openhab.core.config.core.Configuration
|
15
|
-
|
16
|
-
# @return [String] A channel event trigger
|
17
|
-
CHANNEL_EVENT = 'core.ChannelEventTrigger'
|
18
|
-
|
19
|
-
# @return [String] A thing status Change trigger
|
20
|
-
THING_CHANGE = 'core.ThingStatusChangeTrigger'
|
21
|
-
|
22
|
-
# @return [String] A thing status update trigger
|
23
|
-
THING_UPDATE = 'core.ThingStatusUpdateTrigger'
|
24
|
-
|
25
|
-
# @return [String] An item command trigger
|
26
|
-
ITEM_COMMAND = 'core.ItemCommandTrigger'
|
27
|
-
|
28
|
-
# @return [String] An item state update trigger
|
29
|
-
ITEM_STATE_UPDATE = 'core.ItemStateUpdateTrigger'
|
30
|
-
|
31
|
-
# @return [String] An item state change trigger
|
32
|
-
ITEM_STATE_CHANGE = 'core.ItemStateChangeTrigger'
|
33
|
-
|
34
|
-
# @return [String] A group state change trigger for items in the group
|
35
|
-
GROUP_STATE_CHANGE = 'core.GroupStateChangeTrigger'
|
36
|
-
|
37
|
-
# @return [String] A group state update trigger for items in the group
|
38
|
-
GROUP_STATE_UPDATE = 'core.GroupStateUpdateTrigger'
|
39
|
-
|
40
|
-
# @return [String] A group command trigger for items in the group
|
41
|
-
GROUP_COMMAND = 'core.GroupCommandTrigger'
|
42
|
-
|
43
|
-
# @return [String] A time of day trigger
|
44
|
-
TIME_OF_DAY = 'timer.TimeOfDayTrigger'
|
45
|
-
|
46
|
-
# @return [String] A cron trigger
|
47
|
-
CRON = 'timer.GenericCronTrigger'
|
48
|
-
|
49
|
-
#
|
50
|
-
# Create a trigger
|
51
|
-
#
|
52
|
-
# @param [String] type of trigger
|
53
|
-
# @param [Map] config map
|
54
|
-
#
|
55
|
-
# @return [OpenHAB Trigger] configured by type and supplied config
|
56
|
-
#
|
57
|
-
def self.trigger(type:, config:)
|
58
|
-
TriggerBuilder.create
|
59
|
-
.with_id(uuid)
|
60
|
-
.with_type_uid(type)
|
61
|
-
.with_configuration(Configuration.new(config))
|
62
|
-
.build
|
63
|
-
end
|
64
|
-
|
65
|
-
#
|
66
|
-
# Generate a UUID for triggers
|
67
|
-
#
|
68
|
-
# @return [String] UUID
|
69
|
-
#
|
70
|
-
def self.uuid
|
71
|
-
SecureRandom.uuid
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'openhab/core/cron'
|
4
|
-
|
5
|
-
module OpenHAB
|
6
|
-
module Core
|
7
|
-
#
|
8
|
-
# This class represents a duration of time
|
9
|
-
#
|
10
|
-
class Duration
|
11
|
-
include OpenHAB::Core::Cron
|
12
|
-
|
13
|
-
# @return [Array] of supported temperal units (milliseconds, seconds, minutes and hours)
|
14
|
-
TEMPORAL_UNITS = %i[MILLISECONDS SECONDS MINUTES HOURS].freeze
|
15
|
-
|
16
|
-
#
|
17
|
-
# Create a new Duration object
|
18
|
-
#
|
19
|
-
# @param [Symbol] temporal_unit Unit for duration
|
20
|
-
# @param [Integer] amount of that unit
|
21
|
-
#
|
22
|
-
def initialize(temporal_unit:, amount:)
|
23
|
-
unless TEMPORAL_UNITS.include? temporal_unit
|
24
|
-
raise ArgumentError,
|
25
|
-
"Unexpected Temporal Unit: #{temporal_unit}"
|
26
|
-
end
|
27
|
-
|
28
|
-
@temporal_unit = temporal_unit
|
29
|
-
@amount = amount
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
# Return a map
|
34
|
-
#
|
35
|
-
# @return [Map] Map with fields representing this duration @see OpenHAB::Core::Cron
|
36
|
-
#
|
37
|
-
def cron_map
|
38
|
-
case @temporal_unit
|
39
|
-
when :SECONDS
|
40
|
-
cron_expression_map.merge(second: "*/#{@amount}")
|
41
|
-
when :MINUTES
|
42
|
-
cron_expression_map.merge(minute: "*/#{@amount}")
|
43
|
-
when :HOURS
|
44
|
-
cron_expression_map.merge(hour: "*/#{@amount}")
|
45
|
-
else
|
46
|
-
raise ArgumentError, "Cron Expression not supported for temporal unit: #{temporal_unit}"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
#
|
51
|
-
# Convert the duration to milliseconds
|
52
|
-
#
|
53
|
-
# @return [Integer] Duration in milliseconds
|
54
|
-
#
|
55
|
-
def to_ms
|
56
|
-
case @temporal_unit
|
57
|
-
when :MILLISECONDS
|
58
|
-
@amount
|
59
|
-
when :SECONDS
|
60
|
-
@amount * 1000
|
61
|
-
when :MINUTES
|
62
|
-
@amount * 1000 * 60
|
63
|
-
when :HOURS
|
64
|
-
@amount * 1000 * 60 * 60
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
#
|
69
|
-
# Return a string representation of the duration
|
70
|
-
#
|
71
|
-
# @return [String] Duration in string
|
72
|
-
#
|
73
|
-
def to_s
|
74
|
-
"#{@amount} #{(@amount == 1) ? @temporal_unit.to_s.downcase.delete_suffix('s') : @temporal_unit.to_s.downcase}"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|