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

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.

3 Likes

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")) {

to

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.

1 Like

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.

Cheers.

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.

2 Likes

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. http://10.0.0.5 (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.

Out of curiosity, let's say that the 6 hour delay is met and you hub shuts itself down. Then 15 minutes later the power is restored, but your UPS never ran out of battery power. What restarts your hub?

most ups can be set to reboot when power is restored at least the apc models.

Correct. But if the UPS never shuts off but the hub does, there doesn't seem to be anything, other than a human, to restart the hub itself.

ups. with wifi switch between it and the hub. that is what i do.

1 Like

I just do it manually.

also i tested a lot of wifi switches and many do not turn back on after power outage..

i recommand kasa or tplink that do.. and above that can set a schedule to turn on every few hours even if that fails.. i have a house always empty 1300 miles away so am very carefull to try and not have to take emergency trips to reboot crap.

1 Like