Rule for devices battery level ?
-
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
-
-
Ian thank you. I thought it would be the battery_power capability, but I didn't know how to write that in an expression. I will try it now.
-
-
@cw-kid You could also do all that in one expression if you prefer and are not using the other ones for anything else.
join( each id in matchEntities( { controller: 'vera', capability: 'battery_power' } ): do device=getEntity( id ), device.attributes.battery_power.level > 0.1 ? null : device.name + " at " + device.attributes.battery_power.level * 100 + " percent" done, ", " )
-
toggledbitswrote on Nov 10, 2021, 5:59 PM last edited by toggledbits Nov 10, 2021, 1:54 PM
Just a point here: why limit
matchEntities()
to one controller? Would you not perhaps want an alert for a device on any controller that has a low battery level?Also, don't forget about the
format()
function, which is meant for things like this...device.attributes.battery_power.level > 0.1 ? null : format( "{} at {:.1%}", device.name, device.attributes.battery_power.level )
Oh, and in my home, any battery-operated device would be long dead if it was reporting 10% (0.1). Most of mine seem to start to malfunction below 50%.
-
@toggledbits I'm trying to understand the pros and cons of using this vs the new DynamicGroupController, could you give a short summation?