
# Aquamaniac Home Control System (AqHCS)

## Quickstart

### Prerequisites

To compile the project the following software needs to be installed:
- gwenhywfar (general purpose library, also containing some development tools)
- avrasm (Opensource avr assembler)
- gcc  (GNU C compiler)


### Building

- download and unpack this project
- cd into the main folder
- create a build folder (e.g. "mkdir build")
- cd into that "build" folder
- configure package for building ("gwbuild -s ../")
- build autogenerated files ("gwbuild -p" and "gwbuild -Btm2builder")
- build project ("gwbuild -j NUM_OF_CPUS")
- install project ("sudo gwbuild -i")


## Overview

See https://gitea.aqbanking.de/martin/aqhome/wiki for more information (in German).

The Aquamaniac Home automation/control system consists of multiple parts:
- nodes
  - small PCBs with AVR microcontrollers, for now:
    - AtTiny84
    - AtTiny85
    - AtTiny841
    - AtMega644
  - decentralized, nodes just broadcast measured data over a two-wire
    communication network (clock/data), addresses are auto-assigned, no prior 
    setup necessary, no central bottleneck or single point of failure
  - node types
    - environmental measuring (temperature, humidty, CO2 and others)
    - motion detection, door/window sensors
    - LED strip controllers
  - modular operating system written in AVR assembler
  - event-driven GUI
  - driver modules for busses:
    - one-wire bus
    - two-wire-bus
    - SPI bus
    - UART
  - driver modules for devices/sensors (incomplete list):
    - DS18b20  sensors for temperature measurement
    - SI7021   sensors for temperature and humidity measurement
    - SGP_30   sensors for air quality measurement
    - ccs811   sensors for air quality measurement
    - SK6812   LED driver
    - ds3231   realtime clock module
    - I2C displays (work-in-progress)
    - SPI displays (work-in-progress)

- applications
  - aqhome-data
    - TCP data service receiving sensor data
  - aqhome-nodes
    - service receiving sensor data via inter-node bus from nodes
      and forwarding that data to aqhome-data
  - aqhome-mqttlog
    - service exchanging data between aqhome-data service and a
      mqtt server
  - aqhome-react
    - service reacting to data received by aqhome-data (home automation service)
  - aqhome-tool
    - tool to manipulate aqhome-data (e.g. edit devices and values,
      add data points, create graphs from aqhome-data)
    - tool to flash firmware for nodes, list nodes
  - aqhome-cgi
    - HTTP service for user interaction with aqhome-data

