#JRuby openHAB Scripting Change Log

#v5.18.1 (2024-04-06)

#Bug Fixes

  • Terse Rule: fix inferred id not generating unique suffix by @jimtng in #264

Full Changelog: v5.18.0...v5.18.1

#v5.18.0 (2024-03-05)

#Features

  • Infer id for rules created from UI by @jimtng in #250
  • Add a descriptive label to changed duration trigger by @jimtng in #254
  • TimeSeries#add: accept a Ruby String or a Numeric value by @jimtng in #259

#Bug Fixes

  • Use lowercase in watch trigger label to be consistent with core by @jimtng in #255
  • Update logger prefix if uid is set inside rule block by @jimtng in #252
  • Rules Registry#remove should return nil on non-existent ruleuid by @jimtng in #251
  • Tweak Rule ID inference to work with F7 router by @jimtng in #260
  • Don't create rule with an explicit rule uid when it already exists by @jimtng in #253

Full Changelog: v5.17.0...v5.18.0

#v5.17.0 (2024-01-30)

#Features

#Bug Fixes

  • Refactor item lookup to speed up item builder by @jimtng in #240
  • Fix dummy items when using sitemap proxy builder by @jimtng in #245

Full Changelog: v5.16.0...v5.17.0

#v5.16.0 (2024-01-10)

#Features

  • Support selecting multiple types of location and equipment by @jimtng in #230
  • Add support for icons in sitemap builder switch mappings by @jimtng in #232

Full Changelog: v5.15.1...v5.16.0

#v5.15.1 (2024-01-06)

#Bug Fixes

Full Changelog: v5.15.0...v5.15.1

#v5.15.0 (2024-01-06)

#Features

  • Add Enumerable#toggle to complement #on and #off by @jimtng in #226
  • allow not using instance_exec with sitemap builder by @ccutrer in 227

Full Changelog: v5.14.0...v5.15.0

#v5.14.0 (2024-01-05)

#Features

  • Add more helper methods to access linked channels by @ccutrer in #215
  • testing: add helper to initialize missing thing types by @ccutrer in #218

#Bug Fixes

Full Changelog: v5.13.0...v5.14.0

#v5.13.0 (2024-01-04)

#Features

  • Add tags and description to #script and #scene by @jimtng in #214
  • Support staticIcon and dynamic icon in sitemap by @jimtng in #212
  • Support Buttongrid in Sitemap Builder by @jimtng in #211

#Bug Fixes

  • Fix condition handling for colors and visibility in sitemap builder by @jimtng in #210

Full Changelog: v5.12.1...v5.13.0

#v5.12.1 (2023-12-29)

#Bug Fixes

Full Changelog: v5.12.0...v5.12.1

#v5.12.0 (2023-12-19)

#Features

#Bug Fixes

  • Support AND'd visibility and color rules in sitemap builder by @ccutrer in #200
  • Avoid extra ensure state check from item helper commands by @ccutrer in #190

Full Changelog: v5.11.0...v5.12.0

#v5.11.0 (2023-10-29)

Full Changelog

#Features

  • Add ensure_states! and bang version of command shortcuts #184 (jimtng)

#Bug Fixes

  • Allow configuring predefined channels in Thing builder #189 (jimtng)
  • Infer accepted_item_type in ChannelBuilder #187 (jimtng)

#v5.10.0 (2023-10-25)

Full Changelog

#Features

  • Add Item.link, Item.unlink, and Item.links.clear to add/remove a link to a channel #180 (jimtng)
  • Add event.group for triggeringGroup #160 (jimtng)

#Bug Fixes

  • Fix ProfileCallback#handle_command when an item is linked to a different channel type #182 (jimtng)
  • Warn when creating a tag that already exists #181 (jimtng)

#v5.9.0 (2023-10-09)

Full Changelog

#Features

  • Support all attributes of channel builder #178 (jimtng)
  • Refactor ChannelsArray lookup by channel id and uid #177 (jimtng)
  • Inspect the full details of Channel attributes #176 (jimtng)

#v5.8.0 (2023-10-07)

Full Changelog

#Features

  • Add Thing#provider #167 (ccutrer)
  • Support removing custom semantic tags #162 (jimtng)
  • Support expire configuration options in Item Builder #158 (jimtng)
  • Allow updating things/items/sitemaps by recreating them #157 (jimtng)
  • Allow symbolic channel name in ItemBuilder #156 (jimtng)
  • Add UI script's uid to logger prefix #152 (jimtng)

#Bug Fixes

  • Metadata::Hash#provider shouldn't raise an exception #161
  • Fix latitude/longitude/altitude getters on Location objects #174 (uqs)
  • Semantics.add should raise an error if parent is invalid #168 (jimtng)
  • Verify item builder's dimension #165 (jimtng)
  • Fix a non-array passed to item's groups argument inside group block #164 (jimtng)
  • Fix entity lookup inside item builder's item block #163 (jimtng)

#v5.7.1 (2023-09-18)

Full Changelog

#Features

  • Stringify keys in http headers #150 (jimtng)
  • Use block's source location as timer's log identifier #149 (jimtng)

#v5.7.0 (2023-09-18)

Full Changelog

#Features

#Bug Fixes

  • Fix QuantityType arithmetic of mixed units #147 (jimtng)

#v5.6.1 (2023-09-12)

Full Changelog

#Features

#Bug Fixes

  • Fix defaults with cron fields dow and dom #142 (jimtng)
  • Add unit conversion operator (|) to java.math.BigDecimal #140 (ccutrer)

#v5.6.0 (2023-09-08)

Full Changelog

#Features

  • Add thing parameter for ItemBuilder #137 (jimtng)
  • Support providing and accessing context in rules #133 (jimtng)
  • Add event attributes for TimerEvent #131 (jimtng)
  • Use the default cron handler in openHAB 4 #128 (jimtng)
  • Add group function #to_s and #inspect #127 (jimtng)
  • add item type predicates #125 (ccutrer)
  • Add SemanticTag#to_s #120 (jimtng)
  • Don't tag cron, every, and at triggers with "Schedule" #111 (jimtng)

#Bug Fixes

  • Fix item builder's group COUNT function #126 (jimtng)
  • Fix Semantics::Tag#to_s #121 (jimtng)
  • Fix block passing in Hash#delete_if #116 (jimtng)
  • Add timeout during karaf boot process waits #95 (ccutrer)

#v5.5.0 (2023-08-08)

Full Changelog

#Features

  • Support all_states_since and all_states_between persistence methods #105 (jimtng)

#Bug Fixes

  • backtrace_locations returns nil #102
  • Fix changed duration without from or to #107 (jimtng)
  • Fix loading a console session of your own openHAB instance #94 (ccutrer)

#v5.4.2 (2023-07-23)

Full Changelog

#Bug Fixes

  • Rework semantics for openHAB 4.0.0.M5 #88 (ccutrer)

#v5.4.0 (2023-06-14)

Full Changelog

#Features

  • Access scenes by uid #77
  • Tag cron, every, and at triggers with "Schedule" #80 (ccutrer)
  • Add scene helper method to easily create rules tagged as Scene #78 (ccutrer)

#Bug Fixes

  • Can't tag a rule with a single tag #76
  • Can't create a scene with no triggers #75

#v5.3.0 (2023-05-31)

Full Changelog

#Features

  • Add unit argument to items builder #73 (ccutrer)

#Bug Fixes

  • DSL methods override user's method on the top level #4
  • Workaround unusual inheritance chain of main #74 (ccutrer)

#v5.2.0 (2023-05-02)

Full Changelog

#Features

  • Support regexes for from/to/command filters on triggers #68 (ccutrer)

#Bug Fixes

  • Fix duration trigger conditions for group member triggers #69 (ccutrer)
  • Audio.play_sound called the wrong Java method #67 (jimtng)

#v5.1.1 (2023-04-23)

Full Changelog

#Bug Fixes

  • Avoid having to re-lookup Semantics::Property on every reference in 3.4.x #66 (ccutrer)
  • Fix version detection against 4.0.0.M* #64 (ccutrer)

#v5.1.0 (2023-04-19)

Full Changelog

To use version 5.1 of the library, be sure to update the gems setting in the JRubyScripting addon to >~ 5.1. The default setting is ~> 5.0.0 which will not upgrade the version to 5.1.

#Features

  • Semantic Tag improvements: support tag attributes, tag lookup, and adding tags #55 (jimtng)

#Bug Fixes

  • Fix formatted_state when state is nil #50 (jimtng)

#v5.0.1 (2023-04-05)

Full Changelog

#Features

  • Add rules.scenes and rules.scripts shortcuts for convenience #33 (jimtng)

#Bug Fixes

  • ItemStateUpdatedEvent added in openHAB 4 caused updated triggers to fail #49 (jimtng)
  • Audio.play_sound with volume calls the wrong java method #43 (jimtng)
  • Handle Rules.manager being nil #40 (ccutrer)

#5.0.0

5.0 is the first release as the officially supported gem of the openHAB organization. Many thanks to @boc-tothefuture, @ccutrer, @jimtng, and @pacive for their work on the previous versions. This major release contains significant restructuring by @ccutrer, with additional contributions by @jimtng. Here is a non-exhaustive list of significant departures from the original gem:

  • Logging has been reworked. There's generally no need to include OpenHAB::Log in your classes. OpenHAB::Log.logger method now accepts a String to explicitly find whichever logger you would like, and OpenHAB::Logger#level= can be used to dynamically change the log level. Issues around the logger name while a rule is executing have also been resolved: the top-level logger will be named after the file, and the logger within a rule or execution block will be named after the rule. Loggers within class or instance-of-a-class context will be named after the class. These loggers will not have their name changed simply because their methods happened to be called while a rule is executing. Logging also defaults to #to_s now, instead of #inspect.
  • The documentation philosophy has changed. Instead of relying on a large set of markdown files to give both commentary and to document the details of objects, YARD is now the primary generator of the documentation site. Details of individual objects and methods are now documented inline with the code, reducing duplication, aiding in keeping them up-to-date and accurate, and being more rigorous in ensuring the documentation has every available method listed, and in a consistent manner. Some commentary and high level examples (such as this file) are still maintained as dedicated markdown files, but included in the YARD docs, instead of being a separate site that then links to the YARD docs.
  • The testing philosophy has also changed. The rspec-openhab-scripting gem, previously written as an independent project by @ccutrer, has now been merged into this gem. There is a tight interdependence between the two, and especially during the large refactoring it's much easier to have them in the same repository. This means that that gem is now the endorsed method to write tests for end-user rules, as well as the preferred way to write tests for this gem itself, when possible.
  • Major re-organization of class structures. OpenHAB::Core now contains any classes that are mostly wrappers or extensions of org.openhab.core Java classes, while OpenHAB::DSL contains novel Ruby-only classes that implement a Ruby-first manner of creating rules, items, and things.
  • As part of the re-organization from above, the definition of a "DSL method" that is publicly exposed and available for use has been greatly refined. Top-level DSL methods are only available on main (the top-level Object instance when you're writing code in a rules file and not in any other classes), and inside of other select additional DSL constructs. If you've written your own classes that need access to DSL methods, you either need to explicitly call them on OpenHAB::DSL, or mix that module into your class yourself. Additional internal and Java constants and methods should no longer be leaking out of the gem's public API.

#Breaking Changes

  • Dropping support for openHAB < 3.4.
  • The main require is now require "openhab/dsl" instead of just require "openhab". The reason being to avoid conflicts if a gem gets written to access openHAB via REST API. It's probably preferred that you configure automatic requires for this file anyway.
  • GenericItem and descendants can no longer be treated as the item's state. While convenient at times, it introduces many ambiguities on if the intention is to interact with the item or its state, and contortionist code attempting to support both use cases.
  • Enum types no longer have implicit conversions for comparisons. This means you can no longer do DimmerItem.state == ON. Predicate methods retain the implicit conversion semantics, so you can do DimmerItem.on?. ensure.on, etc. also still retain their internal implicit comparisons, so you can also still do DimmerItem.ensure.on and it will not send ON if the item is anything but 0. OpenHAB::Core::Events::ItemStateEvent and OpenHAB::Core::Events::ItemStateChangedEvent both now have a full set of predicate methods to ease use from within rule execution blocks.
  • Semi-related to the above two points, the #truthy? method has been removed from any items the previously implemented it. Instead, be more explicit on what you mean - for example Item.on?. If you would like to use a similar structure with StringItems, just include the ActiveSupport gem in your rules to get #blank? and #present? methods, and then you can use Item.state.present?.
  • Semi-related to the above, the only_if and not_if guards now only take blocks. This just means where you previously had only_if Item you now write only_if { Item.on? }.
  • Related to the above, changed for: guards no longer take items. This just means if you previously had changed Item, for: OtherItem you now write changed Item, for: -> { OtherItem.state }.
  • QuantityType is no longer implicitly convertible and comparable against Strings. Use the | operator for easy construction of QuantityTypes: 10 | "°F".
  • HSBType is no longer convertible and comparable against Strings, Hashes, and Arrays. Just construct an HSBType. Sending a HTML hex color as a string as a command is still supported.
  • PointType is no longer convertible and comparable against Strings and Hashes. Just construct a PointType. Send strings as a command is still supported.
  • QuantityType can no longer be compared against Numeric or DecimalType outside a unit block. Either compare it against another QuantityType, or convert it with to_f first, perform the comparison inside a unit block, or permanently set your preferred units.
  • The top-level groups method providing access to only GroupItems has been removed. Use items.grep(GroupItem) if you would like to filter to only groups.
  • GenericItem#id no longer exists; just use Item#to_s which does what #id used to do.
  • states?(*items) helper is gone. Just use items.all?(:state?), or in the rare cased you used states?(*items, things: true), use items.all? { |i| i.state? && i.things.all?(&:online?) }.
  • GroupItem is no longer Enumerable, and you must use GroupItem#members.
  • GroupItem#all_members no longer has a filter parameter; use grep if you want just GroupItems.
  • create_timer no longer exists as an alias for OpenHAB::DSL.after.
  • Item#meta is no longer a supported alias for Item#metadata.
  • Triggers (such as changed, updated, and received_command that previously took a splat or an Array of Items now only take a splat. This just means instead of changed [Item1, Item2] you write changed Item1, Item2, or if you have an actual array you write changed(*item_array). This greatly simplifies the internal code that has to distinguish between GroupItem::Members and other types of collections of items.
  • Date and time objects have been reworked:
    • TimeOfDay has been replaced with LocalTime
    • Date/time objects are no longer comparable to strings. Please use the correct type.
    • Comparisons among the varying date/time classes all work.
    • See also Working With Time
    • Persistence methods no longer accept a Duration. Please use Duration#ago instead.
  • Thing actions are no longer available as a top level method. You must use the Thing object.
  • Thing actions whose scope does not match the thing's binding are no longer directly available on Thing; you must explicitly access them via Thing#actions.
  • Persistence predicates are no longer aliased without the ? (i.e. you must call #changed_since?, not #changed_since).
  • Timers with IDs are no longer uniqueified by where they were created. Make sure you're using a completely unique timer ID if you're using them in multiple locations. For example, after(1.minute, id: [:this_logical_usage, event.item]). This makes it possible to schedule the same logically re-entrant timer from multiple rules.
  • OpenHAB.conf_root was renamed to OpenHAB::Core.config_folder.
  • Metadata now defaults to using transient backing provider. This means that if you add metadata to an item from Ruby, it will disappear when the script is unloaded. See OpenHAB::DSL.provider for how to revert to the old behavior within a single block, or for your entire script.
  • Metadata will now be serialized before being set. This fixes a complicated issue where types would changed unexpectedly, or even worse, reference Ruby classes that are not even available in the current JRuby instance. See https://github.com/openhab/openhab-core/issues/3169 for more details.
  • #on_start trigger was renamed to #on_load and its 'run_on_start' parameter removed. #on_start is now a trigger for core.SystemStartlevelTrigger.
  • say, play_sound, and play_stream are no longer available at the top level. You must access them from their Action class: Voice.say, Audio.play_sound, and Audio.play_stream

#Features

#Bug Fixes

  • Fix thing entity lookup
  • Fix ensure to work with QuantityType
  • Fix scoping of terse rule blocks
  • persistence block now restores the previous setting
  • unit block applies to sending commands to NumberItems.
  • All thread locals are carried over to rule executions and timers. This includes unit, persistence, and ensure_states.
  • Fix thread safety issue that could cause timers to not be canceled when the script unloads.
  • Timed command thread safety issues resolved
  • Timed command now resets the on_expire setting when called again
  • Timed command still sends the command even the previous timed command is still pending
  • Timed command works with resetting to NULL/UNDEF
  • Timed command works on items with autoupdate=false
  • OpenHAB::Core::Items::Metadata hashes are indifferent (converts symbol keys to string keys).
  • Fix ensure to work with conversions-from-string that are handled by openhab-core.
  • Avoid stack overflow issues when all of ActiveSupport is required.
  • Don't swallow exceptions inside of rule blocks - just let them propagate up.
  • Fix changed duration when only the from state is given
  • Updating an item with nil sets it to NULL, not an empty string (which will be ignored by other item types).

#4.45.2 (2022-10-02)

#Bug Fixes

  • items: ensure enumerable methods from items use ItemProxy (a149f96)
  • logging: use the class name for class loggers (e87e03b)

#4.45.1 (2022-09-21)

#Bug Fixes

  • math: configure rounding params when doing BigDecimal division (e1cee18), closes #640

#Continuous Integration

  • update openhab source url to github (792015e)

#4.45.0 (2022-09-18)

#Features

  • time: support arithmetic and comparison operators (e3466db)
  • time_of_day: support a range of LocalTime for TimeOfDay#between? (fd12e3d)

#Documentation

  • clean up ordering in Misc section (a6a0beb)

#4.44.2 (2022-09-06)

#Bug Fixes

  • cron: fix clean up of cron handler (4190255)
  • items: ensure items coming from group members are wrapped in ItemProxy (19bd416)

#4.44.1 (2022-08-20)

#Bug Fixes

  • ruby: fix error with jruby 9.3.7 (82dced4)

#4.44.0 (2022-07-31)

#Features

  • rule: add tags to rules (d5c29de)
  • rules: improve rule name inference (a0b30ec)

#Code Refactoring

  • standardize on java format for java class references (ae519bf)

#Build System

  • change the default openhab version to 3.3.0 (1fb42d0)

#4.43.3 (2022-07-25)

#Bug Fixes

  • actions: don't use a singleton method for monkeypatching ScriptThingActions (e330a0f), closes #596

#4.43.2 (2022-07-25)

#Bug Fixes

#Build System

  • rubocop: explicitly allow openhab globals (2baf772)

#4.43.1 (2022-07-18)

#Bug Fixes

  • ensure: with QuantityType and plain number (83036b8)
  • terse: improve automatic naming of terse rules (9683845)
  • ui: attach rule source to rule (940780f)
  • ui: improve rule UIDs (f41f5c5)

#4.43.0 (2022-07-11)

#Features

  • add play_stream action method (f3ab3ae)
  • make the code base compatible with JRuby 9.4 (Ruby 3.x) (77cae44)

#Bug Fixes

  • ruby: fix another minor ruby warnings (77899c9)

#Documentation

  • generic_trigger: config kwargs is not a hash in Ruby 3.x (528994a)

#Tests

  • persistence: change top-level class variable to instance var (95babba)

#Continuous Integration

  • update test matrix to openhab 3.3 (c9e8f1c)
  • atomic_rule_write: create temp file in userdata/tmp (1cfec6b)

#4.42.2 (2022-06-29)

#Bug Fixes

  • items: fix ComparableItem#nil_comparison (0908ef6)
  • ruby: fix some minor ruby warnings (040e836)

#4.42.1 (2022-06-20)

#Bug Fixes

  • persistence: between called the wrong method (f6b4b7a)

#Build System

  • upgrade test to 3.3.0.M7 (128e132)

#4.42.0 (2022-06-18)

#Features

  • add support for persistence 'between' methods (fc46fc4)

#Documentation

  • add an example for DateTimeTrigger (279b81a)

#Build System

  • add --no-heap-dump to dev:dump-create (228710c)
  • close file handle in truncate_log (359ae07)
  • include more commit types in the changelog (2002afb)
  • update build to use openhab 3.3.0M5 (46b9f32)
  • use a simpler setup-ruby action (8187e77)
  • use index in log dump file in github action (01e683a)
  • ci: optimize CI builds by splitting features across number of runners (ed85b4d)

#Tests

  • ensure_states: change logging from trace to info (7686d32)
  • rule_language: [@log_level_changed was missing (fe61b04)

#4.41.0 (2022-04-28)

#Bug Fixes

  • comparing non null vs null comparable-item objects raised an exception (2844d7a)

#Features

  • logging: change logger level predicate method names (a7305d3)
  • semantics: rename sublocations to locations (f2dfd29)

#4.40.0 (2022-04-24)

#Features

  • grep: support grepping items from enumerable (ef29edd)
  • item_equality: add the ability to compare item objects (0f4608b)

#4.39.1 (2022-04-24)

#Bug Fixes

  • semantics: groupitem.points failed to return its siblings (afbec5e)
  • semantics: revert the members search for enumerable#points (4e62458)

#4.39.0 (2022-04-20)

#Bug Fixes

  • ensure: ensure didn't work on Enumerable (5cfe07b)

#Features

  • enumerable: add Enumerable#members (e093bed)
  • semantics: incorporate flat_map into Enumerable#points (a74194b)

#4.38.0 (2022-04-15)

#Features

  • semantics: add semantic helper methods to items (a16f976), closes #370

#4.37.1 (2022-04-09)

#Bug Fixes

  • numeric_item: make NumericItem#| raise NoMethodError when state is nil (ac289fc)

#4.37.0 (2022-04-08)

#Bug Fixes

  • zoneddatetime: make ZonedDateTime available on OpenHAB 3.2 (c22be74)

#Features

  • conf: rename __conf__ to OpenHAB.conf_root (ea0a657)
  • timers[]: add #reschedule, rename #cancel_all to #cancel (38da4a0)

#4.36.0 (2022-04-03)

#Features

  • add support for timer and persistence to accept zoneddatetime and rubytime (640cf0e)

#4.35.0 (2022-03-29)

#Features

  • state: add state? helper method (e8bb65e)

#4.34.1 (2022-03-16)

#4.34.0 (2022-03-15)

#Features

  • cron: support fields for cron and monthday object for every (0e53986)

#4.33.1 (2022-03-10)

#4.33.0 (2022-03-09)

#Bug Fixes

  • build: specify the local theme for jekyll (d9a3be3)
  • ensure: implement ensure.update (c519b8b)
  • timer: remove timer class from top-level (4c22e5a)

#Features

  • timer: add create_timer as an alias for after (3753304)

#4.32.7 (2022-03-07)

#Bug Fixes

  • dsl: dsl methods leaked into other objects (3d17030)

#4.32.6 (2022-03-04)

#Bug Fixes

  • timed_command: timed command cancelled by its own command (075e627)

#4.32.5 (2022-02-28)

#Bug Fixes

  • logger: exclude in log prefix (ddb7104)
  • rule: rule method returns the created rule (afe7f69)

#4.32.4 (2022-02-27)

#4.32.3 (2022-02-24)

#Bug Fixes

  • script_thing_actions: adapt to changes in openhab 3.3 (41cbb55)

#4.32.2 (2022-02-22)

#Bug Fixes

  • logger: move logger class into core module to prevent unintentional modification (1ab681f)

#4.32.1 (2022-02-21)

#Bug Fixes

  • color_item: move to_h and to_a from color_item into hsb_type (b00bbe7)
  • hsbtype: comparison against another hsbtype only checks for brightness (2cebe9e)

#4.32.0 (2022-01-23)

#Features

  • command: received_command supports ranges and procs (ab3d974)

#4.31.0 (2022-01-22)

#Features

  • triggers: support quantity string range in trigger conditions (531ed23)

#4.30.5 (2022-01-21)

#Bug Fixes

  • string_type: direct regex comparison and inspect (1703aa2)

#4.30.4 (2022-01-21)

#4.30.3 (2022-01-20)

#Bug Fixes

  • persistence: npe on dimensioned item without an explicit unit (251f625)

#4.30.2 (2022-01-20)

#Bug Fixes

  • logger: incorrect logger prefix on non standard gem_home path (a3d9677)

#4.30.1 (2022-01-19)

#Bug Fixes

  • types: fix already initialized warning on openhab 3.2.0 (188f2b0)

#4.30.0 (2022-01-18)

#Features

  • conditions: support procs/lambdas for trigger conditions (0f0bd16)

#4.29.0 (2022-01-17)

#Features

  • rules: support ranges as rule conditions (8cd6901)

#4.28.2 (2022-01-17)

#4.28.1 (2022-01-15)

#Bug Fixes

  • exception_handling: fix java exception handling (3539136)
  • java_class: fix java to ruby class (7f4b0bc)

#4.28.0 (2022-01-14)

#Features

  • timer: add timers[id].cancel_all shorthand for timers[id].each(&:cancel) (d820471)

#4.27.1 (2022-01-10)

#Bug Fixes

  • ensure: faulty ensure on boolean commands (623a08e)
  • item_groups: fix Item#groups returning nil sometimes (20ae855)

#4.27.0 (2022-01-06)

#Features

  • item: support reloading of references items (64059cc)

#4.26.4 (2022-01-06)

#Bug Fixes

  • monthday: fix monthday error when rolling over to another year (2bf6aa9)

#4.26.3 (2022-01-02)

#Bug Fixes

  • test: instead of sleep, wait for for persistence feature to be installed (a926d73)

#4.26.2 (2021-12-31)

#Bug Fixes

  • open_closed_type: state not inverted with ! operator (498b515)

#4.26.1 (2021-12-29)

#Bug Fixes

  • docs: fix link to Yard docs (7ca4bce)

#4.26.0 (2021-12-26)

#Bug Fixes

  • guard: execute guard in main context (b1f1fe0)

#Features

  • watch: add trigger for file/directory watching (ed6352a)

#4.25.0 (2021-12-21)

#Features

  • month_day: support keyword arguments to create monthday (50f0f05)

#4.24.1 (2021-12-14)

#Bug Fixes

  • timer_manager: timers[nonexistent_id] should return nil (550d9e0)

#4.24.0 (2021-12-05)

#Features

  • location: support hashes for locations (ae8ff6a)

#4.23.0 (2021-12-05)

#Bug Fixes

  • monthday: fix equality comparison against string and allow parsing single digit month-days (a9d8b47)

#Features

  • hsb: add from/to hash support (91876d0)

#4.22.2 (2021-12-04)

#Bug Fixes

  • timed_command: fix race condition for timed commands (6f3edd3)

#4.22.1 (2021-12-04)

#Bug Fixes

  • hsb: fix type in from_hsb (9ebe0f2)

#4.22.0 (2021-12-03)

#Features

  • datetime: support ZonedDateTime objects as commands for DateTime items (72287c1)

#4.21.0 (2021-12-02)

#Bug Fixes

  • logging: log rule name or file name with log entries (a003904)

#Features

  • attach: support attachments on cron triggers (70ef1dc)

#4.20.0 (2021-12-01)

#Bug Fixes

  • rule: rule return value caused namespace errors (22fea0b)

#Features

  • timers: support passing custom objects as timer duration (0fb0bcf)

#4.19.1 (2021-12-01)

#Bug Fixes

  • includes: remove redundant includes (23376c4)

#4.19.0 (2021-12-01)

#Bug Fixes

  • comparisons: === should perform an exact type match for case statements (3311e26)

#Features

  • channel_trigger: allow setting channel triggers directly from thing/channel objects (9d99ee6)
  • uid: make working with UIDs easier (string comparisons) (5a89ac8)

#4.18.0 (2021-11-30)

#Features

  • switch: accept boolean values (605949c)

#4.17.0 (2021-11-30)

#Bug Fixes

  • trigger: create multiple delayed triggers for array from/to states (70d3b4a)

#Features

  • things: easy access to channels from things, and items from channels (813bc5d)

#4.16.0 (2021-11-30)

#Features

  • item: add linked_thing and all_linked_things to items (5a640c6)
  • linked_thing: alias thing/things to linked_thing/all_linked_things (9898b8a), closes #427
  • things: add ability to lookup thing using ThingUID to things[] (9650698)

#4.15.1 (2021-11-24)

#Bug Fixes

  • rule: rule method should return the rule object (239403f)

#4.15.0 (2021-11-24)

#Bug Fixes

  • guard: include attachment in guards' event (61f387c)

#Features

  • trigger: support creating triggers for any trigger type (6a90d43)

#4.14.2 (2021-11-22)

#Bug Fixes

  • comparisons: fix comparison errors between two types (d694bc8)

#4.14.1 (2021-11-20)

#Bug Fixes

  • timer: remove redundant delegators (932e82b)

#4.14.0 (2021-11-14)

#Bug Fixes

  • script_handling: add tests (70008fc)

#Features

  • script_callbacks: make script_loaded/unloaded accessible (4a5e33d), closes #316

#4.13.5 (2021-11-14)

#Bug Fixes

  • script_handling: scriptLoaded and scriptUnloaded not executed (4082280)

#4.13.4 (2021-11-10)

#Bug Fixes

  • actions: call to_s to accept item as an argument (9f770b3)
  • dev: add mac M1 platform to Gemfile.lock (76fdbfd)

#4.13.3 (2021-11-08)

#Bug Fixes

  • binding: move gem home default and mkdirs (a9ccf3f)

#4.13.2 (2021-11-08)

#Bug Fixes

  • binding: fix binding support for gem ugprades (07a1668)

#4.13.1 (2021-11-07)

#Bug Fixes

  • month_day: test between guards with Time instead of TimeOfDay (65bf3b1)

#4.13.0 (2021-11-06)

#Bug Fixes

  • test: test against jruby plugin that fixes 3.2M2 reload bug (bb98cb0)

#Features

  • percenttype: add PercentType#scale and PercentType#to_byte (54d2ec3), closes #350

#4.12.1 (2021-11-06)

#Bug Fixes

  • dev: target ruby 2.6 (cdd3ea1)
  • quantity: fix comparison between integer on left and quantity on right (b7f7531), closes #352

#4.12.0 (2021-11-06)

#Features

  • build: test against jruby 9.3 (690699d)

#4.11.2 (2021-11-06)

#Bug Fixes

  • metadata: return ruby hash inside metadata enumerator (4347aa9)

#4.11.1 (2021-11-06)

#Bug Fixes

  • reentrant_timer: reset the timer duration to the latest call (e8e8b66)

#4.11.0 (2021-11-05)

#Features

  • between: support for month-day ranges (f059c59)

#4.10.3 (2021-11-04)

#Bug Fixes

  • timer: check the argument to reschedule (d1e895f)

#4.10.2 (2021-11-03)

#Bug Fixes

  • test: added test coverage for mixed type between guards (9030b3f)

#4.10.1 (2021-11-02)

#Bug Fixes

  • type: allow comparison against incompatible types (4ef6b2d), closes #328

#4.10.0 (2021-11-02)

#Features

  • attachments: adds attachments to triggers (88d35c5)

#4.9.0 (2021-11-01)

#Features

  • guards: guards only_if/not_if support arrays of items (66cda53)

#4.8.5 (2021-11-01)

#Bug Fixes

  • guard: only_if/not_if should work on all item types (1c717a8)

#4.8.4 (2021-11-01)

#4.8.3 (2021-10-31)

#Bug Fixes

  • triggers: trigger methods return the trigger objects (463a928)

#4.8.2 (2021-10-30)

#Bug Fixes

  • guards: log exception and stack traces encountered when guard procs are executed (68c5f4d)

#4.8.1 (2021-10-30)

#Bug Fixes

  • hsb: fully qualify units class (25196d5)

#4.8.0 (2021-10-29)

#Features

  • timer: supports reentrant timers and timed commands for items (08d8f16)

#4.7.1 (2021-10-29)

#Bug Fixes

  • hsb: convert csv strings to hsb value (5aad833)

#4.7.0 (2021-10-27)

#Bug Fixes

  • changed: changed trigger now supports multiple from values (20bb64e)
  • logging: use the class name not "Class" for class-level loggers (05b6217)

#Features

  • metadata: allow assignment to existing metadata config (02df58a)

#4.6.2 (2021-10-24)

#Bug Fixes

  • number_item: return false for number predicate methods when NULL (f147277)

#4.6.1 (2021-10-24)

#Bug Fixes

  • timer: cancel timers in a rule when rule is unloaded (901a63e)

#4.6.0 (2021-10-20)

#Bug Fixes

  • quantity: fix constructing quantity from numeric with | within rule (42dbafb), closes #319
  • tests: fix ensure_states tests fragility (7a36c43), closes #304

#Features

  • location: support location items (ceb224a), closes #37

#4.5.0 (2021-10-19)

#Features

  • color: support for color items and hsb type (8f45492), closes #34

#4.4.0 (2021-10-19)

#Bug Fixes

  • actions: fix say and play_media actions for PercentType change (53d7e06), closes #298
  • docs: added docs for ensure/ensure_state (77904b1)

#Features

  • ensure: add ensure_states feature (b06385b), closes #275

#4.3.0 (2021-10-19)

#Bug Fixes

  • null_comparison: fix comparison between two number items in state NULL (b3bf156), closes #298

#Features

  • rules: add terse rule syntax for simple rules (1c4b774)

#4.2.0 (2021-10-18)

#Features

  • types: allow comparison and arithmetic directly against state types (22e237f)

#4.1.4 (2021-10-11)

#Bug Fixes

  • dev: add binstubs for yard (e2f8053)
  • dev: don't generate documentation when installing gem for tests (995b8fc)

#4.1.3 (2021-10-10)

#Bug Fixes

  • docs: update installation docs to reference version 4.x of the gem (c486cad)

#4.1.2 (2021-10-08)

#Bug Fixes

  • items: restore ability to add items arrays together (4b318c1), closes #288

#4.1.1 (2021-10-07)

#Bug Fixes

  • dev: update gemfile and binstubs for use with MRI (7fe0027)

#4.1.0 (2021-10-06)

#Features

  • decimal_type: zero?, positive?, negative? predicates directly on DecimalType (bd69a76)

#4.0.1 (2021-10-05)

#Performance Improvements

  • things, items: improves performance on array accessors '[]' (24bb04b)

#4.0.0 (2021-10-05)

#Features

  • command: add predicate methods for named commands (a347bb5)

  • group_item: alias items to members (8e91ffc)

  • states: add predicate methods to several states (5f987cc), closes #237

  • types: ensure (almost) all command types are inspectable (2073072)

  • feat(events)!: wrap event.state same as item.state (cbe6e5c)

#BREAKING CHANGES

  • event.state returns nil it's NULL or UNDEF.
  • event.last renamed to event.was (the predicate methods make much more sense calling it was instead of last, similar to Rail's tracking of changed attributes).
  • event.was returns nil if's NULL or UNDEF

#3.9.4 (2021-09-25)

#Bug Fixes

  • build: have release process keep Gemfile.lock up to date (178cf4d)

#3.9.3 (2021-09-25)

#3.9.2 (2021-09-25)

#Bug Fixes

  • dev: ignore lockfile for file named gems.rb (8e31e0d)
  • release: pin npm release versions to prevent build failures on upgrade of semantec release (e1dc2a3)

#3.9.1 (2021-09-17)

#Bug Fixes

  • tests: speed up tests by avoiding unnecessary work (64c759c)
  • tests: speed up tests by forcing openhab to find rules (d05a9e5)

#3.9.0 (2021-09-17)

#Features

  • load_path: apply $RUBYLIB (29b6a34)

#3.8.3 (2021-09-16)

#Bug Fixes

  • docs: make shields in readme actual links (962eec7)

#3.8.2 (2021-09-15)

#Bug Fixes

#3.8.1 (2021-09-15)

#Bug Fixes

  • build: commit the Gemfile.lock (17def5c)

#3.8.0 (2021-09-15)

#Features

  • duration: support duration methods on Float too (fae9daf), closes #263

#3.7.4 (2021-09-15)

#Bug Fixes

  • test: test against released version of openhab 3.1 and set default to 3.1 (b8d09c1)

#3.7.3 (2021-09-15)

#Bug Fixes

  • build: updated to new version of jruby scripting (ae8b5a2)

#3.7.2 (2021-09-14)

#Bug Fixes

  • docs: remove duplicated "compare" in a few places (2a9af7b)

#3.7.1 (2021-09-14)

#Bug Fixes

  • test: fix rubocop violations against newest rubocop (e8b859b)

#3.7.0 (2021-06-04)

#Features

  • quantity: implement positive?, negative?, and zero? for quantity and dimensioned numberitem (0d2c43c)

#3.6.4 (2021-06-04)

#Bug Fixes

  • items: decorated items could not be used as hash keys (a4ff086)

#3.6.3 (2021-06-03)

#Bug Fixes

  • improve reliability of some tests (22bc48e)

#3.6.2 (2021-06-02)

#Bug Fixes

  • items: format BigDecimal state as a string the parser accepts (c752711)

#3.6.1 (2021-06-02)

#3.6.0 (2021-06-01)

#Features

  • build: support testing of multiple versions of openhab (600bc88)

#3.5.0 (2021-06-01)

#Bug Fixes

  • store_states: error when given a decorated item (ae7e1bc)

#Features

  • add oh_item to item wrappers through def_item_delegator (079314f)

#3.4.3 (2021-05-20)

#Bug Fixes

  • build: updated version of OpenHab (ef1b792)

#3.4.2 (2021-04-02)

#Bug Fixes

  • metadata: convert loaded metadata config into Ruby objects (aa8e2b7)

#3.4.1 (2021-04-02)

#Bug Fixes

  • dependency: swapped mimemagic for marcel for mime type detection (b1ec891)

#3.4.0 (2021-03-22)

#Features

  • thing: add boolean methods for checking thing's status (58bda12)

#3.3.0 (2021-03-16)

#Features

  • persistence: convert HistoricItem methods to directly return its state (942d7ea)

#3.2.1 (2021-03-11)

#Bug Fixes

  • handle native java exceptions in clean_backtrace (a6f7be4)

#3.2.0 (2021-03-10)

#Features

  • support more comparisons (3898d2d)

#3.1.2 (2021-03-09)

#Bug Fixes

  • scope: change execution block binding to be object that based a block to rule (b529684)

#3.1.1 (2021-03-08)

#Bug Fixes

  • rollershutter_item: add safe navigation and nil checks (1e98464)

#3.1.0 (2021-03-08)

#Features

  • image: support for image items (dacc7a8)

#3.0.1 (2021-03-03)

#Bug Fixes

  • triggering on multiple items caused a stack overflow (a1fac1d)

#3.0.0 (2021-03-02)

#Features

  • groups: groups now act as items (210e507)

#BREAKING CHANGES

  • groups: items no longer acts as a indicator to rules to trigger on member changes, it has been replaced with members

#2.27.1 (2021-03-02)

#2.27.0 (2021-03-02)

#Features

  • player: add support for player items (70418ab)

#2.26.1 (2021-03-02)

#Performance Improvements

  • logging: use block syntax to log method calls (9657e72)

#2.26.0 (2021-03-02)

#Features

  • add stack trace to errors (572114e)

#2.25.2 (2021-02-28)

#Performance Improvements

  • datetime: delegate more methods directly to ZonedDateTime (ea31954)

#2.25.1 (2021-02-28)

#2.25.0 (2021-02-24)

#Features

  • groups: support command and << (dd140aa)

#2.24.0 (2021-02-23)

#Features

  • groups: adds supports for item groups (127ab17)

#2.23.3 (2021-02-21)

#Bug Fixes

  • persistence: selective conversion to Quantity (3187de7)

#2.23.2 (2021-02-21)

#2.23.1 (2021-02-20)

#2.23.0 (2021-02-20)

#Bug Fixes

  • metadata: convert value to string before assignment (dba5db7)

#Features

  • event: add event.state for update trigger (d4eb4f7)

#2.22.1 (2021-02-20)

#Bug Fixes

  • changed: for parameter with thing chaged trigger (cd08922)

#2.22.0 (2021-02-19)

#Features

  • add conversion operator for DecimalType to Quantity (42bc5de)

#2.21.0 (2021-02-18)

#Features

  • persistence: automatically convert to quantity for dimensioned items (7e352d4)

#2.20.3 (2021-02-18)

#Bug Fixes

  • changed_duration: stringitem from/to comparison didn't work (21721e7)

#2.20.2 (2021-02-18)

#2.20.1 (2021-02-18)

#Bug Fixes

  • items: to_s did not include UNDEF and NULL (71f3de4)

#2.20.0 (2021-02-18)

#Features

  • add dig-method to top level metadata (2975cd5)

#2.19.3 (2021-02-18)

#Bug Fixes

  • rule: otherwise blocks are always executed (dd5d5e5)

#2.19.2 (2021-02-16)

#Bug Fixes

  • changed_duration: guards not evaluated for changed duration (48a63e8)

#2.19.1 (2021-02-15)

#Bug Fixes

  • changed_duration: cancel 'changed for' timer correctly (1bf4aa3)

#2.19.0 (2021-02-15)

#Features

#2.18.0 (2021-02-14)

#Features

#2.17.0 (2021-02-12)

#Features

  • units: import OpenHAB common units for UoM (351a776)

#2.16.4 (2021-02-12)

#Bug Fixes

  • changed_duration: timer reschedule duration bug (6bc8862)

#2.16.3 (2021-02-12)

#2.16.2 (2021-02-11)

#Bug Fixes

  • decorate items[itemname], event.item, and triggered item (ce4ef03)

#2.16.1 (2021-02-11)

#Performance Improvements

  • timeofdayrangeelement: subclass Numeric to make comparisons more efficient (c2482e8)

#2.16.0 (2021-02-10)

#Features

  • support comparisons between various numeric item/state types (510d6db)

#2.15.0 (2021-02-09)

#Features

  • add Persistence support (9cab1ff)

#2.14.3 (2021-02-09)

#Bug Fixes

  • multiple delayed triggers overwrite the previous triggers (6f14429)

#2.14.2 (2021-02-08)

#2.14.1 (2021-02-05)

#Bug Fixes

  • number_item: make math operations and comparisons work with Floats (3b29aa9)

#2.14.0 (2021-02-03)

#Features

  • logging: append rule name to logging class if logging within rule context (00c73a9)

#2.13.1 (2021-02-02)

#2.13.0 (2021-02-02)

#Features

  • dimmeritem: dimmeritems can now be compared (aa286dc)

#2.12.0 (2021-02-02)

#Bug Fixes

  • return nil for items['nonexistent'] instead of raising an exception (4a412f8)

#Features

  • add Item.include? to check for item's existence (1a8fd3a)

#2.11.1 (2021-02-01)

#Bug Fixes

  • group: support for accessing triggering item in group updates (6204f0a)

#2.11.0 (2021-02-01)

#Features

#2.10.0

#Changed

  • Library now released as a Ruby Gem

#2.9.0

#Added

  • Support OpenHAB Actions

#2.8.1

#Fixed

  • Fixed StringItem comparison against a string

#2.8.0

#Added

  • Support for accessing item metadata namespace, value, and configuration

#2.7.0

#Added

  • SwitchItem.toggle to toggle a SwitchItem similar to SwitchItem << !SwitchItem

#2.6.1

#Fixed

  • Race condition with after block
  • Unknown constant error in certain cases uses between blocks

#2.6.0

#Added

  • TimeOfDay.between? to check if TimeOfDay object is between supplied range

#Fixed

  • Reference in rules to TimeOfDay::ALL_DAY

#2.5.1

#Fixed

  • Corrected time of day parsing to be case insensitive
  • Merge conflict

#2.5.0

#Added

  • between can be used throughout rules systems

#Changed

  • TimeOfDay parsing now supports AM/PM

#2.4.0

#Added

  • Support to allow comparison of TimeOfDay objects against strings
  • Support for storing and restoring Item states

#2.3.0

#Added

  • Support for rule description

#2.2.1

#Fixed

  • ! operator on SwitchItems now returns ON if item is UNDEF or NULL

#2.2.0

#Added

  • Support for thing triggers in rules

#Changed

  • Updated docs to point to OpenHAB document for script locations

#2.1.0

#Added

  • Timer delegate for 'active?', 'running?', 'terminated?'

#2.0.1

#Fixed

  • Logging of mod and/or inputs can cause an exception of they are nil
  • Timers (after) now available inside of rules

#Changed

  • DSL imports now shared by OpenHAB module and Rules Module

#2.0.0

#Added

  • Timer delegate for after method that supports reschedule

#Changed

  • Breaking: after now returns a ruby Timer delegate

#1.1.0

#Added

  • Added support for channels triggers to rules

#Changed

  • Fixed documentation for changed/updated/receive_command options

#1.0.0

#Changed

  • Breaking: Changed commanded method for rules to received_command

#0.2.0

#Added

  • Ability to execute rules based on commands sent to items, groups and group members
  • Ability to send updates from item objects

#Changed

  • Fixed documentation for comparing dimensioned items against strings

#0.1.0

#Added

  • Support for item updates within rules languages

#Changed

  • Installation instructions to specify using latest release rather than a specific version

#0.0.1

  • Initial release