Rule for devices battery level ?
-
cw-kidreplied to Ian on Apr 14, 2021, 9:44 AM last edited by cw-kid Apr 14, 2021, 5:48 AM
Thanks Ian that works, my Telegram text message now has the number% at the end of the message now.
However this messes up the Google Home TTS announcement sent via node-red, if I have a "%" in the expression. So I had to change it to the word "percent" instead and now the TTS sounds correct when spoken.
join( each id in battery_low_list: getEntity(id).name + " " + "at" + " " + int(getEntity(id).attributes.battery_power.level * 100) + " percent", ', ')
-
@toggledbits said in Rule for devices battery level ?:
Wrap the condition in a group and put the group in "pulse" output mode with the timing you want.
Like this?
Seems to be working and the alerts are repeating every 60 seconds now. I will just set this to 24hrs I think.
-
@toggledbits said in Rule for devices battery level ?:
One of my to-do list tasks for expressions is to be able to create a list of devices that match a test.
This is very useful, is it released yet or still on the to-do list?
-
toggledbitswrote on Sep 26, 2021, 9:54 PM last edited by toggledbits Sep 26, 2021, 5:55 PM
Still on the to-do list, but I think I'm close to figuring out what I want it to do. These things get harder with time: the more people use them, the more etched in stone they become, so making a "first guess" and completely changing things later isn't really something I want to do a lot of. If I can get something good on the first try, that's the way...
Here's what I'm thinking...
First, the
matchEntities()
function would quickly narrow down the set, in a manner similar to the filters on the Entities page and the Entity Picker:living_room_sensors = matchEntities( { controller: 'vera', capability: [ 'binary_sensor', 'value_sensor'' ], group: 'Living Room' } )
This would return an array of entities. From here, you could use an
each
statement to further filter any deep refinements. This expression would take the above array of sensors in the Living Room and pick out those that are battery powered and have battery level under 50%:low_battery_living_room = each e in living_room_sensors: e.attributes.battery_power?.level <= 0.5 ? e : null
I'm liking this approach because the function could do the bulk reduction of potential hundreds of entities down to a manageable list, and then the final filtering of the list can be done with expressions for maximum flexibility.
Any thoughts about that?
-
@toggledbits That would do it for me, is the
matchEntities()
function already available in Expressions? I get no error but no matter what I do the Expression always returns an empty array.
I'd expect this to contain at least something:matchEntities( { controller: 'vera', capability: 'humidity_sensor' } )
-
No, it's not yet available.
-
Ah, that explains a lot I like the idea, it seems very flexible.
-
@toggledbits Thanks, the new
matchEntities()
is brilliant. Now we can have dynamic arrays of devices. -
@crille said in Rule for devices battery level ?:
Now we can have dynamic arrays of devices.
Tell me about that...
-
@toggledbits Inspired by this topic I created a rule with similar expressions to monitor/notify
x_ezlo_device.reachable
for all my Ezlo devices. Instead of managing a static array, like thebattery_device_list
in this topic, the expressionmatchEntities( {capability: 'x_ezlo_device'} )
generates a list of devices that is dynamically updated if devices are added or removed from the controller. -
@toggledbits I'm testing this new function, but somehow it does not show all the devices I'm expecting it to show. See examples below
Array is empty, although it should contain one device:
Strange, as device 216 definitely has capability "x_vera_device"
-
One of the issues I see in
matchEntities()
as it currently works is that it returns an array of entity objects with attribute values, but it does not update that array when any of the returned entities' attributes or other values changes. So it's certain, then, that the attributes will go stale in the result array.For the next build, I will change the definition of this function to return canonical entity IDs only, rather than entity objects, so you will have to use
getEntity()
in youreach
over the results, as you did with yourtest_array
example, and this will ensure that you are always looking at the latest attributes. You can test this theory now by modifying youreach
ford_failure_list
to usegetEntity( id.canonical_id )
. -
@toggledbits did what you suggested, but situation didn't really change, array is still empty:
-
Can you show the entity detail for device 216 please?
-
Crillereplied to tunnus on Sep 30, 2021, 8:06 PM last edited by Crille Sep 30, 2021, 4:06 PM
@tunnus I had some issues as well. I got an empty array and when tried getEntity() I got some "Type Error". Was sure I was doing something wrong but I restarted Reactor and copied the same expression to a new one and suddenly it worked.
@toggledbits I also noticed the array isn't updated when entity changed so I pulse the trigger every minute to update it. Will change to getEntity() for next update. -
@toggledbits here you go:
dimming.level=0 dimming.step=null power_switch.state=false x_vera_device.configured=false x_vera_device.device_number=216 x_vera_device.device_type="urn:schemas-upnp-org:device:DimmableLight:1" x_vera_device.failed=true x_vera_device.mapped_by="*;device_type=/urn:schemas-upnp-org:device:DimmableLight:/" x_vera_device.mapped_class="generic_dimmer" x_vera_device.parent_device=1 x_vera_device.room_id="1" x_vera_energy.amps=null x_vera_energy.day_kwh=null x_vera_energy.kwh="6.7000" x_vera_energy.life_kwh=null x_vera_energy.month_kwh=null x_vera_energy.power_factor=null x_vera_energy.volts=null x_vera_energy.watts="" x_vera_energy.week_kwh=null x_vera_energy.year_kwh=null x_vera_svc_cd_jackson_com_DataMine1.errorStatus="true" x_vera_svc_micasaverde_com_EnergyMetering1.ActualUsage="1" x_vera_svc_micasaverde_com_EnergyMetering1.KWH="6.7000" x_vera_svc_micasaverde_com_EnergyMetering1.KWHReading="1597268716" x_vera_svc_micasaverde_com_EnergyMetering1.Log="0,0,0,1633073400,1" x_vera_svc_micasaverde_com_EnergyMetering1.Watts="" x_vera_svc_micasaverde_com_HaDevice1.AutoConfigure="0" x_vera_svc_micasaverde_com_HaDevice1.CommFailure="1" x_vera_svc_micasaverde_com_HaDevice1.CommFailureAlarm="1628783888,1" x_vera_svc_micasaverde_com_HaDevice1.CommFailureTime="1628780288" x_vera_svc_micasaverde_com_HaDevice1.Configured="0" x_vera_svc_micasaverde_com_HaDevice1.FirstConfigured="1526668133" x_vera_svc_micasaverde_com_HaDevice1.LastTimeCheck="1605041801" x_vera_svc_micasaverde_com_HaDevice1.LastTimeOffset="2" x_vera_svc_micasaverde_com_HaDevice1.LastUpdate="0" x_vera_svc_micasaverde_com_HaDevice1.ModeSetting="1:;2:;3:;4:" x_vera_svc_micasaverde_com_HaDevice1.PollRatings="0.20" x_vera_svc_micasaverde_com_ZWaveDevice1.AgiInfo="X" x_vera_svc_micasaverde_com_ZWaveDevice1.AlarmType="0x4,0x8," x_vera_svc_micasaverde_com_ZWaveDevice1.AlarmVersion="0,2" x_vera_svc_micasaverde_com_ZWaveDevice1.AssociationGroups="1" x_vera_svc_micasaverde_com_ZWaveDevice1.AssociationNum="4" x_vera_svc_micasaverde_com_ZWaveDevice1.Capabilities="211,156,1,4,17,1,L,R,B,RS,|37S,38S:3,39S,43S,44S,50S:3,89S,90B,94,112S,113S:4,114,115S,122S,129S,133S,134,152," x_vera_svc_micasaverde_com_ZWaveDevice1.ConfiguredAssoc="" x_vera_svc_micasaverde_com_ZWaveDevice1.ConfiguredVariable="80-Status notification type,1d,3,90- Enable or Disable energy reporting (0-1),1d,1,91-Minimum change in wattage for a REPORT (0-60000),2d,5,92-Minimum change in wattage percent for a REPORT,1d,5,120-Configure external switch mode for S1(0-3),1d,1,125,1d,1,128-Current working mode (0-2),1d,1,129-Dimming principle (0-2),1d,1,130-Dimmer load type connected(0-3),1d,1,131-Minimum brightness level,1d,20,132-Maximum brightness level,1d,90,249,1d,0" x_vera_svc_micasaverde_com_ZWaveDevice1.FirmwareInfo="134,111,41841" x_vera_svc_micasaverde_com_ZWaveDevice1.LastArr="" x_vera_svc_micasaverde_com_ZWaveDevice1.LastNnu="" x_vera_svc_micasaverde_com_ZWaveDevice1.LastReset="1526668110" x_vera_svc_micasaverde_com_ZWaveDevice1.LastRouteUpdate="1597229741" x_vera_svc_micasaverde_com_ZWaveDevice1.ManufacturerInfo="134,3,111" x_vera_svc_micasaverde_com_ZWaveDevice1.MeterScale="5" x_vera_svc_micasaverde_com_ZWaveDevice1.MeterType="1" x_vera_svc_micasaverde_com_ZWaveDevice1.NodeInfo="25S,26S,27S,2bS,2cS,32S,59S,5aB,5e,70S,71S,72,73S,7aS,81S,85S,86,98," x_vera_svc_micasaverde_com_ZWaveDevice1.PlusInfo="1,5,0,6,0,6,0" x_vera_svc_micasaverde_com_ZWaveDevice1.PollNoReply="476" x_vera_svc_micasaverde_com_ZWaveDevice1.PollOk="37823" x_vera_svc_micasaverde_com_ZWaveDevice1.PollSettings="120" x_vera_svc_micasaverde_com_ZWaveDevice1.PollTxFail="1" x_vera_svc_micasaverde_com_ZWaveDevice1.SecurityFailed="0" x_vera_svc_micasaverde_com_ZWaveDevice1.SubscribedAlarms=",0x4,0x8," x_vera_svc_micasaverde_com_ZWaveDevice1.SwitchMlSettings="2,0" x_vera_svc_micasaverde_com_ZWaveDevice1.VariablesGet="80,3,90,1,91,5,92,5,120,1,125,1,128,1,129,1,130,1,131,20,132,90,249,0," x_vera_svc_micasaverde_com_ZWaveDevice1.VariablesSet="80-Status notification type,1d,3,90- Enable or Disable energy reporting (0-1),1d,1,91-Minimum change in wattage for a REPORT (0-60000),2d,5,92-Minimum change in wattage percent for a REPORT,1d,5,120-Configure external switch mode for S1(0-3),1d,1,125,1d,1,128-Current working mode (0-2),1d,1,129-Dimming principle (0-2),1d,1,130-Dimmer load type connected(0-3),1d,1,131-Minimum brightness level,1d,20,132-Maximum brightness level,1d,90,249,1d,0" x_vera_svc_micasaverde_com_ZWaveDevice1.VersionInfo="3,4,54,2,0" x_vera_svc_micasaverde_com_ZWaveNetwork1.ConsecutivePollFails="0" x_vera_svc_micasaverde_com_ZWaveNetwork1.LastPollSuccess="1597268720" x_vera_svc_upnp_org_Dimming1.LoadLevelLast="100" x_vera_svc_upnp_org_Dimming1.LoadLevelStatus="0" x_vera_svc_upnp_org_Dimming1.LoadLevelTarget="100" x_vera_svc_upnp_org_Dimming1.TurnOnBeforeDim="0" x_vera_svc_upnp_org_SwitchPower1.Status="0" zwave_device.capabilities="211,156,1,4,17,1,L,R,B,RS,|37S,38S:3,39S,43S,44S,50S:3,89S,90B,94,112S,113S:4,114,115S,122S,129S,133S,134,152," zwave_device.failed=true zwave_device.manufacturer_info="134,3,111" zwave_device.node_id=53 zwave_device.version_info="3,4,54,2,0" Capabilities: dimming, power_switch, toggle, x_vera_device, x_vera_energy, x_vera_svc_cd_jackson_com_DataMine1, x_vera_svc_micasaverde_com_Color1, x_vera_svc_micasaverde_com_EnergyMetering1, x_vera_svc_micasaverde_com_HaDevice1, x_vera_svc_micasaverde_com_ZWaveDevice1, x_vera_svc_micasaverde_com_ZWaveNetwork1, x_vera_svc_upnp_org_Dimming1, x_vera_svc_upnp_org_SwitchPower1, zwave_device Actions: dimming.down, dimming.set, dimming.up, power_switch.off, power_switch.on, power_switch.set, toggle.toggle, x_vera_device.set_variable, x_vera_energy.resetkwh, x_vera_svc_micasaverde_com_Color1.SetColor, x_vera_svc_micasaverde_com_Color1.SetColorRGB, x_vera_svc_micasaverde_com_Color1.SetColorTemp, x_vera_svc_micasaverde_com_EnergyMetering1.ResetKWH, x_vera_svc_micasaverde_com_HaDevice1.AllowPairing, x_vera_svc_micasaverde_com_HaDevice1.Poll, x_vera_svc_micasaverde_com_HaDevice1.Reconfigure, x_vera_svc_micasaverde_com_HaDevice1.Remove, x_vera_svc_micasaverde_com_HaDevice1.SetPollFrequency, x_vera_svc_micasaverde_com_HaDevice1.StressTest, x_vera_svc_micasaverde_com_HaDevice1.ToggleState, x_vera_svc_micasaverde_com_ZWaveNetwork1.AddNodes, x_vera_svc_micasaverde_com_ZWaveNetwork1.BackupDongle, x_vera_svc_micasaverde_com_ZWaveNetwork1.DownloadNetwork, x_vera_svc_micasaverde_com_ZWaveNetwork1.HealNetwork, x_vera_svc_micasaverde_com_ZWaveNetwork1.PollAllNodes, x_vera_svc_micasaverde_com_ZWaveNetwork1.PutByte, x_vera_svc_micasaverde_com_ZWaveNetwork1.ReconfigureAllNodes, x_vera_svc_micasaverde_com_ZWaveNetwork1.RemoveNodes, x_vera_svc_micasaverde_com_ZWaveNetwork1.SendData, x_vera_svc_micasaverde_com_ZWaveNetwork1.SetPolling, x_vera_svc_micasaverde_com_ZWaveNetwork1.SimulateIncomingData, x_vera_svc_micasaverde_com_ZWaveNetwork1.UpdateNeighbors, x_vera_svc_micasaverde_com_ZWaveNetwork1.UpdateNetwork, x_vera_svc_upnp_org_Dimming1.PauseRamp, x_vera_svc_upnp_org_Dimming1.ResumeRamp, x_vera_svc_upnp_org_Dimming1.SetLoadLevelTarget, x_vera_svc_upnp_org_Dimming1.SetOnEffect, x_vera_svc_upnp_org_Dimming1.SetOnEffectLevel, x_vera_svc_upnp_org_Dimming1.SetRampRate, x_vera_svc_upnp_org_Dimming1.SetStepDelta, x_vera_svc_upnp_org_Dimming1.StartRampDown, x_vera_svc_upnp_org_Dimming1.StartRampToLevel, x_vera_svc_upnp_org_Dimming1.StartRampUp, x_vera_svc_upnp_org_Dimming1.StepDown, x_vera_svc_upnp_org_Dimming1.StepUp, x_vera_svc_upnp_org_Dimming1.StopRamp, x_vera_svc_upnp_org_SwitchPower1.SetTarget, zwave_device.poll, zwave_device.reconfigure, zwave_device.refresh, zwave_device.reset_meters, zwave_device.set_config
-
Perfect! Thank you. I think I see what's going on. New build coming later today...
-
@toggledbits thanks Patrick! Works nicely
-