openHAB 4.0 Milestone discussion

Today I updated to the OH4 Milestone.

Regarding the Jython rules I had only a small issue in a file from the helper library: “AbstractWatchService” could not be imported in 100_DirectoryTrigger.py

try:
    from org.openhab.core.service import AbstractWatchService
except:
    from org.eclipse.smarthome.core.service import AbstractWatchService

I tried to locate the AbstractWatchService in the openHAB sources, but it seems as if it as been removed, at least I could not find it.

I will do some more testing in the next days.

See https://github.com/openhab/openhab-core/pull/3255 which might be relevant.

Thanks for pointing that out. It seems, as if the 100_DirectoryTrigger.py must be rewritten to use the WatchService class.

I tried to just replace the AbstractWatchService by WatchService but this (of course) does not seem to work. As I never used the DirectoryEventTrigger I am not sure if this is because of an error in my test code or the 100_DirectoryTrigger.py.

I got this example from the forum:

rule("Directory watcher example")
class DirectoryWatcherExampleRule(object):
    def getEventTriggers(self):
        return [ DirectoryEventTrigger("/tmp", event_kinds=[ENTRY_CREATE]).trigger  ]
    
    def execute(self, module, inputs):
        logging.info("Directory watcher example triggered")

Which throws an exception:

Cannot inform the listener "org.openhab.core.automation.internal.RuleEngineImpl$2@7d24c050" about the "REMOVED" event: AttributeError: 'Handler' object has no attribute 'watcher'
org.python.core.PyException: AttributeError: 'Handler' object has no attribute 'watcher'
	at org.python.core.Py.AttributeError(Py.java:178) ~[?:?]
	at org.python.core.PyObject.noAttributeError(PyObject.java:965) ~[?:?]
	at org.python.core.PyObject.__getattr__(PyObject.java:959) ~[?:?]
	at org.python.pycode._pyx419.dispose$11(/etc/openhab/automation/jsr223/python/core/components/100_DirectoryTrigger.py:87) ~[?:?]
	at org.python.pycode._pyx419.call_function(/etc/openhab/automation/jsr223/python/core/components/100_DirectoryTrigger.py) ~[?:?]
	at org.python.core.PyTableCode.call(PyTableCode.java:173) ~[?:?]
	at org.python.core.PyBaseCode.call(PyBaseCode.java:306) ~[?:?]
	at org.python.core.PyBaseCode.call(PyBaseCode.java:197) ~[?:?]
	at org.python.core.PyFunction.__call__(PyFunction.java:485) ~[?:?]
	at org.python.core.PyMethod.instancemethod___call__(PyMethod.java:237) ~[?:?]
	at org.python.core.PyMethod.__call__(PyMethod.java:228) ~[?:?]
	at org.python.core.PyMethod.__call__(PyMethod.java:218) ~[?:?]
	at org.python.core.PyMethod.__call__(PyMethod.java:213) ~[?:?]
	at org.python.core.PyObject._jcallexc(PyObject.java:3565) ~[?:?]
	at org.python.core.PyObject._jcall(PyObject.java:3598) ~[?:?]
	at org.python.proxies.__main__$Handler$779.dispose(Unknown Source) ~[?:?]
	at org.openhab.core.automation.handler.BaseModuleHandlerFactory.ungetHandler(BaseModuleHandlerFactory.java:84) ~[?:?]
	at org.openhab.core.automation.internal.RuleEngineImpl.removeModuleHandlers(RuleEngineImpl.java:616) ~[?:?]
	at org.openhab.core.automation.internal.RuleEngineImpl.unregister(RuleEngineImpl.java:687) ~[?:?]
	at org.openhab.core.automation.internal.RuleEngineImpl.removeRule(RuleEngineImpl.java:756) ~[?:?]
	at org.openhab.core.automation.internal.RuleEngineImpl$2.removed(RuleEngineImpl.java:277) ~[?:?]
	at org.openhab.core.automation.internal.RuleEngineImpl$2.removed(RuleEngineImpl.java:1) ~[?:?]
	at org.openhab.core.common.registry.AbstractRegistry.notifyListeners(AbstractRegistry.java:378) ~[?:?]
	at org.openhab.core.common.registry.AbstractRegistry.notifyListenersAboutRemovedElement(AbstractRegistry.java:412) ~[?:?]
	at org.openhab.core.automation.internal.RuleRegistryImpl.notifyListenersAboutRemovedElement(RuleRegistryImpl.java:304) ~[?:?]
	at org.openhab.core.automation.internal.RuleRegistryImpl.notifyListenersAboutRemovedElement(RuleRegistryImpl.java:1) ~[?:?]
	at org.openhab.core.common.registry.AbstractRegistry.removed(AbstractRegistry.java:272) ~[?:?]
	at org.openhab.core.common.registry.AbstractRegistry.removed(AbstractRegistry.java:1) ~[?:?]
	at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:63) ~[?:?]
	at org.openhab.core.common.registry.AbstractProvider.notifyListeners(AbstractProvider.java:79) ~[?:?]
	at org.openhab.core.common.registry.AbstractProvider.notifyListenersAboutRemovedElement(AbstractProvider.java:87) ~[?:?]
	at org.openhab.core.automation.module.script.rulesupport.shared.ScriptedRuleProvider.remove(ScriptedRuleProvider.java:75) ~[?:?]
	at org.openhab.core.automation.module.script.rulesupport.shared.RuleSupportRuleRegistryDelegate.removeAllAddedByScript(RuleSupportRuleRegistryDelegate.java:112) ~[?:?]
	at org.openhab.core.automation.module.script.rulesupport.shared.ScriptedAutomationManager.removeAll(ScriptedAutomationManager.java:105) ~[?:?]
	at org.openhab.core.automation.module.script.rulesupport.internal.RuleSupportScriptExtension.unload(RuleSupportScriptExtension.java:220) ~[?:?]
	at org.openhab.core.automation.module.script.internal.ScriptExtensionManager.dispose(ScriptExtensionManager.java:142) ~[?:?]
	at org.openhab.core.automation.module.script.internal.ScriptEngineManagerImpl.removeScriptExtensions(ScriptEngineManagerImpl.java:248) ~[?:?]
	at org.openhab.core.automation.module.script.internal.ScriptEngineManagerImpl.removeEngine(ScriptEngineManagerImpl.java:242) ~[?:?]
	at org.openhab.core.automation.module.script.rulesupport.loader.AbstractScriptFileWatcher.lambda$15(AbstractScriptFileWatcher.java:312) ~[?:?]
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

I will try to look into this, when I have more time.

As my previous migration attempts failed I’ve decided to change my 3.4.2 installation to make it as much compatible as possible with M1. So far I’ve:

  • replaced SmartHome J/HTTP binding by HTTP binding
  • converted the JS transformation I had in State Description to SCRIPT transformation

I am struggling in the following point: I use JS transformation with HTTP binding but looks like SCRIPT transformation is not supported in State Transformation and Command Transformation.

You could just remove the directory trigger code from jython

What specifically are you attempting to do and what is happening to make you think it is not supported?

Some things to consider:

  • Syntax to use SCRIPT in the MQTT and HTTP binding is SCRIPT:<lang>:<filename>.script where <lang> is the language being used (graaljs for JS Scripting and I think js for Nashorn, dsl for Rules DSL), and <filename>.script is the file in the transform folder where the script stored.

  • In OH 4 JS of either variety must be installed separately.

  • Permissions on the .script file need to be such that the openhab user can read it.

  • I may have uncovered a regression where OH needs to be restarted to see new .script files. See Executing the SCRIPT-transformation failed: Could not get script for UID '<filename>.script' (an issue has been filed).

Sure, I thougt it might be usefull for someone else. But probably I am the only one left using Jython rules :wink:

Today I had more time to test, here my some findings:

1- Bindings HTTP MIIO and Daikin take too long to start. As a consequence I have these messages in log:

2023-03-15 15:46:44.289 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'http:url:d52db6a46a' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.293 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'http:url:d52db6a46a': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.314 [INFO ] [nding.http.internal.HttpThingHandler] - Using the secure client for thing 'http:url:d52db6a46a'.
2023-03-15 15:46:44.333 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'http:url:e5a14ec3b0' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.335 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'http:url:e5a14ec3b0': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.344 [INFO ] [nding.http.internal.HttpThingHandler] - Using the insecure client for thing 'http:url:e5a14ec3b0'.
2023-03-15 15:46:44.358 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'daikin:ac_unit:cozinha' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.361 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'daikin:ac_unit:cozinha': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.383 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'miio:gateway:1072B9E6' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.386 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'miio:gateway:1072B9E6': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.432 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'daikin:ac_unit:suite' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.435 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'daikin:ac_unit:suite': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.447 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'http:url:33a0084f8b' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.449 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'http:url:33a0084f8b': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.460 [INFO ] [nding.http.internal.HttpThingHandler] - Using the secure client for thing 'http:url:33a0084f8b'.
2023-03-15 15:46:44.464 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'http:url:d7e40d99c6' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.466 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'http:url:d7e40d99c6': {thing/channel=Type description for {0} not found although we checked the presence before.}
2023-03-15 15:46:44.476 [INFO ] [nding.http.internal.HttpThingHandler] - Using the secure client for thing 'http:url:d7e40d99c6'.
2023-03-15 15:46:44.481 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'daikin:ac_unit:sala' are missing in the respective registry for more than 120s. This should be fixed in the binding.
2023-03-15 15:46:44.484 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'daikin:ac_unit:sala': {thing/channel=Type description for {0} not found although we checked the presence before.}

2- I don’t see the marketplace. These are the messages in the log:

2023-03-15 15:44:24.737 [ERROR] [ity.CommunityMarketplaceAddonService] - bundle org.openhab.core.addon.marketplace:4.0.0.M1 (142)[org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService(51)] : Error during instantiation of the implementation object
java.lang.reflect.InvocationTargetException: null
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:920) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220) ~[org.eclipse.osgi-3.18.0.jar:?]
	at java.security.AccessController.doPrivileged(AccessController.java:318) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88) ~[?:?]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2612) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2078) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2061) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:336) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:304) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1274) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1225) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) ~[?:?]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310) ~[?:?]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593) ~[?:?]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74) ~[?:?]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) ~[?:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) ~[osgi.core-8.0.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.start(Module.java:486) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1783) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) ~[org.eclipse.osgi-3.18.0.jar:?]
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 4988 path $.countries
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:270) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1058) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1016) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:959) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:927) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.lambda$2(AbstractRemoteAddonService.java:93) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3573) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.refreshSource(AbstractRemoteAddonService.java:94) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.modified(CommunityMarketplaceAddonService.java:131) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.<init>(CommunityMarketplaceAddonService.java:120) ~[?:?]
	... 101 more
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 4988 path $.countries
	at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:360) ~[?:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80) ~[?:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:161) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:266) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1058) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1016) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:959) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:927) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.lambda$2(AbstractRemoteAddonService.java:93) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3573) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.refreshSource(AbstractRemoteAddonService.java:94) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.modified(CommunityMarketplaceAddonService.java:131) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.<init>(CommunityMarketplaceAddonService.java:120) ~[?:?]
	... 101 more
2023-03-15 15:44:24.801 [WARN ] [t.core.internal.addons.AddonResource] - bundle org.openhab.core.io.rest.core:4.0.0.M1 (168)[org.openhab.core.io.rest.core.internal.addons.AddonResource(165)] : Could not get service from ref {org.openhab.core.addon.AddonService}={service.id=353, service.bundleid=142, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), showUnpublished=false, component.name=org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService, service.config.label=Community Marketplace, component.id=51, service.config.factory=false, service.config.category=system, service.config.description.uri=system:marketplace, service.pid=[org.openhab.marketplace, org.openhab.marketplace], enable=true}
2023-03-15 15:44:24.803 [WARN ] [t.core.internal.addons.AddonResource] - bundle org.openhab.core.io.rest.core:4.0.0.M1 (168)[org.openhab.core.io.rest.core.internal.addons.AddonResource(165)] : DependencyManager : invokeBindMethod : Service not available from service registry for ServiceReference {org.openhab.core.addon.AddonService}={service.id=353, service.bundleid=142, service.scope=bundle, osgi.ds.satisfying.condition.target=(osgi.condition.id=true), showUnpublished=false, component.name=org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService, service.config.label=Community Marketplace, component.id=51, service.config.factory=false, service.config.category=system, service.config.description.uri=system:marketplace, service.pid=[org.openhab.marketplace, org.openhab.marketplace], enable=true} for reference AddonService
2023-03-15 15:44:24.820 [ERROR] [ity.CommunityMarketplaceAddonService] - bundle org.openhab.core.addon.marketplace:4.0.0.M1 (142)[org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService(51)] : Error during instantiation of the implementation object
java.lang.reflect.InvocationTargetException: null
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
	at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?]
	at org.apache.felix.scr.impl.inject.internal.ComponentConstructorImpl.newInstance(ComponentConstructorImpl.java:326) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:286) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:115) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:1002) ~[?:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:975) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:776) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1274) ~[?:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1225) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1232) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1152) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:959) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:895) ~[?:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1184) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:116) ~[?:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) ~[?:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) ~[?:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) ~[?:?]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:671) ~[?:?]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:310) ~[?:?]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:593) ~[?:?]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:74) ~[?:?]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:460) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) ~[?:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) ~[?:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) ~[osgi.core-8.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) ~[osgi.core-8.0.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:949) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.Module.start(Module.java:486) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1783) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) ~[org.eclipse.osgi-3.18.0.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) ~[org.eclipse.osgi-3.18.0.jar:?]
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 4988 path $.countries
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:270) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1058) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1016) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:959) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:927) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.lambda$2(AbstractRemoteAddonService.java:93) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3573) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.refreshSource(AbstractRemoteAddonService.java:94) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.modified(CommunityMarketplaceAddonService.java:131) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.<init>(CommunityMarketplaceAddonService.java:120) ~[?:?]
	... 65 more
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 4988 path $.countries
	at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:360) ~[?:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80) ~[?:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:161) ~[?:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:266) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1058) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:1016) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:959) ~[?:?]
	at com.google.gson.Gson.fromJson(Gson.java:927) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.lambda$2(AbstractRemoteAddonService.java:93) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.concurrent.ConcurrentHashMap$KeySpliterator.forEachRemaining(ConcurrentHashMap.java:3573) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at org.openhab.core.addon.marketplace.AbstractRemoteAddonService.refreshSource(AbstractRemoteAddonService.java:94) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.modified(CommunityMarketplaceAddonService.java:131) ~[?:?]
	at org.openhab.core.addon.marketplace.internal.community.CommunityMarketplaceAddonService.<init>(CommunityMarketplaceAddonService.java:120) ~[?:?]
	... 65 more

My environment: QNAP NAS X86_64 with Oracle JDK 17

For the marketplace problem, you might need to go into $OH_USERDATA/jsondb/org.openhab.marketplace.json. However, you also need to remove the backups from $OH_USERDATA/jsondb/backups or else OH will just happily start to use that backup.

OH will regenerate that file on the next restart. Usual suggestion to backup applies.

I do use the HTTP binding but I don’t see that specific error. But I do have some other problems that show up on the first startup after a clearing of the cache. It’s not every time and it’s not consistant, but I find that if I let it come up after an upgrade with errors and all, then do a restart of OH it comes up great. You might try that and see if it helps with the HTTP, MIIO and Daikin bindings.

3 Likes

Thanks, that solved problem 1. Now I do not have errors in the log and I can see the markplace in Main UI.

Nope, no effect on my side. There are error messages in the log until HTTP, MIIO and Daikin bindings are initialized, after that all is ok. So not a big deal but I suggest it should be solved before June.

Also I have this entry in the log [WARN ] [core.karaf.internal.FeatureInstaller] - The transformation add-on 'javascript' does not exist - ignoring it. I’m convinced that I’ve replaced all JS transformations (even the inline ones) with SCRIPT transformations, how can I get rid of this message ?

See [Solved] OH3: How to get rid of old bindings? - #6 by wborn which was also posted a couple of times above. You can fix it from the Karaf console or by editing the addons.config file.

1 Like

Sorry, I thought that this instruction was applicable to bindings only. So I’ve edited addons.config and now the problem is solved.

Thanks a lot.

The error that you see with the HTTP, MIIO and Daikin bindings also appear for other bindings, e.g. the Harmony Hub binding.

Yeah, the delay in my case is also 2 minutes.

I’m now using OH4.M1 in production. Greatest challenge was the JS transformation but conversion was relatively fast (around 2h).

Good work guys.

1 Like

I tried to reproduce the HTTP error messages and failed. It works fine for me. Do you still see them? If so, can you please post the YAML (code-view) of the affected thing?

I think the error messages are a consequence of the 2 minute start delay. All the bindings with that delay also have associated error messages. Here is the requested yaml:

UID: http:url:e5a14ec3b0
label: Lareira Sala
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: true
  baseURL: https://192.168.129.10:8000
  password: ******
  delay: 0
  stateMethod: POST
  refresh: 300
  commandMethod: POST
  contentType: text/plain
  timeout: 3000
  bufferSize: 2048
  username: ************
channels:
  - id: switch
    channelTypeUID: http:switch
    label: Switch
    description: ""
    configuration:
      mode: READWRITE
      onValue: "1"
      stateContent: idOperacion=1002
      commandTransformation: SCRIPT:graaljs:cmdEcoforestSwitch.script
      offValue: "0"
      stateExtension: /recepcion_datos_4.cgi
      commandExtension: /recepcion_datos_4.cgi
      stateTransformation: SCRIPT:graaljs:getEcoforestSwitch.script
  - id: alarm
    channelTypeUID: http:string
    label: Alarm
    description: null
    configuration:
      mode: READONLY
      stateContent: idOperacion=1079
      stateExtension: /recepcion_datos_4.cgi
      stateTransformation: SCRIPT:graaljs:getEcoforestAlarm.script
  - id: stat
    channelTypeUID: http:string
    label: Status
    description: null
    configuration:
      mode: READONLY
      stateContent: idOperacion=1002
      stateExtension: /recepcion_datos_4.cgi
      stateTransformation: SCRIPT:graaljs:getEcoforestStat.script
  - id: temp
    channelTypeUID: http:string
    label: Temperature
    description: null
    configuration:
      mode: READONLY
      stateContent: idOperacion=1002
      stateExtension: /recepcion_datos_4.cgi
      stateTransformation: SCRIPT:graaljs:getEcoforestTemp.script
  - id: temp_obj
    channelTypeUID: http:string
    label: Set Temperature
    description: null
    configuration:
      mode: READWRITE
      stateContent: idOperacion=1002
      commandTransformation: SCRIPT:graaljs:cmdEcoforestTempObj.script
      stateExtension: /recepcion_datos_4.cgi
      commandExtension: /recepcion_datos_4.cgi
      stateTransformation: SCRIPT:graaljs:getEcoforestTempObj.script

I have the same problem with marketplace after upgrading. I have a relatively basic setup and I don’t have any bindings in the addons folder. I spun up a fresh M1 VM which worked fine until I restored my backup at which point the marketplace disappeared again.

Can you elaborate on what “you might need to go into $OH_USERDATA/jsondb/org.openhab.marketplace.json” means? Delete the file, delete the content in the file or modify the file?

Yes, after backing up delete that file and any backups of that file under the backups folder.

1 Like

I tried adding the Vizio binding this morning and am getting errors while using the console commands for pairing with the TV:

openhab> openhab:vizio vizio:vizio_tv:foo start_pairing openHAB                                                     
Error! Unable to start pairing process.
Exception was: Error executing vizio PUT command, URL: https://192.168.1.45:7345/pairing/startjavax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

The TV is using a self signed cert.

Created defect [vizio] Unable to pair with TV · Issue #14621 · openhab/openhab-addons · GitHub

Does the mihome binding work in 4.0? I see this:


 [WARN ] [core.thing.internal.ThingManagerImpl] - Channel types or config descriptions for thing 'mihome:gateway:7811dcb9c722' are missing in the respective registry for more than 120s. This should be fixed in the binding.
 [WARN ] [core.thing.internal.ThingManagerImpl] - Failed to normalize configuration for thing 'mihome:gateway:7811dcb9c722': {thing/channel=Type description for {0} not found although we checked the presence before.}