Module: OpenHAB::Core::Items::Item
- Included in:
- GenericItem
- Defined in:
- lib/openhab/core/items/item.rb
Overview
The core features of an openHAB item.
Instance Attribute Summary collapse
-
#accepted_command_types ⇒ Array<Class>
readonly
An array of Commands that can be sent as commands to this item.
-
#accepted_data_types ⇒ Array<Class>
readonly
An array of States that can be sent as commands to this item.
-
#all_groups ⇒ Array<GroupItem>
readonly
Returns all groups that this item is a part of, as well as those groups' groups, recursively.
-
#channel ⇒ Things::Channel?
readonly
Return the channel this item is linked to.
-
#channel_uid ⇒ Things::ChannelUID?
readonly
Return the UID of the channel this item is linked to.
-
#channel_uids ⇒ Array<Things::ChannelUID>
readonly
Return the UIDs of all of the channels this item is linked to.
-
#channels ⇒ Array<Things::Channel>
readonly
Return all of the channels this item is linked to.
-
#groups ⇒ Array<GroupItem>
readonly
Returns all groups that this item is part of.
-
#links ⇒ ItemChannelLinks
readonly
Returns all of the item's links (channels and link configurations).
-
#metadata ⇒ Metadata::NamespaceHash
readonly
Access to the item's metadata.
-
#name ⇒ String
readonly
The item's name.
-
#provider ⇒ org.openhab.core.common.registry.Provider?
readonly
Returns the provider for this item.
-
#thing ⇒ Things::Thing?
(also: #linked_thing)
readonly
Return the item's thing if this item is linked with a thing.
-
#things ⇒ Array<Things::Thing>
(also: #all_linked_things)
readonly
Returns all of the item's linked things.
Instance Method Summary collapse
-
#call_item? ⇒ true, false
Check if the item is a call item.
-
#color_item? ⇒ true, false
Check if the item is a color item.
-
#contact_item? ⇒ true, false
Check if the item is a contact item.
-
#date_time_item? ⇒ true, false
Check if the item is a date_time item.
-
#dimmer_item? ⇒ true, false
Check if the item is a dimmer item.
-
#group_item? ⇒ true, false
Check if the item is a group item.
-
#image_item? ⇒ true, false
Check if the item is a image item.
- #inspect ⇒ String
- #link(channel = nil, config = nil) ⇒ Things::ItemChannelLink?
-
#location_item? ⇒ true, false
Check if the item is a location item.
-
#member_of?(*groups) ⇒ true, false
Checks if this item is a member of at least one of the given groups.
-
#number_item? ⇒ true, false
Check if the item is a number item.
-
#player_item? ⇒ true, false
Check if the item is a player item.
-
#rollershutter_item? ⇒ true, false
Check if the item is a rollershutter item.
-
#string_item? ⇒ true, false
Check if the item is a string item.
-
#switch_item? ⇒ true, false
Check if the item is a switch item.
-
#tagged?(*tags) ⇒ true, false
Checks if this item has at least one of the given tags.
- #to_s ⇒ String
-
#unlink(channel) ⇒ Things::ItemChannelLink?
Removes a link to a channel from managed link providers.
Instance Attribute Details
#accepted_command_types ⇒ Array<Class> (readonly)
Returns An array of Commands that can be sent as commands to this item.
|
# File 'lib/openhab/core/items/item.rb', line 43
|
#accepted_data_types ⇒ Array<Class> (readonly)
Returns An array of States that can be sent as commands to this item.
|
# File 'lib/openhab/core/items/item.rb', line 46
|
#all_groups ⇒ Array<GroupItem> (readonly)
Returns all groups that this item is a part of, as well as those groups' groups, recursively
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/openhab/core/items/item.rb', line 92 def all_groups result = [] new_groups = Set.new(groups) until new_groups.empty? result.concat(new_groups.to_a) new_groups.replace(new_groups.flat_map(&:groups)) # remove any groups we already have in the result to avoid loops new_groups.subtract(result) end result end |
#channel ⇒ Things::Channel? (readonly)
Return the channel this item is linked to. If an item is linked to more than one channel, this method only returns the first channel.
295 296 297 |
# File 'lib/openhab/core/items/item.rb', line 295 def channel channel_uids.first&.channel end |
#channel_uid ⇒ Things::ChannelUID? (readonly)
Return the UID of the channel this item is linked to. If an item is linked to more than one channel, this method only returns the first channel.
278 279 280 |
# File 'lib/openhab/core/items/item.rb', line 278 def channel_uid channel_uids.first end |
#channel_uids ⇒ Array<Things::ChannelUID> (readonly)
Return the UIDs of all of the channels this item is linked to.
286 287 288 |
# File 'lib/openhab/core/items/item.rb', line 286 def channel_uids Things::Links::Provider.registry.get_bound_channels(name) end |
#channels ⇒ Array<Things::Channel> (readonly)
Return all of the channels this item is linked to.
303 304 305 |
# File 'lib/openhab/core/items/item.rb', line 303 def channels channel_uids.map(&:channel) end |
#groups ⇒ Array<GroupItem> (readonly)
Returns all groups that this item is part of
65 66 67 |
# File 'lib/openhab/core/items/item.rb', line 65 def groups group_names.map { |name| EntityLookup.lookup_item(name) }.compact end |
#links ⇒ ItemChannelLinks (readonly)
Returns all of the item's links (channels and link configurations).
322 323 324 |
# File 'lib/openhab/core/items/item.rb', line 322 def links ItemChannelLinks.new(name, Things::Links::Provider.registry.get_links(name)) end |
#metadata ⇒ Metadata::NamespaceHash (readonly)
Access to the item's metadata.
Both the return value of this method as well as the individual namespaces can be treated as Hashes.
Examples assume the following items:
Switch Item1 { namespace1="value" [ config1="foo", config2="bar" ] }
String StringItem1
223 224 225 |
# File 'lib/openhab/core/items/item.rb', line 223 def metadata @metadata ||= Metadata::NamespaceHash.new(name) end |
#name ⇒ String (readonly)
The item's name.
|
# File 'lib/openhab/core/items/item.rb', line 39
|
#provider ⇒ org.openhab.core.common.registry.Provider? (readonly)
Returns the provider for this item.
409 410 411 |
# File 'lib/openhab/core/items/item.rb', line 409 def provider Provider.registry.provider_for(self) end |
#thing ⇒ Things::Thing? (readonly) Also known as: linked_thing
Return the item's thing if this item is linked with a thing. If an item is linked to more than one channel, this method only returns the first thing.
259 260 261 |
# File 'lib/openhab/core/items/item.rb', line 259 def thing all_linked_things.first end |
#things ⇒ Array<Things::Thing> (readonly) Also known as: all_linked_things
Returns all of the item's linked things.
268 269 270 |
# File 'lib/openhab/core/items/item.rb', line 268 def things Things::Links::Provider.registry.get_bound_things(name).map { |thing| Things::Proxy.new(thing) } end |
Instance Method Details
#call_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a call item.
Check if the item is a call item.
430 |
# File 'lib/openhab/core/items/item.rb', line 430 def_type_predicate(:call) |
#color_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a color item.
Check if the item is a color item.
431 |
# File 'lib/openhab/core/items/item.rb', line 431 def_type_predicate(:color) |
#contact_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a contact item.
Check if the item is a contact item.
432 |
# File 'lib/openhab/core/items/item.rb', line 432 def_type_predicate(:contact) |
#date_time_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a date_time item.
Check if the item is a date_time item.
433 |
# File 'lib/openhab/core/items/item.rb', line 433 def_type_predicate(:date_time) |
#dimmer_item? ⇒ true, false
Color items are also considered dimmer items.
If the item is a group item, it will also return true if the base item is a dimmer item.
Check if the item is a dimmer item.
435 |
# File 'lib/openhab/core/items/item.rb', line 435 def_type_predicate(:dimmer) |
#group_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a group item.
Check if the item is a group item.
436 |
# File 'lib/openhab/core/items/item.rb', line 436 def_type_predicate(:group) |
#image_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a image item.
Check if the item is a image item.
437 |
# File 'lib/openhab/core/items/item.rb', line 437 def_type_predicate(:image) |
#inspect ⇒ String
397 398 399 400 401 402 403 404 405 |
# File 'lib/openhab/core/items/item.rb', line 397 def inspect s = "#<OpenHAB::Core::Items::#{type}Item#{type_details} #{name} #{label.inspect} state=#{raw_state.inspect}" s += " category=#{category.inspect}" if category s += " tags=#{tags.to_a.inspect}" unless tags.empty? s += " groups=#{group_names}" unless group_names.empty? meta = metadata.to_h s += " metadata=#{meta.inspect}" unless meta.empty? "#{s}>" end |
#link ⇒ Things::ItemChannelLink? #link(channel, config = {}) ⇒ Things::ItemChannelLink
360 361 362 363 364 365 366 367 368 369 370 371 372 |
# File 'lib/openhab/core/items/item.rb', line 360 def link(channel = nil, config = nil) return Things::Links::Provider.registry.get_links(name).first if channel.nil? && config.nil? config ||= {} Core::Things::Links::Provider.create_link(self, channel, config).tap do |new_link| provider = Core::Things::Links::Provider.current if !(current_link = provider.get(new_link.uid)) provider.add(new_link) elsif current_link.configuration != config provider.update(new_link) end end end |
#location_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a location item.
Check if the item is a location item.
438 |
# File 'lib/openhab/core/items/item.rb', line 438 def_type_predicate(:location) |
#member_of?(*groups) ⇒ true, false
Checks if this item is a member of at least one of the given groups.
78 79 80 81 82 83 |
# File 'lib/openhab/core/items/item.rb', line 78 def member_of?(*groups) groups.map! do |group| group.is_a?(GroupItem) ? group.name : group end !(group_names & groups).empty? end |
#number_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a number item.
Check if the item is a number item.
439 |
# File 'lib/openhab/core/items/item.rb', line 439 def_type_predicate(:number) |
#player_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a player item.
Check if the item is a player item.
440 |
# File 'lib/openhab/core/items/item.rb', line 440 def_type_predicate(:player) |
#rollershutter_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a rollershutter item.
Check if the item is a rollershutter item.
441 |
# File 'lib/openhab/core/items/item.rb', line 441 def_type_predicate(:rollershutter) |
#string_item? ⇒ true, false
If the item is a group item, it will also return true if the base item is a string item.
Check if the item is a string item.
442 |
# File 'lib/openhab/core/items/item.rb', line 442 def_type_predicate(:string) |
#switch_item? ⇒ true, false
Color and dimmer items are also considered switch items.
If the item is a group item, it will also return true if the base item is a switch item.
Check if the item is a switch item.
444 |
# File 'lib/openhab/core/items/item.rb', line 444 def_type_predicate(:switch) |
#tagged?(*tags) ⇒ true, false
Checks if this item has at least one of the given tags.
240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/openhab/core/items/item.rb', line 240 def tagged?(*tags) tags.map! do |tag| # @deprecated OH3.4 if tag.is_a?(Module) tag.simple_name elsif defined?(Semantics::SemanticTag) && tag.is_a?(Semantics::SemanticTag) tag.name else tag end end !(self.tags.to_a & tags).empty? end |
#to_s ⇒ String
54 55 56 |
# File 'lib/openhab/core/items/item.rb', line 54 def to_s label || name end |
#unlink(channel) ⇒ Things::ItemChannelLink?
Removes a link to a channel from managed link providers.
385 386 387 388 389 390 391 392 393 394 |
# File 'lib/openhab/core/items/item.rb', line 385 def unlink(channel) link_to_delete = Things::Links::Provider.create_link(self, channel, {}) provider = Things::Links::Provider.registry.provider_for(link_to_delete.uid) unless provider.is_a?(ManagedProvider) raise FrozenError, "Cannot remove the link #{link_to_delete.uid} from non-managed provider #{provider.inspect}" end provider.remove(link_to_delete.uid) end |