openhab-scripting 2.16.2 → 2.16.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module DSL
5
+ module MonkeyPatch
6
+ module Items
7
+ #
8
+ # Persistence extension for Items
9
+ #
10
+ module Persistence
11
+ %w[persist last_update].each do |method|
12
+ define_method(method) do |service = nil|
13
+ service ||= persistence_service
14
+ PersistenceExtensions.public_send(method, self, service&.to_s)
15
+ end
16
+ end
17
+
18
+ #
19
+ # Return the previous state of the item
20
+ #
21
+ # @param skip_equal [Boolean] if true, skips equal state values and
22
+ # searches the first state not equal the current state
23
+ # @param service [String] the name of the PersistenceService to use
24
+ #
25
+ # @return the previous state or nil if no previous state could be found,
26
+ # or if the default persistence service is not configured or
27
+ # does not refer to a valid service
28
+ #
29
+ def previous_state(service = nil, skip_equal: false)
30
+ service ||= persistence_service
31
+ PersistenceExtensions.previous_state(self, skip_equal, service&.to_s)
32
+ end
33
+
34
+ %w[
35
+ average_since
36
+ changed_since
37
+ delta_since
38
+ deviation_since
39
+ evolution_rate
40
+ historic_state
41
+ maximum_since
42
+ minimum_since
43
+ sum_since
44
+ updated_since
45
+ variance_since
46
+ ].each do |method|
47
+ define_method(method) do |timestamp, service = nil|
48
+ service ||= persistence_service
49
+ if timestamp.is_a? Java::JavaTimeTemporal::TemporalAmount
50
+ timestamp = Java::JavaTime::ZonedDateTime.now.minus(timestamp)
51
+ end
52
+ PersistenceExtensions.public_send(method, self, timestamp, service&.to_s)
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ #
59
+ # Get the specified persistence service from the current thread local variable
60
+ #
61
+ # @return [Object] Persistence service name as String or Symbol, or nil if not set
62
+ #
63
+ def persistence_service
64
+ Thread.current.thread_variable_get(:persistence_service)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module DSL
5
+ module MonkeyPatch
6
+ #
7
+ # Patches OpenHAB items
8
+ #
9
+ module Items
10
+ java_import Java::OrgOpenhabCoreLibraryItems::SwitchItem
11
+
12
+ # Alias class names for easy is_a? comparisons
13
+ ::Switch = SwitchItem
14
+
15
+ #
16
+ # Monkeypatching SwitchItem to add Ruby Support methods
17
+ #
18
+ class SwitchItem
19
+ java_import Java::OrgOpenhabCoreLibraryTypes::OnOffType
20
+ #
21
+ # Send the OFF command to the switch
22
+ #
23
+ #
24
+ def off
25
+ command(OnOffType::OFF)
26
+ end
27
+
28
+ #
29
+ # Send the OFF command to the switch
30
+ #
31
+ #
32
+ def on
33
+ command(OnOffType::ON)
34
+ end
35
+
36
+ #
37
+ # Check if a switch is on
38
+ #
39
+ # @return [Boolean] True if the switch is on, false otherwise
40
+ #
41
+ def on?
42
+ state? && state == OnOffType::ON
43
+ end
44
+
45
+ alias truthy? on?
46
+
47
+ #
48
+ # Check if a switch is off
49
+ #
50
+ # @return [Boolean] True if the switch is off, false otherwise
51
+ #
52
+ def off?
53
+ state? && state == OnOffType::OFF
54
+ end
55
+
56
+ #
57
+ # Send a command to invert the state of the switch
58
+ #
59
+ # @return [OnOffType] Inverted state
60
+ #
61
+ def toggle
62
+ self << !self
63
+ end
64
+
65
+ #
66
+ # Return the inverted state of the switch: ON if the switch is OFF, UNDEF or NULL; OFF if the switch is ON
67
+ #
68
+ # @return [OnOffType] Inverted state
69
+ #
70
+ def !
71
+ return !state if state?
72
+
73
+ OnOffType::ON
74
+ end
75
+
76
+ #
77
+ # Check for equality against supplied object
78
+ #
79
+ # @param [Object] other object to compare to
80
+ #
81
+ # @return [Boolean] True if other is a OnOffType and other equals state for this switch item,
82
+ # otherwise result from super
83
+ #
84
+ def ==(other)
85
+ if other.is_a? OnOffType
86
+ state? && state == other
87
+ else
88
+ super
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenHAB
4
+ module DSL
5
+ module MonkeyPatch
6
+ module Ruby
7
+ #
8
+ # Extend integer to create duration object
9
+ #
10
+ module IntegerExtensions
11
+ include OpenHAB::Core
12
+
13
+ #
14
+ # Create Duration with the specified unit
15
+ #
16
+ # @return [Java::JavaTime::Duration] Duration with number of units from self
17
+ #
18
+ %w[millis seconds minutes hours].each do |unit|
19
+ define_method(unit) { Java::JavaTime::Duration.public_send("of_#{unit}", self) }
20
+ end
21
+
22
+ alias second seconds
23
+ alias millisecond millis
24
+ alias milliseconds millis
25
+ alias ms millis
26
+ alias minute minutes
27
+ alias hour hours
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ #
35
+ # Prepend Integer class with duration extensions
36
+ #
37
+ class Integer
38
+ prepend OpenHAB::DSL::MonkeyPatch::Ruby::IntegerExtensions
39
+ end
@@ -0,0 +1,47 @@
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 DSL
9
+ #
10
+ # MonkeyPatch both Ruby and OpenHAB Objects to support DSL
11
+ #
12
+ module MonkeyPatch
13
+ #
14
+ # MonkeyPatch ruby object to support DSL
15
+ #
16
+ module Ruby
17
+ #
18
+ # Extensions for Range Class to support DimmerItems
19
+ #
20
+ module RangeExtensions
21
+ java_import Java::OrgOpenhabCoreLibraryItems::DimmerItem
22
+
23
+ #
24
+ # Override range === method to support DimmerItems
25
+ #
26
+ # @param [Object] other object to compare for case equals
27
+ #
28
+ # @return [Boolean] if other is DimmerItem and state is covered by range,
29
+ # result from parent Range class if not DimmerItem
30
+ #
31
+ def ===(other)
32
+ return super unless other.is_a? DimmerItem
33
+
34
+ cover? other.state.to_i
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::DSL::MonkeyPatch::Ruby::RangeExtensions
47
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Monkey patch ruby
4
+ require 'openhab/dsl/monkey_patch/ruby/range'
5
+ require 'openhab/dsl/monkey_patch/ruby/number'
6
+ require 'openhab/dsl/monkey_patch/ruby/string'
7
+ require 'bigdecimal/util'
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'openhab/dsl/types/quantity'
4
+
5
+ module OpenHAB
6
+ module DSL
7
+ module MonkeyPatch
8
+ module Ruby
9
+ #
10
+ # Extend String class
11
+ #
12
+ module StringExtensions
13
+ include OpenHAB::Core
14
+
15
+ #
16
+ # Compares String to another object
17
+ #
18
+ # @param [Object] other object to compare to
19
+ #
20
+ # @return [Boolean] true if the two objects contain the same value, false otherwise
21
+ #
22
+ def ==(other)
23
+ case other
24
+ when OpenHAB::DSL::Types::Quantity, QuantityType
25
+ other == self
26
+ else
27
+ super
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ #
37
+ # Prepend String class with comparison extensions
38
+ #
39
+ class String
40
+ prepend OpenHAB::DSL::MonkeyPatch::Ruby::StringExtensions
41
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'java'
4
+
5
+ module OpenHAB
6
+ module DSL
7
+ module MonkeyPatch
8
+ #
9
+ # Patches OpenHAB types
10
+ #
11
+ module Types
12
+ java_import Java::OrgOpenhabCoreLibraryTypes::DecimalType
13
+
14
+ #
15
+ # MonkeyPatching Decimal Type
16
+ #
17
+ class DecimalType
18
+ #
19
+ # @param [Object] other object to compare to
20
+ #
21
+ # @return [Integer] -1,0,1 or nil depending on value supplied,
22
+ # nil comparison to supplied object is not possible.
23
+ #
24
+ def <=>(other)
25
+ logger.trace("#{self.class} #{self} <=> #{other} (#{other.class})")
26
+ case other
27
+ when Numeric
28
+ to_big_decimal.compare_to(other.to_d)
29
+ when Java::OrgOpenhabCoreTypes::UnDefType
30
+ 1
31
+ else
32
+ other = other.state if other.respond_to? :state
33
+ compare_to(other)
34
+ end
35
+ end
36
+
37
+ #
38
+ # Coerce objects into a DecimalType
39
+ #
40
+ # @param [Object] other object to coerce to a DecimalType if possible
41
+ #
42
+ # @return [Object] Numeric when applicable
43
+ #
44
+ def coerce(other)
45
+ logger.trace("Coercing #{self} as a request from #{other.class}")
46
+ case other
47
+ when Numeric
48
+ [other.to_d, to_big_decimal]
49
+ else
50
+ [other, self]
51
+ end
52
+ end
53
+
54
+ #
55
+ # Compare self to other through the spaceship operator
56
+ # Compare self to other using Java BigDecimal compare method
57
+ #
58
+ # @param [Object] other object to compare to
59
+ #
60
+ # @return [Boolean] True if have the same BigDecimal representation, false otherwise
61
+ #
62
+ def ==(other)
63
+ logger.trace("#{self.class} #{self} == #{other} (#{other.class})")
64
+ (self <=> other).zero?
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'java'
4
+
5
+ module OpenHAB
6
+ module DSL
7
+ module MonkeyPatch
8
+ #
9
+ # Patches OpenHAB types
10
+ #
11
+ module Types
12
+ java_import Java::OrgOpenhabCoreLibraryTypes::OnOffType
13
+
14
+ #
15
+ # Monkey patching OnOffType
16
+ #
17
+ class OnOffType
18
+ #
19
+ # Invert the type
20
+ #
21
+ # @return [Java::OrgOpenhabCoreLibraryTypes::OnOffType] OFF if ON, ON if OFF
22
+ #
23
+ def !
24
+ return OFF if self == ON
25
+ return ON if self == OFF
26
+ end
27
+
28
+ # Check if the supplied object is case equals to self
29
+ #
30
+ # @param [Object] other object to compare
31
+ #
32
+ # @return [Boolean] True if the other object responds to on?/off? and is in the same state as this object,
33
+ # nil if object cannot be compared
34
+ #
35
+ def ===(other)
36
+ # A case statement here causes and infinite loop
37
+ # rubocop:disable Style/CaseLikeIf
38
+ if self == ON
39
+ other.on? if other.respond_to? :on?
40
+ elsif self == OFF
41
+ other.off? if other.respond_to?('off?')
42
+ else
43
+ false
44
+ end
45
+ # rubocop:enable Style/CaseLikeIf
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'java'
4
+
5
+ module OpenHAB
6
+ module DSL
7
+ module MonkeyPatch
8
+ #
9
+ # Patches OpenHAB types
10
+ #
11
+ module Types
12
+ java_import Java::OrgOpenhabCoreLibraryTypes::OpenClosedType
13
+
14
+ #
15
+ # Monkey patch for DSL use
16
+ #
17
+ class OpenClosedType
18
+ java_import Java::OrgOpenhabCoreLibraryItems::ContactItem
19
+
20
+ #
21
+ # Check if the supplied object is case equals to self
22
+ #
23
+ # @param [Object] other object to compare
24
+ #
25
+ # @return [Boolean] True if the other object is a ContactItem and has the same state
26
+ #
27
+ def ===(other)
28
+ super unless other.is_a? ContactItem
29
+
30
+ self == other.state
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end