openhab-scripting 2.16.2 → 2.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openhab.rb +12 -16
  3. data/lib/openhab/core/entity_lookup.rb +173 -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 +49 -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/datetime_item.rb +97 -0
  11. data/lib/openhab/dsl/items/items.rb +46 -0
  12. data/lib/openhab/dsl/items/number_item.rb +352 -0
  13. data/lib/openhab/dsl/items/rollershutter_item.rb +179 -0
  14. data/lib/openhab/dsl/items/string_item.rb +120 -0
  15. data/lib/openhab/dsl/monkey_patch/actions/actions.rb +4 -0
  16. data/lib/openhab/dsl/monkey_patch/actions/script_thing_actions.rb +32 -0
  17. data/lib/openhab/dsl/monkey_patch/events/events.rb +5 -0
  18. data/lib/openhab/dsl/monkey_patch/events/item_command.rb +23 -0
  19. data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +35 -0
  20. data/lib/openhab/dsl/monkey_patch/events/thing_status_info.rb +33 -0
  21. data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +61 -0
  22. data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +193 -0
  23. data/lib/openhab/dsl/monkey_patch/items/group_item.rb +37 -0
  24. data/lib/openhab/dsl/monkey_patch/items/items.rb +133 -0
  25. data/lib/openhab/dsl/monkey_patch/items/metadata.rb +281 -0
  26. data/lib/openhab/dsl/monkey_patch/items/persistence.rb +70 -0
  27. data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +95 -0
  28. data/lib/openhab/dsl/monkey_patch/ruby/number.rb +39 -0
  29. data/lib/openhab/dsl/monkey_patch/ruby/range.rb +47 -0
  30. data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +8 -0
  31. data/lib/openhab/dsl/monkey_patch/ruby/string.rb +41 -0
  32. data/lib/openhab/dsl/monkey_patch/ruby/time.rb +32 -0
  33. data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +70 -0
  34. data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +51 -0
  35. data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +36 -0
  36. data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +32 -0
  37. data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +69 -0
  38. data/lib/openhab/dsl/monkey_patch/types/types.rb +9 -0
  39. data/lib/openhab/dsl/monkey_patch/types/up_down_type.rb +33 -0
  40. data/lib/openhab/dsl/persistence.rb +25 -0
  41. data/lib/openhab/dsl/rules/automation_rule.rb +342 -0
  42. data/lib/openhab/dsl/rules/guard.rb +134 -0
  43. data/lib/openhab/dsl/rules/property.rb +102 -0
  44. data/lib/openhab/dsl/rules/rule.rb +116 -0
  45. data/lib/openhab/dsl/rules/rule_config.rb +151 -0
  46. data/lib/openhab/dsl/rules/triggers/changed.rb +143 -0
  47. data/lib/openhab/dsl/rules/triggers/channel.rb +53 -0
  48. data/lib/openhab/dsl/rules/triggers/command.rb +104 -0
  49. data/lib/openhab/dsl/rules/triggers/cron.rb +177 -0
  50. data/lib/openhab/dsl/rules/triggers/trigger.rb +124 -0
  51. data/lib/openhab/dsl/rules/triggers/updated.rb +98 -0
  52. data/lib/openhab/dsl/states.rb +61 -0
  53. data/lib/openhab/dsl/things.rb +91 -0
  54. data/lib/openhab/dsl/time_of_day.rb +232 -0
  55. data/lib/openhab/dsl/timers.rb +77 -0
  56. data/lib/openhab/dsl/types/datetime.rb +326 -0
  57. data/lib/openhab/dsl/types/quantity.rb +290 -0
  58. data/lib/openhab/dsl/units.rb +39 -0
  59. data/lib/openhab/log/configuration.rb +21 -0
  60. data/lib/openhab/log/logger.rb +172 -0
  61. data/lib/openhab/version.rb +1 -1
  62. metadata +60 -58
  63. data/lib/openhab/configuration.rb +0 -16
  64. data/lib/openhab/core/cron.rb +0 -27
  65. data/lib/openhab/core/debug.rb +0 -34
  66. data/lib/openhab/core/dsl.rb +0 -51
  67. data/lib/openhab/core/dsl/actions.rb +0 -107
  68. data/lib/openhab/core/dsl/entities.rb +0 -147
  69. data/lib/openhab/core/dsl/group.rb +0 -102
  70. data/lib/openhab/core/dsl/items/items.rb +0 -51
  71. data/lib/openhab/core/dsl/items/number_item.rb +0 -323
  72. data/lib/openhab/core/dsl/items/string_item.rb +0 -122
  73. data/lib/openhab/core/dsl/monkey_patch/actions/actions.rb +0 -4
  74. data/lib/openhab/core/dsl/monkey_patch/actions/script_thing_actions.rb +0 -22
  75. data/lib/openhab/core/dsl/monkey_patch/events.rb +0 -5
  76. data/lib/openhab/core/dsl/monkey_patch/events/item_command.rb +0 -13
  77. data/lib/openhab/core/dsl/monkey_patch/events/item_state_changed.rb +0 -25
  78. data/lib/openhab/core/dsl/monkey_patch/events/thing_status_info.rb +0 -26
  79. data/lib/openhab/core/dsl/monkey_patch/items/contact_item.rb +0 -54
  80. data/lib/openhab/core/dsl/monkey_patch/items/dimmer_item.rb +0 -182
  81. data/lib/openhab/core/dsl/monkey_patch/items/group_item.rb +0 -27
  82. data/lib/openhab/core/dsl/monkey_patch/items/items.rb +0 -132
  83. data/lib/openhab/core/dsl/monkey_patch/items/metadata.rb +0 -283
  84. data/lib/openhab/core/dsl/monkey_patch/items/persistence.rb +0 -72
  85. data/lib/openhab/core/dsl/monkey_patch/items/switch_item.rb +0 -87
  86. data/lib/openhab/core/dsl/monkey_patch/ruby/number.rb +0 -41
  87. data/lib/openhab/core/dsl/monkey_patch/ruby/range.rb +0 -47
  88. data/lib/openhab/core/dsl/monkey_patch/ruby/ruby.rb +0 -7
  89. data/lib/openhab/core/dsl/monkey_patch/ruby/string.rb +0 -43
  90. data/lib/openhab/core/dsl/monkey_patch/types/decimal_type.rb +0 -60
  91. data/lib/openhab/core/dsl/monkey_patch/types/on_off_type.rb +0 -41
  92. data/lib/openhab/core/dsl/monkey_patch/types/open_closed_type.rb +0 -25
  93. data/lib/openhab/core/dsl/monkey_patch/types/percent_type.rb +0 -23
  94. data/lib/openhab/core/dsl/monkey_patch/types/quantity_type.rb +0 -58
  95. data/lib/openhab/core/dsl/monkey_patch/types/types.rb +0 -8
  96. data/lib/openhab/core/dsl/persistence.rb +0 -27
  97. data/lib/openhab/core/dsl/property.rb +0 -96
  98. data/lib/openhab/core/dsl/rule/automation_rule.rb +0 -345
  99. data/lib/openhab/core/dsl/rule/guard.rb +0 -136
  100. data/lib/openhab/core/dsl/rule/rule.rb +0 -117
  101. data/lib/openhab/core/dsl/rule/rule_config.rb +0 -153
  102. data/lib/openhab/core/dsl/rule/triggers/changed.rb +0 -145
  103. data/lib/openhab/core/dsl/rule/triggers/channel.rb +0 -55
  104. data/lib/openhab/core/dsl/rule/triggers/command.rb +0 -106
  105. data/lib/openhab/core/dsl/rule/triggers/cron.rb +0 -160
  106. data/lib/openhab/core/dsl/rule/triggers/trigger.rb +0 -126
  107. data/lib/openhab/core/dsl/rule/triggers/updated.rb +0 -100
  108. data/lib/openhab/core/dsl/states.rb +0 -63
  109. data/lib/openhab/core/dsl/things.rb +0 -93
  110. data/lib/openhab/core/dsl/time_of_day.rb +0 -231
  111. data/lib/openhab/core/dsl/timers.rb +0 -79
  112. data/lib/openhab/core/dsl/types/quantity.rb +0 -292
  113. data/lib/openhab/core/dsl/units.rb +0 -41
  114. data/lib/openhab/core/log.rb +0 -170
  115. data/lib/openhab/core/patch_load_path.rb +0 -7
  116. data/lib/openhab/core/startup_delay.rb +0 -23
  117. data/lib/openhab/osgi.rb +0 -59
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- # Monkey patch range to support case equality of OpenHab "Numeric" Objects
6
-
7
- module OpenHAB
8
- module Core
9
- module DSL
10
- #
11
- # MonkeyPatch both Ruby and OpenHAB Objects to support DSL
12
- #
13
- module MonkeyPatch
14
- #
15
- # MonkeyPatch ruby object to support DSL
16
- #
17
- module Ruby
18
- #
19
- # Extensions for Range Class to support DimmerItems
20
- #
21
- module RangeExtensions
22
- #
23
- # Override range === method to support DimmerItems
24
- #
25
- # @param [Object] other object to compare for case equals
26
- #
27
- # @return [Boolean] if other is DimmerItem and state is covered by range,
28
- # result from parent Range class if not DimmerItem
29
- #
30
- def ===(other)
31
- return super unless other.is_a? DimmerItem
32
-
33
- cover? other.state.to_i
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
-
42
- #
43
- # Prepend Range class with RangeExtensions
44
- #
45
- class Range
46
- prepend OpenHAB::Core::DSL::MonkeyPatch::Ruby::RangeExtensions
47
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Monkey patch ruby
4
- require 'openhab/core/dsl/monkey_patch/ruby/range'
5
- require 'openhab/core/dsl/monkey_patch/ruby/number'
6
- require 'openhab/core/dsl/monkey_patch/ruby/string'
7
- require 'bigdecimal/util'
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'openhab/core/dsl/types/quantity'
4
-
5
- module OpenHAB
6
- module Core
7
- module DSL
8
- module MonkeyPatch
9
- module Ruby
10
- #
11
- # Extend String class
12
- #
13
- module StringExtensions
14
- include OpenHAB::Core
15
-
16
- #
17
- # Compares String to another object
18
- #
19
- # @param [Object] other object to compare to
20
- #
21
- # @return [Boolean] true if the two objects contain the same value, false otherwise
22
- #
23
- def ==(other)
24
- case other
25
- when OpenHAB::Core::DSL::Types::Quantity, QuantityType
26
- other == self
27
- else
28
- super
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
37
-
38
- #
39
- # Prepend String class with comparison extensions
40
- #
41
- class String
42
- prepend OpenHAB::Core::DSL::MonkeyPatch::Ruby::StringExtensions
43
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- #
6
- # MonkeyPatching Decimal Type
7
- #
8
- # rubocop:disable Style/ClassAndModuleChildren
9
- class Java::OrgOpenhabCoreLibraryTypes::DecimalType
10
- # rubocop:enable Style/ClassAndModuleChildren
11
-
12
- #
13
- # Compare DecimalType to supplied object
14
- #
15
- # @param [Object] other object to compare to
16
- #
17
- # @return [Integer] -1,0,1 or nil depending on value supplied, nil comparison to supplied object is not possible.
18
- #
19
- def <=>(other)
20
- logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
21
- case other
22
- when Numeric
23
- to_big_decimal.compare_to(other.to_d)
24
- when Java::OrgOpenhabCoreTypes::UnDefType
25
- 1
26
- else
27
- other = other.state if other.respond_to? :state
28
- compare_to(other)
29
- end
30
- end
31
-
32
- #
33
- # Coerce objects into a DecimalType
34
- #
35
- # @param [Object] other object to coerce to a DecimalType if possible
36
- #
37
- # @return [Object] Numeric when applicable
38
- #
39
- def coerce(other)
40
- logger.trace("Coercing #{self} as a request from #{other.class}")
41
- case other
42
- when Numeric
43
- [other.to_d, to_big_decimal]
44
- else
45
- [other, self]
46
- end
47
- end
48
-
49
- #
50
- # Compare self to other through the spaceship operator
51
- #
52
- # @param [Object] other object to compare to
53
- #
54
- # @return [Boolean] True if equals
55
- #
56
- def ==(other)
57
- logger.trace("#{self.class} #{self} == #{other} (#{other.class})")
58
- (self <=> other).zero?
59
- end
60
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- #
6
- # Monkey patching OnOffType
7
- #
8
- # rubocop:disable Style/ClassAndModuleChildren
9
- class Java::OrgOpenhabCoreLibraryTypes::OnOffType
10
- # rubocop:enable Style/ClassAndModuleChildren
11
-
12
- #
13
- # Invert the type
14
- #
15
- # @return [Java::OrgOpenhabCoreLibraryTypes::OnOffType] OFF if ON, ON if OFF
16
- #
17
- def !
18
- return OFF if self == ON
19
- return ON if self == OFF
20
- end
21
-
22
- # Check if the supplied object is case equals to self
23
- #
24
- # @param [Object] other object to compare
25
- #
26
- # @return [Boolean] True if the other object responds to on?/off? and is in the same state as this object,
27
- # nil if object cannot be compared
28
- #
29
- def ===(other)
30
- # A case statement here causes and infinite loop
31
- # rubocop:disable Style/CaseLikeIf
32
- if self == ON
33
- other.on? if other.respond_to? :on?
34
- elsif self == OFF
35
- other.off? if other.respond_to?('off?')
36
- else
37
- false
38
- end
39
- # rubocop:enable Style/CaseLikeIf
40
- end
41
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- #
6
- # Monkey patch for DSL use
7
- #
8
- # rubocop:disable Style/ClassAndModuleChildren
9
- class Java::OrgOpenhabCoreLibraryTypes::OpenClosedType
10
- # rubocop:enable Style/ClassAndModuleChildren
11
- java_import org.openhab.core.library.items.ContactItem
12
-
13
- #
14
- # Check if the supplied object is case equals to self
15
- #
16
- # @param [Object] other object to compare
17
- #
18
- # @return [Boolean] True if the other object is a ContactItem and has the same state
19
- #
20
- def ===(other)
21
- super unless other.is_a? ContactItem
22
-
23
- self == other.state
24
- end
25
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- #
6
- # MonkeyPatching PercentType
7
- #
8
- # rubocop:disable Style/ClassAndModuleChildren
9
- class Java::OrgOpenhabCoreLibraryTypes::PercentType
10
- # rubocop:enable Style/ClassAndModuleChildren
11
-
12
- #
13
- # Need to override and point to super because default JRuby implementation doesn't point to == of parent class
14
- #
15
- # @param [Object] other object to check equality for
16
- # @return [Boolean] True if other equals self, false otherwise
17
- #
18
- # rubocop:disable Lint/UselessMethodDefinition
19
- def ==(other)
20
- super
21
- end
22
- # rubocop:enable Lint/UselessMethodDefinition
23
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'java'
4
-
5
- #
6
- # MonkeyPatching QuantityType
7
- #
8
- # rubocop:disable Style/ClassAndModuleChildren
9
- class Java::OrgOpenhabCoreLibraryTypes::QuantityType
10
- # rubocop:enable Style/ClassAndModuleChildren
11
-
12
- #
13
- # Compare QuantityType to supplied object
14
- #
15
- # @param [Object] other object to compare to
16
- #
17
- # @return [Integer] -1,0,1 or nil depending on value supplied, nil comparison to supplied object is not possible.
18
- #
19
- def <=>(other)
20
- logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
21
- case other
22
- when Java::OrgOpenhabCoreTypes::UnDefType then 1
23
- when String then self <=> Quantity.new(other)
24
- when OpenHAB::Core::DSL::Types::Quantity then self <=> other.quantity
25
- else
26
- other = other.state if other.respond_to? :state
27
- compare_to(other)
28
- end
29
- end
30
-
31
- #
32
- # Coerce objects into a QuantityType
33
- #
34
- # @param [Object] other object to coerce to a QuantityType if possible
35
- #
36
- # @return [Object] Numeric when applicable
37
- #
38
- def coerce(other)
39
- logger.trace("Coercing #{self} as a request from #{other.class}")
40
- case other
41
- when String
42
- [Quantity.new(other), self]
43
- else
44
- [other, self]
45
- end
46
- end
47
-
48
- #
49
- # Compare self to other using the spaceship operator
50
- #
51
- # @param [Object] other object to compare to
52
- #
53
- # @return [Boolean] True if equals
54
- #
55
- def ==(other)
56
- (self <=> other).zero?
57
- end
58
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Monkey patch types
4
- require 'core/dsl/monkey_patch/types/open_closed_type'
5
- require 'core/dsl/monkey_patch/types/on_off_type'
6
- require 'core/dsl/monkey_patch/types/decimal_type'
7
- require 'core/dsl/monkey_patch/types/percent_type'
8
- require 'core/dsl/monkey_patch/types/quantity_type'
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module OpenHAB
4
- module Core
5
- module DSL
6
- #
7
- # Provides support for interacting with OpenHAB Persistence service
8
- #
9
- module Persistence
10
- #
11
- # Sets a thread local variable to set the default persistence service
12
- # for method calls inside the block
13
- #
14
- # @param [Object] Persistence service either as a String or a Symbol
15
- # @yield [] Block executed in context of the supplied persistence service
16
- #
17
- #
18
- def persistence(service)
19
- Thread.current.thread_variable_set(:persistence_service, service)
20
- yield
21
- ensure
22
- Thread.current.thread_variable_set(:persistence_service, nil)
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'core/log'
4
-
5
- #
6
- # Provides methods to support DSL properties
7
- #
8
- module DSLProperty
9
- include Logging
10
-
11
- #
12
- # Extend the calling object with the property methods
13
- #
14
- # @param [Object] base object to extend
15
- #
16
- #
17
- def self.included(base)
18
- base.extend PropertyMethods
19
- end
20
-
21
- #
22
- # Methods that support creating properties in the DSL
23
- #
24
- module PropertyMethods
25
- #
26
- # Dynamically creates a property that acts and an accessor with no arguments
27
- # and a setter with any number of arguments or a block.
28
- #
29
- # @param [String] name of the property
30
- #
31
- #
32
- # rubocop:disable Metrics/MethodLength
33
- # rubocop:disable Metrics/AbcSize
34
- # rubocop:disable Metrics/CyclomaticComplexity
35
- # rubocop:disable Metrics/PerceivedComplexity
36
- def prop(name)
37
- # rubocop rules are disabled because this method is dynamically defined on the calling
38
- # object making calls to other methods in this module impossible, or if done on methods
39
- # in this module than instance variable belong to the module not the calling class
40
- define_method(name) do |*args, &block|
41
- if args.length.zero? && block.nil? == true
42
- instance_variable_get("@#{name}")
43
- else
44
- logger.trace("Property '#{name}' called with args(#{args}) and block(#{block})")
45
- if args.length == 1
46
- instance_variable_set("@#{name}", args.first)
47
- elsif args.length > 1
48
- instance_variable_set("@#{name}", args)
49
- elsif block
50
- instance_variable_set("@#{name}", block)
51
- end
52
- end
53
- end
54
- end
55
-
56
- #
57
- # Dynamically creates a property array acts and an accessor with no arguments
58
- # and a pushes any number of arguments or a block onto they property array
59
- # You can provide a block to this method which can be used to check if the provided value is acceptable.
60
- #
61
- # @param [String] name of the property
62
- # @param [String] array_name name of the array to use, defaults to name of property
63
- # @param [Class] wrapper object to put around elements added to the array
64
- #
65
- def prop_array(name, array_name: nil, wrapper: nil)
66
- define_method(name) do |*args, &block|
67
- array_name ||= name
68
- if args.length.zero? && block.nil? == true
69
- instance_variable_get("@#{array_name}")
70
- else
71
- logger.trace("Property '#{name}' called with args(#{args}) and block(#{block})")
72
- if args.length == 1
73
- insert = args.first
74
- elsif args.length > 1
75
- insert = args
76
- elsif block
77
- insert = block
78
- end
79
- yield insert if block_given?
80
- insert = wrapper.new(insert) if wrapper
81
- instance_variable_set("@#{array_name}", (instance_variable_get("@#{array_name}") || []) << insert)
82
- end
83
- end
84
-
85
- return unless array_name
86
-
87
- define_method(array_name) do
88
- instance_variable_get("@#{array_name}")
89
- end
90
- end
91
- end
92
- # rubocop:enable Metrics/MethodLength
93
- # rubocop:enable Metrics/AbcSize
94
- # rubocop:enable Metrics/CyclomaticComplexity
95
- # rubocop:enable Metrics/PerceivedComplexity
96
- end