Go to file
2022-04-01 17:53:37 -06:00
.gitignore Initial commit 2021-10-15 19:39:14 +00:00
LICENSE Add license 2021-10-16 01:57:25 +01:00
main.py Logging, timeout 2022-04-01 17:53:37 -06:00
README.md Fix update bugs 2021-11-29 06:53:32 +00:00
requirements.txt Implement our own unifi websocket connection 2022-04-01 17:34:37 -06:00
settings.py.example Fix update bugs 2021-11-29 06:53:32 +00:00
unifi.py Implement our own unifi websocket connection 2022-04-01 17:34:37 -06:00

Doorbell Ding Dong Ring Ring Doorbell

A doorbell chime controller for my house. Runs on a Raspberry Pi and talks to wifi Unifi G4 Doorbells.

Setup

Misc

Set up user account, add user to sudo, adm, gpio groups.

Set up wifi:

$ sudo raspi-config
- System Options -> Wireless LAN -> Canada
- Enter wifi credentials
- Reboot

If wifi doesn't work, you're on your own.

For the watchdog to work, we need write access to /dev/watchdog/.

Configure /etc/udev/rules.d/60-watchdog.rules:

KERNEL=="watchdog", MODE="0666"

Change the hostname:

$ sudoedit /etc/hostname
$ sudoedit /etc/hosts

Script

Install dependencies:

$ sudo apt update
$ sudo apt install python3 python3-pip python-virtualenv python3-virtualenv supervisor python3-rpi.gpio

Make sure you have at least Python 3.9 installed.

Clone this repo:

$ cd
$ git clone https://tanner@git.tannercollin.com/tanner/doorbelldingdongringringdoorbell.git
$ cd doorbelldingdongringringdoorbell/
$ virtualenv --system-site-packages -p python3 env
$ source env/bin/activate
(env) $ pip install -r requirements.txt

Edit settings for your setup:

$ cp settings.py.example settings.py
$ vim settings.py

Now you can run the script to test:

$ source env/bin/activate
(env) $ DEBUG=true python main.py  # no watchdog
(env) $ python main.py             # uses watchdog

The watchdog will activate if a doorbell is pressed. It will reboot the Pi if the script stops.

Process management

The script is kept alive with supervisor.

Configure /etc/supervisor/conf.d/doorbell.conf:

[program:doorbell]
user=tanner
directory=/home/tanner/doorbelldingdongringringdoorbell
command=/home/tanner/doorbelldingdongringringdoorbell/env/bin/python -u main.py
stopasgroup=true
stopsignal=INT
autostart=true
autorestart=true
stderr_logfile=/var/log/doorbell.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/doorbell.log
stdout_logfile_maxbytes=10MB

Then run:

$ sudo supervisorctl reread; sudo supervisorctl reload

Script logs to /var/log/doorbell.log. Remove -u from the above command when you're done testing to save SD card writes.

License

This program is free and open-source software licensed under the MIT License. Please see the LICENSE file for details.

That means you have the right to study, change, and distribute the software and source code to anyone and for any purpose. You deserve these rights.