# Introduction to Plutonium

## Directory structure

Following structure is applied to this project. Some directories are minified in this view on purpose.

    .
    ├── chttpd.py
    ├── config
    │   └── plutonium.ini
    ├── config.py
    ├── doc ... (documentation in sphinx)
    ├── index.py
    ├── localdeploy.sh
    ├── modules
    │   ├── dynamic.py
    │   ├── status.py
    │   ├── temphumi.py
    │   ├── voltage.py
    │   └── weather.py
    ├── static
    │   ├── css
    │   │   ├── bootstrap.css
    │   │   └── dygraph.css ...
    │   ├── img
    │   │   ├── battery_0.png ...
    │   └── js
    │       ├── solar_graph.js
    │       ├── status_graph.js
    │       ├── temphum_graph.js
    │       └── weather_graph.js ...
    ├── templates
    │   ├── footer.html
    │   ├── header.html
    │   ├── landing_page.html
    │   ├── status_admin.html
    │   ├── temphumi_admin.html
    │   ├── top_menu.html
    │   ├── voltage_admin.html
    │   └── weather_admin.html
    └── TODO.txt

## CherryPy configuration (config.py)

Configuration is stored in a separate file statically, so each submodule can load the same configuration. This should be variables, that are project-wide.

### CherryPy configuration file (plutonium.ini)

Configuration file, .ini style. Option = value. File resides in ./config directory. It is read by confi.py and parsed into a dict(), available throughout the project.

    _server_protocol = https
    _server_name = bastart.spoton.cz
    _server_port = 80
    _server_bind_ip = 0.0.0.0
    _influx_host = localhost
    _influx_port = 8086
    _influx_user = pi
    _influx_pwd = password
    _influx_weather_db = weather_v2
    _influx_status_db = status
    _influx_voltage_db = voltage
    _influx_IoT_db = weather_v2

### Configuration classes and functions

## CherryPy server (chttpd.py)

The server uses CherryPy module. For more information, please consult the Cherrypy documentation.

CHTTPD.py is also the executable, that can be launched as a standalone application by simply typing ./chttpd.py, or python3 chttpd.py

### Modules and web paths

Modules are located in the modules directory, hence the imports from a subdirectory

    from modules import voltage
    from modules import weather
    from modules import dynamic
    from modules import status
    from modules import temphumi

As can be seen, each class / module is mounted under a specific web path. This is the preferred way of future expansion modules.

    cherrypy.tree.mount(voltage.EnergyInfo(), "/", conf)
    cherrypy.tree.mount(voltage.EnergyInfo(), "/energy", conf)
    cherrypy.tree.mount(weather.WeatherInfo(), "/weather", conf)
    cherrypy.tree.mount(status.StatusInfo(), "/status", conf)
    cherrypy.tree.mount(dynamic.Expose(), "/data", conf)
    cherrypy.tree.mount(temphumi.PuerhInfo(), "/temphumi", conf)

## Index (index.py)

Reserved for future use. Currently not displayed, as the EnergyInfo() class is mounted under root(/) of the web, defined in chttpd.py

    cherrypy.tree.mount(voltage.EnergyInfo(), "/", conf)

## Indices and tables

- Index

- Module Index

- Search Page