Dynamic icons for weather

I am trying to use dynamic icons for my weather display. I have imported the icons in .svg, located in the classic icons folder.

My items:

> String                  W_OWM_CondID            "ConditionId [%s]"                                          (G_jdbc,Group_HabPanel_Dashboard)               {channel="openweathermap:weather-and-forecast:a54e0a82:local:current#condition-id"}
> Image                   W_CondIcon              

My sitemap

> Frame label="Weather"{
> 
>         Text    item=W_OWM_Station_Name                                         icon="location"
> 
>         Text    item=W_OWM_Time                                                 icon="time"
> 
>         Image   item=W_CondIcon
> 
>         Text    item=W_OWM_Temp
> 
>         Text    item=W_OWM_Humidity
> 
>         Text    item=W_OWM_Wind_Speed
> 
>         Text    item=W_OWM_Wind_Dir
> 
>         Text    item=W_OWM_Cond                                                 icon="none"                                     
> 
>         Text    item=W_OWM_Rain

My rule file:

> rule "Update weather conditions for dynamic icon selection"
> when
>     Item W_OWM_CondID changed
> then
>     W_CondIcon.postUpdate(transform("MAP", "weather_icon.map", W_OWM_CondID.state.toString()))
> end

Yet, the item W_CondIcon is staying NULL.

Where should I look for my issue?

And the map file:

> -=NULL
> 200=thunderstorm
> 201=thunderstorm
> 202=thunderstorm
> 210=thunderstorm
> 211=thunderstorm
> 212=thunderstorm
> 221=thunderstorm
> 230=thunderstorm
> 231=thunderstorm
> 232=thunderstorm 
> 300=sun_medclouds
> 301=sun_medclouds
> 302=sun_medclouds
> 310=sun_medclouds
> 311=sun_medclouds
> 312=sun_medclouds
> 313=sun_medclouds
> 314=sun_medclouds
> 321=sun_medclouds
> 500=medium_rain
> 501=medium_rain
> 502=rain
> 503=rain
> 504=rain
> 511=medium_ice
> 520=medium_rain
> 521=medium_rain
> 522=rain
> 531=rain
> 600=sun_snow
> 601=heavy_snow
> 602=heavy_snow
> 611=medium_ice
> 612=medium_ice
> 613=medium_ice
> 615=heavy_snow
> 616=heavy_snow
> 620=sun_snow
> 621=heavy_snow
> 622=heavy_snow
> 701=fog
> 711=fog
> 721=fog
> 731=fog
> 741=fog
> 751=fog
> 761=fog
> 762=Volcanic ash
> 771=Squalls
> 781=tornado
> 800=sun
> 801=sun_minimalclouds
> 802=Scattered clouds
> 803=Broken clouds
> 804=Overcast
> 900=tornado
> 901=hurricane
> 902=hurricane
> 903=Cold
> 904=Hot
> 905=Windy
> 906=Hail
> 951=Calm
> 952=Light breeze
> 953=Weak breeze
> 954=Moderate breeze
> 955=Fresh breeze
> 956=Strong Wind
> 957=Strong wind, before storm
> 958=storm
> 959=Strong storm
> 960=storm
> 961=Violent storm
> 962=hurricane

Look in your openhab.log
Your xxx.rules file needs to load successfully, and will leave a message about it.

Look in your events.log.
Your rule needs Item W_OWM_CondID to change for a trigger. Does that happen?

Look in your openhab.log
If your rule has an error wen it runs - say, trouble with the transform - it will show up there.

I don’t think this is going to work though.
If you want a sitemap Image widget to display a file identified in the Item state content, you need to give a full url, not just a partial filename like “rain”
https://www.openhab.org/docs/configuration/sitemaps.html#element-type-image

Ok, I was trying to actually use an icon image; why its named that way.

Alright, give the icon <weather> in your Item definition, but you must also have a default weather.svg or .png in your iconset

Yes sir, I do. It’s not on that screenshot, but I added it.

Ok, its showing the icon correctly; but, is there a way to display the icon as an image?

Yes, you put the full url to an image file in the content of the String Item that you pass to the Image widget.
That works best serving images from /conf/html folder I think
(The icon will not work then)

But if you use OpenWeatherMap there is a channel supplying a image
URL

And just so you know,
I dont want to use the image associated with the image channel as the images dont enlarge well, I want high definition images

Fair enough.
Put the images in /conf/html/
Load your Item state with a url like http://localhost:8080/static/weather-rain.png

1 Like

Awesome, thank you for the suggestion.

Is it possible to MAP image items? I know I could use a rule to display whatever image based on case, but it seems that a map file may be a better way to go.

> rule "Update weather conditions for dynamic icon selection"
> when
>     Item W_OWM_CondID changed
> then
>     ImageChooser.postUpdate(transform("MAP", "weather_image.map", W_OWM_CondID.state.toString()))
> end

The map file: (partial)

> NULL=url="http://10.2.1.129:8080/static/weather.png"
> -=url="http://10.2.1.129:8080/static/weather.png"
> 200=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 201=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 202=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 210=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 211=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 212=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 221=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 230=url=""http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 231=url="http://10.2.1.129:8080/static/weather-thunderstorm.png"
> 232=url="http://10.2.1.129:8080/static/weather-thunderstorm.png" 
> 300=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 301=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 302=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 310=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 311=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 312=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 313=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 314=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 321=url="http://10.2.1.129:8080/static/weather-sun_medclouds.png"
> 500=url="http://10.2.1.129:8080/static/weather-medium_rain.png"
> 501=url="http://10.2.1.129:8080/static/weather-medium_rain.png"
> 502=url="http://10.2.1.129:8080/static/weather-rain.png"
> 503=url="http://10.2.1.129:8080/static/weather-rain.png"
> 504=url="http://10.2.1.129:8080/static/weather-rain.png"
> 511=url="http://10.2.1.129:8080/static/weather-medium_ice.png"
> 520=url="http://10.2.1.129:8080/static/weather-medium_rain.png"
> 521=url="http://10.2.1.129:8080/static/weather-medium_rain.png"
> 522=url="http://10.2.1.129:8080/static/weather-rain.png"
> 531=url="http://10.2.1.129:8080/static/weather-rain.png"
> 600=url="http://10.2.1.129:8080/static/weather-sun_snow.png"
> 601=url="http://10.2.1.129:8080/static/weather-heavy_snow.png"
> 602=url="http://10.2.1.129:8080/static/weather-heavy_snow.png"
> 611=url="http://10.2.1.129:8080/static/weather-medium_ice.png"
> 612=url="http://10.2.1.129:8080/static/weather-medium_ice.png"
> 613=url="http://10.2.1.129:8080/static/weather-medium_ice.png"
> 615=url="http://10.2.1.129:8080/static/weather-heavy_snow.png"
> 616=url="http://10.2.1.129:8080/static/weather-heavy_snow.png"

The items:

> Image                   W_CondIcon              <weather>
> 
> String                  ImageChooser

The sitemap: (partial)

> Frame label="Weather"{
> 
>         Text    item=W_OWM_Station_Name                                         icon="location"
> 
>         Text    item=W_OWM_Time                                                 icon="time"
> 
>         Image   item=ImageChooser                                                   
> 
>         Text    item=W_OWM_Temp
> 
>         Text    item=W_OWM_Humidity
> 
>         Text    item=W_OWM_Wind_Speed
> 
>         Text    item=W_OWM_Wind_Dir
> 
>         Text    item=W_OWM_Cond

This is my first attempt, where am I going wrong?

Smart idea!

Don’t know, what happens?
You events.log will show you what the Item state is changed to.

I think i have to remove the toString part. I am mapping against the numeric value, so I shouldn’t need to change it to a string, I think…I’ll be back in front of it in a couple hours to try it out.

The transform service is essentially string based anyway, converting whatever you feed it to string for lookup.

The log says it can’t load the rule file, yet VS code shows no errors. Also, my ImageChooser item, though being updated, is not being mapped.

If only we knew what your log says.

The character limit is too large…

“My cat is sick. What is wrong?”
This is NOT a dig at you personally @Branden_Smale , because half of humanity seems to do this, and certainly half of openHAB users.

I’ve pondered on why, and I guess if you’ve never had to do diagnosis in some private or work capacity, it simply never occurs that the body being asked for advice might need more info? I’d have thought that people engaged in some technical activity (like using openHAB) might be better at imagining the need, but it seems not. It just puzzles me.

1 Like

Well, how about the two or three lines describing why your rules file does not load?

> 2020-05-01 12:46:40.566 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'US/Eastern'.
> 
> 2020-05-01 12:46:40.585 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to '29.627519,-82.4396455,17'.
> 
> 2020-05-01 12:46:40.593 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'en_US'.
> 
> 2020-05-01 12:46:40.598 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Measurement system set to 'ImperialUnits'.
> 
> 2020-05-01 12:46:50.968 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'Thermostats.items.bak.items'
> 
> 2020-05-01 12:46:51.627 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'weather.items'
> 
> 2020-05-01 12:46:52.603 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'Thermostats.items'
> 
> 2020-05-01 12:46:52.758 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'Sonos.items'
> 
> 2020-05-01 12:46:52.919 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'lgtv.items'
> 
> 2020-05-01 12:46:53.040 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'demo.items'
> 
> 2020-05-01 12:46:54.043 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'mapdb.persist'
> 
> 2020-05-01 12:46:54.072 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'influxdb.persist'
> 
> 2020-05-01 12:46:55.114 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'demo.sitemap', using it anyway:
> 
> Sitemap should contain either only frames or none at all
> 
> 2020-05-01 12:46:55.122 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'demo.sitemap'
> 
> 2020-05-01 12:46:55.200 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test.sitemap'
> 
> 2020-05-01 12:46:55.600 [ERROR] [el.item.internal.GenericItemProvider] - Binding configuration of type 'channel' of item 'LG_TV0_Toast' could not be parsed correctly.
> 
> org.eclipse.smarthome.model.item.BindingConfigParseException: UID must have at least 4 segments.
> 
>     at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.createItemChannelLink(GenericItemChannelLinkProvider.java:82) ~[?:?]
> 
>     at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.processBindingConfiguration(GenericItemChannelLinkProvider.java:72) ~[?:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:369) [bundleFile:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.dispatchBindingsPerType(GenericItemProvider.java:325) [bundleFile:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.addBindingConfigReader(GenericItemProvider.java:148) [bundleFile:?]
> 
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_222]
> 
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_222]
> 
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_222]
> 
>     at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:228) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:664) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:510) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:1813) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:1788) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:435) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:325) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:294) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:880) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1168) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:125) [bundleFile:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:959) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:666) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:432) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:665) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:338) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:382) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator.access$200(Activator.java:49) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:264) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) [bundleFile:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [osgi.core-6.0.0.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.Module.publishEvent(Module.java:476) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.Module.start(Module.java:467) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1614) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [org.eclipse.osgi-3.12.100.jar:?]
> 
> 2020-05-01 12:46:55.633 [ERROR] [el.item.internal.GenericItemProvider] - Binding configuration of type 'channel' of item 'LG_TV0_Stop' could not be parsed correctly.
> 
> org.eclipse.smarthome.model.item.BindingConfigParseException: UID must have at least 4 segments.
> 
>     at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.createItemChannelLink(GenericItemChannelLinkProvider.java:82) ~[?:?]
> 
>     at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.processBindingConfiguration(GenericItemChannelLinkProvider.java:72) ~[?:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:369) [bundleFile:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.dispatchBindingsPerType(GenericItemProvider.java:325) [bundleFile:?]
> 
>     at org.eclipse.smarthome.model.item.internal.GenericItemProvider.addBindingConfigReader(GenericItemProvider.java:148) [bundleFile:?]
> 
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_222]
> 
>     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_222]
> 
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_222]
> 
>     at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_222]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:228) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:664) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:510) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:1813) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:1788) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:435) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:325) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:294) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:880) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1168) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:125) [bundleFile:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:920) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:906) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:892) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:128) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:959) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:732) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:666) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:432) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:665) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:338) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:382) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator.access$200(Activator.java:49) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:264) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) [bundleFile:?]
> 
>     at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) [bundleFile:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-6.0.0.jar:?]
> 
>     at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [osgi.core-6.0.0.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.Module.publishEvent(Module.java:476) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.Module.start(Module.java:467) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1614) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [org.eclipse.osgi-3.12.100.jar:?]
> 
>     at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [org.eclipse.osgi-3.12.100.jar:?]
> 
> 2020-05-01 12:47:00.580 [INFO ] [thome.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
> 
> 2020-05-01 12:47:03.712 [INFO ] [.dashboard.internal.DashboardService] - Started Dashboard at http://10.2.1.129:8080
> 
> 2020-05-01 12:47:03.716 [INFO ] [.dashboard.internal.DashboardService] - Started Dashboard at https://10.2.1.129:8443
> 
> 2020-05-01 12:47:08.416 [ERROR] [me.storage.json.internal.JsonStorage] - Couldn't deserialize value 'org.eclipse.smarthome.storage.json.internal.StorageEntry@1664f9c'. Root cause is: org.eclipse.smarthome.automation.Rule cannot be found by org.openhab.core.automation_2.5.0
> 
> 2020-05-01 12:47:11.855 [INFO ] [b.core.service.AbstractActiveService] - HTTP Refresh Service has been started
> 
> 2020-05-01 12:47:14.343 [DEBUG] [o.openhabcloud.internal.CloudService] - openHAB Cloud connector activated
> 
> 2020-05-01 12:47:14.372 [DEBUG] [o.openhabcloud.internal.CloudService] - Using secret at '/var/lib/openhab2/openhabcloud/secret' with content 'xxxxxxxxxxxxxxxxxx'
> 
> 2020-05-01 12:47:14.393 [DEBUG] [o.openhabcloud.internal.CloudService] - UUID = 80a84bac-73fa-42d0-b939-99f145fce39f, secret = xxxxxxxxxxxxxxxx
> 
> 2020-05-01 12:47:14.496 [DEBUG] [o.openhabcloud.internal.CloudService] - Using secret at '/var/lib/openhab2/openhabcloud/secret' with content 'xxxxxxxxxxxxxxxxx'
> 
> 2020-05-01 12:47:14.517 [INFO ] [b.core.service.AbstractActiveService] - Google Calendar Event Downloader has been started
> 
> 2020-05-01 12:47:18.554 [INFO ] [panel.internal.HABPanelDashboardTile] - Started HABPanel at /habpanel
> 
> 2020-05-01 12:47:18.768 [INFO ] [ebuilder.internal.HomeBuilderServlet] - Started Home Builder at /homebuilder
> 
> 2020-05-01 12:47:19.067 [INFO ] [openhab.ui.paper.internal.PaperUIApp] - Started Paper UI at /paperui
> 
> 2020-05-01 12:47:22.827 [WARN ] [.internal.ScaleTransformationService] - Scale transform file '/etc/openhab2/transform/winds.scale' does not comply with syntax for entry : 'NULL', 'NA'
> 
> 2020-05-01 12:47:22.908 [WARN ] [rm.AbstractFileTransformationService] - Could not transform '-' with the file 'winds.scale' : Scale must be used with numeric inputs, valid quantity types or a 'NaN' entry.
> 
> 2020-05-01 12:47:23.420 [DEBUG] [io.openhabcloud.internal.CloudClient] - Socket.IO connected
> 
> 2020-05-01 12:47:23.423 [INFO ] [io.openhabcloud.internal.CloudClient] - Connected to the openHAB Cloud service (UUID = 80a84bac-73fa-42d0-b939-99f145fce39f, base URL = http://localhost:8080)
> 
> 2020-05-01 12:47:56.116 [ERROR] [org.jupnp.transport.spi.StreamClient] - Request: HttpRequest[GET /capability HTTP/1.1]@b577fd failed
> 
> java.lang.NullPointerException: Missing SslContextFactory
> 
>     at java.util.Objects.requireNonNull(Objects.java:228) ~[?:1.8.0_222]
> 
>     at org.eclipse.jetty.io.ssl.SslClientConnectionFactory.<init>(SslClientConnectionFactory.java:54) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpClient.newSslClientConnectionFactory(HttpClient.java:1175) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpDestination.newSslClientConnectionFactory(HttpDestination.java:137) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpDestination.<init>(HttpDestination.java:94) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.PoolingHttpDestination.<init>(PoolingHttpDestination.java:25) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.http.HttpDestinationOverHTTP.<init>(HttpDestinationOverHTTP.java:32) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.http.HttpClientTransportOverHTTP.newHttpDestination(HttpClientTransportOverHTTP.java:51) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpClient.destinationFor(HttpClient.java:546) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpClient.send(HttpClient.java:579) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:728) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:681) ~[bundleFile:9.4.20.v20190813]
> 
>     at org.jupnp.transport.impl.jetty.JettyStreamClientImpl$1.call(JettyStreamClientImpl.java:155) [bundleFile:?]
> 
>     at org.jupnp.transport.impl.jetty.JettyStreamClientImpl$1.call(JettyStreamClientImpl.java:1) [bundleFile:?]
> 
>     at org.jupnp.transport.spi.AbstractStreamClient$RequestWrapper.call(AbstractStreamClient.java:204) [bundleFile:?]
> 
>     at org.jupnp.transport.spi.AbstractStreamClient$RequestWrapper.call(AbstractStreamClient.java:1) [bundleFile:?]
> 
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_222]
> 
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]
> 
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]
> 
>     at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]
> 
> 2020-05-01 12:48:26.886 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'lgtv_state.rules'
> 
> 2020-05-01 12:48:27.227 [WARN ] [me.core.service.AbstractWatchService] - Error while opening file during update: /etc/openhab2/rules/weather_icon.rules
> 
> 2020-05-01 12:48:28.230 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'lgtv.rules'
> 
> 2020-05-01 12:48:30.313 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'weather.rules'
> 
> 2020-05-01 12:48:35.926 [INFO ] [.eclipse.smarthome.model.script.lgtv] - LG TV is: OFFLINE
> 
> 2020-05-01 12:49:16.709 [INFO ] [s.internal.handler.ZonePlayerHandler] - UPnP device RINCON_7828CA16D1A801400 is present (thing sonos:One:RINCON_7828CA16D1A801400)
> 
> 2020-05-01 12:49:24.335 [WARN ] [.internal.ScaleTransformationService] - Scale transform file '/etc/openhab2/transform/winds.scale' does not comply with syntax for entry : 'NULL', 'NaN'
> 
> 2020-05-01 12:50:36.285 [WARN ] [.internal.ScaleTransformationService] - Scale transform file '/etc/openhab2/transform/winds.scale' does not comply with syntax for entry : 'NULL', 'NaN'
> 
> 2020-05-01 12:53:59.032 [INFO ] [s.internal.handler.ZonePlayerHandler] - UPnP device RINCON_5CAAFD4520C001400 is present (thing sonos:PLAY1:RINCON_5CAAFD4520C001400)
> 
> 2020-05-01 12:54:00.168 [INFO ] [s.internal.handler.ZonePlayerHandler] - UPnP device RINCON_000E58C9500401400 is present (thing sonos:PLAY1:RINCON_000E58C9500401400)
> 
> 2020-05-01 12:54:01.273 [INFO ] [s.internal.handler.ZonePlayerHandler] - UPnP device RINCON_000E58C9500601400 is present (thing sonos:PLAY1:RINCON_000E58C9500601400)
> 
> 2020-05-01 12:57:56.178 [ERROR] [org.jupnp.transport.spi.StreamClient] - Request: HttpRequest[GET /capability HTTP/1.1]@1ef74ee failed