Skip to content

agtic/chronos

 
 

Repository files navigation

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

  • Boiler via modbus connected to /dev/ttyUSB0
  • Chillers via relays talking to serial port /dev/ttyACM0
  • Relays to the Chillers via /tmp/pty0 and /tmp/pty1
  • Water temperature in and out via /tmp/water_in and /tmp/water_out

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

  • Flask
  • pyserial
  • apscheduler
  • pymodbus
  • sqlalchemy
  • python-socketio
  • socketIO_client
  • uwsgi

System dependencies

  • nginx
  • uwsgi-plug-python

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

  • Install docker.io and docker-compose on the Runner
    • sudo apt update
    • sudo apt install docker.io docker-compose -y

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 86.8%
  • HTML 5.4%
  • Less 2.5%
  • Python 1.9%
  • CSS 1.1%
  • C 1.0%
  • Other 1.3%