Hi, i have a color item and need to compare its first number with a specific number.
I am able to split this number, but since i need to transform it to a String, i cannot compare it with a number.
Is there a way to do this correctly?
then
if (colorItem.state.toString.split(",").get(0) < 276 && colorItem.state.toString.split(",").get(0) > 273)
colorItems value: “274,0,100”
As you see, i need to transform it with .toString into a String item. Then i can split it by “,” and get the first number, which varies between 274 and 275. So far it works good. But when i try to compare if the value is lower than 276 AND higher than 273, it gives me some errors.
I tried a lot with .intValue or “as DecimalType” but this is not working, since the .intValue and DecimalType are not part of String.
That’s not going to work in all cases. That’s doing a String comparison meaning it’s comparing in alphabetical order. Thus "5" > "1234" is true because “5” comes later in alphabetical order then “1” does.
But a ColorItem carries its state as an HSBType (see HSBType (openHAB Core 4.2.0-SNAPSHOT API)). HSBType had methods to get the each of the three values independently. In you case you want the hue. You’ll see that it returns a DecimalType so you can use it just like you’d use the state of a NumberItem in a rule by casting it to Number.
val hue = (colorItem.state as HSBType).getHue() as Number
if(hue < 276 && hue > 273)
I don’t know for sure if you need the cast to HSBType or not. I’ve included it to be thorough.