openhab-scripting 2.16.2 → 2.16.3

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.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab.rb +12 -16
  3. data/lib/openhab/core/entity_lookup.rb +162 -0
  4. data/lib/openhab/core/openhab_setup.rb +31 -0
  5. data/lib/openhab/core/osgi.rb +61 -0
  6. data/lib/openhab/dsl/actions.rb +105 -0
  7. data/lib/openhab/dsl/dsl.rb +47 -0
  8. data/lib/openhab/{core/dsl → dsl}/gems.rb +0 -1
  9. data/lib/openhab/dsl/group.rb +100 -0
  10. data/lib/openhab/dsl/items/items.rb +46 -0
  11. data/lib/openhab/dsl/items/number_item.rb +352 -0
  12. data/lib/openhab/dsl/items/string_item.rb +120 -0
  13. data/lib/openhab/dsl/monkey_patch/actions/actions.rb +4 -0
  14. data/lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb +32 -0
  15. data/lib/openhab/dsl/monkey_patch/events/events.rb +5 -0
  16. data/lib/openhab/dsl/monkey_patch/events/item_command.rb +23 -0
  17. data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +35 -0
  18. data/lib/openhab/dsl/monkey_patch/events/thing_status_info.rb +33 -0
  19. data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +61 -0
  20. data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +193 -0
  21. data/lib/openhab/dsl/monkey_patch/items/group_item.rb +37 -0
  22. data/lib/openhab/dsl/monkey_patch/items/items.rb +133 -0
  23. data/lib/openhab/dsl/monkey_patch/items/metadata.rb +281 -0
  24. data/lib/openhab/dsl/monkey_patch/items/persistence.rb +70 -0
  25. data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +95 -0
  26. data/lib/openhab/dsl/monkey_patch/ruby/number.rb +39 -0
  27. data/lib/openhab/dsl/monkey_patch/ruby/range.rb +47 -0
  28. data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +7 -0
  29. data/lib/openhab/dsl/monkey_patch/ruby/string.rb +41 -0
  30. data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +70 -0
  31. data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +51 -0
  32. data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +36 -0
  33. data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +32 -0
  34. data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +69 -0
  35. data/lib/openhab/dsl/monkey_patch/types/types.rb +8 -0
  36. data/lib/openhab/dsl/persistence.rb +25 -0
  37. data/lib/openhab/dsl/rules/automation_rule.rb +342 -0
  38. data/lib/openhab/dsl/rules/guard.rb +134 -0
  39. data/lib/openhab/dsl/rules/property.rb +102 -0
  40. data/lib/openhab/dsl/rules/rule.rb +116 -0
  41. data/lib/openhab/dsl/rules/rule_config.rb +151 -0
  42. data/lib/openhab/dsl/rules/triggers/changed.rb +143 -0
  43. data/lib/openhab/dsl/rules/triggers/channel.rb +53 -0
  44. data/lib/openhab/dsl/rules/triggers/command.rb +104 -0
  45. data/lib/openhab/dsl/rules/triggers/cron.rb +177 -0
  46. data/lib/openhab/dsl/rules/triggers/trigger.rb +124 -0
  47. data/lib/openhab/dsl/rules/triggers/updated.rb +98 -0
  48. data/lib/openhab/dsl/states.rb +61 -0
  49. data/lib/openhab/dsl/things.rb +91 -0
  50. data/lib/openhab/dsl/time_of_day.rb +228 -0
  51. data/lib/openhab/dsl/timers.rb +77 -0
  52. data/lib/openhab/dsl/types/quantity.rb +290 -0
  53. data/lib/openhab/dsl/units.rb +39 -0
  54. data/lib/openhab/log/configuration.rb +21 -0
  55. data/lib/openhab/log/logger.rb +172 -0
  56. data/lib/openhab/version.rb +1 -1
  57. metadata +55 -58
  58. data/lib/openhab/configuration.rb +0 -16
  59. data/lib/openhab/core/cron.rb +0 -27
  60. data/lib/openhab/core/debug.rb +0 -34
  61. data/lib/openhab/core/dsl.rb +0 -51
  62. data/lib/openhab/core/dsl/actions.rb +0 -107
  63. data/lib/openhab/core/dsl/entities.rb +0 -147
  64. data/lib/openhab/core/dsl/group.rb +0 -102
  65. data/lib/openhab/core/dsl/items/items.rb +0 -51
  66. data/lib/openhab/core/dsl/items/number_item.rb +0 -323
  67. data/lib/openhab/core/dsl/items/string_item.rb +0 -122
  68. data/lib/openhab/core/dsl/monkey_patch/actions/actions.rb +0 -4
  69. data/lib/openhab/core/dsl/monkey_patch/actions/script_thing_actions.rb +0 -22
  70. data/lib/openhab/core/dsl/monkey_patch/events.rb +0 -5
  71. data/lib/openhab/core/dsl/monkey_patch/events/item_command.rb +0 -13
  72. data/lib/openhab/core/dsl/monkey_patch/events/item_state_changed.rb +0 -25
  73. data/lib/openhab/core/dsl/monkey_patch/events/thing_status_info.rb +0 -26
  74. data/lib/openhab/core/dsl/monkey_patch/items/contact_item.rb +0 -54
  75. data/lib/openhab/core/dsl/monkey_patch/items/dimmer_item.rb +0 -182
  76. data/lib/openhab/core/dsl/monkey_patch/items/group_item.rb +0 -27
  77. data/lib/openhab/core/dsl/monkey_patch/items/items.rb +0 -132
  78. data/lib/openhab/core/dsl/monkey_patch/items/metadata.rb +0 -283
  79. data/lib/openhab/core/dsl/monkey_patch/items/persistence.rb +0 -72
  80. data/lib/openhab/core/dsl/monkey_patch/items/switch_item.rb +0 -87
  81. data/lib/openhab/core/dsl/monkey_patch/ruby/number.rb +0 -41
  82. data/lib/openhab/core/dsl/monkey_patch/ruby/range.rb +0 -47
  83. data/lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb +0 -7
  84. data/lib/openhab/core/dsl/monkey_patch/ruby/string.rb +0 -43
  85. data/lib/openhab/core/dsl/monkey_patch/types/decimal_type.rb +0 -60
  86. data/lib/openhab/core/dsl/monkey_patch/types/on_off_type.rb +0 -41
  87. data/lib/openhab/core/dsl/monkey_patch/types/open_closed_type.rb +0 -25
  88. data/lib/openhab/core/dsl/monkey_patch/types/percent_type.rb +0 -23
  89. data/lib/openhab/core/dsl/monkey_patch/types/quantity_type.rb +0 -58
  90. data/lib/openhab/core/dsl/monkey_patch/types/types.rb +0 -8
  91. data/lib/openhab/core/dsl/persistence.rb +0 -27
  92. data/lib/openhab/core/dsl/property.rb +0 -96
  93. data/lib/openhab/core/dsl/rule/automation_rule.rb +0 -345
  94. data/lib/openhab/core/dsl/rule/guard.rb +0 -136
  95. data/lib/openhab/core/dsl/rule/rule.rb +0 -117
  96. data/lib/openhab/core/dsl/rule/rule_config.rb +0 -153
  97. data/lib/openhab/core/dsl/rule/triggers/changed.rb +0 -145
  98. data/lib/openhab/core/dsl/rule/triggers/channel.rb +0 -55
  99. data/lib/openhab/core/dsl/rule/triggers/command.rb +0 -106
  100. data/lib/openhab/core/dsl/rule/triggers/cron.rb +0 -160
  101. data/lib/openhab/core/dsl/rule/triggers/trigger.rb +0 -126
  102. data/lib/openhab/core/dsl/rule/triggers/updated.rb +0 -100
  103. data/lib/openhab/core/dsl/states.rb +0 -63
  104. data/lib/openhab/core/dsl/things.rb +0 -93
  105. data/lib/openhab/core/dsl/time_of_day.rb +0 -231
  106. data/lib/openhab/core/dsl/timers.rb +0 -79
  107. data/lib/openhab/core/dsl/types/quantity.rb +0 -292
  108. data/lib/openhab/core/dsl/units.rb +0 -41
  109. data/lib/openhab/core/log.rb +0 -170
  110. data/lib/openhab/core/patch_load_path.rb +0 -7
  111. data/lib/openhab/core/startup_delay.rb +0 -23
  112. data/lib/openhab/osgi.rb +0 -59
@@ -1,136 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'core/dsl/property'
4
- require 'core/log'
5
-
6
- module OpenHAB
7
- module Core
8
- module DSL
9
- module Rule
10
- #
11
- # Guards for rules
12
- #
13
- module Guard
14
- include DSLProperty
15
-
16
- prop_array(:only_if) do |item|
17
- unless item.is_a?(Proc) || item.respond_to?(:truthy?)
18
- raise ArgumentError, "Object passed to only_if must respond_to 'truthy?'"
19
- end
20
- end
21
-
22
- prop_array(:not_if) do |item|
23
- unless item.is_a?(Proc) || item.respond_to?(:truthy?)
24
- raise ArgumentError, "Object passed to not_if must respond_to 'truthy?'"
25
- end
26
- end
27
-
28
- #
29
- # Guard that can prevent execute of a rule if not satisfied
30
- #
31
- class Guard
32
- include Logging
33
-
34
- #
35
- # Create a new Guard
36
- #
37
- # @param [Object] only_if Item or Proc to use as guard
38
- # @param [Object] not_if Item or Proc to use as guard
39
- #
40
- def initialize(only_if: nil, not_if: nil)
41
- @only_if = only_if
42
- @not_if = not_if
43
- end
44
-
45
- #
46
- # Convert the guard into a string
47
- #
48
- # @return [String] describing the only_of and not_if guards
49
- #
50
- def to_s
51
- "only_if: #{@only_if}, not_if: #{@not_if}"
52
- end
53
-
54
- #
55
- # Checks if a guard should run
56
- #
57
- # @param [OpenHAB Trigger Event] event OpenHAB Trigger Event
58
- #
59
- # @return [Boolean] True if guard is satisfied, false otherwise
60
- #
61
- def should_run?(event)
62
- logger.trace("Checking guards #{self}")
63
- check(@only_if, check_type: :only_if, event: event) && check(@not_if, check_type: :not_if, event: event)
64
- end
65
-
66
- private
67
-
68
- #
69
- # Check if guard is satisfied
70
- #
71
- # @param [Array] conditions to check
72
- # @param [Symbol] check_type type of check to perform (:only_if or :not_if)
73
- # @param [Event] event OpenHAB event to see if it satisfies the guard
74
- #
75
- # @return [Boolean] True if guard is satisfied, false otherwise
76
- #
77
- def check(conditions, check_type:, event:)
78
- return true if conditions.nil? || conditions.empty?
79
-
80
- procs, items = conditions.flatten.partition { |condition| condition.is_a? Proc }
81
- logger.trace("Procs: #{procs} Items: #{items}")
82
-
83
- items.each { |item| logger.trace("#{item} truthy? #{item.truthy?}") }
84
-
85
- process_check(check_type: check_type, event: event, items: items, procs: procs)
86
- end
87
-
88
- #
89
- # Execute the guard check
90
- #
91
- # @param [Symbol] check_type :only_if or :not_if to check
92
- # @param [OpenHAB Event] event event to check if meets guard
93
- # @param [Array<Item>] items to check if satisfy criteria
94
- # @param [Array] procs to check if satisfy criteria
95
- #
96
- # @return [Boolean] True if criteria are satisfied, false otherwise
97
- #
98
- def process_check(check_type:, event:, items:, procs:)
99
- case check_type
100
- when :only_if then process_only_if(event, items, procs)
101
- when :not_if then process_not_if(event, items, procs)
102
- else raise ArgumentError, "Unexpected check type: #{check_type}"
103
- end
104
- end
105
-
106
- #
107
- # Check not_if guard
108
- #
109
- # @param [OpenHAB Event] event event to check if meets guard
110
- # @param [Array<Item>] items to check if satisfy criteria
111
- # @param [Array] procs to check if satisfy criteria
112
- #
113
- # @return [Boolean] True if criteria are satisfied, false otherwise
114
- #
115
- def process_not_if(event, items, procs)
116
- items.none?(&:truthy?) && procs.none? { |proc| proc.call(event) }
117
- end
118
-
119
- #
120
- # Check only_if guard
121
- #
122
- # @param [OpenHAB Event] event event to check if meets guard
123
- # @param [Array<Item>] items to check if satisfy criteria
124
- # @param [Array] procs to check if satisfy criteria
125
- #
126
- # @return [Boolean] True if criteria are satisfied, false otherwise
127
- #
128
- def process_only_if(event, items, procs)
129
- items.all?(&:truthy?) && procs.all? { |proc| proc.call(event) }
130
- end
131
- end
132
- end
133
- end
134
- end
135
- end
136
- end
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'core/dsl/rule/rule_config'
4
- require 'core/dsl/rule/automation_rule'
5
- require 'core/dsl/rule/guard'
6
-
7
- module OpenHAB
8
- module Core
9
- #
10
- # Contains code to create an OpenHAB DSL
11
- #
12
- module DSL
13
- #
14
- # Creates and manages OpenHAB Rules
15
- #
16
- module Rule
17
- #
18
- # Create a new rule
19
- #
20
- # @param [String] rule_name <description>
21
- # @yield [] Block executed in context of a RuleConfig
22
- #
23
- #
24
- def rule(rule_name, &block)
25
- config = RuleConfig.new(rule_name, block.binding)
26
- config.instance_eval(&block)
27
- config.guard = Guard::Guard.new(only_if: config.only_if, not_if: config.not_if)
28
- logger.trace { config.inspect }
29
- process_rule_config(config)
30
- end
31
-
32
- #
33
- # Create a logger where name includes rule name if name is set
34
- #
35
- # @return [Logging::Logger] Logger with name that appended with rule name if rule name is set
36
- #
37
- def logger
38
- if name
39
- Logging.logger(name.chomp.gsub(/\s+/, '_'))
40
- else
41
- super
42
- end
43
- end
44
-
45
- private
46
-
47
- #
48
- # Process a rule based on the supplied configuration
49
- #
50
- # @param [RuleConfig] config for rule
51
- #
52
- #
53
- def process_rule_config(config)
54
- return unless create_rule?(config)
55
-
56
- rule = AutomationRule.new(config: config)
57
- add_rule(rule)
58
- rule.execute if config.on_start?
59
- end
60
-
61
- #
62
- # Should a rule be created based on rule configuration
63
- #
64
- # @param [RuleConfig] config to check
65
- #
66
- # @return [Boolean] true if it should be created, false otherwise
67
- #
68
- def create_rule?(config)
69
- if !triggers?(config)
70
- logger.warn "Rule '#{config.name}' has no triggers, not creating rule"
71
- elsif !execution_blocks?(config)
72
- logger.warn "Rule '#{config.name}' has no execution blocks, not creating rule"
73
- elsif !config.enabled
74
- logger.debug "Rule '#{config.name}' marked as disabled, not creating rule."
75
- else
76
- return true
77
- end
78
- false
79
- end
80
-
81
- #
82
- # Check if the rule has any triggers
83
- #
84
- # @param [RuleConfig] config to check for triggers
85
- #
86
- # @return [Boolean] True if rule has triggers, false otherwise
87
- #
88
- def triggers?(config)
89
- config.on_start? || config.triggers.length.positive?
90
- end
91
-
92
- #
93
- # Check if the rule has any execution blocks
94
- #
95
- # @param [RuleConfig] config to check for triggers
96
- #
97
- # @return [Boolean] True if rule has execution blocks, false otherwise
98
- #
99
- def execution_blocks?(config)
100
- (config.run || []).length.positive?
101
- end
102
-
103
- #
104
- # Add a rule to the automation managed
105
- #
106
- # @param [Java::OrgOpenhabCoreAutomationModuleScriptRulesupportSharedSimple::SimpleRule] rule to add
107
- #
108
- #
109
- def add_rule(rule)
110
- # rubocop: disable Style/GlobalVars
111
- $scriptExtension.get('automationManager').addRule(rule)
112
- # rubocop: enable Style/GlobalVars
113
- end
114
- end
115
- end
116
- end
117
- end
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
- require 'pp'
5
- require 'core/dsl/property'
6
- require 'core/dsl/rule/triggers/cron'
7
- require 'core/dsl/rule/triggers/changed'
8
- require 'core/dsl/rule/triggers/channel'
9
- require 'core/dsl/rule/triggers/command'
10
- require 'core/dsl/rule/triggers/updated'
11
- require 'core/dsl/rule/guard'
12
- require 'core/dsl/entities'
13
- require 'core/dsl/time_of_day'
14
- require 'core/dsl'
15
- require 'core/dsl/timers'
16
-
17
- module OpenHAB
18
- module Core
19
- module DSL
20
- #
21
- # Creates and manages OpenHAB Rules
22
- #
23
- module Rule
24
- #
25
- # Rule configuration for OpenHAB Rules engine
26
- #
27
- class RuleConfig
28
- include EntityLookup
29
- include OpenHAB::Core::DSL::Rule::Triggers
30
- include Guard
31
- include DSLProperty
32
- include Logging
33
- extend OpenHAB::Core::DSL
34
-
35
- java_import org.openhab.core.library.items.SwitchItem
36
-
37
- # @return [Array] Of triggers
38
- attr_reader :triggers
39
-
40
- # @return [Array] Of trigger delays
41
- attr_reader :trigger_delays
42
-
43
- # @return [Array] Of trigger guards
44
- attr_accessor :guard
45
-
46
- #
47
- # Struct holding a run block
48
- #
49
- Run = Struct.new(:block)
50
-
51
- #
52
- # Struct holding a Triggered block
53
- #
54
- Trigger = Struct.new(:block)
55
-
56
- #
57
- # Struct holding an otherwise block
58
- #
59
- Otherwise = Struct.new(:block)
60
-
61
- #
62
- # Struct holding rule delays
63
- #
64
- Delay = Struct.new(:duration)
65
-
66
- prop_array :run, array_name: :run_queue, wrapper: Run
67
- prop_array :triggered, array_name: :run_queue, wrapper: Trigger
68
- prop_array :delay, array_name: :run_queue, wrapper: Delay
69
- prop_array :otherwise, array_name: :run_queue, wrapper: Otherwise
70
-
71
- prop :name
72
- prop :description
73
- prop :enabled
74
- prop :between
75
-
76
- #
77
- # Create a new RuleConfig
78
- #
79
- # @param [Object] caller_binding The object initializing this configuration.
80
- # Used to execute within the object's context
81
- #
82
- def initialize(rule_name, caller_binding)
83
- @triggers = []
84
- @trigger_delays = {}
85
- @caller = caller_binding.eval 'self'
86
- enabled(true)
87
- on_start(false)
88
- name(rule_name)
89
- end
90
-
91
- #
92
- # Start this rule on system startup
93
- #
94
- # @param [Boolean] run_on_start Run this rule on start, defaults to True
95
- #
96
- #
97
- # rubocop: disable Style/OptionalBooleanParameter
98
- # Disabled cop due to use in a DSL
99
- def on_start(run_on_start = true)
100
- @on_start = run_on_start
101
- end
102
- # rubocop: enable Style/OptionalBooleanParameter
103
-
104
- #
105
- # Checks if this rule should run on start
106
- #
107
- # @return [Boolean] True if rule should run on start, false otherwise.
108
- #
109
- def on_start?
110
- @on_start
111
- end
112
-
113
- #
114
- # Run the supplied block inside the object instance of the object that created the rule config
115
- #
116
- # @yield [] Block executed in context of the object creating the rule config
117
- #
118
- #
119
- def my(&block)
120
- @caller.instance_eval(&block)
121
- end
122
-
123
- #
124
- # Create a logger where name includes rule name if name is set
125
- #
126
- # @return [Logging::Logger] Logger with name that appended with rule name if rule name is set
127
- #
128
- def logger
129
- if name
130
- Logging.logger(name.chomp.gsub(/\s+/, '_'))
131
- else
132
- super
133
- end
134
- end
135
-
136
- #
137
- # Inspect the config object
138
- #
139
- # @return [String] details of the config object
140
- #
141
- def inspect
142
- "Name: (#{name}) " \
143
- "Triggers: (#{triggers}) " \
144
- "Run blocks: (#{run}) " \
145
- "on_start: (#{on_start?}) " \
146
- "Trigger Waits: #{trigger_delays} " \
147
- "Trigger UIDs: #{triggers.map(&:id).join(', ')}"
148
- end
149
- end
150
- end
151
- end
152
- end
153
- end
@@ -1,145 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'core/log'
4
-
5
- module OpenHAB
6
- module Core
7
- module DSL
8
- module Rule
9
- #
10
- # Module holds rule triggers
11
- #
12
- module Triggers
13
- include Logging
14
-
15
- #
16
- # Struct capturing data necessary for a conditional trigger
17
- #
18
- TriggerDelay = Struct.new(:to, :from, :duration, :timer, :tracking_to, keyword_init: true) do
19
- def timer_active?
20
- timer&.is_active
21
- end
22
- end
23
-
24
- #
25
- # Creates a trigger item, group and thing changed
26
- #
27
- # @param [Object] items array of objects to create trigger for
28
- # @param [to] to state for object to change for
29
- # @param [from] from <description>
30
- # @param [OpenHAB::Core::Duration] for Duration to delay trigger until to state is met
31
- #
32
- # @return [Trigger] OpenHAB trigger
33
- #
34
- def changed(*items, to: nil, from: nil, for: nil)
35
- items.flatten.each do |item|
36
- logger.trace("Creating changed trigger for entity(#{item}), to(#{to}), from(#{from})")
37
- # for is a reserved word in ruby, so use local_variable_get :for
38
- if (wait_duration = binding.local_variable_get(:for))
39
- changed_wait(item, to: to, from: from, duration: wait_duration)
40
- else
41
- # Place in array and flatten to support multiple to elements or single or nil
42
- [to].flatten.each do |to_state|
43
- create_changed_trigger(item, from, to_state)
44
- end
45
- end
46
- end
47
- end
48
-
49
- private
50
-
51
- #
52
- # Create a TriggerDelay for for an item or group that is changed for a specific duration
53
- #
54
- # @param [Object] item to create trigger delay for
55
- # @param [OpenHAB::Core::Duration] duration to delay trigger for until condition is met
56
- # @param [Item State] to OpenHAB Item State item or group needs to change to
57
- # @param [Item State] from OpenHAB Item State item or group needs to be coming from
58
- #
59
- # @return [Array] Array of current TriggerDelay objects
60
- #
61
- def changed_wait(item, duration:, to: nil, from: nil)
62
- # If GroupItems specified, use the group state trigger instead
63
- if item.is_a? GroupItems
64
- config = { 'groupName' => item.group.name }
65
- trigger = Trigger::GROUP_STATE_CHANGE
66
- else
67
- config = { 'itemName' => item.name }
68
- trigger = Trigger::ITEM_STATE_CHANGE
69
- end
70
- logger.trace("Creating Changed Wait Change Trigger for #{config}")
71
- trigger = append_trigger(trigger, config)
72
- @trigger_delays[trigger.id] = TriggerDelay.new(to: to, from: from, duration: duration)
73
- end
74
-
75
- #
76
- # Create a changed trigger
77
- #
78
- # @param [Object] item to create changed trigger on
79
- # @param [String] from state to restrict trigger to
80
- # @param [String] to state restrict trigger to
81
- #
82
- #
83
- def create_changed_trigger(item, from, to)
84
- trigger, config = case item
85
- when GroupItems then create_group_changed_trigger(item, from, to)
86
- when Thing then create_thing_changed_trigger(item, from, to)
87
- else create_item_changed_trigger(item, from, to)
88
- end
89
- append_trigger(trigger, config)
90
- end
91
-
92
- #
93
- # Create a changed trigger for a thing
94
- #
95
- # @param [Thing] thing to detected changed states on
96
- # @param [String] from state to restrict trigger to
97
- # @param [String] to state to restrict trigger to
98
- #
99
- # @return [Array<Hash,String>] first element is a String specifying trigger type
100
- # second element is a Hash configuring trigger
101
- #
102
- def create_thing_changed_trigger(thing, from, to)
103
- trigger_for_thing(thing, Trigger::THING_CHANGE, to, from)
104
- end
105
-
106
- #
107
- # Create a changed trigger for an item
108
- #
109
- # @param [Item] item to detected changed states on
110
- # @param [String] from state to restrict trigger to
111
- # @param [String] to to restrict trigger to
112
- #
113
- # @return [Array<Hash,String>] first element is a String specifying trigger type
114
- # second element is a Hash configuring trigger
115
- #
116
- def create_item_changed_trigger(item, from, to)
117
- config = { 'itemName' => item.name }
118
- config['state'] = to.to_s if to
119
- config['previousState'] = from.to_s if from
120
- trigger = Trigger::ITEM_STATE_CHANGE
121
- [trigger, config]
122
- end
123
-
124
- #
125
- # Create a changed trigger for group items
126
- #
127
- # @param [Group] group to detected changed states on
128
- # @param [String] from state to restrict trigger to
129
- # @param [String] to to restrict trigger to
130
- #
131
- # @return [Array<Hash,String>] first element is a String specifying trigger type
132
- # second element is a Hash configuring trigger
133
- #
134
- def create_group_changed_trigger(group, from, to)
135
- config = { 'groupName' => group.group.name }
136
- config['state'] = to.to_s if to
137
- config['previousState'] = from.to_s if from
138
- trigger = Trigger::GROUP_STATE_CHANGE
139
- [trigger, config]
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end