Map battery level to %

No. Use triggeringItem and proxyitems!

Number NetatmoBattery1_proxy "Battery1 [%f]" (Group_Battery)
Number NetatmoBattery1_proxy "Battery2 [%f]" (Group_Battery)
Number NetatmoBattery1_proxy "Battery3 [%f]" (Group_Battery)
rule "battery changed"
when
  Item NetatmoBattery1 changed or
  Item NetatmoBattery2 changed or
  Item NetatmoBattery3 changed
then
    var Number battery = Integer::parseInt(String::format("%s",triggeringItem.state.toString)) * 20
    sendCommand(triggeringItem.name + "_proxy", battery.toString)
end

Using sendCommand instead of postUpdate let’s you trigger on the change of the proxy.

Why can I not do like this, to avoid having proxyItems maybe @rlkoshak knows it ?

rule "battery changed"
when
     Item Group_Netatmo_Battery received command
then
    var Number battery = Integer::parseInt(String::format("%s",triggeringItem.state.toString)) * 20
    triggeringItem.postUpdate(battery.toString) // Post will not get the group to receive a new command..
end

Sorry, you need proxy items for @hr3’s solution as well he just called it ‘Master’.

You do not want to have a rule fighting against a binding to set a value on the same item!

Sure its not a typo in @hr3 example? I have both MasterBedroom and Bedroom…

Whatever. Do whatever you like, but i do not suggest doing that without proxy items :wink:

It will get easier with the Member of Group Trigger

But as @job said when changing transforming the value in the rule don’t set it to the same Item.
This will probably lead to conflicts, but in your case this could be an exception.

  1. The Item is only one way. Get info from node.
  2. The rule is set to received command
  3. The Item state is change by postUpdate which does not trigger the rule again.
  4. The incomming and transformed value is a number

As there is no other interaction with this Item, this could work out without issues.

Looks like you got the answers but I’ll reiterate.

  1. The rule will never trigger unless you explicitely send a command to Group_Netatmo_Battery. Commands send to members of Group_Netatmo_Battery only generate updates to Group_Netatmo_Battery.

  2. Even if the trigger worked, triggeringItem would be set to Group_Netatmo_Battery, not the member of the Group that caused the Rule to trigger (see the new Member of trigger in the link from Josar below)

  3. As Josar indicates, in this case you might be able to get away without using the proxy Item but it will be really easy to run into problems if you ever have any other rules that trigger on updates.

Personally, I think this is really a job for a JS transform rather than a Rule. Leave the Items as is and use

(function(i) {
    if(isNaN(i) return "NA";
    return i*20;
})(input)

Then the label becomes “Battery status [JS(battery.js):%s %]” or something like that. No proxies, no rules.

1 Like

You have a small bracket error in the js above,

(function(i) {
    if(isNaN(i)) return "NA";
    return i*20;
})(input)

However i can not get it to work properly, get the % sign to show up.

Text item=Netatmo_Outdoor_Battery label="Netatmo Bedroom Battery status [JS(netatmo_battery.js):%.0f %%]" icon="battery" 
			Text item=Netatmo_Bedroom_Battery label="Netatmo Bedroom Battery status [JS(netatmo_battery.js):%s]" icon="battery"
			Text item=Netatmo_MasterBedroom_Battery label="Netatmo Master Bedroom Battery Battery status [JS(netatmo_battery.js):%f]" icon="battery"

what am I missing to get the icon to show up correctly?

@Josar I like the member of option now, however I need to upgrade to OH2.2 then and that require some planning

Grrrr. I thought that the JavaScript would return an integer but it is returning a float.

return(Math.round(i*20));

Then use label="Netatmo Bedroom Battery status [JS(netatmo_battery.js):%s %%]"

That will fix the icon problem.

Or not. The Icon is based on the actual state of the Item, not just its transformed label. You will either need to make new battery icons that go from 0 to 5 or you will need to use the Rule.

inch pincher! NA != NaN :joy:
Or was this on purpose?

(function(i) {
    if( isNaN(i) ) return "NaN";
    return( Math.round(i*20) );
})(input)

I was hoping it was possible to do transform directly on the item…

It was on purpose. For the sitemap, I usually try to use something a little more human meaningful. Only a programmer would know that “NaN” means “Not a Number”, but “NA” is pretty universally understood (in English at least) as “Not Applicable.” I suppose for consistency I should return “-” so the Item looks like it is NULL, but that could cause other confusion.

Thanks for the clarification. As non native english speaker i just thought this must be an obvious error.

Most of the users on this forum are so proficient in English I sometimes let slip in too many idioms.

Hi, how can I leave battery voltage showing so battery icon to show correct level? Let’s say battery voltage is 56 volts and it is 100% battery icon, battery level 41 volts - 0%

So far I have used JS transformation:

(function(i) {
return (((parseFloat(i)/10) - 40)*100)/16 ;
})(input)

but I need voltage showing instead of percentage with correct battery icon showings…((

Transformation won’t help, icon selections are derived from real Item state before transformation.

Maybe you should adjust your icons to fit your displayed voltage.

Make a set of custom icons where
yourIcon-42.png is the 0% image
yourIcon-55.png is the 100% image
etc.

Yes, that is good idea, for now I have used JS transformation on the title to show percentage, that is fine and when I go to details I have generated another binding with voltage showings. That is perfect for now.
Thanks for support bud!

Hello,

I’m also turning around…
I want to closely monitor my thermal cranes (thermostats) batteries.
They range from 3v (new) to 2.2v (empty…would require an alarm).

So my range goes from 2.2 to 3…and I would like to display it at the levels:

  • 2.2v = empty
  • 2.4v
  • 2.6v
  • 2.8v
  • 3.0v= full

As a perfect newbie I really don’t understand all the proposals about transform/proxy/others… :frowning:
Would anyone have a real life example to share ?

Tx!

What actual state do your Items take up? This influences paths available to you.

The battery level is fetched per 0.1 volt.