agtic / chronos

5 stars 5 forks source link

Chronos

README

What is this repository for?

Chronos is a boiling/cooling water system working on Raspberry Pi. Chronos has a web interface to control the system and tracking for the state.

Alt text

Summary of set up

Installation with Docker

This repository consists of a docker container that has all the dependencies and simulators built-in. Just run using these two commands:

sudo docker-compose up --build -d chronos
sudo docker restart chronos

SIMULATORS

Chronos talks to the following components on the RPI.

These devices are specified in data_files/chronos_config.json

Test Chillers

The relays to the chillers are emulated using socat. socat creates virtual pty devices that can respond as serial ports. The following command in entrypoint.sh brings up a virtual ptyp1 device to respond to relays

socat -d -d PTY,link=/tmp/ptyp1,raw,echo=0 PTY,link=/tmp/ttyp1,raw,echo=0 &

Test Boiler

The following commands in entrypoint.sh bring up a virtual ptyp0 device and then runs working-sync-server to emulate the boiler.

socat -d -d PTY,link=/tmp/ptyp0,raw,echo=0 PTY,link=/tmp/ttyp0,raw,echo=0 &
python2 working-sync-server.py /tmp/ttyp0 &

Actual device to simulator mappings are as follows, the chronos_config.json needs to be changed on the automation QA server to run as follows: Boiler --> /dev/ttyUSB0 --> /tmp/ptyp0 Chillers --> /dev/ttyACM0 --> /tmp/ptyp1

Test water temperature

The water temperature is provided in Centigrade. In order to provide a test incoming water temperature of 100C, use:

echo -e "YES\nt=100" > /tmp/water_in

In order to provide a test out water temperature of 140C, use:

echo -e "YES\nt=140" > /tmp/water_out

Python packages dependencies

System dependencies

Hardware dependencies

Database configuration

TODO

Deployment instructions

To work with shared log and access to the db file www-data and pi users have to be added in one group. Installation script does all required actions.

Files locations

chronos log directory: /var/log/chronos

chronos database directory: /home/pi/chronos_db

chronos config path: /etc/chronos_config.json

Managing

Chronos has a daemon which controlled by the following command:

# service chronos start|stop|restart

Web UI managed by uwsgi app server:

# service uwsgi start|stop|restart|reload

SocketIO server managing:

# service uwsgi-socketio start|stop|restart|reload

AUTOMATION & TESTING

This repo uses a self-hosted git-runner on AWS. The .github/workflows/main.yaml file automatically kicks off a new deployment whenever any code changes have been committed to the master branch.

Follow these steps to add a new runner as shown in git https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners