Configurable rule that has the cron specification parameterized

With the Jruby scripting addon, you can!
dynamic_rule.tems:

String Cron_Expr "Cron expression for dynamic rule"

dynamic_rule.rb

require 'openhab'

def dynamic_rule(name, cron_expr, &block)
  remove_rule(name)
  rule name do
    cron cron_expr
    run block
  end
end

def remove_rule(name)
  rules = $se.get('ruleRegistry')
  rules.get_all.select { |rule| rule.name.match?(name) }.each { |rule| rules.remove(rule.uid) }
end

rule 'Update cron rule' do
  changed Cron_Expr
  run do
    dynamic_rule('Dynamic cron rule', Cron_Expr) do
      # Rule body here
    end
  end
end

Update the Cron_Expr Item with a valid cron expression and the rule will be recreated with the new value.
Just make sure you use unique names for your rules, otherwise you might delete the wrong one.

1 Like