Giter VIP home page Giter VIP logo

chronos's Introduction

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

chronos's People

Contributors

agt24 avatar noeltimothy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.