Gotta love that uptime

Just logged into my raspberry pi that I use as a garage door controller and saw this

████▄▄ ▐███
█▌ ▀▀██▄▄ ▐█
█▌ ▄▄ ▀▀ ▐█ N E R V E S
█▌ ▀▀██▄▄ ▐█
███▌ ▀▀████
garage 0.2.0 (32d4ac88-9d52-5173-f118-86c36714154b) arm rpi3a
Serial : 0000000089bf37cd
Uptime : 141 days, 1 hours, 2 minutes and 14 seconds

141 days running with no restarts. I use it to open my garage from my phone and my car and to check the status of the garage door if I’m away from the house. It’s connected to a NATS server to interop with a hosted website that handles authentication/authorization. Thanks @fhunleth @jjcarstens and the other maintainers.

20 Likes

Whoa! So fun. You got me curious - I have a similar home controller which does simple functions. Not as cool an uptime (we had a power blip :face_exhaling: ), but it is still running Elixir 1.10.3 released April 25, 2020! (Maybe I should be ashamed of that). Truthfully left alone for so long that I had lost the SSH key on it, but had left Erlang distribution running and was able to get in with -remsh!

5 Likes

That’s awesome!

I’ve just started to put my Nerves devices to work for home automation. Homex is pretty nice for getting sensors out there. I need to try some switched and stuff as well which I guess you’d need for a garage door :slight_smile:

Then again, if it ain’t broke …

2 Likes

@mmmries any chance you have a writeup or code you could share? I’ve wanted to build a garage door opener, would love to see how you did it.

1 Like

The project itself is open source and it’s only 12 commits of history, so probably not too bad to go explore, but I haven’t ever done an overview of the project. GitHub - mmmries/garage

I probably should write up a blog post or something that provides an overview since it’s one of the most successful/boring projects I’ve ever done with Nerves

2 Likes

I decided to a minimal write-up in case it’s useful to anyone else. The project really centers around 2 components:

  • Sensing the state of the garage door (may not matter to some folks). I use a hall effect sensor + a magnet stuck to the side of the door so I can sense when the door is closed
  • Triggering the garage door opener. This is really easy, most wall-mounted buttons just create a connection between two terminals on the side of the garage door opener, so we mimic this same thing by connecting a relay to those same terminals and we an just close the relay for 500ms to simulate pressing that button

Then in my repo you can see that the nerves config is just starting a couple of GenServer’s to watch the input from the hall effect sensor and publish state changes to a NATS topic. Similarly it listens to a NATS topic and triggers the relay.

I have a little phoenix app that is running on fly.io that connects to those same nats topics. It uses OAuth with google and has just 2 email addresses allowlisted for which authenticated users are allowed to “click” the button which will trigger the NATS message back to the nerves device.

I went with a hosted app since I wanted to be able to remotely monitor the door and I didn’t want to wait on WiFi connection before I could push the button from my car. But you could easily run NATS and Phoenix locally if you prefer that for privacy/simplicity reasons.

5 Likes

Yes! Thanks for the write-up and sharing the code! I’ve wanted to do something like this for so long. Part of what I’m waiting on is to build a home server, and my plan is to connect via Tailscale, but nothing is set yet.

1 Like