openhab-scripting 5.18.1 → 5.19.1
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/dto/item_channel_link.rb +5 -0
- data/lib/openhab/core/items/item.rb +2 -2
- data/lib/openhab/core/items/item_channel_links.rb +8 -4
- data/lib/openhab/core/items/persistence.rb +437 -150
- data/lib/openhab/core/things/channel.rb +120 -0
- data/lib/openhab/core/things/links/provider.rb +2 -1
- data/lib/openhab/dsl/rules/builder.rb +52 -24
- data/lib/openhab/dsl/sitemaps/builder.rb +6 -1
- data/lib/openhab/dsl/version.rb +1 -1
- data/lib/openhab/rspec/mocks/persistence_service.rb +10 -5
- metadata +3 -3
@@ -57,6 +57,126 @@ module OpenHAB
|
|
57
57
|
uid.to_s
|
58
58
|
end
|
59
59
|
|
60
|
+
# @!attribute item_name [r]
|
61
|
+
# Return the name of the item this channel is linked to. If a channel is linked to more than one item,
|
62
|
+
# this method only returns the first item.
|
63
|
+
#
|
64
|
+
# @return [String, nil]
|
65
|
+
def item_name
|
66
|
+
item_names.first
|
67
|
+
end
|
68
|
+
|
69
|
+
# @!attribute item_names [r]
|
70
|
+
# Return the names of all of the items this channel is linked to.
|
71
|
+
#
|
72
|
+
# @return [Array<String>]
|
73
|
+
def item_names
|
74
|
+
Things::Links::Provider.registry.get_linked_item_names(uid)
|
75
|
+
end
|
76
|
+
|
77
|
+
# @!attribute item [r]
|
78
|
+
# Return the item this channel is linked to. If a channel is linked to more than one item,
|
79
|
+
# this method only returns the first item.
|
80
|
+
#
|
81
|
+
# @return [Items::Item, nil]
|
82
|
+
def item
|
83
|
+
items.first
|
84
|
+
end
|
85
|
+
|
86
|
+
# @!attribute items [r]
|
87
|
+
# Return all of the items this channel is linked to.
|
88
|
+
#
|
89
|
+
# @return [Array<Items::Item>]
|
90
|
+
def items
|
91
|
+
Things::Links::Provider.registry.get_linked_items(uid).map { |item| Items::Proxy.new(item) }
|
92
|
+
end
|
93
|
+
|
94
|
+
#
|
95
|
+
# @!attribute links [r]
|
96
|
+
# Returns all of the channel's links (items and link configurations).
|
97
|
+
#
|
98
|
+
# @return [Items::ItemChannelLinks] An array of ItemChannelLink or an empty array
|
99
|
+
#
|
100
|
+
# @example Get the configuration of the first link
|
101
|
+
# things["mqtt:topic:livingroom-light"].channel["power"].links.first.configuration
|
102
|
+
#
|
103
|
+
# @example Remove all managed links
|
104
|
+
# things["mqtt:topic:livingroom-light"].channel["power"].links.clear
|
105
|
+
#
|
106
|
+
# @see link
|
107
|
+
# @see unlink
|
108
|
+
#
|
109
|
+
def links
|
110
|
+
Items::ItemChannelLinks.new(uid, Things::Links::Provider.registry.get_links(uid))
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# @return [ItemChannelLink, nil]
|
115
|
+
#
|
116
|
+
# @overload link
|
117
|
+
# Returns the channel's link. If an channel is linked to more than one item,
|
118
|
+
# this method only returns the first link.
|
119
|
+
#
|
120
|
+
# @return [Things::ItemChannelLink, nil]
|
121
|
+
#
|
122
|
+
# @overload link(item, config = {})
|
123
|
+
#
|
124
|
+
# Links the channel to an item.
|
125
|
+
#
|
126
|
+
# @param [String, Items::Item] item The item to link to.
|
127
|
+
# @param [Hash] config The configuration for the link.
|
128
|
+
#
|
129
|
+
# @return [Things::ItemChannelLink] The created link.
|
130
|
+
#
|
131
|
+
# @example Link a channel to an item
|
132
|
+
# things["mqtt:topic:livingroom-light"].channels["power"].link(LivingRoom_Light_Power)
|
133
|
+
#
|
134
|
+
# @example Specify a link configuration
|
135
|
+
# things["mqtt:topic:outdoor-thermometer"].channels["temperature"].link(
|
136
|
+
# High_Temperature_Alert,
|
137
|
+
# profile: "system:hysteresis",
|
138
|
+
# lower: "29 °C",
|
139
|
+
# upper: "30 °C")
|
140
|
+
#
|
141
|
+
# @see links
|
142
|
+
# @see unlink
|
143
|
+
#
|
144
|
+
def link(item = nil, config = nil)
|
145
|
+
return Things::Links::Provider.registry.get_links(uid).first if item.nil? && config.nil?
|
146
|
+
|
147
|
+
config ||= {}
|
148
|
+
Core::Things::Links::Provider.create_link(item, self, config).tap do |new_link|
|
149
|
+
provider = Core::Things::Links::Provider.current
|
150
|
+
if !(current_link = provider.get(new_link.uid))
|
151
|
+
provider.add(new_link)
|
152
|
+
elsif current_link.configuration != config
|
153
|
+
provider.update(new_link)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
#
|
159
|
+
# Removes a link to an item from managed link providers.
|
160
|
+
#
|
161
|
+
# @param [String, Items::Item] item The item to remove the link to.
|
162
|
+
#
|
163
|
+
# @return [Things::ItemChannelLink, nil] The removed link, if found.
|
164
|
+
# @raise [FrozenError] if the link is not managed by a managed link provider.
|
165
|
+
#
|
166
|
+
# @see link
|
167
|
+
# @see links
|
168
|
+
#
|
169
|
+
def unlink(item)
|
170
|
+
link_to_delete = Things::Links::Provider.create_link(item, self, {})
|
171
|
+
provider = Things::Links::Provider.registry.provider_for(link_to_delete.uid)
|
172
|
+
unless provider.is_a?(ManagedProvider)
|
173
|
+
raise FrozenError,
|
174
|
+
"Cannot remove the link #{link_to_delete.uid} from non-managed provider #{provider.inspect}"
|
175
|
+
end
|
176
|
+
|
177
|
+
provider.remove(link_to_delete.uid)
|
178
|
+
end
|
179
|
+
|
60
180
|
# @deprecated OH3.4 this whole section is not needed in OH4+. Also see Thing#config_eql?
|
61
181
|
if Core.version < Core::V4_0
|
62
182
|
# @!visibility private
|
@@ -28,7 +28,8 @@ module OpenHAB
|
|
28
28
|
config = Configuration.new(config.transform_keys(&:to_s))
|
29
29
|
channel = ChannelUID.new(channel) if channel.is_a?(String)
|
30
30
|
channel = channel.uid if channel.is_a?(Channel)
|
31
|
-
|
31
|
+
item = item.name if item.is_a?(Item)
|
32
|
+
org.openhab.core.thing.link.ItemChannelLink.new(item, channel, config)
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
@@ -992,9 +992,14 @@ module OpenHAB
|
|
992
992
|
#
|
993
993
|
# Creates a channel linked trigger
|
994
994
|
#
|
995
|
+
# @param [Item, String, nil] item The item to create a trigger for. If nil, all items are matched.
|
996
|
+
# @param [Core::Things::Channel, Core::Things::ChannelUID, String, nil] channel
|
997
|
+
# The channel to create a trigger for. If nil, all channels are matched.
|
995
998
|
# @param [Object] attach object to be attached to the trigger
|
996
999
|
# @return [void]
|
997
1000
|
#
|
1001
|
+
# @since openHAB 4.0 Support for filtering with item and channel was added
|
1002
|
+
#
|
998
1003
|
# @example
|
999
1004
|
# rule "channel linked" do
|
1000
1005
|
# channel_linked
|
@@ -1002,9 +1007,10 @@ module OpenHAB
|
|
1002
1007
|
# logger.info("#{event.link.item.name} linked to #{event.link.channel_uid}.")
|
1003
1008
|
# end
|
1004
1009
|
# end
|
1005
|
-
def channel_linked(attach: nil)
|
1006
|
-
|
1007
|
-
|
1010
|
+
def channel_linked(item: nil, channel: nil, attach: nil)
|
1011
|
+
pattern = (item.nil? && channel.nil?) ? "*" : "#{item || "*"}-#{channel || "*"}"
|
1012
|
+
@ruby_triggers << [:channel_linked, pattern]
|
1013
|
+
event("openhab/links/#{pattern}/added", types: "ItemChannelLinkAddedEvent", attach: attach)
|
1008
1014
|
end
|
1009
1015
|
|
1010
1016
|
#
|
@@ -1013,9 +1019,14 @@ module OpenHAB
|
|
1013
1019
|
# Note that the item or the thing it's linked to may no longer exist,
|
1014
1020
|
# so if you try to access those objects they'll be nil.
|
1015
1021
|
#
|
1022
|
+
# @param [Item, String, nil] item The item to create a trigger for. If nil, all items are matched.
|
1023
|
+
# @param [Core::Things::Channel, Core::Things::ChannelUID, String, nil] channel
|
1024
|
+
# The channel to create a trigger for. If nil, all channels are matched.
|
1016
1025
|
# @param [Object] attach object to be attached to the trigger
|
1017
1026
|
# @return [void]
|
1018
1027
|
#
|
1028
|
+
# @since openHAB 4.0 Support for filtering with item and channel was added
|
1029
|
+
#
|
1019
1030
|
# @example
|
1020
1031
|
# rule "channel unlinked" do
|
1021
1032
|
# channel_unlinked
|
@@ -1023,9 +1034,10 @@ module OpenHAB
|
|
1023
1034
|
# logger.info("#{event.link.item_name} unlinked from #{event.link.channel_uid}.")
|
1024
1035
|
# end
|
1025
1036
|
# end
|
1026
|
-
def channel_unlinked(attach: nil)
|
1027
|
-
|
1028
|
-
|
1037
|
+
def channel_unlinked(item: nil, channel: nil, attach: nil)
|
1038
|
+
pattern = (item.nil? && channel.nil?) ? "*" : "#{item || "*"}-#{channel || "*"}"
|
1039
|
+
@ruby_triggers << [:channel_unlinked, pattern]
|
1040
|
+
event("openhab/links/#{pattern}/removed", types: "ItemChannelLinkRemovedEvent", attach: attach)
|
1029
1041
|
end
|
1030
1042
|
|
1031
1043
|
#
|
@@ -1556,9 +1568,12 @@ module OpenHAB
|
|
1556
1568
|
#
|
1557
1569
|
# Creates an item added trigger
|
1558
1570
|
#
|
1571
|
+
# @param [String, nil] pattern The pattern to match items against
|
1559
1572
|
# @param [Object] attach object to be attached to the trigger
|
1560
1573
|
# @return [void]
|
1561
1574
|
#
|
1575
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1576
|
+
#
|
1562
1577
|
# @example
|
1563
1578
|
# rule "item added" do
|
1564
1579
|
# item_added
|
@@ -1566,17 +1581,20 @@ module OpenHAB
|
|
1566
1581
|
# logger.info("#{event.item.name} added.")
|
1567
1582
|
# end
|
1568
1583
|
# end
|
1569
|
-
def item_added(attach: nil)
|
1570
|
-
@ruby_triggers << [:item_added]
|
1571
|
-
event("openhab/items
|
1584
|
+
def item_added(pattern = "*", attach: nil)
|
1585
|
+
@ruby_triggers << [:item_added, pattern]
|
1586
|
+
event("openhab/items/#{pattern}/added", types: "ItemAddedEvent", attach: attach)
|
1572
1587
|
end
|
1573
1588
|
|
1574
1589
|
#
|
1575
1590
|
# Creates an item removed trigger
|
1576
1591
|
#
|
1592
|
+
# @param [String, nil] pattern The pattern to match items against
|
1577
1593
|
# @param [Object] attach object to be attached to the trigger
|
1578
1594
|
# @return [void]
|
1579
1595
|
#
|
1596
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1597
|
+
#
|
1580
1598
|
# @example
|
1581
1599
|
# rule "item removed" do
|
1582
1600
|
# item_removed
|
@@ -1584,14 +1602,15 @@ module OpenHAB
|
|
1584
1602
|
# logger.info("#{event.item.name} removed.")
|
1585
1603
|
# end
|
1586
1604
|
# end
|
1587
|
-
def item_removed(attach: nil)
|
1588
|
-
@ruby_triggers << [:item_removed]
|
1589
|
-
event("openhab/items
|
1605
|
+
def item_removed(pattern = "*", attach: nil)
|
1606
|
+
@ruby_triggers << [:item_removed, pattern]
|
1607
|
+
event("openhab/items/#{pattern}/removed", types: "ItemRemovedEvent", attach: attach)
|
1590
1608
|
end
|
1591
1609
|
|
1592
1610
|
#
|
1593
1611
|
# Creates an item updated trigger
|
1594
1612
|
#
|
1613
|
+
# @param [String, nil] pattern The pattern to match items against
|
1595
1614
|
# @param [Object] attach object to be attached to the trigger
|
1596
1615
|
# @return [void]
|
1597
1616
|
#
|
@@ -1603,17 +1622,20 @@ module OpenHAB
|
|
1603
1622
|
# end
|
1604
1623
|
# end
|
1605
1624
|
#
|
1606
|
-
def item_updated(attach: nil)
|
1607
|
-
@ruby_triggers << [:item_updated]
|
1608
|
-
event("openhab/items
|
1625
|
+
def item_updated(pattern = "*", attach: nil)
|
1626
|
+
@ruby_triggers << [:item_updated, pattern]
|
1627
|
+
event("openhab/items/#{pattern}/updated", types: "ItemUpdatedEvent", attach: attach)
|
1609
1628
|
end
|
1610
1629
|
|
1611
1630
|
#
|
1612
1631
|
# Creates a thing added trigger
|
1613
1632
|
#
|
1633
|
+
# @param [String, nil] pattern The pattern to match things against
|
1614
1634
|
# @param [Object] attach object to be attached to the trigger
|
1615
1635
|
# @return [void]
|
1616
1636
|
#
|
1637
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1638
|
+
#
|
1617
1639
|
# @example
|
1618
1640
|
# rule "thing added" do
|
1619
1641
|
# thing_added
|
@@ -1621,17 +1643,20 @@ module OpenHAB
|
|
1621
1643
|
# logger.info("#{event.thing.uid} added.")
|
1622
1644
|
# end
|
1623
1645
|
# end
|
1624
|
-
def thing_added(attach: nil)
|
1625
|
-
@ruby_triggers << [:thing_added]
|
1626
|
-
event("openhab/things
|
1646
|
+
def thing_added(pattern = "*", attach: nil)
|
1647
|
+
@ruby_triggers << [:thing_added, pattern]
|
1648
|
+
event("openhab/things/#{pattern}/added", types: "ThingAddedEvent", attach: attach)
|
1627
1649
|
end
|
1628
1650
|
|
1629
1651
|
#
|
1630
1652
|
# Creates a thing removed trigger
|
1631
1653
|
#
|
1654
|
+
# @param [String, nil] pattern The pattern to match things against
|
1632
1655
|
# @param [Object] attach object to be attached to the trigger
|
1633
1656
|
# @return [void]
|
1634
1657
|
#
|
1658
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1659
|
+
#
|
1635
1660
|
# @example
|
1636
1661
|
# rule "thing removed" do
|
1637
1662
|
# thing_removed
|
@@ -1639,17 +1664,20 @@ module OpenHAB
|
|
1639
1664
|
# logger.info("#{event.thing.uid} removed.")
|
1640
1665
|
# end
|
1641
1666
|
# end
|
1642
|
-
def thing_removed(attach: nil)
|
1643
|
-
@ruby_triggers << [:thing_removed]
|
1644
|
-
event("openhab/things
|
1667
|
+
def thing_removed(pattern = "*", attach: nil)
|
1668
|
+
@ruby_triggers << [:thing_removed, pattern]
|
1669
|
+
event("openhab/things/#{pattern}/removed", types: "ThingRemovedEvent", attach: attach)
|
1645
1670
|
end
|
1646
1671
|
|
1647
1672
|
#
|
1648
1673
|
# Creates a thing updated trigger
|
1649
1674
|
#
|
1675
|
+
# @param [String, nil] pattern The pattern to match things against
|
1650
1676
|
# @param [Object] attach object to be attached to the trigger
|
1651
1677
|
# @return [void]
|
1652
1678
|
#
|
1679
|
+
# @since openHAB 4.0 Support for pattern filter was added
|
1680
|
+
#
|
1653
1681
|
# @example
|
1654
1682
|
# rule "thing updated" do
|
1655
1683
|
# thing_updated
|
@@ -1658,9 +1686,9 @@ module OpenHAB
|
|
1658
1686
|
# end
|
1659
1687
|
# end
|
1660
1688
|
#
|
1661
|
-
def thing_updated(attach: nil)
|
1662
|
-
@ruby_triggers << [:thing_updated]
|
1663
|
-
event("openhab/things
|
1689
|
+
def thing_updated(pattern = "*", attach: nil)
|
1690
|
+
@ruby_triggers << [:thing_updated, pattern]
|
1691
|
+
event("openhab/things/#{pattern}/updated", types: "ThingUpdatedEvent", attach: attach)
|
1664
1692
|
end
|
1665
1693
|
|
1666
1694
|
#
|
@@ -737,7 +737,12 @@ module OpenHAB
|
|
737
737
|
def build
|
738
738
|
widget = super
|
739
739
|
buttons.each do |button|
|
740
|
-
button_object = SitemapBuilder.factory.
|
740
|
+
button_object = if SitemapBuilder.factory.respond_to?(:create_button_definition)
|
741
|
+
SitemapBuilder.factory.create_button_definition
|
742
|
+
else
|
743
|
+
# @deprecated OH 4.1 in OH 4.2 this clause is not needed
|
744
|
+
SitemapBuilder.factory.create_button
|
745
|
+
end
|
741
746
|
button_object.row = button[0]
|
742
747
|
button_object.column = button[1]
|
743
748
|
button_object.cmd = button[2]
|
data/lib/openhab/dsl/version.rb
CHANGED
@@ -28,7 +28,7 @@ module OpenHAB
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
module
|
31
|
+
module PersistedState
|
32
32
|
def timestamp
|
33
33
|
# PersistenceExtensions uses an anonymous class to wrap the current
|
34
34
|
# state if that happens to be an answer. Except it calls
|
@@ -41,7 +41,7 @@ module OpenHAB
|
|
41
41
|
super
|
42
42
|
end
|
43
43
|
end
|
44
|
-
Core::Items::Persistence::
|
44
|
+
Core::Items::Persistence::PersistedState.prepend(PersistedState)
|
45
45
|
|
46
46
|
attr_reader :id
|
47
47
|
|
@@ -54,14 +54,18 @@ module OpenHAB
|
|
54
54
|
@data = Hash.new { |h, k| h[k] = [] }
|
55
55
|
end
|
56
56
|
|
57
|
-
def store(item, date = nil, state = nil)
|
58
|
-
|
57
|
+
def store(item, date = nil, state = nil, item_alias = nil)
|
58
|
+
if date.is_a?(String) # alias overload
|
59
|
+
item_alias = date
|
60
|
+
date = nil
|
61
|
+
end
|
59
62
|
state ||= item.state
|
60
63
|
date ||= ZonedDateTime.now
|
64
|
+
item_alias ||= item.name
|
61
65
|
|
62
66
|
new_item = HistoricItem.new(date, state, item.name)
|
63
67
|
|
64
|
-
item_history = @data[
|
68
|
+
item_history = @data[item_alias]
|
65
69
|
|
66
70
|
insert_index = item_history.bsearch_index do |i|
|
67
71
|
i.timestamp.compare_to(date).positive?
|
@@ -79,6 +83,7 @@ module OpenHAB
|
|
79
83
|
historic_item = item_history.delete_at(index)
|
80
84
|
@data.delete(historic_item.name) if item_history.empty?
|
81
85
|
end
|
86
|
+
true
|
82
87
|
end
|
83
88
|
|
84
89
|
def query(filter)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openhab-scripting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian O'Connell
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-05-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -485,7 +485,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
485
485
|
- !ruby/object:Gem::Version
|
486
486
|
version: '0'
|
487
487
|
requirements: []
|
488
|
-
rubygems_version: 3.5.
|
488
|
+
rubygems_version: 3.5.10
|
489
489
|
signing_key:
|
490
490
|
specification_version: 4
|
491
491
|
summary: JRuby Helper Libraries for openHAB Scripting
|