# 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: ```text $ 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`: ```text KERNEL=="watchdog", MODE="0666" ``` Change the hostname: ```text $ sudoedit /etc/hostname $ sudoedit /etc/hosts ``` ### Script Install dependencies: ```text $ 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: ```text $ 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: ```text $ cp settings.py.example settings.py $ vim settings.py ``` Now you can run the script to test: ```text $ 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](https://pypi.org/project/supervisor/). Configure `/etc/supervisor/conf.d/doorbell.conf`: ```text [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: ```text $ 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.