The internet of power outages

The single most popular page on this web site is the power outage tracking map collection page. It has static copies of samples of power outage maps from utilities around the country, and it gets bunches of hits every single time there's bad weather - to the extent that I can pretty much tell where there's bad weather by the outbound clicks on the page.

The page, however, is not fed with live data; it only has static instances of previous maps. It in and of itself doesn't alert when there's trouble, and it doesn't let you know that the storm coming your way might be severe.

One of the challenges of automation in the utility outage map space is the diversity of vendors for power company outage maps and the utter lack of any standard interface. To dig out how many people have lost their power in 48104 under program control, you actually have to work at it, and to rely on undocumented interfaces that could change at any time. For all of the user-friendly efforts out there, there's a lot of systems that are hard to pull raw data from.

I've started a very tiny version of what I suspect could be a complete project, namely to automate the alerting when a few zip codes around me have outages. The code, written in Node-RED, runs periodically to poll the DTE Energy outage map site and to ask for outage data for a few specific zip codes. It then parses that data in a Javascript/node.js node which returns it to a switch that decides whether to alert (in my case, when there are more than 250 outages in any given monitored zipcode). Alerts go out via Twitter on the @vielmetti account and via SMS to me.

The monitoring task for the adjacent utility company, Consumers Energy, is a bit different. I haven't completed this effort yet, but again a poll of their site will pull a report which in this case has a list of counties and an outage count in each county. There's a few counties that I'm monitoring, and I'll figure out the threshold for alerts there.

Node-RED is a nice programming environment for this, since it's flexible in many ways about how data gets into it and how and when alerts are done. I'm still sorting through the new "trigger" alert node in 0.8.0 which makes it possible to buffer up things so you don't get an overflow of messages all at once, and there's some subtle alarm-management logic that I want to get right so that this system can be used for real alerting and not just curiosity.

When Hurricane Sandy hit the east coast, there was a long delay between the time that power went out and when it was restored, and there was some innovation in outage tracking and holding public utilities accountable for restoration performance. Similarly, when a storm hit the East Lansing, MI area there were furious municipal power consumers outraged that their utility company didn't have an accurate tracking map.

I'm hoping that this starts to look like an architecture for outage tracking that can be refined over time, and I'd be super happy if utility companies started to post outage information in any reasonable easy to parse JSON or XML format files (really, it just has to be published, standards can occur as we get experience). I'll poll regularly enough to get some kind of timeline as to when the lights went out and how long it took for them to return.