Skip to content

[DSL] Add extra commands/abilities to DSL scripts/rules#5481

Merged
mherwege merged 25 commits into
openhab:mainfrom
Nadahar:dsl-extras
Jun 11, 2026
Merged

[DSL] Add extra commands/abilities to DSL scripts/rules#5481
mherwege merged 25 commits into
openhab:mainfrom
Nadahar:dsl-extras

Conversation

@Nadahar

@Nadahar Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor

Add access to various system registries, OSGi instances and the ability to run and enable/disable rules to DSL scripts.

This has been considered "impossible" to do, yet I've met no special obstacles, and it seems to work with my (limited) testing. I'm therefore skeptical that there might be something that I've missed, like additional startup issues caused by ScriptServiceUtil referencing additional instances, thus depending on them. But, I've observed no such problems.

Additional context/information about the historical problems with this is appreciated, but as far as I can see at the moment, this works without complications.

@Nadahar Nadahar requested a review from a team as a code owner April 9, 2026 16:04
@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

Also, consider the specific new commands I've implemented as more of a suggestion. This can be tweaked as desired.

@rkoshak Perhaps you have something to add here?

@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

The itest fails because of some unresolved reference. I'm trying to figure it out, but if anybody has any hints of how to figure out the problem, it would be appreciated, because I frankly have no idea how to handle the bndrun resolution.

@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

I don't think the itest fails over dependencies, but that the startlevel is insufficient:

Components implementing org.openhab.core.model.script.ScriptServiceUtil:
129 [UNSATISFIED_REFERENCE] org.openhab.core.model.script.ScriptServiceUtil in org.openhab.core.model.script
	$006 (org.openhab.core.automation.RuleManager)
		54 [UNSATISFIED_REFERENCE] org.openhab.core.automation.internal.RuleEngineImpl in org.openhab.core.automation
			$004 (org.openhab.core.service.StartLevelService)

If I understand it correctly, RuleEngineImpl can't start if the startlevel is below 40 - and in the test, it is. This requirement now applies to ScriptServiceUtil because I've included a reference to RuleManager (which is implemented by RuleEngineImpl) in the constructor.

So, the question is: Is it actually a problem that ScriptServiceUtil can't start before startlevel 40, or does the test need to be modified to get around this?

@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

I've set the startlevel in the test to 40, which is required for the script engine to start, and it seems to resolve the problem with the test. I'm still uncertain as to whether reaching startlevel 40 before the ScriptServiceUtil can start is a problem or not.

Are there scripts being executed before startlevel 40 is reached?

@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

Now there's a new test failure, not sure exactly how it is related yet:

TEST org.openhab.core.model.rule.runtime.DSLRuleProviderTest#testSimpleRules() <<< ERROR: Cannot invoke "org.eclipse.emf.ecore.resource.Resource.load(java.io.InputStream, java.util.Map)" because "resource" is null
java.lang.NullPointerException: Cannot invoke "org.eclipse.emf.ecore.resource.Resource.load(java.io.InputStream, java.util.Map)" because "resource" is null

@rkoshak rkoshak left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments.

@Nadahar

Nadahar commented Apr 9, 2026

Copy link
Copy Markdown
Contributor Author

The current test failure seems to have some complicated timing reason. The following line in ModelRepository.validateModel() returns null, which doesn't seem expected:

        Resource resource = resourceSet.createResource(URI.createURI(PREFIX_TMP_MODEL + name));

This results in an NPE. The question is why it returns null now all of a sudden, and it probably has to do with how the changes in this PR has impacted the startup order of OSGi components. The Javadocs for createResource() says:

Creates a new resource, of the appropriate type, and returns it.

It delegates to the resource factory registry to determine the correct factory, and then it uses that factory to create the resource and adds it to the contents. If there is no registered factory, null will be returned; when running within Eclipse, a default XMI factory will be registered, and this will never return null.

I'm not sure what this mythical factory is and why it suddenly can't be found, but I assume that it has something to do with ScriptServiceUtil now having to wait for startlevel 40 before starting. The details of how this all relates aren't clear to me though.

@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

I changed the strategy regarding RuleManager. It requires startlevel 40 to start, which caused all kind of timing-based issues with tests when it became a reference of ScriptServiceUtil. I've thus modified it to be a dynamic reference, so that ScriptServiceUtil can start without RuleManager having been started.

This has resolved the test problems, but comes with the caveat that getRuleManager() might return null. Still, all in all, I think it's the best solution. It shouldn't return null when rules are actually running, since it's the one executing rule actions. So, in reality, it might actually never return null.

@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

In case somebody wants to test it for themselves, this bundle should be all that's needed.

org.openhab.core.model.script-5.2.0-SNAPSHOT.jar.txt

@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

@rkoshak I've added some additional methods for manipulation of metadata. Is that somewhat what you had in mind? I've also reluctantly implemented the varargs "solution" for the maps, so that it's possible to simply call e.g. addMetadata(namespace, itemName, value, configKey1, configValue1, configKey2, configValue2...) (the same for the runNow() context).

Since these are just suggestions, I haven't bothered to finish the Javadocs, as I'm sure they'll change, which makes the time I spend writing the documentation a waste.

@Nadahar Nadahar marked this pull request as draft April 10, 2026 13:54
@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

@rkoshak I've added even more overloads, so not all the metadata methods accept either item name or Item as the first argument. Doesn't that make it pretty close to what JS provides?

@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

@lolodomo There's no a lot of activity here, maybe you're interested in this?

This isn't important for me in any way, but seen in light of all the other discussions about DSL versus other scripting languages and the difference in what you can do, I thought that this might be a welcome contribution to close the gap.

@Nadahar

Nadahar commented Apr 10, 2026

Copy link
Copy Markdown
Contributor Author

Ï've never fully understood the "action" concept in OH. I understand that they are similar to functions/methods, but not what the significance of making things "actions" is. We have for example org.openhab.core.model.script.actions.Things, which doesn't implement ActionService, but exists in package actions. Then, we have org.openhab.core.model.script.internal.engine.action.ThingActionService, which does implement ActionService. The former basically delegates to the latter, so they both provide the exact same functionality.

Why this structure? Is an ActionService available more broadly, to other scripting languages for example? It doesn't seem so, since it's placed in an internal package in the code that makes up DSL.

@Nadahar

Nadahar commented Apr 11, 2026

Copy link
Copy Markdown
Contributor Author

I've reorganized System into different classes. I've also discovered and implemented extensions, so that it's now possible to do e.g.:

var shared = getRule("shared-test-1")
logInfo("test", shared.getUID() + " enabled: " + shared.isEnabled())
shared.setEnabled(true)
logInfo("test", shared.getUID() + " enabled: " + shared.isEnabled())
shared.run()

The "full versions" are also there, so you can call setRuleEnabled(ruleUID, enabled) instead. I've done the same for Items, so you can just do e.g. someItem.addMetadata(namespace, value).

@openhab-bot

Copy link
Copy Markdown
Collaborator

This pull request has been mentioned on openHAB Community. There might be relevant details there:

https://community.openhab.org/t/rules-and-rule-templates-yaml-integration/168568/222

@dilyanpalauzov

Copy link
Copy Markdown
Contributor

#5484 adds Import-Package: org.openhab.core.automation to both org.openhab.core.model.rule/bnd.bnd and org.openhab.core.model.script/bnd.bnd. In turn org.openhab.core.automation.RuleManager can be resolved in both DSL Scripts and Textual DSL Rules.

Running afterwards RuleManager.runNow() is demonstrated at openhab/openhab-docs#2701.

@Nadahar

Nadahar commented Apr 13, 2026

Copy link
Copy Markdown
Contributor Author

#5484 adds Import-Package: org.openhab.core.automation to both org.openhab.core.model.rule/bnd.bnd and org.openhab.core.model.script/bnd.bnd. In turn org.openhab.core.automation.RuleManager can be resolved in both DSL Scripts and Textual DSL Rules.

Running afterwards RuleManager.runNow() is demonstrated at openhab/openhab-docs#2701.

Adding org.openhab.core.automation import to model.rule I'm sure is useful, I'm surprised it's not already there. This PR is about the model.script bundle, where it also adds the same import.

That said, the goal of this PR isn't to make it possible to do those things, but to make it reasonably convenient. As long as imports can be resolved, you can always use FrameworkUtil manually like your example does, but I wouldn't call that very user-friendly.

This PR has getInstance() to do exactly the same operation for you, without having to deal with all the "OSGi details":

    public static @Nullable <T> T getInstance(Class<T> clazz) {
        Bundle bundle = FrameworkUtil.getBundle(clazz);
        if (bundle != null) {
            BundleContext bc = bundle.getBundleContext();
            if (bc != null) {
                ServiceReference<T> ref = bc.getServiceReference(clazz);
                if (ref != null) {
                    return bc.getService(ref);
                }
            }
        }
        return null;
    }

So, I don't see these two as "competing" in any way.

@dilyanpalauzov

Copy link
Copy Markdown
Contributor

After a = BundleContext.getService(…) there must be corresponding BundleContext.ungetService(a) - https://docs.osgi.org/javadoc/osgi.core/8.0.0/org/osgi/framework/BundleContext.html#getService-org.osgi.framework.ServiceReference- - otherwise resources stay allocated unnecessary.

By using the function getInstance() from the previous comment it is not possible to invoke ungetService() on the result of getService().

@dilyanpalauzov

Copy link
Copy Markdown
Contributor

After a = BundleContext.getService(…) there must be corresponding BundleContext.ungetService(a)

Rectification:

After a = BundleContext.getServiceReference(…) there must be corresponding BundleContext.ungetService(a).

@Nadahar

Nadahar commented Apr 14, 2026

Copy link
Copy Markdown
Contributor Author

I didn't remember that the services were reference counted, so I'll have to make some modifications to accommodate that. But, as I see it, we can't expect script authors to use try/finally to make sure to release the reference. I've looked a bit in core, and it seems like this is "mishandled" other places as well. If you look at JS Scripting, it does the exact same thing:

https://openhab.github.io/openhab-js/osgi.js.html#line38

Since it's unrealistic that script authors can manage the reference counting, I think the best thing to do is to release the reference before returning it. That will work just fine as long as something else keeps a "counted reference" to the instance. In OH, this will almost always be the case, there are other components that reference "everything".

As far as I understand, OSGi uses this reference counting to automatically stop services that aren't used by anything. The fact that a service is referenced doesn't prevent an explicit shutdown, so it's not like "a lock", it just prevents automatic shutdown. Since the script acquiring the reference should never have the only reference, releasing it before returning should work fine in practice. In the very unlikely scenario that this isn't the case, the script will fail when it tries to use the service if OSGi has shut it down in the meanwhile. I think that is acceptable, given that it is extremely unlikely to happen, and it should be better than to "leak references".

@lolodomo lolodomo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very promising contribution.
Just few comments

@lolodomo

lolodomo commented May 4, 2026

Copy link
Copy Markdown
Contributor

@Nadahar : thank you for that contribution. Why is it still in draft mode ? Does it mean it is not yet finished ?

Ravi Nadahar added 2 commits June 4, 2026 20:50
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
Ravi Nadahar added 2 commits June 4, 2026 21:35
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
…der control

Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
@Nadahar

Nadahar commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

I built the full core from this PR, and then built the whole addons repo against that. There were no add-on failures locally, so I don't think the nullness annotation changes are that risky.

Build result
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for openHAB Add-ons 5.2.0-SNAPSHOT:
[INFO]
[INFO] openHAB Add-ons .................................... SUCCESS [  3.352 s]
[INFO] openHAB Add-ons :: BOM ............................. SUCCESS [  0.083 s]
[INFO] openHAB Add-ons :: BOM :: Runtime Index ............ SUCCESS [ 10.221 s]
[INFO] openHAB Add-ons :: BOM :: Test Index ............... SUCCESS [  4.977 s]
[INFO] openHAB Add-ons :: BOM :: openHAB Core Index ....... SUCCESS [ 10.040 s]
[INFO] openHAB Add-ons :: Bundles ......................... SUCCESS [ 12.778 s]
[INFO] openHAB Add-ons :: Bundles :: Automation :: Groovy Scripting SUCCESS [02:08 min]
[INFO] openHAB Add-ons :: Bundles :: Automation :: JRuby Scripting SUCCESS [04:07 min]
[INFO] openHAB Add-ons :: Bundles :: Automation :: JavaScript Scripting SUCCESS [02:40 min]
[INFO] openHAB Add-ons :: Bundles :: Automation :: JavaScript Scripting (Nashorn) SUCCESS [ 45.931 s]
[INFO] openHAB Add-ons :: Bundles :: Automation :: Jython Scripting SUCCESS [05:30 min]
[INFO] openHAB Add-ons :: Bundles :: Automation :: PID Controller SUCCESS [ 27.671 s]
[INFO] openHAB Add-ons :: Bundles :: Automation :: PWM .... SUCCESS [ 22.836 s]
[INFO] openHAB Add-ons :: Bundles :: Automation :: Python Scripting SUCCESS [ 37.545 s]
[INFO] openHAB Add-ons :: Bundles :: Adorne Binding ....... SUCCESS [ 10.562 s]
[INFO] openHAB Add-ons :: Bundles :: aha Waste Collection Binding SUCCESS [ 20.444 s]
[INFO] openHAB Add-ons :: Bundles :: AirGradient Binding .. SUCCESS [ 15.691 s]
[INFO] openHAB Add-ons :: Bundles :: AirParif Binding ..... SUCCESS [ 18.913 s]
[INFO] openHAB Add-ons :: Bundles :: air-Q Binding ........ SUCCESS [ 17.422 s]
[INFO] openHAB Add-ons :: Bundles :: Airquality Binding ... SUCCESS [ 15.949 s]
[INFO] openHAB Add-ons :: Bundles :: AirVisual Node Air Quality Monitor Binding SUCCESS [ 16.418 s]
[INFO] openHAB Add-ons :: Bundles :: Alarm Decoder Binding  SUCCESS [ 17.715 s]
[INFO] openHAB Add-ons :: Bundles :: Amazon Dash Button Binding SUCCESS [ 58.406 s]
[INFO] openHAB Add-ons :: Bundles :: Amazon Echo Control Binding SUCCESS [ 43.325 s]
[INFO] openHAB Add-ons :: Bundles :: Amber Electric Binding SUCCESS [ 10.627 s]
[INFO] openHAB Add-ons :: Bundles :: Ambient Weather Binding SUCCESS [ 17.969 s]
[INFO] openHAB Add-ons :: Bundles :: AmpliPi Binding ...... SUCCESS [ 21.350 s]
[INFO] openHAB Add-ons :: Bundles :: Android Debug Bridge Binding SUCCESS [ 14.038 s]
[INFO] openHAB Add-ons :: Bundles :: AndroidTV Binding .... SUCCESS [03:36 min]
[INFO] openHAB Add-ons :: Bundles :: Anel Binding ......... SUCCESS [ 15.918 s]
[INFO] openHAB Add-ons :: Bundles :: Anthem Binding ....... SUCCESS [ 13.313 s]
[INFO] openHAB Add-ons :: Bundles :: ArgoClima Binding .... SUCCESS [ 24.736 s]
[INFO] openHAB Add-ons :: Bundles :: Astro Binding ........ SUCCESS [ 30.844 s]
[INFO] openHAB Add-ons :: Bundles :: Asuswrt Binding ...... SUCCESS [ 14.861 s]
[INFO] openHAB Add-ons :: Bundles :: Atlona Binding ....... SUCCESS [ 13.339 s]
[INFO] openHAB Add-ons :: Bundles :: AtmoFrance Binding ... SUCCESS [ 13.339 s]
[INFO] openHAB Add-ons :: Bundles :: Autelis Binding ...... SUCCESS [ 10.907 s]
[INFO] openHAB Add-ons :: Bundles :: Automower Binding .... SUCCESS [ 17.989 s]
[INFO] openHAB Add-ons :: Bundles :: AVM FRITZ! Binding ... SUCCESS [ 21.067 s]
[INFO] openHAB Add-ons :: Bundles :: aWATTar Binding ...... SUCCESS [ 19.696 s]
[INFO] openHAB Add-ons :: Bundles :: BambuLab Binding ..... SUCCESS [ 44.216 s]
[INFO] openHAB Add-ons :: Bundles :: BenQ Projector Binding SUCCESS [ 12.345 s]
[INFO] openHAB Add-ons :: Bundles :: BigAssFan Binding .... SUCCESS [ 11.472 s]
[INFO] openHAB Add-ons :: Bundles :: Bluelink Binding ..... SUCCESS [ 23.031 s]
[INFO] openHAB Add-ons :: Bundles :: Bluetooth Binding .... SUCCESS [ 24.732 s]
[INFO] openHAB Add-ons :: Bundles :: Airthings Bluetooth Adapter SUCCESS [ 10.233 s]
[INFO] openHAB Add-ons :: Bundles :: AM43 Bluetooth Adapter SUCCESS [  9.373 s]
[INFO] openHAB Add-ons :: Bundles :: BlueGiga Bluetooth Adapter SUCCESS [ 15.846 s]
[INFO] openHAB Add-ons :: Bundles :: BlueZ Bluetooth Adapter SUCCESS [  9.745 s]
[INFO] openHAB Add-ons :: Bundles :: Blukii Bluetooth Adapter SUCCESS [  7.687 s]
[INFO] openHAB Add-ons :: Bundles :: DaikinMadoka Bluetooth Adapter SUCCESS [ 10.767 s]
[INFO] openHAB Add-ons :: Bundles :: EnOcean Bluetooth Adapter SUCCESS [  7.849 s]
[INFO] openHAB Add-ons :: Bundles :: Generic Bluetooth Adapter SUCCESS [ 21.407 s]
[INFO] openHAB Add-ons :: Bundles :: Govee Bluetooth Adapter SUCCESS [ 10.057 s]
[INFO] openHAB Add-ons :: Bundles :: Grundfos Alpha Bluetooth Adapter SUCCESS [  9.812 s]
[INFO] openHAB Add-ons :: Bundles :: Bluetooth Listener Binding SUCCESS [  6.364 s]
[INFO] openHAB Add-ons :: Bundles :: RadonEye Bluetooth Adapter SUCCESS [  9.789 s]
[INFO] openHAB Add-ons :: Bundles :: Roaming Bluetooth Adapter SUCCESS [  8.530 s]
[INFO] openHAB Add-ons :: Bundles :: RuuviTag Bluetooth Adapter SUCCESS [  8.205 s]
[INFO] openHAB Add-ons :: Bundles :: Bond Home Binding .... SUCCESS [ 13.733 s]
[INFO] openHAB Add-ons :: Bundles :: Bosch Indego Binding . SUCCESS [ 14.518 s]
[INFO] openHAB Add-ons :: Bundles :: Bosch Smart Home Binding SUCCESS [03:13 min]
[INFO] openHAB Add-ons :: Bundles :: BoseSoundTouch Binding SUCCESS [ 14.850 s]
[INFO] openHAB Add-ons :: Bundles :: Broadlink Binding .... SUCCESS [ 18.700 s]
[INFO] openHAB Add-ons :: Bundles :: Broadlink Thermostat Binding SUCCESS [ 11.717 s]
[INFO] openHAB Add-ons :: Bundles :: BSB-LAN Binding ...... SUCCESS [ 13.848 s]
[INFO] openHAB Add-ons :: Bundles :: BTicino Smarther Binding SUCCESS [ 14.742 s]
[INFO] openHAB Add-ons :: Bundles :: Buienradar Binding ... SUCCESS [ 12.452 s]
[INFO] openHAB Add-ons :: Bundles :: Caddx Binding ........ SUCCESS [ 14.013 s]
[INFO] openHAB Add-ons :: Bundles :: CasoKitchen Binding .. SUCCESS [ 12.143 s]
[INFO] openHAB Add-ons :: Bundles :: CBus Binding ......... SUCCESS [ 11.225 s]
[INFO] openHAB Add-ons :: Bundles :: ChatGPT Binding ...... SUCCESS [ 10.852 s]
[INFO] openHAB Add-ons :: Bundles :: Chromecast Binding ... SUCCESS [ 20.465 s]
[INFO] openHAB Add-ons :: Bundles :: CM11A Binding ........ SUCCESS [ 10.495 s]
[INFO] openHAB Add-ons :: Bundles :: ComfoAir Binding ..... SUCCESS [ 11.079 s]
[INFO] openHAB Add-ons :: Bundles :: CoolMasterNet Binding  SUCCESS [ 10.255 s]
[INFO] openHAB Add-ons :: Bundles :: DahuaDoor Binding .... SUCCESS [03:14 min]
[INFO] openHAB Add-ons :: Bundles :: Daikin Binding ....... SUCCESS [ 17.669 s]
[INFO] openHAB Add-ons :: Bundles :: DALI Binding ......... SUCCESS [ 11.685 s]
[INFO] openHAB Add-ons :: Bundles :: DanfossAirUnit Binding SUCCESS [ 13.862 s]
[INFO] openHAB Add-ons :: Bundles :: DBQuery Binding ...... SUCCESS [05:05 min]
[INFO] openHAB Add-ons :: Bundles :: deCONZ Binding ....... SUCCESS [ 24.613 s]
[INFO] openHAB Add-ons :: Bundles :: Denon / Marantz Binding SUCCESS [ 16.708 s]
[INFO] openHAB Add-ons :: Bundles :: Deutsche Bahn Binding  SUCCESS [ 24.958 s]
[INFO] openHAB Add-ons :: Bundles :: Digiplex/EVO Binding . SUCCESS [ 13.692 s]
[INFO] openHAB Add-ons :: Bundles :: DigitalSTROM Binding . SUCCESS [ 27.619 s]
[INFO] openHAB Add-ons :: Bundles :: Dirigera Binding ..... SUCCESS [ 35.370 s]
[INFO] openHAB Add-ons :: Bundles :: D-Link Smart Home Binding SUCCESS [ 10.143 s]
[INFO] openHAB Add-ons :: Bundles :: DMX Binding .......... SUCCESS [ 20.021 s]
[INFO] openHAB Add-ons :: Bundles :: Dolby Cinema Processor Binding SUCCESS [ 10.414 s]
[INFO] openHAB Add-ons :: Bundles :: Dominoswiss Binding .. SUCCESS [  8.793 s]
[INFO] openHAB Add-ons :: Bundles :: Doorbird Binding ..... SUCCESS [ 19.338 s]
[INFO] openHAB Add-ons :: Bundles :: DraytonWiser Binding . SUCCESS [ 15.962 s]
[INFO] openHAB Add-ons :: Bundles :: DSCAlarm Binding ..... SUCCESS [ 14.698 s]
[INFO] openHAB Add-ons :: Bundles :: DSMR Binding ......... SUCCESS [ 17.112 s]
[INFO] openHAB Add-ons :: Bundles :: DWD Pollenflug Binding SUCCESS [  9.241 s]
[INFO] openHAB Add-ons :: Bundles :: DWD Unwetter Binding . SUCCESS [ 13.045 s]
[INFO] openHAB Add-ons :: Bundles :: Easee Binding ........ SUCCESS [ 11.776 s]
[INFO] openHAB Add-ons :: Bundles :: EchonetLite Binding .. SUCCESS [ 13.157 s]
[INFO] openHAB Add-ons :: Bundles :: Ecobee Binding ....... SUCCESS [ 14.293 s]
[INFO] openHAB Add-ons :: Bundles :: EcoFlow Binding ...... SUCCESS [ 10.253 s]
[INFO] openHAB Add-ons :: Bundles :: EcoTouch Binding ..... SUCCESS [ 10.936 s]
[INFO] openHAB Add-ons :: Bundles :: Ecovacs Binding ...... SUCCESS [ 18.232 s]
[INFO] openHAB Add-ons :: Bundles :: Ecowatt Binding ...... SUCCESS [ 11.877 s]
[INFO] openHAB Add-ons :: Bundles :: Ekey Binding ......... SUCCESS [  8.333 s]
[INFO] openHAB Add-ons :: Bundles :: Electrolux Appliance Binding SUCCESS [ 10.205 s]
[INFO] openHAB Add-ons :: Bundles :: EleroTransmitterStick Binding SUCCESS [ 10.963 s]
[INFO] openHAB Add-ons :: Bundles :: ElroConnects Binding . SUCCESS [ 10.811 s]
[INFO] openHAB Add-ons :: Bundles :: Emby Binding ......... SUCCESS [ 12.451 s]
[INFO] openHAB Add-ons :: Bundles :: Emotiva Binding ...... SUCCESS [ 17.425 s]
[INFO] openHAB Add-ons :: Bundles :: Energenie Binding .... SUCCESS [  8.990 s]
[INFO] openHAB Add-ons :: Bundles :: Energi Data Service Binding SUCCESS [ 25.269 s]
[INFO] openHAB Add-ons :: Bundles :: EnergyForecast Binding SUCCESS [ 11.339 s]
[INFO] openHAB Add-ons :: Bundles :: Enigma2 Binding ...... SUCCESS [ 13.677 s]
[INFO] openHAB Add-ons :: Bundles :: EnOcean Binding ...... SUCCESS [ 24.587 s]
[INFO] openHAB Add-ons :: Bundles :: Enphase Binding ...... SUCCESS [ 13.236 s]
[INFO] openHAB Add-ons :: Bundles :: ENTSO-E Binding ...... SUCCESS [ 13.594 s]
[INFO] openHAB Add-ons :: Bundles :: EnturNo Binding ...... SUCCESS [ 11.085 s]
[INFO] openHAB Add-ons :: Bundles :: Ephemeris Binding .... SUCCESS [ 10.021 s]
[INFO] openHAB Add-ons :: Bundles :: Epson Projector Binding SUCCESS [ 11.500 s]
[INFO] openHAB Add-ons :: Bundles :: EtherRain Binding .... SUCCESS [  8.518 s]
[INFO] openHAB Add-ons :: Bundles :: evcc Binding ......... SUCCESS [ 16.384 s]
[INFO] openHAB Add-ons :: Bundles :: evohome Binding ...... SUCCESS [ 10.971 s]
[INFO] openHAB Add-ons :: Bundles :: Exec Binding ......... SUCCESS [  9.658 s]
[INFO] openHAB Add-ons :: Bundles :: Feed Binding ......... SUCCESS [ 14.764 s]
[INFO] openHAB Add-ons :: Bundles :: Feican Binding ....... SUCCESS [  8.704 s]
[INFO] openHAB Add-ons :: Bundles :: FENECON Binding ...... SUCCESS [ 11.920 s]
[INFO] openHAB Add-ons :: Bundles :: Fine Offset Weather Station SUCCESS [ 15.594 s]
[INFO] openHAB Add-ons :: Bundles :: FlicButton Binding ... SUCCESS [ 12.532 s]
[INFO] openHAB Add-ons :: Bundles :: Flume Binding ........ SUCCESS [ 10.886 s]
[INFO] openHAB Add-ons :: Bundles :: fmiweather Binding ... SUCCESS [ 15.877 s]
[INFO] openHAB Add-ons :: Bundles :: FolderWatcher Binding  SUCCESS [ 13.746 s]
[INFO] openHAB Add-ons :: Bundles :: Folding Binding ...... SUCCESS [ 11.048 s]
[INFO] openHAB Add-ons :: Bundles :: Foobot Binding ....... SUCCESS [ 13.291 s]
[INFO] openHAB Add-ons :: Bundles :: FreeAtHome Binding ... SUCCESS [ 18.565 s]
[INFO] openHAB Add-ons :: Bundles :: FreeboxOS Binding .... SUCCESS [ 28.560 s]
[INFO] openHAB Add-ons :: Bundles :: Freecurrency Binding . SUCCESS [  8.914 s]
[INFO] openHAB Add-ons :: Bundles :: French Government Energy Data Binding SUCCESS [ 10.954 s]
[INFO] openHAB Add-ons :: Bundles :: Fronius Binding ...... SUCCESS [ 15.883 s]
[INFO] openHAB Add-ons :: Bundles :: Fronius Wattpilot Binding SUCCESS [ 10.253 s]
[INFO] openHAB Add-ons :: Bundles :: FSInternetRadio Binding SUCCESS [ 12.612 s]
[INFO] openHAB Add-ons :: Bundles :: FTP Upload Binding ... SUCCESS [ 18.462 s]
[INFO] openHAB Add-ons :: Bundles :: Gardena Binding ...... SUCCESS [ 15.128 s]
[INFO] openHAB Add-ons :: Bundles :: GCE Binding .......... SUCCESS [  8.875 s]
[INFO] openHAB Add-ons :: Bundles :: GeneracMobileLink Binding SUCCESS [  9.806 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Map SUCCESS [ 11.566 s]
[INFO] openHAB Add-ons :: Bundles :: GlobalCache Binding .. SUCCESS [  9.630 s]
[INFO] openHAB Add-ons :: Bundles :: Go-eCharger Binding .. SUCCESS [ 10.438 s]
[INFO] openHAB Add-ons :: Bundles :: Govee Binding ........ SUCCESS [ 11.826 s]
[INFO] openHAB Add-ons :: Bundles :: gpio Binding ......... SUCCESS [ 10.158 s]
[INFO] openHAB Add-ons :: Bundles :: GPSTracker Binding ... SUCCESS [ 10.804 s]
[INFO] openHAB Add-ons :: Bundles :: Gree Binding ......... SUCCESS [ 10.670 s]
[INFO] openHAB Add-ons :: Bundles :: GridBox Binding ...... SUCCESS [ 10.091 s]
[INFO] openHAB Add-ons :: Bundles :: GROHE ONDUS Binding .. SUCCESS [ 13.875 s]
[INFO] openHAB Add-ons :: Bundles :: Groupe PSA Binding ... SUCCESS [ 15.006 s]
[INFO] openHAB Add-ons :: Bundles :: Growatt Binding ...... SUCCESS [ 14.762 s]
[INFO] openHAB Add-ons :: Bundles :: Guntamatic Binding ... SUCCESS [  8.207 s]
[INFO] openHAB Add-ons :: Bundles :: Haas + Sohn Pelletstove Binding SUCCESS [  8.448 s]
[INFO] openHAB Add-ons :: Bundles :: HarmonyHub Binding ... SUCCESS [ 10.660 s]
[INFO] openHAB Add-ons :: Bundles :: Hayward OmniLogic Binding SUCCESS [ 10.200 s]
[INFO] openHAB Add-ons :: Bundles :: HCC Rubbish Collection Binding SUCCESS [  7.740 s]
[INFO] openHAB Add-ons :: Bundles :: HDanywhere Binding ... SUCCESS [  8.787 s]
[INFO] openHAB Add-ons :: Bundles :: Hunter Douglas PowerView Binding SUCCESS [ 25.325 s]
[INFO] openHAB Add-ons :: Bundles :: Helios Binding ....... SUCCESS [  9.542 s]
[INFO] openHAB Add-ons :: Bundles :: HeliosVentilation Binding SUCCESS [  7.754 s]
[INFO] openHAB Add-ons :: Bundles :: HEOS Binding ......... SUCCESS [ 18.738 s]
[INFO] openHAB Add-ons :: Bundles :: Herzborg Binding ..... SUCCESS [  9.553 s]
[INFO] openHAB Add-ons :: Bundles :: MQTT Broker Binding .. SUCCESS [ 20.583 s]
[INFO] openHAB Add-ons :: Bundles :: Home Assistant Binding SUCCESS [08:31 min]
[INFO] openHAB Add-ons :: Bundles :: Home Connect Binding . SUCCESS [ 41.028 s]
[INFO] openHAB Add-ons :: Bundles :: HomeKit Client Binding SUCCESS [02:20 min]
[INFO] openHAB Add-ons :: Bundles :: Homie Convention Binding SUCCESS [ 10.731 s]
[INFO] openHAB Add-ons :: Bundles :: Homematic Binding .... SUCCESS [ 25.037 s]
[INFO] openHAB Add-ons :: Bundles :: HomeWizard Binding ... SUCCESS [ 18.810 s]
[INFO] openHAB Add-ons :: Bundles :: HP Printer Binding ... SUCCESS [ 11.089 s]
[INFO] openHAB Add-ons :: Bundles :: HTTP Binding ......... SUCCESS [ 15.580 s]
[INFO] openHAB Add-ons :: Bundles :: hue Binding .......... SUCCESS [ 31.488 s]
[INFO] openHAB Add-ons :: Bundles :: Hue Sync Box Binding . SUCCESS [ 13.966 s]
[INFO] openHAB Add-ons :: Bundles :: Hydrawise Binding .... SUCCESS [ 12.742 s]
[INFO] openHAB Add-ons :: Bundles :: Hyperion Binding ..... SUCCESS [  9.539 s]
[INFO] openHAB Add-ons :: Bundles :: Iammeter Binding ..... SUCCESS [  8.975 s]
[INFO] openHAB Add-ons :: Bundles :: iAquaLink Binding .... SUCCESS [ 25.894 s]
[INFO] openHAB Add-ons :: Bundles :: iCalendar Binding .... SUCCESS [ 25.673 s]
[INFO] openHAB Add-ons :: Bundles :: iCloud Binding ....... SUCCESS [02:15 min]
[INFO] openHAB Add-ons :: Bundles :: IHC Binding .......... SUCCESS [ 26.682 s]
[INFO] openHAB Add-ons :: Bundles :: Insteon Binding ...... SUCCESS [ 36.693 s]
[INFO] openHAB Add-ons :: Bundles :: Intesis Binding ...... SUCCESS [  9.269 s]
[INFO] openHAB Add-ons :: Bundles :: IoTaWatt Binding ..... SUCCESS [ 10.608 s]
[INFO] openHAB Add-ons :: Bundles :: IpCamera Binding ..... SUCCESS [ 14.357 s]
[INFO] openHAB Add-ons :: Bundles :: IpObserver Binding ... SUCCESS [ 10.378 s]
[INFO] openHAB Add-ons :: Bundles :: IPP Binding .......... SUCCESS [ 44.042 s]
[INFO] openHAB Add-ons :: Bundles :: iRobot Binding ....... SUCCESS [ 10.671 s]
[INFO] openHAB Add-ons :: Bundles :: IRtrans Binding ...... SUCCESS [  9.252 s]
[INFO] openHAB Add-ons :: Bundles :: Ism8 Binding ......... SUCCESS [ 11.571 s]
[INFO] openHAB Add-ons :: Bundles :: Jablotron Binding .... SUCCESS [ 10.427 s]
[INFO] openHAB Add-ons :: Bundles :: JeeLink Binding ...... SUCCESS [ 10.127 s]
[INFO] openHAB Add-ons :: Bundles :: Jellyfin Binding ..... SUCCESS [03:15 min]
[INFO] openHAB Add-ons :: Bundles :: Kaleidescape Binding . SUCCESS [ 12.632 s]
[INFO] openHAB Add-ons :: Bundles :: Keba Binding ......... SUCCESS [  9.961 s]
[INFO] openHAB Add-ons :: Bundles :: KM200 Binding ........ SUCCESS [ 12.919 s]
[INFO] openHAB Add-ons :: Bundles :: KNX Binding .......... SUCCESS [ 33.362 s]
[INFO] openHAB Add-ons :: Bundles :: Kodi Binding ......... SUCCESS [ 11.645 s]
[INFO] openHAB Add-ons :: Bundles :: Konnected Binding .... SUCCESS [ 10.124 s]
[INFO] openHAB Add-ons :: Bundles :: Kostal Binding ....... SUCCESS [ 11.576 s]
[INFO] openHAB Add-ons :: Bundles :: KVV Binding .......... SUCCESS [  9.270 s]
[INFO] openHAB Add-ons :: Bundles :: LaMetric Time Binding  SUCCESS [ 21.885 s]
[INFO] openHAB Add-ons :: Bundles :: LCN Binding .......... SUCCESS [ 20.957 s]
[INFO] openHAB Add-ons :: Bundles :: Leap Motion Binding .. SUCCESS [ 10.126 s]
[INFO] openHAB Add-ons :: Bundles :: LG HomBot Binding .... SUCCESS [ 10.063 s]
[INFO] openHAB Add-ons :: Bundles :: LG Thinq Binding ..... SUCCESS [ 24.661 s]
[INFO] openHAB Add-ons :: Bundles :: LG TV Serial Binding . SUCCESS [ 10.154 s]
[INFO] openHAB Add-ons :: Bundles :: LG webOS Binding ..... SUCCESS [ 12.149 s]
[INFO] openHAB Add-ons :: Bundles :: LIFX Binding ......... SUCCESS [ 20.244 s]
[INFO] openHAB Add-ons :: Bundles :: LinkPlay Binding ..... SUCCESS [ 14.259 s]
[INFO] openHAB Add-ons :: Bundles :: LinkTap Binding ...... SUCCESS [ 14.454 s]
[INFO] openHAB Add-ons :: Bundles :: Linky Binding ........ SUCCESS [ 15.921 s]
[INFO] openHAB Add-ons :: Bundles :: LinuxInput Binding ... SUCCESS [  9.913 s]
[INFO] openHAB Add-ons :: Bundles :: LiquidCheck Binding .. SUCCESS [ 11.557 s]
[INFO] openHAB Add-ons :: Bundles :: LIRC Binding ......... SUCCESS [  8.659 s]
[INFO] openHAB Add-ons :: Bundles :: LIVISI SmartHome Binding SUCCESS [ 17.955 s]
[INFO] openHAB Add-ons :: Bundles :: Log Reader Binding ... SUCCESS [ 14.440 s]
[INFO] openHAB Add-ons :: Bundles :: Loxone Binding ....... SUCCESS [ 20.993 s]
[INFO] openHAB Add-ons :: Bundles :: Lutron Binding ....... SUCCESS [ 21.480 s]
[INFO] openHAB Add-ons :: Bundles :: Luxom Binding ........ SUCCESS [ 10.524 s]
[INFO] openHAB Add-ons :: Bundles :: Luxtronik Heatpump Binding SUCCESS [ 10.924 s]
[INFO] openHAB Add-ons :: Bundles :: MagentaTV Binding .... SUCCESS [ 12.234 s]
[INFO] openHAB Add-ons :: Bundles :: Mail Binding ......... SUCCESS [ 13.106 s]
[INFO] openHAB Add-ons :: Bundles :: Matter Binding ....... SUCCESS [04:42 min]
[INFO] openHAB Add-ons :: Bundles :: MaxCube Binding ...... SUCCESS [ 16.557 s]
[INFO] openHAB Add-ons :: Bundles :: MCD Binding .......... SUCCESS [ 11.286 s]
[INFO] openHAB Add-ons :: Bundles :: mcp23017 Binding ..... SUCCESS [ 12.141 s]
[INFO] openHAB Add-ons :: Bundles :: Meater Binding ....... SUCCESS [  8.923 s]
[INFO] openHAB Add-ons :: Bundles :: mecMeter Binding ..... SUCCESS [  9.594 s]
[INFO] openHAB Add-ons :: Bundles :: MELCloud Binding ..... SUCCESS [  8.836 s]
[INFO] openHAB Add-ons :: Bundles :: MercedesMe Binding ... SUCCESS [03:45 min]
[INFO] openHAB Add-ons :: Bundles :: Meross Binding ....... SUCCESS [ 12.015 s]
[INFO] openHAB Add-ons :: Bundles :: meteoblue Binding .... SUCCESS [ 10.805 s]
[INFO] openHAB Add-ons :: Bundles :: Meteo France Binding . SUCCESS [ 12.815 s]
[INFO] openHAB Add-ons :: Bundles :: meteostick Binding ... SUCCESS [ 10.899 s]
[INFO] openHAB Add-ons :: Bundles :: MetOffice DataHub Binding SUCCESS [ 11.759 s]
[INFO] openHAB Add-ons :: Bundles :: MfFan Binding ........ SUCCESS [  9.135 s]
[INFO] openHAB Add-ons :: Bundles :: MideaAC Binding ...... SUCCESS [ 19.525 s]
[INFO] openHAB Add-ons :: Bundles :: Miele Binding ........ SUCCESS [ 16.694 s]
[INFO] openHAB Add-ons :: Bundles :: Miele Cloud Binding .. SUCCESS [ 27.541 s]
[INFO] openHAB Add-ons :: Bundles :: Xiaomi Mi Smart Home Binding SUCCESS [ 11.698 s]
[INFO] openHAB Add-ons :: Bundles :: Xiaomi Wifi devices (Mi IO) Binding SUCCESS [ 24.382 s]
[INFO] openHAB Add-ons :: Bundles :: Mikrotik Binding ..... SUCCESS [ 12.243 s]
[INFO] openHAB Add-ons :: Bundles :: Milight Binding ...... SUCCESS [ 10.026 s]
[INFO] openHAB Add-ons :: Bundles :: Millheat Binding ..... SUCCESS [ 11.454 s]
[INFO] openHAB Add-ons :: Bundles :: Minecraft Binding .... SUCCESS [ 22.232 s]
[INFO] openHAB Add-ons :: Bundles :: Modbus Binding ....... SUCCESS [ 10.935 s]
[INFO] openHAB Add-ons :: Bundles :: E3DC Modbus Binding .. SUCCESS [ 17.633 s]
[INFO] openHAB Add-ons :: Bundles :: Modbus FoxInverter Binding SUCCESS [ 17.440 s]
[INFO] openHAB Add-ons :: Bundles :: HeliosEasyControls Binding SUCCESS [ 13.544 s]
[INFO] openHAB Add-ons :: Bundles :: Kermi Modbus Binding . SUCCESS [ 10.554 s]
[INFO] openHAB Add-ons :: Bundles :: Lambda Binding ....... SUCCESS [  8.997 s]
[INFO] openHAB Add-ons :: Bundles :: Modbus SBC Binding ... SUCCESS [  7.769 s]
[INFO] openHAB Add-ons :: Bundles :: StiebelEltron Bundle . SUCCESS [ 11.587 s]
[INFO] openHAB Add-ons :: Bundles :: Studer Binding ....... SUCCESS [  9.699 s]
[INFO] openHAB Add-ons :: Bundles :: Modbus Sungrow Binding SUCCESS [ 12.571 s]
[INFO] openHAB Add-ons :: Bundles :: SunSpec Bundle ....... SUCCESS [ 10.161 s]
[INFO] openHAB Add-ons :: Bundles :: MonopriceAudio Binding SUCCESS [  8.096 s]
[INFO] openHAB Add-ons :: Bundles :: MPD Binding .......... SUCCESS [  7.838 s]
[INFO] openHAB Add-ons :: Bundles :: MQTT Awtrix 3 ........ SUCCESS [ 11.729 s]
[INFO] openHAB Add-ons :: Bundles :: MQTT EspMilightHub ... SUCCESS [  7.508 s]
[INFO] openHAB Add-ons :: Bundles :: MQTT Ruuvi Gateway ... SUCCESS [ 12.700 s]
[INFO] openHAB Add-ons :: Bundles :: MSpa Binding ......... SUCCESS [ 12.109 s]
[INFO] openHAB Add-ons :: Bundles :: Mycroft Binding ...... SUCCESS [ 10.609 s]
[INFO] openHAB Add-ons :: Bundles :: MyNice Binding ....... SUCCESS [02:09 min]
[INFO] openHAB Add-ons :: Bundles :: mystrom Binding ...... SUCCESS [  7.562 s]
[INFO] openHAB Add-ons :: Bundles :: myUplink Binding ..... SUCCESS [ 11.758 s]
[INFO] openHAB Add-ons :: Bundles :: Nanoleaf Binding ..... SUCCESS [ 14.168 s]
[INFO] openHAB Add-ons :: Bundles :: Neato Binding ........ SUCCESS [  8.543 s]
[INFO] openHAB Add-ons :: Bundles :: Neeo Binding ......... SUCCESS [ 11.982 s]
[INFO] openHAB Add-ons :: Bundles :: NeoHub Binding ....... SUCCESS [ 14.680 s]
[INFO] openHAB Add-ons :: Bundles :: Nest Binding ......... SUCCESS [ 16.721 s]
[INFO] openHAB Add-ons :: Bundles :: Netatmo Binding ...... SUCCESS [ 24.472 s]
[INFO] openHAB Add-ons :: Bundles :: Network Binding ...... SUCCESS [ 19.647 s]
[INFO] openHAB Add-ons :: Bundles :: Network UPS Tools Binding SUCCESS [ 14.164 s]
[INFO] openHAB Add-ons :: Bundles :: Nibe Heatpump Binding  SUCCESS [ 25.066 s]
[INFO] openHAB Add-ons :: Bundles :: Nikobus Binding ...... SUCCESS [  9.205 s]
[INFO] openHAB Add-ons :: Bundles :: Niko Home Control Binding SUCCESS [ 17.863 s]
[INFO] openHAB Add-ons :: Bundles :: NoboHub Binding ...... SUCCESS [ 13.598 s]
[INFO] openHAB Add-ons :: Bundles :: NovaFineDust Binding . SUCCESS [  9.199 s]
[INFO] openHAB Add-ons :: Bundles :: Ntfy Binding ......... SUCCESS [ 10.525 s]
[INFO] openHAB Add-ons :: Bundles :: NTP Binding .......... SUCCESS [  8.088 s]
[INFO] openHAB Add-ons :: Bundles :: Nuki Binding ......... SUCCESS [ 11.572 s]
[INFO] openHAB Add-ons :: Bundles :: Nuvo Binding ......... SUCCESS [ 11.368 s]
[INFO] openHAB Add-ons :: Bundles :: NZ Water Alerts Binding SUCCESS [  8.726 s]
[INFO] openHAB Add-ons :: Bundles :: Oceanic Binding ...... SUCCESS [  8.583 s]
[INFO] openHAB Add-ons :: Bundles :: OJElectronics Binding  SUCCESS [ 11.685 s]
[INFO] openHAB Add-ons :: Bundles :: OmnikInverter Binding  SUCCESS [ 10.341 s]
[INFO] openHAB Add-ons :: Bundles :: OmniLink Binding ..... SUCCESS [ 12.184 s]
[INFO] openHAB Add-ons :: Bundles :: Ondilo Binding ....... SUCCESS [ 10.653 s]
[INFO] openHAB Add-ons :: Bundles :: OneBusAway Binding ... SUCCESS [  9.541 s]
[INFO] openHAB Add-ons :: Bundles :: OneWire Binding ...... SUCCESS [ 15.991 s]
[INFO] openHAB Add-ons :: Bundles :: OneWireGPIO Binding .. SUCCESS [  7.551 s]
[INFO] openHAB Add-ons :: Bundles :: Onkyo Binding ........ SUCCESS [ 11.700 s]
[INFO] openHAB Add-ons :: Bundles :: OpenGarage Binding ... SUCCESS [  7.471 s]
[INFO] openHAB Add-ons :: Bundles :: OpenSprinkler Binding  SUCCESS [  9.491 s]
[INFO] openHAB Add-ons :: Bundles :: OpenTherm Gateway Binding SUCCESS [  8.732 s]
[INFO] openHAB Add-ons :: Bundles :: OpenUV Binding ....... SUCCESS [  8.087 s]
[INFO] openHAB Add-ons :: Bundles :: OpenWeatherMap Binding SUCCESS [ 13.366 s]
[INFO] openHAB Add-ons :: Bundles :: OpenWebNet (BTicino/Legrand) Binding SUCCESS [ 15.340 s]
[INFO] openHAB Add-ons :: Bundles :: Oppo Binding ......... SUCCESS [  9.769 s]
[INFO] openHAB Add-ons :: Bundles :: Orbit B-hyve Binding . SUCCESS [  8.588 s]
[INFO] openHAB Add-ons :: Bundles :: Orvibo Binding ....... SUCCESS [  7.747 s]
[INFO] openHAB Add-ons :: Bundles :: Panasonic Blu-ray Player Binding SUCCESS [  7.411 s]
[INFO] openHAB Add-ons :: Bundles :: ParadoxAlarm Binding . SUCCESS [ 12.964 s]
[INFO] openHAB Add-ons :: Bundles :: PegelOnline Binding .. SUCCESS [ 10.319 s]
[INFO] openHAB Add-ons :: Bundles :: Pentair Binding ...... SUCCESS [ 13.729 s]
[INFO] openHAB Add-ons :: Bundles :: PHC Binding .......... SUCCESS [  7.169 s]
[INFO] openHAB Add-ons :: Bundles :: Pi-hole Binding ...... SUCCESS [ 11.152 s]
[INFO] openHAB Add-ons :: Bundles :: Pilight Binding ...... SUCCESS [  9.312 s]
[INFO] openHAB Add-ons :: Bundles :: PioneerAvr Binding ... SUCCESS [  8.898 s]
[INFO] openHAB Add-ons :: Bundles :: pixometer Binding .... SUCCESS [  8.824 s]
[INFO] openHAB Add-ons :: Bundles :: PJLink Binding ....... SUCCESS [ 10.321 s]
[INFO] openHAB Add-ons :: Bundles :: Sony PlayStation Binding SUCCESS [  9.945 s]
[INFO] openHAB Add-ons :: Bundles :: PLCLogo Binding ...... SUCCESS [ 10.243 s]
[INFO] openHAB Add-ons :: Bundles :: Plex Binding ......... SUCCESS [ 11.610 s]
[INFO] openHAB Add-ons :: Bundles :: Plugwise Binding ..... SUCCESS [ 13.310 s]
[INFO] openHAB Add-ons :: Bundles :: PlugwiseHA Binding ... SUCCESS [ 10.055 s]
[INFO] openHAB Add-ons :: Bundles :: Powermax Binding ..... SUCCESS [ 13.173 s]
[INFO] openHAB Add-ons :: Bundles :: ProteusEcoMeter Binding SUCCESS [  8.184 s]
[INFO] openHAB Add-ons :: Bundles :: Prowl Binding ........ SUCCESS [  7.130 s]
[INFO] openHAB Add-ons :: Bundles :: PublicTransportSwitzerland Binding SUCCESS [  7.687 s]
[INFO] openHAB Add-ons :: Bundles :: Pulseaudio Binding ... SUCCESS [ 13.685 s]
[INFO] openHAB Add-ons :: Bundles :: Pushbullet Binding ... SUCCESS [ 13.072 s]
[INFO] openHAB Add-ons :: Bundles :: Pushover Binding ..... SUCCESS [ 10.572 s]
[INFO] openHAB Add-ons :: Bundles :: Pushsafer Binding .... SUCCESS [ 10.619 s]
[INFO] openHAB Add-ons :: Bundles :: Qbus Binding ......... SUCCESS [ 10.007 s]
[INFO] openHAB Add-ons :: Bundles :: QolsysIQ Binding ..... SUCCESS [  9.632 s]
[INFO] openHAB Add-ons :: Bundles :: RadioBrowser Binding . SUCCESS [  8.280 s]
[INFO] openHAB Add-ons :: Bundles :: Radio Thermostat Binding SUCCESS [ 10.291 s]
[INFO] openHAB Add-ons :: Bundles :: RegoHeatPump Binding . SUCCESS [ 10.522 s]
[INFO] openHAB Add-ons :: Bundles :: RemehaHeating Binding  SUCCESS [ 10.557 s]
[INFO] openHAB Add-ons :: Bundles :: Remote openHAB Binding SUCCESS [ 10.398 s]
[INFO] openHAB Add-ons :: Bundles :: Renault Binding ...... SUCCESS [  8.907 s]
[INFO] openHAB Add-ons :: Bundles :: Resol Binding ........ SUCCESS [  9.364 s]
[INFO] openHAB Add-ons :: Bundles :: Revogi Binding ....... SUCCESS [ 11.697 s]
[INFO] openHAB Add-ons :: Bundles :: Rfxcom Binding ....... SUCCESS [ 19.055 s]
[INFO] openHAB Add-ons :: Bundles :: Ring Binding ......... SUCCESS [ 14.504 s]
[INFO] openHAB Add-ons :: Bundles :: RME Binding .......... SUCCESS [  8.931 s]
[INFO] openHAB Add-ons :: Bundles :: Robonect Binding ..... SUCCESS [ 10.974 s]
[INFO] openHAB Add-ons :: Bundles :: Roborock Binding ..... SUCCESS [ 19.673 s]
[INFO] openHAB Add-ons :: Bundles :: Roku Binding ......... SUCCESS [  9.009 s]
[INFO] openHAB Add-ons :: Bundles :: Rotel Binding ........ SUCCESS [ 11.907 s]
[INFO] openHAB Add-ons :: Bundles :: Russound Binding ..... SUCCESS [ 11.036 s]
[INFO] openHAB Add-ons :: Bundles :: Sager Weathercaster Binding SUCCESS [  8.121 s]
[INFO] openHAB Add-ons :: Bundles :: Salus Binding ........ SUCCESS [ 29.995 s]
[INFO] openHAB Add-ons :: Bundles :: SamsungTV Binding .... SUCCESS [ 13.182 s]
[INFO] openHAB Add-ons :: Bundles :: Satel Binding ........ SUCCESS [ 15.379 s]
[INFO] openHAB Add-ons :: Bundles :: Sbus Binding ......... SUCCESS [  9.338 s]
[INFO] openHAB Add-ons :: Bundles :: Sedif Binding ........ SUCCESS [  9.967 s]
[INFO] openHAB Add-ons :: Bundles :: SEMSPortal Binding ... SUCCESS [ 10.345 s]
[INFO] openHAB Add-ons :: Bundles :: SenecHome Binding .... SUCCESS [  9.676 s]
[INFO] openHAB Add-ons :: Bundles :: Seneye Binding ....... SUCCESS [  7.438 s]
[INFO] openHAB Add-ons :: Bundles :: senseBox Binding ..... SUCCESS [  7.197 s]
[INFO] openHAB Add-ons :: Bundles :: SenseEnergy Binding .. SUCCESS [ 12.521 s]
[INFO] openHAB Add-ons :: Bundles :: Sensibo Binding ...... SUCCESS [ 17.677 s]
[INFO] openHAB Add-ons :: Bundles :: Sensor.Community Binding SUCCESS [ 12.206 s]
[INFO] openHAB Add-ons :: Bundles :: Serial Binding ....... SUCCESS [ 12.644 s]
[INFO] openHAB Add-ons :: Bundles :: SerialButton Binding . SUCCESS [  8.317 s]
[INFO] openHAB Add-ons :: Bundles :: Shelly Binding ....... SUCCESS [ 27.767 s]
[INFO] openHAB Add-ons :: Bundles :: SiemensHvac Binding .. SUCCESS [ 16.221 s]
[INFO] openHAB Add-ons :: Bundles :: Siemens RDS Binding .. SUCCESS [ 14.627 s]
[INFO] openHAB Add-ons :: Bundles :: Silvercrest Wifi Socket Binding SUCCESS [ 10.328 s]
[INFO] openHAB Add-ons :: Bundles :: Sinope Binding ....... SUCCESS [ 12.023 s]
[INFO] openHAB Add-ons :: Bundles :: SleepIQ Binding ...... SUCCESS [ 15.521 s]
[INFO] openHAB Add-ons :: Bundles :: SMA EnergyMeter Binding SUCCESS [  8.586 s]
[INFO] openHAB Add-ons :: Bundles :: Smartmeter Binding ... SUCCESS [ 34.417 s]
[INFO] openHAB Add-ons :: Bundles :: Samsung Smartthings Binding SUCCESS [  9.164 s]
[INFO] openHAB Add-ons :: Bundles :: PPC SMGW Binding ..... SUCCESS [  7.416 s]
[INFO] openHAB Add-ons :: Bundles :: Smhi Binding ......... SUCCESS [ 11.850 s]
[INFO] openHAB Add-ons :: Bundles :: SMSModem Binding ..... SUCCESS [  9.438 s]
[INFO] openHAB Add-ons :: Bundles :: SNCF Binding ......... SUCCESS [  8.118 s]
[INFO] openHAB Add-ons :: Bundles :: SNMP Binding ......... SUCCESS [ 15.836 s]
[INFO] openHAB Add-ons :: Bundles :: SolarEdge Binding .... SUCCESS [  8.745 s]
[INFO] openHAB Add-ons :: Bundles :: SolarForecast Binding  SUCCESS [ 17.358 s]
[INFO] openHAB Add-ons :: Bundles :: Solar-Log Binding .... SUCCESS [  7.322 s]
[INFO] openHAB Add-ons :: Bundles :: Solarman Binding ..... SUCCESS [ 13.857 s]
[INFO] openHAB Add-ons :: Bundles :: SolarMax Binding ..... SUCCESS [  8.568 s]
[INFO] openHAB Add-ons :: Bundles :: Solarwatt Binding .... SUCCESS [  8.173 s]
[INFO] openHAB Add-ons :: Bundles :: Solax Binding ........ SUCCESS [ 14.234 s]
[INFO] openHAB Add-ons :: Bundles :: SomfyCUL Binding ..... SUCCESS [  8.651 s]
[INFO] openHAB Add-ons :: Bundles :: Somfy MyLink Binding . SUCCESS [  8.613 s]
[INFO] openHAB Add-ons :: Bundles :: SomfyTahoma Binding .. SUCCESS [ 11.937 s]
[INFO] openHAB Add-ons :: Bundles :: Somneo Binding ....... SUCCESS [  9.435 s]
[INFO] openHAB Add-ons :: Bundles :: Sonnen Binding ....... SUCCESS [  7.622 s]
[INFO] openHAB Add-ons :: Bundles :: Sonos Binding ........ SUCCESS [ 12.507 s]
[INFO] openHAB Add-ons :: Bundles :: SonyAudio Binding .... SUCCESS [  9.811 s]
[INFO] openHAB Add-ons :: Bundles :: Sony Projector Binding SUCCESS [ 10.871 s]
[INFO] openHAB Add-ons :: Bundles :: Souliss Binding ...... SUCCESS [  9.406 s]
[INFO] openHAB Add-ons :: Bundles :: Speedtest Binding .... SUCCESS [  7.598 s]
[INFO] openHAB Add-ons :: Bundles :: Spotify Binding ...... SUCCESS [  9.538 s]
[INFO] openHAB Add-ons :: Bundles :: SqueezeBox Binding ... SUCCESS [ 10.295 s]
[INFO] openHAB Add-ons :: Bundles :: SunSynk Binding ...... SUCCESS [  9.868 s]
[INFO] openHAB Add-ons :: Bundles :: SurePetcare Binding .. SUCCESS [ 13.341 s]
[INFO] openHAB Add-ons :: Bundles :: Synop Analyzer Binding SUCCESS [  9.225 s]
[INFO] openHAB Add-ons :: Bundles :: SystemInfo Binding ... SUCCESS [ 32.859 s]
[INFO] openHAB Add-ons :: Bundles :: TA C.M.I. Binding .... SUCCESS [ 13.042 s]
[INFO] openHAB Add-ons :: Bundles :: Tado Binding ......... SUCCESS [ 16.170 s]
[INFO] openHAB Add-ons :: Bundles :: Tankerkoenig Binding . SUCCESS [  7.207 s]
[INFO] openHAB Add-ons :: Bundles :: TapoControl Binding .. SUCCESS [ 14.517 s]
[INFO] openHAB Add-ons :: Bundles :: Tasmota Plug Binding . SUCCESS [  8.518 s]
[INFO] openHAB Add-ons :: Bundles :: Telegram Binding ..... SUCCESS [01:25 min]
[INFO] openHAB Add-ons :: Bundles :: Teleinfo Binding ..... SUCCESS [ 11.796 s]
[INFO] openHAB Add-ons :: Bundles :: Tellstick Binding .... SUCCESS [ 18.287 s]
[INFO] openHAB Add-ons :: Bundles :: Tesla Binding ........ SUCCESS [ 10.179 s]
[INFO] openHAB Add-ons :: Bundles :: Tesla Powerwall Binding SUCCESS [  7.858 s]
[INFO] openHAB Add-ons :: Bundles :: Teslascope Binding ... SUCCESS [  8.400 s]
[INFO] openHAB Add-ons :: Bundles :: Tibber Binding ....... SUCCESS [ 14.896 s]
[INFO] openHAB Add-ons :: Bundles :: TiVo Binding ......... SUCCESS [  7.131 s]
[INFO] openHAB Add-ons :: Bundles :: TouchWand Binding .... SUCCESS [  9.376 s]
[INFO] openHAB Add-ons :: Bundles :: TpLinkRouter Binding . SUCCESS [  6.764 s]
[INFO] openHAB Add-ons :: Bundles :: TP-Link Smart Home Binding SUCCESS [ 14.318 s]
[INFO] openHAB Add-ons :: Bundles :: TR-064 Binding ....... SUCCESS [ 16.804 s]
[INFO] openHAB Add-ons :: Bundles :: TRÅDFRI Binding ...... SUCCESS [ 11.858 s]
[INFO] openHAB Add-ons :: Bundles :: Tuya Binding ......... SUCCESS [ 18.637 s]
[INFO] openHAB Add-ons :: Bundles :: Twilio Binding ....... SUCCESS [  8.560 s]
[INFO] openHAB Add-ons :: Bundles :: UniFi Binding ........ SUCCESS [ 10.268 s]
[INFO] openHAB Add-ons :: Bundles :: UnifiAccess Binding .. SUCCESS [ 11.806 s]
[INFO] openHAB Add-ons :: Bundles :: UnifiedRemote Binding  SUCCESS [  8.042 s]
[INFO] openHAB Add-ons :: Bundles :: UnifiProtect Binding . SUCCESS [ 16.540 s]
[INFO] openHAB Add-ons :: Bundles :: UPB Binding .......... SUCCESS [  9.765 s]
[INFO] openHAB Add-ons :: Bundles :: UPnP Control Binding . SUCCESS [ 14.217 s]
[INFO] openHAB Add-ons :: Bundles :: Somfy URTSI II binding SUCCESS [  6.662 s]
[INFO] openHAB Add-ons :: Bundles :: ValloxMV Binding ..... SUCCESS [  8.016 s]
[INFO] openHAB Add-ons :: Bundles :: VDR Binding .......... SUCCESS [  9.117 s]
[INFO] openHAB Add-ons :: Bundles :: Vektiva Binding ...... SUCCESS [  6.869 s]
[INFO] openHAB Add-ons :: Bundles :: Velbus Binding ....... SUCCESS [ 12.181 s]
[INFO] openHAB Add-ons :: Bundles :: Velux Binding ........ SUCCESS [ 17.777 s]
[INFO] openHAB Add-ons :: Bundles :: Venstar Thermostat Binding SUCCESS [  8.731 s]
[INFO] openHAB Add-ons :: Bundles :: VentaAir Binding ..... SUCCESS [  7.410 s]
[INFO] openHAB Add-ons :: Bundles :: Verisure Binding ..... SUCCESS [ 10.685 s]
[INFO] openHAB Add-ons :: Bundles :: VeSync Binding ....... SUCCESS [ 10.641 s]
[INFO] openHAB Add-ons :: Bundles :: Viessmann Binding .... SUCCESS [ 13.031 s]
[INFO] openHAB Add-ons :: Bundles :: VigiCrues Binding .... SUCCESS [  9.178 s]
[INFO] openHAB Add-ons :: Bundles :: VisualCrossing Binding SUCCESS [ 12.458 s]
[INFO] openHAB Add-ons :: Bundles :: Vitotronic Binding ... SUCCESS [  7.402 s]
[INFO] openHAB Add-ons :: Bundles :: Vizio Binding ........ SUCCESS [  9.044 s]
[INFO] openHAB Add-ons :: Bundles :: Volvo On Call Binding  SUCCESS [  9.380 s]
[INFO] openHAB Add-ons :: Bundles :: Volumio Binding ...... SUCCESS [ 13.889 s]
[INFO] openHAB Add-ons :: Bundles :: Warmup Binding ....... SUCCESS [  7.474 s]
[INFO] openHAB Add-ons :: Bundles :: WeatherCompany Binding SUCCESS [  8.392 s]
[INFO] openHAB Add-ons :: Bundles :: WeatherUnderground Binding SUCCESS [  8.260 s]
[INFO] openHAB Add-ons :: Bundles :: WebexTeams Binding ... SUCCESS [  8.650 s]
[INFO] openHAB Add-ons :: Bundles :: WebThing Binding ..... SUCCESS [ 13.444 s]
[INFO] openHAB Add-ons :: Bundles :: Wemo Binding ......... SUCCESS [ 12.979 s]
[INFO] openHAB Add-ons :: Bundles :: WiFiLED Binding ...... SUCCESS [  9.363 s]
[INFO] openHAB Add-ons :: Bundles :: Windcentrale Binding . SUCCESS [ 10.949 s]
[INFO] openHAB Add-ons :: Bundles :: WiZ Binding .......... SUCCESS [  8.995 s]
[INFO] openHAB Add-ons :: Bundles :: WlanThermo Binding ... SUCCESS [ 11.317 s]
[INFO] openHAB Add-ons :: Bundles :: WLed Binding ......... SUCCESS [  8.867 s]
[INFO] openHAB Add-ons :: Bundles :: WolfSmartset Binding . SUCCESS [  9.479 s]
[INFO] openHAB Add-ons :: Bundles :: Worx Landroid Binding  SUCCESS [ 13.345 s]
[INFO] openHAB Add-ons :: Bundles :: Wunderground Update Receiver Binding SUCCESS [ 10.036 s]
[INFO] openHAB Add-ons :: Bundles :: X Binding ............ SUCCESS [  9.071 s]
[INFO] openHAB Add-ons :: Bundles :: XMLTV Binding ........ SUCCESS [  7.638 s]
[INFO] openHAB Add-ons :: Bundles :: XMPPClient Binding ... SUCCESS [ 14.069 s]
[INFO] openHAB Add-ons :: Bundles :: Yamaha Musiccast Binding SUCCESS [  9.838 s]
[INFO] openHAB Add-ons :: Bundles :: Yamaha Receiver Binding SUCCESS [ 15.177 s]
[INFO] openHAB Add-ons :: Bundles :: Yeelight Binding ..... SUCCESS [ 12.196 s]
[INFO] openHAB Add-ons :: Bundles :: YIOremote Binding .... SUCCESS [  7.726 s]
[INFO] openHAB Add-ons :: Bundles :: ZoneMinder Binding ... SUCCESS [  9.354 s]
[INFO] openHAB Add-ons :: Bundles :: Z-Wave JS Binding .... SUCCESS [ 17.990 s]
[INFO] openHAB Add-ons :: Bundles :: ZWay Binding ......... SUCCESS [ 10.735 s]
[INFO] openHAB Add-ons :: Bundles :: IO :: Homekit ........ SUCCESS [02:29 min]
[INFO] openHAB Add-ons :: Bundles :: IO :: Hue Emulation Service SUCCESS [ 18.465 s]
[INFO] openHAB Add-ons :: Bundles :: IO :: Model Context Protocol Server SUCCESS [ 46.602 s]
[INFO] openHAB Add-ons :: Bundles :: IO :: Metrics Service  SUCCESS [ 23.676 s]
[INFO] openHAB Add-ons :: Bundles :: IO :: NEEO Integration SUCCESS [ 15.244 s]
[INFO] openHAB Add-ons :: Bundles :: IO :: openHAB Cloud Connector SUCCESS [  8.855 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: DynamoDB SUCCESS [01:01 min]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: InfluxDB SUCCESS [04:19 min]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: InMemory SUCCESS [  8.540 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: JDBC SUCCESS [ 16.846 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: JPA SUCCESS [01:16 min]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: MapDB SUCCESS [ 10.664 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: MongoDB SUCCESS [ 45.652 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: RRD4j SUCCESS [ 17.443 s]
[INFO] openHAB Add-ons :: Bundles :: Persistence Service :: TimescaleDB SUCCESS [ 34.736 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Basic Profiles SUCCESS [ 12.213 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Binary To JSON SUCCESS [  7.692 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Exec SUCCESS [  6.441 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Geocoding SUCCESS [  9.717 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Jinja SUCCESS [  8.630 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: JSonPath SUCCESS [ 13.247 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Math SUCCESS [  9.466 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: RegEx SUCCESS [  9.102 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Roller Shutter Position SUCCESS [  6.756 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Scale SUCCESS [  9.939 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Value-Added Tax SUCCESS [ 10.160 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: XPath SUCCESS [  8.596 s]
[INFO] openHAB Add-ons :: Bundles :: Transformation Service :: Xslt SUCCESS [  8.609 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Google Cloud Speech to Text SUCCESS [03:15 min]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Google Cloud Text-to-Speech SUCCESS [  7.301 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: macOS Text-to-Speech SUCCESS [  9.719 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Mary Text-to-Speech SUCCESS [01:26 min]
[INFO] openHAB Add-ons :: Bundles :: Voice :: mimic Text-To-Speech SUCCESS [  8.583 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: OpenAI Text-to-Speech SUCCESS [  7.175 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Pico Text-to-Speech SUCCESS [  7.088 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Piper Text-to-Speech SUCCESS [  8.257 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Polly Text-to-Speech SUCCESS [  6.828 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Rustpotter Keyword Spotter SUCCESS [  8.642 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: VoiceRSS Text-to-Speech SUCCESS [  9.991 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Vosk Speech to Text SUCCESS [ 16.577 s]
[INFO] openHAB Add-ons :: Bundles :: Voice :: IBM Watson Speech to Text SUCCESS [01:29 min]
[INFO] openHAB Add-ons :: Bundles :: Voice :: Whisper Speech-to-Text SUCCESS [  9.760 s]
[INFO] openHAB Add-ons :: BOM :: openHAB Add-ons .......... SUCCESS [  0.369 s]
[INFO] openHAB Add-ons :: Bundles :: HD Powerview Bluetooth Adapter SUCCESS [ 10.084 s]
[INFO] openHAB Add-ons :: Bundles :: MQTT FPP ............. SUCCESS [  9.190 s]
[INFO] openHAB Add-ons :: Features :: Karaf ............... SUCCESS [  0.457 s]
[INFO] openHAB Add-ons :: Features :: Karaf :: Add-ons External SUCCESS [  4.098 s]
[INFO] openHAB Add-ons :: Features :: Karaf :: Add-ons .... SUCCESS [  2.679 s]
[INFO] openHAB Add-ons :: Integration Tests ............... SUCCESS [  8.829 s]
[INFO] openHAB Add-ons :: Integration Tests :: Groovy Scripting SUCCESS [ 17.315 s]
[INFO] openHAB Add-ons :: Integration Tests :: JavaScript Scripting SUCCESS [ 15.900 s]
[INFO] openHAB Add-ons :: Integration Tests :: JavaScript Scripting (Nashorn) SUCCESS [ 19.793 s]
[INFO] openHAB Add-ons :: Integration Tests :: AVM FRITZ! Binding Tests SUCCESS [ 14.734 s]
[INFO] openHAB Add-ons :: Integration Tests :: Feed Binding Tests SUCCESS [  9.344 s]
[INFO] openHAB Add-ons :: Integration Tests :: Home Assistant Tests SUCCESS [  9.527 s]
[INFO] openHAB Add-ons :: Integration Tests :: Homie Convention Tests SUCCESS [ 19.127 s]
[INFO] openHAB Add-ons :: Integration Tests :: hue Binding Tests SUCCESS [ 17.481 s]
[INFO] openHAB Add-ons :: Integration Tests :: MaxCube Binding Tests SUCCESS [ 14.611 s]
[INFO] openHAB Add-ons :: Integration Tests :: mielecloud Binding Tests SUCCESS [ 30.181 s]
[INFO] openHAB Add-ons :: Integration Tests :: Modbus Binding Tests SUCCESS [ 15.262 s]
[INFO] openHAB Add-ons :: Integration Tests :: MQTT Ruuvi Gateway Tests SUCCESS [ 17.430 s]
[INFO] openHAB Add-ons :: Integration Tests :: NTP Binding Tests SUCCESS [ 12.019 s]
[INFO] openHAB Add-ons :: Integration Tests :: SystemInfo Binding Tests SUCCESS [ 14.640 s]
[INFO] openHAB Add-ons :: Integration Tests :: TRÅDFRI Binding SUCCESS [ 10.789 s]
[INFO] openHAB Add-ons :: Integration Tests :: MapDB Persistence Tests SUCCESS [ 10.169 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  30:03 min (Wall Clock)
[INFO] Finished at: 2026-06-05T03:07:08+02:00
[INFO] ------------------------------------------------------------------------

Ravi Nadahar added 4 commits June 5, 2026 20:43
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
@dilyanpalauzov

Copy link
Copy Markdown
Contributor

The current change adds new implicit imports in DSL Rules/Scripts/Transforms and adds new methods to ScriptServiceUtil. Both changes are independent of each other.

Implicit imports

The implicit imports represent a syntaxis sugar: everything possible without the implicit imports is also possible with the implicit imports. This is how it has always worked in DSL Transformations.

One argument in favour of the implicit imports is, that when converting textual DSL rules (from .rules files), which do not have global variables, to YAML format, such conversions will be possible from the UI in more cases: when user have no explitit import …. For existing .rules file nothing changes - they keep the explicit imports. I do not think, that there will be many users, who at the same time want to convert textual rules to yaml, have no global variables and have explicit imports. So this argument is not so significant.

On the other side there is no concluding documentation including all implicit imports. This leads to allegations, that there are regressions in regards to changes of the implicit imports, but at the same time no examples are provided with these allegations, which worked with particular openHAB version in the past. TimeSeries being implicitly imported in the past is such allegation. Another allegation is that ChronoUnit.DAYS used to work in the past and at some moment DAYS also does work, but ChronoUnit.DAYS does not work anymore. I do not think, that ChronoUnit.DAYS has worked in DSL Scripts and DSL Rules before #5098.

In the absense of documentation of the available implicit imports, such allegations - something worked in the past, but does not work any more - will continue to emerge. The absense of documentation however also means, that implicit imports can be removed in future openHAB versions. (Because users currently feel the same, as if implicit imports were removed.) Writing DSL Scripts and Rules is currently a lof of trial and error, until it works. The “trial and error” will not change by adding more implicit imports, which are nowhere documented.

I suggest first writing down in the documentation at https://www.openhab.org/docs/ which implicit imports are availabe, and then possibly adding new implicit imports. However my feeling is that by the time the changes to the documentation are approved, people who wanted to add new implicit imports, would have lost their motivation. Thus before adding new implicit imports, the process of approving proposed changes to the documentation should be streamlined. As a matter of fact I have investigated such allegations in the past, I have put time there, and the way to avoid allegations in the future, that something was implicitly imported in the past and is not anymore - is to write down what is implicitly imported. The allegations will not disappear in the future by adding more implicit imports.

New methods to ScriptServiceUtil

Adding new methods to ScriptServiceUtil is syntaxis sugar, allowing access to RuleManager and others. Access to OSGi services like RuleManager can be done from Groovy and from DSL Rules/Scripts/Transformation in the same way (just Groovy does not have yet val, so var has to be used). Including in the documentation text how to RunRule() from Groovy (and thus from DSL Script currently) has not seen progress in nearly two months. I have no understanding why it takes so long: if in six weeks nobody has looked on a proposed change of the documentation, the change should be just accepted. There is likely more damage in not accepting documentaion changes, than accepting documenation changes, which in six weeks nobody has dared to read and object something.

Even without the current changes ScriptServiceUtil offers access to the ItemRegistry. ScriptServiceUtil is not documented at https://www.openhab.org/docs/, so users have to trial and error to find out how to access the item registry. After adding further methods to ScriptServiceUtil, I guess these will not be documented, too. So users will have to trial-and-error to find out how to run a rule (scene) from DSL Script/Rule/Transformation. By doing trial and error users might find https://github.com/openhab/openhab-docs/pull/2701/changes - and use the procedure described there, or they might find ScriptServiceUtil.getRuleManager().

That said I think it only makes sense to add new methods to ScriptServiceUtil after the current functionality is written in the documentation at https://www.openhab.org/docs/.

I am not willing to undermine here all the developement work done, but instead I want to emphasize that without documenting the current functionality, it makes little sense to add more undocumented functionality.

@Nadahar

Nadahar commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

I will say that in general, I absolutely agree that these things must be documented to be useful, but I started making this simply because I was told time and time that this and that couldn't be done from DSL. I looked into it and discovered that it was only true because nobody had enabled it. I know that it most of this "could" be done if you created the full "Java code" to handle all these things, but not always, because some things weren't available/visible to the scripts bundle. But, I also think it's pointless to argue that people should figure out all the details of how to do the things as if they were Java developers.

I think these things are more than just syntactic sugar. They provide various things that people typically need without having to go through all the technical details. It's a bit like saying that print() is syntactic sugar, because it's possible to send a stream to whatever your destination is, handling character encoding and everything else yourself. Ultimately, we should all write machine code if making things possible that would otherwise be possible with a lot more work, was "pointless".

The helper libraries basically do the same thing. You can do it all without helper libraries from JavaScript, Python and Ruby, but most people use the helper libraries. Languages that don't have helper libraries, like Groovy, has almost no users. Jython used to be quite widespread in OH from what I understand, but when the helper library was discontinued/disappeared, the language went more or less dead. It's still available, but I've yet to hear about anybody that use it in OH today. So, I think it's pretty evident that providing such easier access to common functionality is very important for most users.

There are tons more that could be added here, I didn't set out to make a full helper library for DSL, I was initially trying to figure out why some things "weren't possible". So, if there is will and demand, much more could be made available like this. I don't really use that "complex" rules that I need to manipulate registries etc., so I have little idea what is and isn't "needed", which is why I stopped once I had made some of the things that seemed most "handy".

When it comes to allegations about what used to work in the past, we have Git history, so we don't really need the documentation to figure out what is and isn't true. If Git history is too difficult, one can also simply run an older version and test.

@dilyanpalauzov

Copy link
Copy Markdown
Contributor

I was told time and time that this and that couldn't be done from DSL

In case of using RuleManager.RunRule() after adding to org.openhab.core.model.{rule,script}/MANIFEST.MF:Import-Package: org.openhab.core.automation in #5484 it is possible to use RunRule() from DSL Scripts/Rules/Transformations. What is missing are examples how to do so.

When it comes to allegations about what used to work in the past, we have Git history, so we don't really need the documentation to figure out what is and isn't true. If Git history is too difficult, one can also simply run an older version and test.

Can you, by looking at the git history, or by running an older version, find out, if TimeSeries has worked in DSL Script/Rules/Transformations, without explicit import org.openhab.core.types and without using the fully qualified org.openhab.core.types.TimeSeries?

@dilyanpalauzov

Copy link
Copy Markdown
Contributor

This change constists of:

  • changes to ActionClassLoader
  • new implicit imports (‎org.openhab.core.model.script.scoping.ScriptImplicitlyImportedTypes.java‎)
  • Xbase extensions
  • additions to ScriptServiceUtil

As the above bullets are completely independent of each other, and all of them combined produce 3100 new lines of code, I think it would have been better, if this single PR was split into several, distinct proposals for code changes.

@Nadahar

Nadahar commented Jun 6, 2026

Copy link
Copy Markdown
Contributor Author

In case of using RuleManager.RunRule() after adding to org.openhab.core.model.{rule,script}/MANIFEST.MF:Import-Package: org.openhab.core.automation in #5484 it is possible to use RunRule() from DSL Scripts/Rules/Transformations. What is missing are examples how to do so.

It wasn't just running other rules, but accessing some of the registries. Regardless, I've already explained why I don't think it matters much if it's "possible" if you have to know and use all the OSGi stuff yourself.

Can you, by looking at the git history, or by running an older version, find out, if TimeSeries has worked in DSL Script/Rules/Transformations, without explicit import org.openhab.core.types and without using the fully qualified org.openhab.core.types.TimeSeries?

Yes, according to the Git history, it was never available. That doesn't mean that we know that it didn't work, but that's a different issue entirely. If we had documentation for implicit imports, it wouldn't have been there. It would have changed nothing, it could still have worked.

As the above bullets are completely independent of each other, and all of them combined produce 3100 new lines of code, I think it would have been better, if this single PR was split into several, distinct proposals for code changes.

I disagree. I don't make changes based on the code structure, but based on the resulting change in behavior/"features". Many of the changes would make little or no sense alone, so it would be very difficult to try to justify why things were changed.

Signed-off-by: Ravi Nadahar <nadahar@rediffmail.com>
@rkoshak

rkoshak commented Jun 8, 2026

Copy link
Copy Markdown

. Jython used to be quite widespread in OH from what I understand, but when the helper library was discontinued/disappeared, the language went more or less dead. It's still available, but I've yet to hear about anybody that use it in OH today. So, I think it's pretty evident that providing such easier access to common functionality is very important for most users.

Just a little clarity on the history here.

Before OH 3, Jython was the most used non-DSL language. However, the helper library was maintained outside of the openHAB project and the author did not want to move it under the openHAB project. At the time of OH 3's release, that developer disappeared and closed down the helper library repo. The same developer was the only one maintaining the Jython add-on. So the add-on basically became abandonded.

Others forked the helper library repo and tried to keep it up but it became pretty clear that the overall situation was untenable. I personally started moving everything over the Nashorn JS without any helper library instead (and it was pretty miserable with 1/3 to 1/2 of all my code being importing OSGI crap over and over again) because it was clear that Jython wasn't going to be able to keep up in it's semi abandonded state.

It was and remains really awkward to have to use git to install the helper library.

Since then, GraalVM Python was added and, importantly, the main developer for that has taken on maintenance of Jython too so Jython isn't so abandonded any more.

However, I don't know if the Jython helper library is being kept up to date. And Jython still only supports the 2.7 version of Python that reached end-of-life more than six years ago. And the last time I looked, there was a whole lot that the Jython Helper Library doesn't support (i.e. it's not kept up with new OH features). The drop in use of Jython has more than just the Helper Library problems working against it, but that is a significant reason not to use it.

@Nadahar

Nadahar commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Just a little clarity on the history here.

Thanks for filling in, I don't know the full story, but my main point was that I disagree that it's "pointless" to add "convenience functions" even though it is possible to achieve the same if you write a lot of code that deals with OSGi and whatnot. That is fundamentally what this PR provides, and it is fundamentally what the helper libraries provides. It doesn't look "pointless" to me, because people seem to much prefer it and use it much more when such "convenience functions" are available.

@mherwege

mherwege commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Another allegation is that ChronoUnit.DAYS used to work in the past and at some moment DAYS also does work, but ChronoUnit.DAYS does not work anymore. I do not think, that ChronoUnit.DAYS has worked in DSL Scripts and DSL Rules before #5098.

We can argue for a very long time about this and I don't think it is worth trying to do all of the forensics to find the proof. ChronoUnit.DAYS is what I used since early OH2, and is also what was documented back then. At some point in time, that was lost and restored with the linked PR.
I agree TimeSeries was never there, and I can't explain why it would have worked. TimeSeries are a relatively recent adition to OH, so the history is easier to track on that.

I have since moved all my rules away from DSL, so anything I do is for ease of use for DSL users. And I do think there is a lot that can be made easier with DSL. The lack of ease, I would say, is a major reason people actually moved away from it.

@mherwege mherwege left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@mherwege

mherwege commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

I will give it a few days before merging, but LGTM.

@mherwege mherwege merged commit 3c147e8 into openhab:main Jun 11, 2026
5 checks passed
@mherwege mherwege added this to the 5.2 milestone Jun 11, 2026
@mherwege mherwege added the enhancement An enhancement or new feature of the Core label Jun 11, 2026
@Nadahar Nadahar deleted the dsl-extras branch June 11, 2026 21:18
@lolodomo

Copy link
Copy Markdown
Contributor

For your information, I discovered that I was already using ScriptServiceUtil in my DSL Rule file that way:

import org.openhab.core.model.script.ScriptServiceUtil

Rule "xxx"
when
	Item Fenetre1Salon changed from CLOSED to OPEN or
	Item Fenetre2Salon changed from CLOSED to OPEN or
        ....
then
	val item = ScriptServiceUtil.getItemRegistry?.getItem(triggeringItemName)
	val String itemLabel = item.label
        ...
end

With that PR, I understand that I don't need anymore to import ScriptServiceUtil and the equivalent will be:

Rule "xxx"
when
	Item Fenetre1Salon changed from CLOSED to OPEN or
	Item Fenetre2Salon changed from CLOSED to OPEN or
        ....
then
	val item = Items.getItem(triggeringItemName)
	val String itemLabel = item.label
        ...
end

So it is simplified.

Just to confirm that it works but the proper syntax is:

Rule "xxx"
when
	Item Fenetre1Salon changed from CLOSED to OPEN or
	Item Fenetre2Salon changed from CLOSED to OPEN or
        ....
then
	val item = Items.get(triggeringItemName)
	val String itemLabel = item.label
        ...
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement An enhancement or new feature of the Core

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants