openhab-scripting 5.12.0 → 5.13.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/{uid.rb → abstract_uid.rb} +1 -1
- data/lib/openhab/core/sitemaps/provider.rb +35 -11
- data/lib/openhab/core/things/abstract_description_type.rb +21 -0
- data/lib/openhab/core/things/channel.rb +9 -0
- data/lib/openhab/core/things/channel_definition.rb +61 -0
- data/lib/openhab/core/things/channel_group_definition.rb +51 -0
- data/lib/openhab/core/things/channel_group_type.rb +45 -0
- data/lib/openhab/core/things/channel_group_type_uid.rb +37 -0
- data/lib/openhab/core/things/channel_group_uid.rb +25 -0
- data/lib/openhab/core/things/channel_type.rb +74 -0
- data/lib/openhab/core/things/channel_type_uid.rb +53 -0
- data/lib/openhab/core/things/channel_uid.rb +19 -2
- data/lib/openhab/core/things/thing.rb +11 -2
- data/lib/openhab/core/things/thing_type.rb +62 -0
- data/lib/openhab/core/things/thing_type_uid.rb +54 -0
- data/lib/openhab/core/things/thing_uid.rb +30 -0
- data/lib/openhab/core/things/uid.rb +25 -0
- data/lib/openhab/core/things.rb +1 -3
- data/lib/openhab/dsl/rules/builder.rb +46 -8
- data/lib/openhab/dsl/rules/triggers/watch/watch_handler.rb +1 -0
- data/lib/openhab/dsl/sitemaps/builder.rb +199 -57
- data/lib/openhab/dsl/things/builder.rb +52 -18
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/dsl.rb +4 -4
- metadata +15 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfe5a24aad596dbbc699c68d39ffec4417b9199a75738a54292386d80e725525
|
4
|
+
data.tar.gz: 7aa7877384c2df3ee41588660e3db596f807fd5b2b7b781921528f14b0f9fdeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 756ab20dcfdfce97ba6dfdcbf76d1f40c544607312622e0e013ddd38f7a0d201ae0fec69c13017300fba938d7081eb89f5be5d65ad59abcadf17380ae580dad8
|
7
|
+
data.tar.gz: d9facdcb106fe9fa3e2e51574fa2e52168b9c07eb9c1fad1498a6380e9bc783c8a63535c2a715956a894eb39a2b741ff6f9284fb1de71f9e083262b9f4ed42d0
|
@@ -4,7 +4,7 @@ module OpenHAB
|
|
4
4
|
module Core
|
5
5
|
java_import org.openhab.core.common.AbstractUID
|
6
6
|
|
7
|
-
#
|
7
|
+
# A non specific base class for unique identifiers.
|
8
8
|
class AbstractUID
|
9
9
|
# implicit conversion to string
|
10
10
|
alias_method :to_str, :to_s
|
@@ -52,8 +52,6 @@ module OpenHAB
|
|
52
52
|
@registration.unregister
|
53
53
|
end
|
54
54
|
|
55
|
-
# rubocop:disable Layout/LineLength
|
56
|
-
|
57
55
|
#
|
58
56
|
# Enter the Sitemap Builder DSL.
|
59
57
|
#
|
@@ -69,18 +67,45 @@ module OpenHAB
|
|
69
67
|
# frame label: "Control" do
|
70
68
|
# text label: "Climate", icon: "if:mdi:home-thermometer-outline" do
|
71
69
|
# frame label: "Main Floor" do
|
72
|
-
# text item: MainFloor_AmbTemp
|
73
70
|
# # colors are set with a hash, with key being condition, and value being the color
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
#
|
71
|
+
# # The :default key is used when no other condition matches
|
72
|
+
# text item: MainFloor_AmbTemp,
|
73
|
+
# label_color: "purple", # A simple string can be used when no conditions are needed
|
74
|
+
# value_color: { ">=90" => "red", "<=70" => "blue", :default => "black" }
|
75
|
+
#
|
76
|
+
# # If item name is not provided in the condition, it will default to the widget's Item
|
77
|
+
# # The operator will default to == if not specified
|
78
|
+
# switch item: MainFloorThermostat_TargetMode, label: "Mode",
|
79
|
+
# mappings: %w[off auto cool heat],
|
80
|
+
# value_color: { "cool" => "blue", "heat" => "red", :default => "black" }
|
81
|
+
#
|
82
|
+
# # an array of conditions are AND'd together
|
83
|
+
# setpoint item: MainFloorThermostat_SetPoint, label: "Set Point",
|
84
|
+
# value_color: {
|
85
|
+
# ["MainFloorThermostat_TargetMode!=off", ">80"] => "red", # red if mode!=off AND setpoint > 80
|
86
|
+
# ["MainFloorThermostat_TargetMode!=off", ">74"] => "yellow",
|
87
|
+
# ["MainFloorThermostat_TargetMode!=off", ">70"] => "green",
|
88
|
+
# "MainFloorThermostat_TargetMode!=off" => "blue",
|
89
|
+
# :default => "gray"
|
90
|
+
# }
|
78
91
|
# end
|
79
92
|
# frame label: "Basement" do
|
80
93
|
# text item: Basement_AmbTemp
|
81
|
-
# switch item: BasementThermostat_TargetMode, label: "Mode",
|
82
|
-
#
|
83
|
-
#
|
94
|
+
# switch item: BasementThermostat_TargetMode, label: "Mode",
|
95
|
+
# mappings: { OFF: "off", COOL: "cool", HEAT: "heat" }
|
96
|
+
#
|
97
|
+
# # Conditions within a nested array are AND'd together (requires openHAB 4.1)
|
98
|
+
# setpoint item: BasementThermostat_SetPoint, label: "Set Point",
|
99
|
+
# visibility: [["BasementThermostat_TargetMode!=off", "Vacation_Switch==OFF"]]
|
100
|
+
#
|
101
|
+
# # Additional elements are OR'd
|
102
|
+
# # The following visibility conditions are evaluated as:
|
103
|
+
# # (BasementThermostat_TargetMode!=off AND Vacation_Switch==OFF) OR Verbose_Mode==ON
|
104
|
+
# setpoint item: BasementThermostat_SetPoint, label: "Set Point",
|
105
|
+
# visibility: [
|
106
|
+
# ["BasementThermostat_TargetMode!=off", "Vacation_Switch==OFF"],
|
107
|
+
# "Verbose_Mode==ON"
|
108
|
+
# ]
|
84
109
|
# end
|
85
110
|
# end
|
86
111
|
# end
|
@@ -90,7 +115,6 @@ module OpenHAB
|
|
90
115
|
def build(update: true, &block)
|
91
116
|
DSL::Sitemaps::Builder.new(self, update: update).instance_eval(&block)
|
92
117
|
end
|
93
|
-
# rubocop:enable Layout/LineLength
|
94
118
|
|
95
119
|
# For use in specs
|
96
120
|
# @!visibility private
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenHAB
|
4
|
+
module Core
|
5
|
+
module Things
|
6
|
+
java_import org.openhab.core.thing.type.AbstractDescriptionType
|
7
|
+
|
8
|
+
#
|
9
|
+
# Base class for {ThingType}, {ChannelType}, and {ChannelGroupType}
|
10
|
+
#
|
11
|
+
# @!attribute [r] label
|
12
|
+
# @return [String]
|
13
|
+
#
|
14
|
+
# @!attribute [r] description
|
15
|
+
# @return [String, nil]
|
16
|
+
#
|
17
|
+
class AbstractDescriptionType # rubocop:disable Lint/EmptyClass
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -23,6 +23,9 @@ module OpenHAB
|
|
23
23
|
# @!attribute [r] uid
|
24
24
|
# @return [ChannelUID]
|
25
25
|
#
|
26
|
+
# @!attribute [r] channel_type_uid
|
27
|
+
# @return [ChannelTypeUID]
|
28
|
+
#
|
26
29
|
class Channel
|
27
30
|
extend Forwardable
|
28
31
|
|
@@ -43,6 +46,12 @@ module OpenHAB
|
|
43
46
|
"#{r}>"
|
44
47
|
end
|
45
48
|
|
49
|
+
# @!attribute [r] channel_type
|
50
|
+
# @return [ChannelType]
|
51
|
+
def channel_type
|
52
|
+
ChannelType.registry.get_channel_type(channel_type_uid)
|
53
|
+
end
|
54
|
+
|
46
55
|
# @return [String]
|
47
56
|
def to_s
|
48
57
|
uid.to_s
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module OpenHAB
|
6
|
+
module Core
|
7
|
+
module Things
|
8
|
+
java_import org.openhab.core.thing.type.ChannelDefinition
|
9
|
+
|
10
|
+
#
|
11
|
+
# {ChannelDefinition} is a part of a {ChannelGroupType} that represents a functionality of it.
|
12
|
+
# Therefore {Item Items} can be linked a to a channel.
|
13
|
+
#
|
14
|
+
# @!attribute [r] id
|
15
|
+
# @return [String]
|
16
|
+
#
|
17
|
+
# @!attribute [r] label
|
18
|
+
# @return [String, nil]
|
19
|
+
#
|
20
|
+
# @!attribute [r] description
|
21
|
+
# @return [String, nil]
|
22
|
+
#
|
23
|
+
# @!attribute [r] channel_type_uid
|
24
|
+
# @return [ChannelTypeUID]
|
25
|
+
#
|
26
|
+
# @!attribute [r] channel_type
|
27
|
+
# (see ChannelTypeUID#channel_type)
|
28
|
+
#
|
29
|
+
# @!attribute [r] properties
|
30
|
+
# @return [Hash<String, String>]
|
31
|
+
#
|
32
|
+
class ChannelDefinition
|
33
|
+
extend Forwardable
|
34
|
+
|
35
|
+
delegate channel_type: :channel_type_uid
|
36
|
+
|
37
|
+
# @!attribute [r] auto_update_policy
|
38
|
+
# @return [:veto, :default, :recommend, nil]
|
39
|
+
def auto_update_policy
|
40
|
+
get_auto_update_policy&.to_s&.downcase&.to_sym
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [String]
|
44
|
+
def inspect
|
45
|
+
r = "#<OpenHAB::Core::Things::ChannelDefinition #{id}"
|
46
|
+
r += " channel_type_uid=#{channel_type_uid.inspect}" if channel_type_uid
|
47
|
+
r += " #{label.inspect}" if label
|
48
|
+
r += " description=#{description.inspect}" if description
|
49
|
+
r += " auto_update_policy=#{auto_update_policy}" if auto_update_policy
|
50
|
+
r += " properties=#{properties.to_h}" unless properties.empty?
|
51
|
+
"#{r}>"
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [String]
|
55
|
+
def to_s
|
56
|
+
id.to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module OpenHAB
|
6
|
+
module Core
|
7
|
+
module Things
|
8
|
+
java_import org.openhab.core.thing.type.ChannelGroupDefinition
|
9
|
+
|
10
|
+
#
|
11
|
+
# {ChannelGroupDefinition} is a part of a {ThingType} that represents a set of channels
|
12
|
+
#
|
13
|
+
# @!attribute [r] id
|
14
|
+
# @return [String]
|
15
|
+
#
|
16
|
+
# @!attribute [r] label
|
17
|
+
# @return [String, nil]
|
18
|
+
#
|
19
|
+
# @!attribute [r] description
|
20
|
+
# @return [String, nil]
|
21
|
+
#
|
22
|
+
# @!attribute [r] channel_group_type_uid
|
23
|
+
# @return [ChannelGroupTypeUID]
|
24
|
+
#
|
25
|
+
# @!attribute [r] channel_group_type
|
26
|
+
# (see ChannelGroupTypeUID#channel_group_type)
|
27
|
+
#
|
28
|
+
class ChannelGroupDefinition
|
29
|
+
extend Forwardable
|
30
|
+
|
31
|
+
alias_method :channel_group_type_uid, :type_uid
|
32
|
+
|
33
|
+
delegate channel_group_type: :channel_group_type_uid
|
34
|
+
|
35
|
+
# @return [String]
|
36
|
+
def inspect
|
37
|
+
r = "#<OpenHAB::Core::Things::ChannelGroupDefinition #{id}"
|
38
|
+
r += " channel_group_type_uid=#{channel_group_type_uid.inspect}"
|
39
|
+
r += " #{label.inspect}" if label
|
40
|
+
r += " description=#{description.inspect}" if description
|
41
|
+
"#{r}>"
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [String]
|
45
|
+
def to_s
|
46
|
+
id.to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenHAB
|
4
|
+
module Core
|
5
|
+
module Things
|
6
|
+
java_import org.openhab.core.thing.type.ChannelGroupType
|
7
|
+
|
8
|
+
#
|
9
|
+
# {ChannelGroupType} contains a list of
|
10
|
+
# {ChannelDefinition channel definitions} and further meta information
|
11
|
+
# such as label and description, which are generally used by user
|
12
|
+
# interfaces.
|
13
|
+
#
|
14
|
+
# @!attribute [r] uid
|
15
|
+
# @return [ChannelGroupTypeUID]
|
16
|
+
#
|
17
|
+
# @!attribute [r] channel_definitions
|
18
|
+
# @return [Array<ChannelDefinition>]
|
19
|
+
#
|
20
|
+
# @!attribute [r] category
|
21
|
+
# @return [String, nil]
|
22
|
+
#
|
23
|
+
class ChannelGroupType < AbstractDescriptionType
|
24
|
+
class << self
|
25
|
+
# @!visibility private
|
26
|
+
def registry
|
27
|
+
@registry ||= OSGi.service("org.openhab.core.thing.type.ChannelGroupTypeRegistry")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [String]
|
32
|
+
def inspect
|
33
|
+
r = "#<OpenHAB::Core::Things::ChannelGroupType #{uid}"
|
34
|
+
r += " category=#{category.inspect}" if category
|
35
|
+
"#{r}>"
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
def to_s
|
40
|
+
uid.to_s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
require_relative "uid"
|
6
|
+
|
7
|
+
module OpenHAB
|
8
|
+
module Core
|
9
|
+
module Things
|
10
|
+
java_import org.openhab.core.thing.type.ChannelGroupTypeUID
|
11
|
+
|
12
|
+
#
|
13
|
+
# {ChannelGroupTypeUID} represents a unique identifier for a {ChannelGroupType}.
|
14
|
+
#
|
15
|
+
# @!attribute [r] id
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
# @!attribute [r] channel_definitions
|
19
|
+
# (see ChannelGroupType#channel_definitions)
|
20
|
+
#
|
21
|
+
# @!attribute [r] category
|
22
|
+
# (see ChannelGroupType#category)
|
23
|
+
#
|
24
|
+
class ChannelGroupTypeUID < UID
|
25
|
+
extend Forwardable
|
26
|
+
|
27
|
+
delegate %i[category channel_definitions] => :channel_group_type
|
28
|
+
|
29
|
+
# @!attribute [r] channel_group_type
|
30
|
+
# @return [ChannelGroupType]
|
31
|
+
def channel_group_type
|
32
|
+
ChannelGroupType.registry.get_channel_group_type(self)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
require_relative "uid"
|
6
|
+
|
7
|
+
module OpenHAB
|
8
|
+
module Core
|
9
|
+
module Things
|
10
|
+
java_import org.openhab.core.thing.ChannelGroupUID
|
11
|
+
|
12
|
+
#
|
13
|
+
# {ChannelGroupUID} represents a unique identifier for a group of channels.
|
14
|
+
#
|
15
|
+
# @!attribute [r] id
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
# @!attribute [r] thing_uid
|
19
|
+
# @return [ThingUID]
|
20
|
+
#
|
21
|
+
class ChannelGroupUID < UID
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module OpenHAB
|
6
|
+
module Core
|
7
|
+
module Things
|
8
|
+
java_import org.openhab.core.thing.type.ChannelType
|
9
|
+
|
10
|
+
#
|
11
|
+
# {ChannelGroupType} contains a list of
|
12
|
+
# {ChannelDefinition channel definitions} and further meta information
|
13
|
+
# such as label and description, which are generally used by user
|
14
|
+
# interfaces.
|
15
|
+
#
|
16
|
+
# @!attribute [r] uid
|
17
|
+
# @return [ChannelTypeUID]
|
18
|
+
#
|
19
|
+
# @!attribute [r] item_type
|
20
|
+
# @return [String]
|
21
|
+
#
|
22
|
+
# @!attribute [r] tags
|
23
|
+
# @return [Set<String>]
|
24
|
+
#
|
25
|
+
# @!attribute [r] category
|
26
|
+
# @return [String, nil]
|
27
|
+
#
|
28
|
+
class ChannelType < AbstractDescriptionType
|
29
|
+
class << self
|
30
|
+
# @!visibility private
|
31
|
+
def registry
|
32
|
+
@registry ||= OSGi.service("org.openhab.core.thing.type.ChannelTypeRegistry")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# @!attribute [r] kind
|
37
|
+
# @return [:state, :trigger]
|
38
|
+
def kind
|
39
|
+
get_kind.to_s.to_sym
|
40
|
+
end
|
41
|
+
|
42
|
+
# @!attribute [r] advanced?
|
43
|
+
# @return [true, false]
|
44
|
+
alias_method :advanced?, :advanced
|
45
|
+
|
46
|
+
# @!visibility private
|
47
|
+
alias_method :state_description, :state
|
48
|
+
|
49
|
+
# @!attribute [r] auto_update_policy
|
50
|
+
# @return [:veto, :default, :recommend, nil]
|
51
|
+
def auto_update_policy
|
52
|
+
get_auto_update_policy&.to_s&.downcase&.to_sym
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [String]
|
56
|
+
def inspect
|
57
|
+
r = "#<OpenHAB::Core::Things::ChannelType #{uid}"
|
58
|
+
r += " (#{kind})" unless kind == :state
|
59
|
+
r += " (advanced)" if advanced?
|
60
|
+
r += " item_type=#{item_type}"
|
61
|
+
r += " tags=(#{tags.join(", ")})" unless tags.empty?
|
62
|
+
r += " category=#{category.inspect}" if category
|
63
|
+
r += " auto_update_policy=#{auto_update_policy}" if auto_update_policy
|
64
|
+
"#{r}>"
|
65
|
+
end
|
66
|
+
|
67
|
+
# @return [String]
|
68
|
+
def to_s
|
69
|
+
uid.to_s
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
require_relative "uid"
|
6
|
+
|
7
|
+
module OpenHAB
|
8
|
+
module Core
|
9
|
+
module Things
|
10
|
+
java_import org.openhab.core.thing.type.ChannelTypeUID
|
11
|
+
|
12
|
+
#
|
13
|
+
# {ChannelTypeUID} represents a unique identifier for a {ChannelType}.
|
14
|
+
#
|
15
|
+
# @!attribute [r] id
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
# @!attribute [r] item_type
|
19
|
+
# (see ChannelType#item_type)
|
20
|
+
#
|
21
|
+
# @!attribute [r] tags
|
22
|
+
# (see ChannelType#tags)
|
23
|
+
#
|
24
|
+
# @!attribute [r] category
|
25
|
+
# (see ChannelType#category)
|
26
|
+
#
|
27
|
+
# @!attribute [r] auto_update_policy
|
28
|
+
# (see ChannelType#auto_update_policy)
|
29
|
+
#
|
30
|
+
class ChannelTypeUID < UID
|
31
|
+
extend Forwardable
|
32
|
+
|
33
|
+
# @!method advanced?
|
34
|
+
# @return [true, false]
|
35
|
+
|
36
|
+
delegate %i[item_type
|
37
|
+
tags
|
38
|
+
category
|
39
|
+
auto_update_policy
|
40
|
+
command_description
|
41
|
+
event_description
|
42
|
+
state_description
|
43
|
+
advanced?] => :channel_type
|
44
|
+
|
45
|
+
# @!attribute [r] channel_type
|
46
|
+
# @return [ChannelType]
|
47
|
+
def channel_type
|
48
|
+
ChannelType.registry.get_channel_type(self)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -2,15 +2,32 @@
|
|
2
2
|
|
3
3
|
require "forwardable"
|
4
4
|
|
5
|
+
require_relative "uid"
|
6
|
+
|
5
7
|
module OpenHAB
|
6
8
|
module Core
|
7
9
|
module Things
|
8
10
|
java_import org.openhab.core.thing.ChannelUID
|
9
11
|
|
10
12
|
#
|
11
|
-
# {ChannelUID} represents a unique identifier for {Channel
|
13
|
+
# {ChannelUID} represents a unique identifier for a {Channel}.
|
14
|
+
#
|
15
|
+
# @!attribute [r] id
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
# @!attribute [r] id_without_group
|
19
|
+
# @return [String]
|
12
20
|
#
|
13
|
-
|
21
|
+
# @!attribute [r] group_id
|
22
|
+
# @return [String, nil]
|
23
|
+
#
|
24
|
+
# @!attribute [r] thing_uid
|
25
|
+
# @return [ThingUID]
|
26
|
+
#
|
27
|
+
class ChannelUID < UID
|
28
|
+
# @return [true, false]
|
29
|
+
alias_method :in_group?, :is_in_group
|
30
|
+
|
14
31
|
#
|
15
32
|
# @attribute [r] thing
|
16
33
|
#
|
@@ -39,11 +39,14 @@ module OpenHAB
|
|
39
39
|
#
|
40
40
|
# @!attribute [r] uid
|
41
41
|
# Return the UID.
|
42
|
-
# @return [
|
42
|
+
# @return [ThingUID]
|
43
43
|
#
|
44
44
|
# @!attribute [r] bridge_uid
|
45
45
|
# Return the Bridge UID when available.
|
46
|
-
# @return [
|
46
|
+
# @return [ThingUID]
|
47
|
+
#
|
48
|
+
# @!attribute [r] thing_type_uid
|
49
|
+
# @return [ThingTypeUID]
|
47
50
|
#
|
48
51
|
# @!attribute [r] configuration
|
49
52
|
# Return the thing's configuration.
|
@@ -156,6 +159,12 @@ module OpenHAB
|
|
156
159
|
enable(enabled: false)
|
157
160
|
end
|
158
161
|
|
162
|
+
# @!attribute [r] thing_type
|
163
|
+
# @return [ThingType]
|
164
|
+
def thing_type
|
165
|
+
ThingType.registry.get_thing_type(thing_type_uid)
|
166
|
+
end
|
167
|
+
|
159
168
|
# @return [String]
|
160
169
|
def inspect
|
161
170
|
r = "#<OpenHAB::Core::Things::Thing #{uid}"
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OpenHAB
|
4
|
+
module Core
|
5
|
+
module Things
|
6
|
+
java_import org.openhab.core.thing.type.ThingType
|
7
|
+
|
8
|
+
#
|
9
|
+
# {ThingType} contains a list of
|
10
|
+
# {ChannelGroupDefinition channel group definitions},
|
11
|
+
# {ChannelDefinition channel definitions} and further meta information.
|
12
|
+
#
|
13
|
+
# This description is used as template definition for the creation of the
|
14
|
+
# according concrete {Thing} object.
|
15
|
+
#
|
16
|
+
# @!attribute [r] uid
|
17
|
+
# @return [ChannelGroupTypeUID]
|
18
|
+
#
|
19
|
+
# @!attribute [r] channel_group_definitions
|
20
|
+
# @return [Array<ChannelGroupDefinition>]
|
21
|
+
#
|
22
|
+
# @!attribute [r] channel_definitions
|
23
|
+
# @return [Array<ChannelDefinition>]
|
24
|
+
#
|
25
|
+
# @!attribute [r] supported_bridge_type_uids
|
26
|
+
# @return [Array<String>]
|
27
|
+
#
|
28
|
+
# @!attribute [r] category
|
29
|
+
# @return [String, nil]
|
30
|
+
#
|
31
|
+
# @!attribute [r] properties
|
32
|
+
# @return [Hash<String, String>]
|
33
|
+
#
|
34
|
+
class ThingType < AbstractDescriptionType
|
35
|
+
class << self
|
36
|
+
# @!visibility private
|
37
|
+
def registry
|
38
|
+
@registry ||= OSGi.service("org.openhab.core.thing.type.ThingTypeRegistry")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# @!attribute [r] listed?
|
43
|
+
# @return [true, false]
|
44
|
+
alias_method :listed?, :is_listed
|
45
|
+
|
46
|
+
# @return [String]
|
47
|
+
def inspect
|
48
|
+
r = "#<OpenHAB::Core::Things::ThingType #{uid}"
|
49
|
+
r += " (unlisted)" unless listed?
|
50
|
+
r += " category=#{category.inspect}" if category
|
51
|
+
r += " properties=#{properties.to_h}" unless properties.empty?
|
52
|
+
"#{r}>"
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [String]
|
56
|
+
def to_s
|
57
|
+
uid.to_s
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
require_relative "uid"
|
6
|
+
|
7
|
+
module OpenHAB
|
8
|
+
module Core
|
9
|
+
module Things
|
10
|
+
java_import org.openhab.core.thing.ThingTypeUID
|
11
|
+
|
12
|
+
#
|
13
|
+
# {ThingTypeUID} represents a unique identifier for a {ThingType}.
|
14
|
+
#
|
15
|
+
# @!attribute [r] id
|
16
|
+
# @return [String]
|
17
|
+
#
|
18
|
+
# @!attribute [r] channel_group_definitions
|
19
|
+
# (see ThingType#channel_group_definitions)
|
20
|
+
#
|
21
|
+
# @!attribute [r] channel_definitions
|
22
|
+
# (see ThingType#channel_definitions)
|
23
|
+
#
|
24
|
+
# @!attribute [r] supported_bridge_type_uids
|
25
|
+
# (see ThingType#supported_bridge_type_uids)
|
26
|
+
#
|
27
|
+
# @!attribute [r] category
|
28
|
+
# (see ThingType#category)
|
29
|
+
#
|
30
|
+
# @!attribute [r] properties
|
31
|
+
# (see ThingType#properties)
|
32
|
+
#
|
33
|
+
class ThingTypeUID < UID
|
34
|
+
extend Forwardable
|
35
|
+
|
36
|
+
# @!method listed?
|
37
|
+
# @return [true, false]
|
38
|
+
|
39
|
+
delegate %i[channel_group_definitions
|
40
|
+
channel_definitions
|
41
|
+
supported_bridge_type_uids
|
42
|
+
category
|
43
|
+
properties
|
44
|
+
listed?] => :thing_type
|
45
|
+
|
46
|
+
# @!attribute [r] thing_type
|
47
|
+
# @return [ThingType]
|
48
|
+
def thing_type
|
49
|
+
ThingType.registry.get_thing_type(self)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|