[SOLVED] Dynamic Icons problem with rules

Slow down. I have no idea what “it” you are talking about, and there seems to be a lot of confusion about “it” being 0/1, on/off, or red/green, or undefined ?

Forget icons for now. That is the last thing you set up. First get Items doing what you want. Can’t help much with that, as don’t know what you want.

If you’ve set up Things and channels, you will want to link your Items to channels.

Well, actually I think they have worked as what I expected except the icons( :cry: :sob: :scream:).

Okay, I have set up the Things and channels like the following pictures:

MQTT Broker

Bed_1

Channels in Bed_1

Analog_num channel configuration

Since I sent the json format from my Arduino UNO Rev3 (with ESP8266) from WIFI to my MQTT Broker (Raspberry Pi 4), I need to do Javascript Transformation by the script.

(function(i) {
	try {
		data = JSON.parse(i);
		analog = Number(data.analog.toFixed(0), 10).toFixed(0);
		return analog;
	}
	catch (err) {
		return "-";
	}
})(input)

Percent_num part is just the same. The only difference is that I originally designed different transformation in my Arduino UNO Rev3.

My json message is this:
{“analog”:50,“percent”:5.0,“status”:1}
or
{“analog”:512,“percent”:50.0,“status”:0}

I think it work perfectly:
(when I ground the analog input)

(connected to the air)

The problem is the status (which I decide to make it specific for my dynamic icons)
Things:

Channels:

Configuration of channels:

Thank you for your fast reply!!!

Okay.
So far as I can see, you have created a switch type channel, called mqtt:topic:736b17e5:Bed_1_status
This channel is not linked to any Item that I can see.
This channel will listen out for the topic Bed_1
If it gets a message on that topic, it first applies a JS transform to the payload.
So far as I can make out, that will return a number from the payload analog field, such as 50 ?
That transformation is chained to another transformation, a MAP.
Your map has lookup entries for 0 and 1 only, no default.
I would expect looking up a value like 50 to fail.
When a transformation fails, the whole payload string is returned instead.
Next, because this is a switch type channel, that string is given to the on/off parser.
Because your on/off channel parameters have been left default, I would expect 0/1 or ON/OFF to pass through to channel state.
But because your transformation failed, it is trying to handle the complete payload JSON which does not fit either 0/1 or ON/OFF.
You just get the warning message logged

2020-05-31 08:43:54.642 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":290,"percent":28.30,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":290,"percent":28.30,"status":0}

Actually, the switch type channel you mentioned

mqtt:topic:736b17e5:Bed_1_status

is the status one which performs well in the HabPanel.
I am not sure if it is linked to this item (though I think it should):

String Bed_1_status "Status" <light>  {mqtt="<[mosquitto:Bed_1:state:default]"}

It can get the message from the topic

Bed_1

and it will perfectly transform itself into the value I expect (1/0) and transform the result into ON/OFF by the MAP service(?).
Javascript Transformation file (.js):

(function(i) {
	try {
		data = JSON.parse(i);
		status = Number(data.status.toFixed(0)).toFixed(0);
        return status;
	}
	catch (err) {
		return "-";
	}
})(input)

Actually, if I drop the MAP down. I will get two warning messages from the log.

As the following log (if I delete the transformation part ∩MAP:light.map):

2020-05-31 12:39:57.344 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}
2020-05-31 12:39:57.406 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '1' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.1

So I am not sure which one gives out the first warning:

2020-05-31 12:39:57.344 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}

Here is the complete transformation JS file:

(function(i) {
	try {
		data = JSON.parse(i);
		analog = Number(data.analog.toFixed(0), 10).toFixed(0);
		return analog;
	}
	catch (err) {
		return "-";
	}
})(input)
(function(i) {
	try {
		data = JSON.parse(i);
        percent = Number(data.percent.toFixed(1));
        return percent;
	}
	catch (err) {
		return "-";
	}
})(input)
(function(i) {
	try {
		data = JSON.parse(i);
		status = Number(data.status.toFixed(0)).toFixed(0);
        return status;
	}
	catch (err) {
		return "-";
	}
})(input)

I tried to isolate the status from other Things. Or should I put it into the Things Bed_1 with Analog_num and Percent_num?

(The reason why there is Analog_num and Analog is that I thought the value type was String but it seems that it is Number.)

Thus, in the original transformation JS file, I was using Number() to force the type of val to be a Number type value. That is the only difference.

Thank you for your patience!!

That’s a channel.
You can not use channels in HABpanel.
You link channels with Items.
Items and channels are two different kinds of object.
Items can be used in HABpanel.
You configured your HABpanel, so you know which Item is in use.

Have you got Simple Mode turned on, automatically creating Items that have names similar to channels they are automatically linked to?

The configuration for that Item is a version 1 MQTT binding and has absolutely nothing to do with your Things and channels (the mqtt= part)…
Unless you have MQTT binding version 1 installed, it does nothing.

That does not mean the Item has not been linked to something else using PaperUI, but that is something you would have to find out.

Yes, it’s a shame the message doesn’t say which channel(s), but clearly you have at least one that is broken.

Perhaps you can show us your events.log entries showing that happening to your Item?

Okay, no problem! Well, then it seems to be hard to say which channel is borken…( :sob:)

2020-05-31 14:15:08.181 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":131,"percent":12.80,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":131,"percent":12.80,"status":0}

==> /var/log/openhab2/events.log <==
2020-05-31 14:15:08.191 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 0.0 to 12.8
2020-05-31 14:15:08.196 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 0 to 131
2020-05-31 14:15:08.205 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 0.0 to 12.8
2020-05-31 14:15:08.210 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 0 to 131
2020-05-31 14:15:08.217 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from ON to OFF

==> /var/log/openhab2/openhab.log <==
2020-05-31 14:15:08.691 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":301,"percent":29.40,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":301,"percent":29.40,"status":0}

==> /var/log/openhab2/events.log <==
2020-05-31 14:15:08.710 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 12.8 to 29.4
2020-05-31 14:15:08.728 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 131 to 301
2020-05-31 14:15:08.740 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 12.8 to 29.4
2020-05-31 14:15:08.754 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 131 to 301

==> /var/log/openhab2/openhab.log <==
2020-05-31 14:15:09.196 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":150,"percent":14.60,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":150,"percent":14.60,"status":0}

==> /var/log/openhab2/events.log <==
2020-05-31 14:15:09.204 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 29.4 to 14.6
2020-05-31 14:15:09.211 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 301 to 150
2020-05-31 14:15:09.219 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 29.4 to 14.6
2020-05-31 14:15:09.228 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 301 to 150

==> /var/log/openhab2/openhab.log <==
2020-05-31 14:15:09.705 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}

==> /var/log/openhab2/events.log <==
2020-05-31 14:15:09.729 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 14.6 to 0.0
2020-05-31 14:15:09.749 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 150 to 0
2020-05-31 14:15:09.770 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 14.6 to 0.0
2020-05-31 14:15:09.789 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 150 to 0
2020-05-31 14:15:09.804 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from OFF to ON

==> /var/log/openhab2/openhab.log <==
2020-05-31 14:15:10.210 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}
2020-05-31 14:15:10.718 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}

I have opened the simple mode in the PaperUI (Though I am not sure if the package setting will affect the setting or not since I need to set it to standard to get Add-ons for Transformation part.)

PaperUI configuration:

services/addons.cfg:

How could I test if the channel is broken or not?
I tried to unlink the channels but no one affects the warning.

(Additionally, do you mean that I do not need to add the .items files since I am under the simple mode?I can understand that this is the old version. However, I do not know how to build up a new one at all.)

By the way, I think I used the latest version of MQTT Binding addons offered by OpenHab

I don’t know what that means.
I strongly advise you to have Simple Mode OFF.
People seem to get in to all sorts of trouble with duplicate Items with it on.

That’s your Item. We can guess it is probably linked to channel mqtt:topic:736bf7e5:Bed_1_status , but you could confirm that in PaperUI

The Item Bed_1_status in your items file is unconnected to that Item in any way.

The next step is to find out what Item you are looking at in your HABpanel, so we know which one you are having trouble with.
Guessing that it is Item mqtt_topic_736bf7e5_Bed_1_status , what have you got the icon set to on that Item?

Actually, I don’t even know how to set the icon for the Item.
I just put the icon name in the blank of custom icon (for the ) in HABPanel.

Maybe that is the reason?!?!

(Sorry for the Chinese English. I mean I turn on the Simple Mode.)
If I turn off the Simple Mode, I need to setup the item by myself right?

I turned off the Simple Mode and the following picture is my item list:

I think this is the problem one item?
mqtt_topic_736bf7e5_Bed_1_status

Then, what should I typed in if I need to create one which is linked to my specific channel?

I don’t know HABpanel, no idea how you use it.
In any other UI, you specify the icon in the Item or can override in the sitemap.

I do think you are going to get into trouble with that icon name.
The default icon set includes a family of icons light, light-on, etc.
I do not think you are going to get any custom icons working by using the same name light as a default set.
I would give any custom icons a custom name - mylight , mycustomicon, whatever.

So, does it mean that if I change the name of my icon and it will work?
Then, that me change it first.
If there is any good news, I will let you know.
Thanks a lot!

Current result:

Um, nothing happened at all.

I have tried to use the extension in VS code:

//String Bed_1_status "Status" <mylight>  {mqtt="<[mosquitto:Bed_1:state:default]"}
Switch Bed1Status "Dynamic icon" {channel="mqtt:topic:736bf7e5:Bed_1_status"}

Maybe I should add the label for the icon?

Switch Bed1Status "Dynamic icon" <mylight>{channel="mqtt:topic:736bf7e5:Bed_1_status"}

Um, nothing worked at all.

By the way, how to manage the items in the PaperUI or other advanced methods? Since there are lots of tutorials out there, they seems cannot catch up the update of OpenHab. :sob: :sob: :sob: :sob:

This is the result:

Same as always… :sob: :sob: :sob: :sob:

Start by seeing if your new Item is getting updated. That’s what your events.log is for. Once you know that your Item is updating and what it is getting updated to, you can look at dynamic icons

Now that you’ve given your Item an <icon>, you should see at least the default mylight.svg image, even if the dynamic part is messed up.
If you don’t, then there is something wrong with your HABpanel setup.

You’l get there, there are just a lot of different things to get correct.

(Sorry for the late reply, it was about 12:53 am, and I was asleep.)
Well, I tried 3 different ways to apply my icon on item:

  1. write original item (it was created by the simple mode) back in the .items file and add the icon <mylight> which is according to the .svg file name.

Switch mqtt_topic_736bf7e5_Bed_1_status "dynamic icon" <mylight> {channel="mqtt:topic:736bf7e5:Bed_1_status"}
  1. add item from extension in VS code into the .items file with the icon <mylight>.

Switch Bed1Status "Dynamic icon" <mylight> {channel="mqtt:topic:736bf7e5:Bed_1_status"}
  1. add the item from the PaperUI (only the weird thing is that I have changed the name of item but it still use the same name from the simple mode creation with a character lost in nowhere.)

I added them in the .items file and tried every item but there is no difference between them actually.

Switch Bed1Status "Dynamic icon" <mylight> {channel="mqtt:topic:736bf7e5:Bed_1_status"}  //added by the extension in VS code
Switch mqtt_topic_736bf7e5_Bed_1_status "dynamic icon" <mylight> {channel="mqtt:topic:736bf7e5:Bed_1_status"}  //added from the original simple mode created item
Switch mqtt_topic_736bf7e_Bed_1_status "mylight" <mylight> {channel="mqtt:topic:736bf7e5:Bed_1_status"}  //manually added item

Additionally, there is another weird error in the VS code.
I definitely have defined the .rules file and why the VS code said that VS code cannot find the existing one??? (I have marked the save all button to check that I have definitely “save” the file!!!)

You never said if you get the display of your default icon image.

I can’t keep up with what Item you are doing what to anymore. Whatever Item it is you are using, is it a Switch type?
I keep pointing you to look in your events.log and see what states your Item is getting set to.
When you do, you’ll probably find that it is getting set to ON and OFF, as it is a Switch type Item and that is the states that Switch type Items accept.

Now consider your icon image files family. Dynamic icons use the state of the Item. If the Item get sets to ON and OFF, then you would probably want to use icon images with filenames like someIcon-on.svg and someIcon-off.svg.
Statres ON and OFF will never ever match for a filename like someIcon-red.svg

Ooops, sorry for not displaying the icon image for you.

Default (mylight.svg)

image

Green (mylight-green.svg) (off)

image

Red (mylight-red.svg) (on)

image

I think they have changed the status from ON to OFF and OFF to ON.

Actually, the default image is displayed by the custom icon setting?
Since it is always there, I didn’t mention the presentation of default image at all.

Also, I have changed the icon image name now but the condition looks like the same.

==> /var/log/openhab2/events.log <==
2020-06-01 00:54:03.713 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 3.8 to 28.1
2020-06-01 00:54:03.719 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 39 to 288
2020-06-01 00:54:03.726 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 3.8 to 28.1
2020-06-01 00:54:03.733 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 39 to 288
2020-06-01 00:54:03.742 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from ON to OFF

==> /var/log/openhab2/openhab.log <==
2020-06-01 00:54:03.742 [INFO ] [.eclipse.smarthome.model.script.Rule] - start to manage the status!

==> /var/log/openhab2/events.log <==
2020-06-01 00:54:03.745 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e_Bed_1_status changed from ON to OFF
2020-06-01 00:54:03.746 [vent.ItemStateChangedEvent] - Bed1Status changed from ON to OFF

==> /var/log/openhab2/openhab.log <==
2020-06-01 00:54:03.749 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'green' to a state type which item 'Bed1Status' accepts: [OnOffType, UnDefType].
2020-06-01 00:54:04.215 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}

==> /var/log/openhab2/events.log <==
2020-06-01 00:54:04.230 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 28.1 to 0.0
2020-06-01 00:54:04.246 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 288 to 0
2020-06-01 00:54:04.262 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 28.1 to 0.0
2020-06-01 00:54:04.276 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 288 to 0
2020-06-01 00:54:04.287 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from OFF to ON
2020-06-01 00:54:04.290 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e_Bed_1_status changed from OFF to ON

==> /var/log/openhab2/openhab.log <==
2020-06-01 00:54:04.290 [INFO ] [.eclipse.smarthome.model.script.Rule] - start to manage the status!

==> /var/log/openhab2/events.log <==
2020-06-01 00:54:04.293 [vent.ItemStateChangedEvent] - Bed1Status changed from OFF to ON

==> /var/log/openhab2/openhab.log <==
2020-06-01 00:54:04.299 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'green' to a state type which item 'Bed1Status' accepts: [OnOffType, UnDefType].
2020-06-01 00:54:04.720 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}
2020-06-01 00:54:05.228 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":0,"percent":0.00,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":0,"percent":0.00,"status":1}

I noticed that there is a warning about the postUpdate (for the “green” part and “red” part). So I changed the .rules file into this.
Also, I noticed the log of INFO.

2020-06-01 01:04:46.464 [INFO ] [.eclipse.smarthome.model.script.Rule] - start to manage the status!

This is the .rules file:

rule "Bed Exit"
when
    Item Bed1Status changed
then 
    logInfo("Rule", "start to manage the status!")
    if(Bed1Status.state == "ON")
    {
       Bed1Status.postUpdate("ON")
    }
    else if (Bed1Status.state == "OFF")
    {
       Bed1Status.postUpdate("OFF")
    }
end

This is the figure I want to illustrate that the icon is as static as always.

This is the pure log after changing the postUpdate


==> /var/log/openhab2/events.log <==
2020-06-01 01:04:46.395 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 0.0 to 29.7
2020-06-01 01:04:46.408 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 0 to 304
2020-06-01 01:04:46.422 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 0.0 to 29.7
2020-06-01 01:04:46.432 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 0 to 304
2020-06-01 01:04:46.448 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from ON to OFF
2020-06-01 01:04:46.452 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e_Bed_1_status changed from ON to OFF
2020-06-01 01:04:46.460 [vent.ItemStateChangedEvent] - Bed1Status changed from ON to OFF

==> /var/log/openhab2/openhab.log <==
2020-06-01 01:04:46.464 [INFO ] [.eclipse.smarthome.model.script.Rule] - start to manage the status!
2020-06-01 01:04:46.883 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":180,"percent":17.50,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":180,"percent":17.50,"status":0}

==> /var/log/openhab2/events.log <==
2020-06-01 01:04:46.891 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 29.7 to 17.5
2020-06-01 01:04:46.897 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 304 to 180
2020-06-01 01:04:46.906 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 29.7 to 17.5
2020-06-01 01:04:46.912 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 304 to 180

==> /var/log/openhab2/openhab.log <==
2020-06-01 01:04:47.392 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":448,"percent":43.70,"status":0}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":448,"percent":43.70,"status":0}

==> /var/log/openhab2/events.log <==
2020-06-01 01:04:47.408 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 17.5 to 43.7
2020-06-01 01:04:47.421 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 180 to 448
2020-06-01 01:04:47.433 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 17.5 to 43.7
2020-06-01 01:04:47.445 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 180 to 448

==> /var/log/openhab2/openhab.log <==
2020-06-01 01:04:47.898 [WARN ] [ab.binding.mqtt.generic.ChannelState] - Command '{"analog":87,"percent":8.50,"status":1}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"analog":87,"percent":8.50,"status":1}

==> /var/log/openhab2/events.log <==
2020-06-01 01:04:47.904 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent changed from 43.7 to 8.5
2020-06-01 01:04:47.911 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog_num changed from 448 to 87
2020-06-01 01:04:47.917 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_percent_num changed from 43.7 to 8.5
2020-06-01 01:04:47.924 [vent.ItemStateChangedEvent] - mqtt_topic_ba6a06c9_Bed_1_analog changed from 448 to 87
2020-06-01 01:04:47.931 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from OFF to ON
2020-06-01 01:04:47.932 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e_Bed_1_status changed from OFF to ON
2020-06-01 01:04:47.934 [vent.ItemStateChangedEvent] - Bed1Status changed from OFF to ON

==> /var/log/openhab2/openhab.log <==
2020-06-01 01:04:47.938 [INFO ] [.eclipse.smarthome.model.script.Rule] - start to manage the status!

Last but not least, all switch work fine in the log except the dynamic icon.

This is the original item.

2020-06-01 01:04:47.931 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e5_Bed_1_status changed from OFF to ON

This is the manually created in PaperUI.

2020-06-01 01:04:47.932 [vent.ItemStateChangedEvent] - mqtt_topic_736bf7e_Bed_1_status changed from OFF to ON

The is the extension one from VS code.

2020-06-01 01:04:47.934 [vent.ItemStateChangedEvent] - Bed1Status changed from OFF to ON

Thanks a lot for your effort!! I am really appreciate that.

It’s a nonsense.
Your Item Bed1Status is a Switch type Item still, isn’t it?

if(Bed1Status.state == "ON")

This will never be true. A Switch type Item might have an OnOffType state ON
A Switch type Item will never have a sytring type state “ON”

Next, if you fixed that -

if(Bed1Status.state == ON)
    {
       Bed1Status.postUpdate("ON")

what possible purpose is this for? The Item is already ON and you set it ON.

Um, actually, then it means that I don’t need any .rules file?
I am not sure where can I set the dynamic icon for my item.
Could you please give me an example?
Or it will automatically catch the dynamic icon mylight.svg, myloght-on.svg, mylight-off.svg.

Thanks a lot!! :hugs: :hugs: :hugs: :hugs: :hugs:

I really do not know which of your three Items you are now displaying in your HABpanel.

Your file based Item will have its icon root filename set in <brackets>

Switch Bed1Status "Dynamic icon" <mylight> {channel="...

You don’t do anything special to make it dynamic icon, just provide a complete image set. You must have the default mylight.svg and will want also mylight-on.svg and mylight-off.svg, these must all go in /icons/classic/ folder.

For PaperUI created Icons, you edit the root filename into box labelled category

This establishes a default icon set to use for the Item.
I do not know how you make HABpanel use the default icon in whatever widget you are using. Perhaps by not specifying a custom icon.
.

I can display all of them in a HABPanel:

It will look like this

ON

OFF

Their setting from top to down:
Simple Mode one:

VS extension one:

Manually created one:

Works!!! It finally works!!! :heart_eyes: :heart_eyes: :heart_eyes: :kissing_heart: :kissing_heart: :kissing_heart: :blush: :blush: :cupid: :gift_heart: :sparkling_heart: :heartpulse: :heartbeat:

But how can I make a dynamic icon with more than ON/OFF state?
Or if I don’t want to use PaperUI created icons?

You are my Hero :man_superhero: :man_superhero:! Thank you for your effort!! :hamburger:

Have you actually looked at the dynamic icons section in the docs? You just find or create icon sets with filenames related to the state of whatever your Item is.

1 Like

It finally worked!!!

The way it succeeds is that I restart the service!!!

sudo systemctl restart openhab2.service

(By the way, the incognito mode in Chrome does not show it correctly.)