How To: Hubitat Battery Backup solution plus Automatic Shutdown after a power Failure

guestimating on the run time is not the best solution.. I use a apc smart ups smt1500 with a network card and have a driver i have written that gets the actual run time remaining and/or battery percentage on the ups and i shut down based on that.. Just becuase it was 6 hrs one itme doesnt mean it will not be 4.5 hours a year later.

I've tested it (as have many others), plus I've had it work flawlessly in real world conditions. It ran for 6 hours, shutdown and then was in standby for another 2 before I woke up and powered off the Battery Backup.

i don't doubt that.. but i've seen batteries degrade over time quickly.. there is no guarantee it will lik ei said in couple of years.. All I am saying is that there are more foolproof methods.. But to each his own.

That's why it is important to buy a good quality, brand name battery from a trusted source.


Is that an IKEA shelf? I used to have all my stuff mounted like that as well.

Yep, it’s the big 4x4 bookshelf, I forget what they call the range now.

I dont have a basement (they are rare in Aus) so all my network gear is in my Study.

I was doing the exact same thing when I was in a small apartment. I found those IKEA pieces very versatile, and also cheap enough that I didn't mind drilling holes into them.

1 Like

Missing one important step.

  • Create another new virtual device named "Hubitat Controller" and change the driver to Hubitat Hub Controller.

Otherwise you cannot create the 'shutdown() on Hubitat Controller --> delayed: 6:00:00 (cancelable)' action in RM.

Might be obvious to someone comfortable with RM, but I struggled for quite a while trying to find the right action in all the drop down lists, before I figured this out.

I have a networked printer so I used its IP address to check for power loss. I have my NAS and hubs on a dedicated UPS with an uptime of about an hour, so I set the shutdown delay for 50 minutes rather than 6.

1 Like

Good point, I definitely assumed ppl would figure that out (I've updated the instructions).

I do too but my printer powers off at the slightest glitch (we get a lot of sub 2 second outages) and doesnt turn back on (has a soft power on/off switch).

Turns out this isn't working for me, and the iPhone Wifi Presence Sensor is not the right driver to use for this purpose.

The driver makes an HTTP GET call, then examines the result. Any response other than a 408 and a reason-phrase containing "Connection refused" is considered to be offline.

My printer returns a 401 Unauthorized response, so the driver thinks its offline.

I'm pretty sure you didn't write that driver, but there's a number of things that make it unsuitable. First, it really makes no sense to check the HTTP response code. All we're interested in is whether the target device is online. If any response is returned then it must be online; therefore it doesn't matter what the content of the response is.

If there was no response, then either the device is offline or the URL specified in the virtual device's configuration isn't a valid HTTP endpoint.

Second, testing the reason-phrase for specific text is bad practice. There's no standard that says a 408's reason-phrase must contain "Connection refused". It may be something similar, something in another language or it may not contain any text at all.

A quick fix is easy. On line 129 of the driver change:

if (response != null && response.status == 408 && response.errorMessage.contains("Connection refused")) {


if (response != null) {

There's no need for the log message on line 130 either, so the entire line can be deleted.

Only problem is that if this driver is also being used to detect an iPhone, it might not work properly anymore. And if Package Manager updates the driver, the changes will be lost. I'll probably fork this driver and write another one that's more generic.

If this is really working for you, then the device you're testing must also return a 408.

Correct I didnt, but I did specify:

I'm using A Rasberry Pi and it works perfectly.

To be fair, my "solution" is just a moderately clever kludge. If there was a better tool out there for pinging IP devices I'd be keen to test it and update the instructions if it works.

Don't misunderstand, your solution is definitely clever. It just won't work unless the device you're testing for presence returns a HTTP 408, which your Pi must be doing.

The driver's author has another driver ([UPDATED] HTTP Presence Sensor), but that really isn't any better for this purpose as it checks for a HTTP 200 response.

For your solution to work generically, it just has to test for any response. A device that's offline isn't going to respond so that's the only test needed.

I agree that an ICMP Ping test would be better, but I haven't found a suitable tool on HE that can set presence using this method. I might look at modifying the iPhone tool and see if I can replace the HTTP response test with Ping.


Actually the [UPDATED] HTTP Presence Sensor driver does work for my particular case, since my printer has an HTTP server and responds with an HTTP 200. Fortunately it also has a setting to restore its prior on/off state after a power outage.

A ping test would be good for devices that respond to pings. I think you'd have to use sendHubCommand() with an appropriately configured HubAction object. Getting too tired or else I'd take a stab at it.

Thanks for posting your solution, it's working great for me.


Nice, I didn't realise this device was available - it doesn't work for any of my IP devices (no idea why) but I'll add it as an option to the instructions.

Did you specify a valid URL? The iPhone driver wanted an IP address; this driver wants a complete url, e.g. (or https if appropriate).

If that's not the case, then in the settings for the virtual device you set up as the presence sensor, turn on Enable Debug Debug Logging. Then go to the Log page and see what shows up. You should get a log entry every minute. If your device doesn't return an HTTP 200, it will register as non-present.

1 Like

Actually I didn’t :man_facepalming:

I’ll retest today.

Ok I tested it against one of my wired mesh Routers and the HTTP Presence detector works great - much better than the iPhone detector for this purpose (it got auto-blocked after a couple of pings to a router).

I've updated the Instructions to use the HTTP Presence Sensor only - it's definitely better than the iPhone Presence sensor for this purpose as it works with more device types.

Just as an aside; I've plugged my C7 and battery backup into my Power meter and boy is this thing efficient!!! It positively sips power - on average it's drawing 1.6 watts with the occasional spikes up to 3.8 watts when the battery has been drained a bit and is being charged.

At 1.6 watts (0.01A), that's only 0.0096 kWh's of energy used in 6 hours! :scream: Even at the worst case of 3.8 watts power draw (0.022 A), that is only using 0.0228 kWh's of energy in the same time frame!

No wonder a 3,500 mAh battery can run for 6+ hours without issue! :grin:

1 Like

Nice contribution.

Just wanted to note that I haven't seen reference to the Noisy Power Filtering & Surge Suppression that you get from larger UPS boxes. Is that actually inherent in these little packs?

This question likely belongs over in the primary thread talking about these.

Download the Hubitat app