This documents contains basic explanation of implementation part.
Firstly, clone this project:
git clone <path_to_this_repo>Then make a fresh virtualenv and activate it. After that, install all required modules into active virtualenv using:
cd <dir_where_this_repo_is_cloned>
pip install -r requirements.txtThen run the proposed solution with:
python3 run_solution.pyNow run the framework part to start getting data from it:
python3 run_framework.pyVisualization is by default available at
http://localhost:8000/viz.html. All
these steps are also available as single script run.py that can be
run using:
python3 run.pyor
./run.pyThis script will run solution then framework and as the very last step it will open your default system browser at visualization page.
All the available framework options are placed and explained in params.conf
Before you start working on your solution consider the proposed solution architecture.
Proposed solution as well as framework requires Python 3.
Typhoon framework is given as a Python script that could be run using:
./run_framework.pyOr:
python run_framework.pyFramework starts emitting data in the form of DataMessage
(DataMessage alongside with other offered utilities is placed in the
utils module) after time lapse specified in params.conf.
Communication between Typhoon framework and the solution is abstracted
through the Control class from utils module. Control class has
get_data and push_results. First method returns Python generator
that produces data sent by the framework encapsulated into
DataMessage objects. Second is aimed to send data back to the
Typhoon framework when it is ready, data that is sent should be
encapsulated into ResultsMessage object. Proposed solution that
depicts usage of the Control class is given below
(hackathon/solution/solution.py):
def worker(msg: DataMessage) -> ResultsMessage:
"""TODO: This function should be implemented by contestants."""
# Dummy result is returned in every cycle here
return ResultsMessage(data_msg=msg,
load_one=True,
load_two=True,
load_three=True,
power_reference=0.0,
pv_mode=PVMode.ON)
def run(args) -> None:
prepare_dot_dir()
config_outs(args, 'solution')
cntrl = Control()
for data in cntrl.get_data():
cntrl.push_results(worker(data))One can run proposed solution using:
./run_solution.pyOr:
python run_solution.py