TODOs for Juham™
================

An exceptionally well structured and priorized list of TODOs for Juham™

Automation
----------

* [_] Feature to optimize the balance between solar power production and electricity consumption to minimize costs 
    associated with electricity transmission.
* [_] Support for the current 1-Hour, and the forthcoming 15-Minute Imbalance Settlement Period
* [_] Bought five small solar panel elements, capable to produce electricity up to 5 volts. This could be used as a real time solar radiation sensor with Shelly Plus 1 wifi relay. 
* [_] ...


Python
------

* [X] Class registration methods have to call cls.load_json() and atexit.register() methods, could this be automated?
* [X] Long imports e.g. `juham.shelly.jshellymotion import JShellyMotion`?
* [_] Major design decision: continue with the current multi-threading architecture (which Python currently does not really support well), or move to multi-processing or asyncio instead?
* [_] Python type annotations (type hinting). 



Design
------

* [_] Decouple threads and functionality: any task should be runnable by a thread, an external process (perhaps run via cron), or by using an async IO approach.
* [_] Support for MQTT password, encrypted in the .json configuration file, for security.
* [_] Simulation classes for essential data sources, for development, testing, and demonstration purposes.
* [_] ...


Documentation
-------------

* [X] Replace the current Doxygen (C++) with some native python documentation too e.g. Sphinx?
* [_] Extract FIXME and TODO inline comments from the source code with the autogenerated Sphinx docs
* [_] Design and integrate a distinctive and highly professional Juham™ look with an outstanding logo and other graphics.
* [_] ...


Testing
-------

* [X] Support multiple configurations via startup arguments (one for testing, one for real)
* [_] Write unit tests for all classes
* [_] Mocking (e.g. unittest.mock?)


Inline TODO
-----------

The following items have been extraced from the source code:

.. todolist::
