Giter Club home page Giter Club logo

garagepi's Introduction

GaragePi

Overengineer your garage door with your Raspberry Pi!

Use a Raspberry Pi to open or close your garage door and to sense whether it's currently open. You can do this from the comfort of your couch or anywhere in the world (with an appropriate VPN connection). Your spouse may think you're crazy, but it's so cool!

I started with this guide by Chris Driscoll at Driscosity. Chris has an awesome guide with step-by-step instructions, pictures, and even a video of the system in operation. I use this same hardware setup for GaragePi.

What he has is great for a simple opener and status display, but the second time I used it my relay got stuck closed because of a connection issue (it's javascript based). I also wanted more features and more control over what was going on.

So I wrote a Flask app (Python) with some JSON/jQuery for keeping the status updated. I also used Bootstrap for the front end. All these are new to me so forgive / correct any noob mistakes.

Dec 2020 Update - Added Telegram Notifications

GaragePi now supports Telegram notifications. Get your Bot key and chat ID and place it in the app.cfg file to enable telegram notifications. You can read more about getting this information from the apprise wiki https://github.com/caronc/apprise/wiki/Notify_telegram

Oct 2020 Update - Added Crack Open Garage Feature

GaragePi under this fork now has an option to crack open the garage. The fuction is a simple time-delay that triggers the relay twice. The button to crack the garage does not have a modal confirmation, so to make the UI more consistent I removed the modal confirmation from the original open button.

Modifiy the time delay in the app.cfg file to make it work for your garage.

Feb 2016 Update - IFTTT Maker Support!

GaragePi now supports IFTTT alerts through the new Maker Channel. It will generate events when an open or close is detected and even at a designated time.

See below for alert details and how to set them up.

I also pulled the app into two parts, one for the webserver and one that's always running and talking to the RPi. This makes it so the webserver doesn't have to run with root privileges. More importantly, this also enables a whole lot of other features that require running all the time instead of just within a web request.

Screenshots

Features

  • Open / close the garage door with the press of a button.
  • See if garage door is currently open.
  • See history of when the door was opened or closed even when it wasn't opened/closed using the app.
  • Download entire history to CSV file
  • Garage door activity generates IFTTT events.
  • Responsive UI for both desktop and mobile use.
  • Show the RPI's internal temps because, well, I can.

Planned Features

I'm definitely planning on getting these done.

  • Make the password configurable. You can change it yourself, but you have to edit a config file.
  • Send an alert if the door is open past a certain time. (I'm always leaving the door open all night.) Done!

Okay, I might never implement these, but here are some ideas for what would make it even better (read more overengineered).

  • Add a function to open the door just partway for ventilation.
  • Close the door automatically at a certain time or after a certain amount of time.
  • Show stats of how much time the door is open, what hours it's most open, or other interesting trends.

Installation

Online Installation

  1. Follow all the instructions at Driscosity up until the point where he has you installing WebIOPi. Basically, just do the hardware bit and the RPi environment setup.

  2. Run the fully automated installer by running this command logged into your Raspberry Pi.

    curl -s "https://raw.githubusercontent.com/nathanpjones/GaragePi/master/setup/online_install.sh" | bash

    (If you want to know what's going on, here are the full contents of online_install.sh and then setup.sh that is called next.)

It will take a while for the setup scripts to run, but at the end you should be able to access your site at your Raspberry Pi's IP address.

The online install will put everything in ~/garage_pi. Look to the instance subfolder for the app logs and the database.

Offline Install

If you want to pull down the repo manually (recommended if you want to choose where to install), all you have to do is navigate to the project root folder and run the following command.

source setup/setup.sh

Configuration

The app configuration file is found in instance/app.cfg.

  1. Navigate to the project root. If you used the online installer, run cd ~/garage_site.
  2. Run nano instance/app.cfg to open the config file.
  3. Locate the PASSWORD field and change it from the default to something unique for you. You may also change the login USERNAME if you like.
  4. Set the RELAY_PIN and REED_PIN if your hardware configuration differs from the Driscosity setup.
  5. Have a look through the other settings such as the IFTTT settings to see if any other changes are appropriate.
  6. Press CTRL+X. Answer Y when prompted to save and then press Enter to overwrite the existing file.

Uninstall

I've included an uninstall script. You can run it with the following command.

source setup/uninstall.sh

This isn't a complete uninstall because I don't keep track of everything you had installed when you started. It does remove the GaragePi related services and lets you know what else you might want to remove.

Once you've run the uninstall script, it's safe to simply delete the project root folder.

rm -rf ~/garage_pi

IFTTT Events

GaragePi supports generating IFTTT events using the Maker Channel.

Available Events

  • garage_door_opened - Fired when door is opened
  • garage_door_closed - Fired when door is closed
  • garage_door_changed - Fired when door is opened or closed. Value1 is set to either opened or closed.
  • garage_door_warning - Fired when door is open at a given time of day. Value1 is set to open.

Configuring Events

To enable IFTTT events, you must first obtain your maker key. You should see listed on the front page of the Maker Channel.

  1. Open up instance/app.cfg
  2. Locate the line that starts with IFTTT_MAKER_KEY and input your maker key between the single quotes. It should look something like, IFTTT_MAKER_KEY = 'c-jfLKBJEfijas3r28VBL'
  3. If you want to use the door warning, change DOOR_OPEN_WARNING_TIME to the desired time. Make sure to use 24-hour format with just hours and seconds, for example, DOOR_OPEN_WARNING_TIME = "18:30"

garagepi's People

Contributors

nathanpjones avatar realdudeperson avatar chickenandpork avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.