mmmries

mmmries

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.

Most Liked

jjcarstens

jjcarstens

Nerves Core Team

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!

mmmries

mmmries

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.

lawik

lawik

Nerves Core Team

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 …

Last Post!

jc00ke

jc00ke

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.

Where Next?

Popular in Discussions Top

joeerl
I’m playing with Elixir - It’s fun. I think @rvirding does give Elixir courses these days. Re: files and database - when I given Erlang ...
New
PragTob
Hey everyone, this has been brewing in my head some time and it came up again while reading Adopting Elixir. GenServers, supervisors et...
New
wmnnd
The Go vs Elixir thread got me thinking: Would it be too hard to implement a simple mechanism for creating Go-style static app binaries f...
New
chuck
Let me start by stating an assumption: Phoenix is a great approach to building REST APIs. There are many reasons for this, but I will ass...
New
klo
Got a question about when to concat vs. prepending items to list then reversing to achieve appending. So i know lists boil down to [1 | ...
New
AstonJ
Can you believe the first professionally published Elixir book was published just 8 years ago? Since then I think we’ve seen more books f...
New
arcanemachine
https://nitter.net/josevalim/status/1744395345872683471 https://twitter.com/josevalim/status/1744395345872683471
New

Other popular topics Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement