openhab-scripting 4.1.4 → 4.2.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 +1 -57
- data/lib/openhab/dsl/dsl.rb +6 -12
- data/lib/openhab/dsl/group.rb +1 -5
- data/lib/openhab/dsl/items/comparable_item.rb +49 -0
- data/lib/openhab/dsl/items/contact_item.rb +41 -0
- data/lib/openhab/dsl/items/date_time_item.rb +64 -0
- data/lib/openhab/dsl/items/dimmer_item.rb +59 -0
- data/lib/openhab/dsl/items/generic_item.rb +197 -0
- data/lib/openhab/dsl/items/group_item.rb +56 -92
- data/lib/openhab/dsl/items/image_item.rb +5 -41
- data/lib/openhab/dsl/items/item_registry.rb +49 -0
- data/lib/openhab/dsl/items/items.rb +71 -35
- data/lib/openhab/dsl/items/metadata.rb +325 -0
- data/lib/openhab/dsl/items/number_item.rb +6 -312
- data/lib/openhab/dsl/items/numeric_item.rb +66 -0
- data/lib/openhab/dsl/items/persistence.rb +122 -0
- data/lib/openhab/dsl/items/player_item.rb +49 -40
- data/lib/openhab/dsl/items/rollershutter_item.rb +25 -77
- data/lib/openhab/dsl/items/string_item.rb +16 -58
- data/lib/openhab/dsl/items/switch_item.rb +62 -0
- data/lib/openhab/dsl/lazy_array.rb +8 -6
- data/lib/openhab/dsl/monkey_patch/events/events.rb +2 -2
- data/lib/openhab/dsl/monkey_patch/events/item_command.rb +67 -24
- data/lib/openhab/dsl/monkey_patch/events/item_event.rb +5 -5
- data/lib/openhab/dsl/monkey_patch/events/item_state.rb +10 -11
- data/lib/openhab/dsl/monkey_patch/events/item_state_changed.rb +10 -11
- data/lib/openhab/dsl/monkey_patch/ruby/number.rb +25 -2
- data/lib/openhab/dsl/monkey_patch/ruby/ruby.rb +0 -3
- data/lib/openhab/dsl/monkey_patch/ruby/string.rb +24 -24
- data/lib/openhab/dsl/states.rb +1 -1
- data/lib/openhab/dsl/time_of_day.rb +3 -5
- data/lib/openhab/dsl/types/comparable_type.rb +21 -0
- data/lib/openhab/dsl/types/date_time_type.rb +334 -0
- data/lib/openhab/dsl/types/decimal_type.rb +187 -0
- data/lib/openhab/dsl/types/increase_decrease_type.rb +23 -0
- data/lib/openhab/dsl/types/next_previous_type.rb +23 -0
- data/lib/openhab/dsl/types/numeric_type.rb +39 -0
- data/lib/openhab/dsl/types/on_off_type.rb +29 -0
- data/lib/openhab/dsl/types/open_closed_type.rb +29 -0
- data/lib/openhab/dsl/types/percent_type.rb +68 -0
- data/lib/openhab/dsl/types/play_pause_type.rb +27 -0
- data/lib/openhab/dsl/types/quantity_type.rb +275 -0
- data/lib/openhab/dsl/types/refresh_type.rb +18 -0
- data/lib/openhab/dsl/types/rewind_fastforward_type.rb +33 -0
- data/lib/openhab/dsl/types/stop_move_type.rb +23 -0
- data/lib/openhab/dsl/types/string_type.rb +88 -0
- data/lib/openhab/dsl/types/type.rb +72 -0
- data/lib/openhab/dsl/types/types.rb +77 -0
- data/lib/openhab/dsl/types/un_def_type.rb +22 -0
- data/lib/openhab/dsl/types/up_down_type.rb +32 -0
- data/lib/openhab/dsl/units.rb +11 -6
- data/lib/openhab/version.rb +1 -1
- data/lib/openhab.rb +0 -1
- metadata +31 -28
- data/lib/openhab/dsl/items/datetime_item.rb +0 -75
- data/lib/openhab/dsl/items/item_command.rb +0 -90
- data/lib/openhab/dsl/items/item_delegate.rb +0 -125
- data/lib/openhab/dsl/monkey_patch/items/contact_item.rb +0 -51
- data/lib/openhab/dsl/monkey_patch/items/dimmer_item.rb +0 -140
- data/lib/openhab/dsl/monkey_patch/items/items.rb +0 -142
- data/lib/openhab/dsl/monkey_patch/items/metadata.rb +0 -328
- data/lib/openhab/dsl/monkey_patch/items/persistence.rb +0 -123
- data/lib/openhab/dsl/monkey_patch/items/switch_item.rb +0 -71
- data/lib/openhab/dsl/monkey_patch/ruby/range.rb +0 -47
- data/lib/openhab/dsl/monkey_patch/ruby/time.rb +0 -32
- data/lib/openhab/dsl/monkey_patch/types/decimal_type.rb +0 -97
- data/lib/openhab/dsl/monkey_patch/types/increase_decrease_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/next_previous_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/on_off_type.rb +0 -79
- data/lib/openhab/dsl/monkey_patch/types/open_closed_type.rb +0 -71
- data/lib/openhab/dsl/monkey_patch/types/percent_type.rb +0 -77
- data/lib/openhab/dsl/monkey_patch/types/play_pause_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/quantity_type.rb +0 -69
- data/lib/openhab/dsl/monkey_patch/types/refresh_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/rewind_fastforward_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/stop_move_type.rb +0 -23
- data/lib/openhab/dsl/monkey_patch/types/types.rb +0 -15
- data/lib/openhab/dsl/monkey_patch/types/up_down_type.rb +0 -72
- data/lib/openhab/dsl/types/datetime.rb +0 -338
- data/lib/openhab/dsl/types/quantity.rb +0 -300
@@ -1,81 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require 'forwardable'
|
5
|
-
require 'java'
|
6
|
-
|
7
|
-
require 'openhab/core/entity_lookup'
|
8
|
-
require 'openhab/dsl/items/item_command'
|
9
|
-
require 'openhab/dsl/items/item_delegate'
|
3
|
+
require_relative 'comparable_item'
|
10
4
|
require 'openhab/dsl/lazy_array'
|
11
5
|
|
12
6
|
module OpenHAB
|
13
7
|
module DSL
|
14
8
|
module Items
|
15
|
-
|
16
|
-
# Class for indicating to triggers that a group trigger should be used
|
17
|
-
#
|
18
|
-
class GroupMembers
|
19
|
-
include LazyArray
|
20
|
-
|
21
|
-
attr_reader :group
|
9
|
+
java_import org.openhab.core.items.GroupItem
|
22
10
|
|
11
|
+
# Adds methods to core OpenHAB GroupItem type to make it more natural in
|
12
|
+
# Ruby
|
13
|
+
class GroupItem < GenericItem
|
23
14
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# @param [GroupItem] group_item GroupItem to use as trigger
|
15
|
+
# Class for indicating to triggers that a group trigger should be used
|
27
16
|
#
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
# explicit conversion to array
|
33
|
-
def to_a
|
34
|
-
OpenHAB::Core::EntityLookup.decorate_items(group.members.to_a)
|
35
|
-
end
|
36
|
-
end
|
17
|
+
class GroupMembers
|
18
|
+
include LazyArray
|
37
19
|
|
38
|
-
|
39
|
-
|
40
|
-
#
|
41
|
-
class GroupItem
|
42
|
-
extend OpenHAB::DSL::Items::ItemCommand
|
43
|
-
extend OpenHAB::DSL::Items::ItemDelegate
|
44
|
-
include Enumerable
|
45
|
-
include Comparable
|
20
|
+
# @return [GroupItem]
|
21
|
+
attr_reader :group
|
46
22
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
#
|
52
|
-
DEFAULT_FILTERS = {
|
53
|
-
groups: ->(item) { item.is_a?(Java::OrgOpenhabCoreItems::GroupItem) },
|
54
|
-
all: -> { true }
|
55
|
-
}.freeze
|
23
|
+
# @!visibility private
|
24
|
+
def initialize(group_item)
|
25
|
+
@group = group_item
|
26
|
+
end
|
56
27
|
|
57
|
-
|
28
|
+
# Explicit conversion to Array
|
29
|
+
#
|
30
|
+
# @return [Array]
|
31
|
+
def to_a
|
32
|
+
group.get_members.to_a
|
33
|
+
end
|
34
|
+
end
|
58
35
|
|
59
|
-
|
60
|
-
|
61
|
-
#
|
62
|
-
# @param [Java::Org::openhab::core::items::GroupItem] group_item OpenHAB GroupItem to delegate to
|
63
|
-
#
|
64
|
-
def initialize(group_item)
|
65
|
-
@group_item = group_item
|
36
|
+
include Enumerable
|
37
|
+
include ComparableItem
|
66
38
|
|
67
|
-
|
68
|
-
item_missing_delegate { OpenHAB::Core::EntityLookup.decorate_item(base_item) }
|
69
|
-
end
|
39
|
+
remove_method :==
|
70
40
|
|
71
41
|
#
|
72
|
-
#
|
42
|
+
# Get an Array-like object representing the members of the group
|
73
43
|
#
|
74
|
-
# @return [GroupMembers]
|
44
|
+
# @return [GroupMembers]
|
75
45
|
#
|
76
46
|
def members
|
77
|
-
GroupMembers.new(
|
47
|
+
GroupMembers.new(self)
|
78
48
|
end
|
49
|
+
|
50
|
+
# @deprecated
|
79
51
|
alias items members
|
80
52
|
|
81
53
|
#
|
@@ -89,51 +61,43 @@ module OpenHAB
|
|
89
61
|
# Get all members of the group recursively. Optionally filter the items to only return
|
90
62
|
# Groups or regular Items
|
91
63
|
#
|
92
|
-
# @param [Symbol] filter Either
|
64
|
+
# @param [Symbol] filter Either +:groups+ or +:items+
|
93
65
|
#
|
94
66
|
# @return [Array] An Array containing all descendants of the Group, optionally filtered
|
95
67
|
#
|
96
68
|
def all_members(filter = nil, &block)
|
97
|
-
|
69
|
+
filter = nil if filter == :items
|
70
|
+
raise ArgumentError, 'filter must be :groups or :items' unless [:groups, nil].include?(filter)
|
98
71
|
|
99
|
-
|
72
|
+
block = ->(i) { i.is_a?(GroupItem) } if filter
|
100
73
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
#
|
105
|
-
# Test for equality
|
106
|
-
#
|
107
|
-
# @param [Object] other Other object to compare against
|
108
|
-
#
|
109
|
-
# @return [Boolean] true if self and other can be considered equal, false otherwise
|
110
|
-
#
|
111
|
-
def ==(other)
|
112
|
-
if other.respond_to?(:java_class) && accepted_data_types.include?(other.java_class)
|
113
|
-
get_state_as(other.class) == other
|
114
|
-
elsif other.respond_to?(:state)
|
115
|
-
base_item ? OpenHAB::Core::EntityLookup.decorate_item(base_item) == other.state : self == other.state
|
74
|
+
if block
|
75
|
+
get_members(&block).to_a
|
116
76
|
else
|
117
|
-
|
77
|
+
get_all_members.to_a
|
118
78
|
end
|
119
79
|
end
|
120
80
|
|
121
|
-
#
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
#
|
129
|
-
def
|
130
|
-
if base_item
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
81
|
+
# Delegate missing methods to +base_item+ if possible
|
82
|
+
def method_missing(method, *args, &block)
|
83
|
+
return base_item.__send__(method, *args, &block) if base_item.respond_to?(method)
|
84
|
+
|
85
|
+
super
|
86
|
+
end
|
87
|
+
|
88
|
+
# @!visibility private
|
89
|
+
def respond_to_missing?(method, include_private = false)
|
90
|
+
return true if base_item.respond_to?(method)
|
91
|
+
|
92
|
+
super
|
93
|
+
end
|
94
|
+
|
95
|
+
# give the base item type a chance to format commands
|
96
|
+
# @!visibility private
|
97
|
+
def format_type(command)
|
98
|
+
return super unless base_item
|
99
|
+
|
100
|
+
base_item.format_type(command)
|
137
101
|
end
|
138
102
|
end
|
139
103
|
end
|
@@ -3,52 +3,16 @@
|
|
3
3
|
require 'base64'
|
4
4
|
require 'pathname'
|
5
5
|
require 'net/http'
|
6
|
-
require 'java'
|
7
6
|
require 'marcel'
|
8
|
-
require 'openhab/dsl/items/item_command'
|
9
|
-
require 'openhab/dsl/items/item_delegate'
|
10
7
|
|
11
8
|
module OpenHAB
|
12
9
|
module DSL
|
13
10
|
module Items
|
14
|
-
|
15
|
-
# Delegator to OpenHAB Player Item
|
16
|
-
#
|
17
|
-
class ImageItem
|
18
|
-
extend OpenHAB::DSL::Items::ItemCommand
|
19
|
-
extend OpenHAB::DSL::Items::ItemDelegate
|
20
|
-
|
21
|
-
def_item_delegator :@image_item
|
22
|
-
|
23
|
-
item_type Java::OrgOpenhabCoreLibraryItems::ImageItem
|
24
|
-
|
25
|
-
#
|
26
|
-
# Creates a new ImageItem
|
27
|
-
#
|
28
|
-
# @param [Java::OrgOpenhabCoreLibraryItems::ImageItem] image_item
|
29
|
-
# The OpenHAB ImageItem to delegate to
|
30
|
-
#
|
31
|
-
def initialize(image_item)
|
32
|
-
logger.trace("Wrapping #{image_item}")
|
33
|
-
@image_item = image_item
|
34
|
-
|
35
|
-
item_missing_delegate { @image_item }
|
36
|
-
|
37
|
-
super()
|
38
|
-
end
|
39
|
-
|
40
|
-
#
|
41
|
-
#
|
42
|
-
# Update image with base64 encoded OpenHAB compatable image
|
43
|
-
#
|
44
|
-
# @param [String] base_64 base_64 encoding of an image
|
45
|
-
#
|
46
|
-
#
|
47
|
-
def update(base_64_encoded_image)
|
48
|
-
logger.trace { "Updating #{self} with Base64 image #{base_64_encoded_image}" }
|
49
|
-
@image_item.update base_64_encoded_image
|
50
|
-
end
|
11
|
+
java_import org.openhab.core.library.items.ImageItem
|
51
12
|
|
13
|
+
# Adds methods to core OpenHAB ImageItem type to make it more natural in
|
14
|
+
# Ruby
|
15
|
+
class ImageItem < GenericItem
|
52
16
|
#
|
53
17
|
# Update image from file
|
54
18
|
#
|
@@ -87,7 +51,7 @@ module OpenHAB
|
|
87
51
|
def update_from_bytes(bytes, mime_type: nil)
|
88
52
|
mime_type ||= detect_mime_from_bytes(bytes: bytes)
|
89
53
|
base_64_image = encode_image(mime_type: mime_type, bytes: bytes)
|
90
|
-
update
|
54
|
+
update(base_64_image)
|
91
55
|
end
|
92
56
|
|
93
57
|
#
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
require 'openhab/core/entity_lookup'
|
6
|
+
require 'openhab/dsl/lazy_array'
|
7
|
+
|
8
|
+
module OpenHAB
|
9
|
+
module DSL
|
10
|
+
module Items
|
11
|
+
#
|
12
|
+
# Provides access to all OpenHAB items, and acts like an array.
|
13
|
+
#
|
14
|
+
class ItemRegistry
|
15
|
+
include LazyArray
|
16
|
+
include Singleton
|
17
|
+
|
18
|
+
# Fetches the named item from the the ItemRegistry
|
19
|
+
# @param [String] name
|
20
|
+
# @return [GenericItem] Item from registry, nil if item missing or requested item is a Group Type
|
21
|
+
def [](name)
|
22
|
+
OpenHAB::Core::EntityLookup.lookup_item(name)
|
23
|
+
rescue org.openhab.core.items.ItemNotFoundException
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns true if the given item name exists
|
28
|
+
# @param name [String] Item name to check
|
29
|
+
# @return [Boolean] true if the item exists, false otherwise
|
30
|
+
def include?(name)
|
31
|
+
!$ir.getItems(name).empty? # rubocop: disable Style/GlobalVars
|
32
|
+
end
|
33
|
+
alias key? include?
|
34
|
+
|
35
|
+
# Explicit conversion to array
|
36
|
+
# @return [Array]
|
37
|
+
def to_a
|
38
|
+
$ir.items.grep_v(org.openhab.core.items.GroupItem) # rubocop:disable Style/GlobalVars
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Fetches all non-group items from the item registry
|
43
|
+
# @return [ItemRegistry]
|
44
|
+
def items
|
45
|
+
ItemRegistry.instance
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -1,52 +1,88 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'singleton'
|
3
|
+
require 'openhab/dsl/monkey_patch/events/item_command'
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
require_relative 'item_registry'
|
6
|
+
|
7
|
+
require_relative 'generic_item'
|
8
|
+
|
9
|
+
require_relative 'switch_item'
|
10
|
+
require_relative 'date_time_item'
|
11
|
+
require_relative 'dimmer_item'
|
12
|
+
|
13
|
+
require_relative 'contact_item'
|
14
|
+
require_relative 'group_item'
|
15
|
+
require_relative 'image_item'
|
16
|
+
require_relative 'number_item'
|
17
|
+
require_relative 'player_item'
|
18
|
+
require_relative 'rollershutter_item'
|
19
|
+
require_relative 'string_item'
|
8
20
|
|
9
21
|
module OpenHAB
|
10
22
|
module DSL
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
23
|
+
# Contains all OpenHAB *Item classes, as well as associated support
|
24
|
+
# modules
|
14
25
|
module Items
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
# @return Item from registry, nil if item missing or requested item is a Group Type
|
25
|
-
def [](name)
|
26
|
-
OpenHAB::Core::EntityLookup.lookup_item(name)
|
27
|
-
rescue Java::OrgOpenhabCoreItems::ItemNotFoundException
|
28
|
-
nil
|
26
|
+
class << self
|
27
|
+
private
|
28
|
+
|
29
|
+
# takes an array of Type java classes and returns
|
30
|
+
# all the Enum values, in a flat array
|
31
|
+
def values_for_enums(enums)
|
32
|
+
enums.map(&:ruby_class)
|
33
|
+
.select { |k| k < java.lang.Enum }
|
34
|
+
.flat_map(&:values)
|
29
35
|
end
|
30
36
|
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
37
|
+
# define predicates for checking if an item is in one of the Enum states
|
38
|
+
def def_predicate_methods(klass)
|
39
|
+
values_for_enums(klass.ACCEPTED_DATA_TYPES).each do |state|
|
40
|
+
_command_predicate, state_predicate = Types::PREDICATE_ALIASES[state.to_s]
|
41
|
+
next if klass.instance_methods.include?(state_predicate)
|
42
|
+
|
43
|
+
OpenHAB::Core.logger.trace("Defining #{klass}##{state_predicate} for #{state}")
|
44
|
+
klass.class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
45
|
+
def #{state_predicate} # def on?
|
46
|
+
raw_state == #{state} # raw_state == ON
|
47
|
+
end # end
|
48
|
+
RUBY
|
49
|
+
end
|
36
50
|
end
|
37
|
-
alias key? []
|
38
51
|
|
39
|
-
#
|
40
|
-
|
41
|
-
|
42
|
-
|
52
|
+
# defined methods for commanding an item to one of the Enum states
|
53
|
+
# as well as predicates for if an ItemCommandEvent is one of those commands
|
54
|
+
def def_command_methods(klass) # rubocop:disable Metrics/MethodLength method has single purpose
|
55
|
+
values_for_enums(klass.ACCEPTED_COMMAND_TYPES).each do |value|
|
56
|
+
command = Types::COMMAND_ALIASES[value.to_s]
|
57
|
+
next if klass.instance_methods.include?(command)
|
58
|
+
|
59
|
+
OpenHAB::Core.logger.trace("Defining #{klass}##{command} for #{value}")
|
60
|
+
klass.class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
61
|
+
def #{command} # def on
|
62
|
+
command(#{value}) # command(ON)
|
63
|
+
end # end
|
64
|
+
RUBY
|
65
|
+
|
66
|
+
OpenHAB::Core.logger.trace("Defining ItemCommandEvent##{command}? for #{value}")
|
67
|
+
MonkeyPatch::Events::ItemCommandEvent.class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
68
|
+
def #{command}? # def refresh?
|
69
|
+
command == #{value} # command == REFRESH
|
70
|
+
end # end
|
71
|
+
RUBY
|
72
|
+
end
|
43
73
|
end
|
44
74
|
end
|
45
75
|
|
46
|
-
#
|
47
|
-
|
48
|
-
|
49
|
-
|
76
|
+
# sort classes by hierarchy so we define methods on parent classes first
|
77
|
+
constants.map { |c| const_get(c) }
|
78
|
+
.grep(Module)
|
79
|
+
.select { |k| k <= GenericItem && k != GroupItem && k != StringItem }
|
80
|
+
.sort { |a, b| a < b ? 1 : -1 }
|
81
|
+
.each do |klass|
|
82
|
+
klass.field_reader :ACCEPTED_COMMAND_TYPES, :ACCEPTED_DATA_TYPES unless klass == GenericItem
|
83
|
+
|
84
|
+
def_predicate_methods(klass)
|
85
|
+
def_command_methods(klass)
|
50
86
|
end
|
51
87
|
end
|
52
88
|
end
|