Smart home server on Django.
Collects and displays data from sensors, weather forecast service (OpenWeather).
You can connect your devices (such as Arduino).
! the project is under development !sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt autoremove -y
- install docker https://docs.docker.com/engine/install/debian/ for Raspbian!
- install PostgreSQL locally:
sudo apt install postgresql postgresql-contrib -y
- config DB:
sudo -u postgres psql
- (*or optional) create and run PostgreSQL container with auto restart:
docker run -d --name rpi-postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres --restart always postgres:latest
- config DB:
docker exec -it rpi-postgres psql -U postgres
- create and run Rabbitmq (with manager) container
docker run -d --hostname localhost --name some-rabbit -p 5672:5672 -p 15672:15672 --restart always rabbitmq:3-management
- install some packages:
sudo apt-get install -y nginx python3-dev libpq-dev virtualenv supervisor
sudo python3 -m pip install --upgrade setuptools pip wheel pip-tools
- clone repository
git clone https://github.com/Valentin-Golyonko/HomeBox.git
andcd HomeBox/
- add permissions to .sh scripts:
chmod +x config/gunicorn/start_gunicorn.sh
chmod +x config/celery_sh/celery.sh
- create config/settings/local.py with postgres and celery config
- create and activate virtual environment:
python3 -m venv venv
. venv/bin/activate
- inside venv:
pip install --upgrade setuptools pip wheel pip-tools
- generate requirements.txt:
pip-compile
- install dependencies:
pip-sync
orpip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --no-input
python manage.py createsuperuser
- check celery:
celery multi start worker -A config -c4 -B -l info --logfile=./logs/%n.log --pidfile=./logs/%n.pid
- logs in HomeBox/logs/worker.log
- and result backend on http://127.0.0.1:8000/api/core/celery_test_run/
- check django:
python manage.py runserver 0:8000
- http://127.0.0.1:8000
- if all good - stop django server (ctrl+c), celery (kill -HUP $pid)
- check gunicorn:
. ./config/gunicorn/start_gunicorn.sh
- if you see django on http://127.0.0.1:8001, it's mean that gunicorn is ok
- edit nginx config:
sudo nano /etc/nginx/sites-enabled/default
- copy your config from 'config/nginx/nginx.conf'
- check if it's ok
sudo nginx -t
- and
sudo service nginx restart
- you may run start_gunicorn.sh and see django on 'server_ip' (not port needed)
- setup supervisor config for gunicorn and celery:
sudo nano /etc/supervisor/conf.d/homebox.conf
sudo nano /etc/supervisor/conf.d/celeryd.conf
sudo service supervisor restart
- supervisor logs is here
sudo nano /var/log/supervisor/supervisord.log
- celery result backend check on http://'server_ip'/api/core/celery_test_run/
- check I2C BME280 sensor -
i2cdetect -y 1