MVP: Optimization, weather, habits & hashrates
Pre-releaseFirst release and an MVP
The 1st release concludes the 1st milestone described in the original description, plus a few very important features from the @endorxmr 's 2nd milestone, that also nears completition.
This together means, that except for the stub of the hashrate's seasonality, all the major components, that deal with physical properties of the system are being simulated and optimized. Additionally, the system helps in further leveraging the current hashrate situation, using Mean Reversion strategy, to further boost the collected hashes per unit of energy used for mining. The hashrate bonuses are a result of @endorxmr 's work, and my post-processing of what his module delivers. The post-processing is being done by tsqsim. Many further improvements can be still done on this front and this is what tsqsim
is about: squeezing more from the publicly available data, that still is able to give you advantage over the careless type of competitors :)
Collectively, scooping the hashes this way also improves and stabilizes the network's security.
As far as the 1st milestone deals with optimization of collecting hashes while preventing battery's over-/undervoltage, the 2nd milestone will deal with profitability of the same act, measured in FIAT currency terms. Please note however, that this will be only a derivative of the collected hashes, and can thus be treated just as an additional layer for a User, who is dedicated to mine Monero and assumes being rewarded in FIAT later, at a higher price anyway.
Major achievements
As a starter, please see the Screenshots section. The individual achievements will be explained below. Here are the quickstart instructions, if you'd like to play around with the release.
Weather predictions
The output of a PV system is greatly influenced by weather conditions. The simulation takes this into account and whenever a cloudy weather is predicted, the system behaves much more conservatively.
Optimization
The optimizer is able to deliver multiple solutions and presents the User the one, which achieves the best score, measured by the sum of collected hashes. Whenever in a given solution the battery would be over-/undervolted, such solution becomes penalized and will thus not be taken into account. The horizon of such optimization is set to 4 by default but can be increased up to 8 days.
Obviously the longer the horizon, the poorer the weather predictions shall become. However, nothing prevents you from rerunning the simulation again with a state (battery charge) achieved in future, in order to correct any mistakes done earlier.
Extra documentation
I felt like I needed to let it all out, what I exactly think about safety and economy of the operation we're dealing with. Please see this section, if you like a quick blog-like read.
Habits
As explained in the economy article, many times it will make sense to rather use the electricity for domestic purposes, as the reward is immediate and without any competition. This is especially valid, if your PV system is of a tiny size. The habits configuration allows you to declare your predictable habits and mine when only these higher-priority needs (as defined by you), are satisfied and there's still enough power stored for mining.
Mining rig definition
Very related to habits are the mining rig definitions, with the difference, that they are assumed to be able to be started and switched off by the system on demand. More information can be obtained in this section.
Modeling solar arrays
Before even spending a dime, you might want to make a good plan how many panels to buy and where to place them. You might want to resist the mainstream idea of placing every panel with the same azimuth of 180° (exactly south) and tilt of 45°, for more diversification stabilizes your output across the day or even the whole year. The following section explains how to perform such experiments.
Console UI (almost done)
There's a console UI in works, whose prototype you may already execute with the src/ui_curses_menu.py
script. In the future we'll present a GUI version of the UI, using exactly the same menu definitions, to avoid duplication, which are stored here.
What's Changed
- Add requirements and move parameters to config.json by @endorxmr in #1
- Implement basic profitability calculation and price fetching by @endorxmr in #2
- CI: Initial version - Ubuntu by @mj-xmr in #3
- UI: Asciimatics console by @mj-xmr in #4
- UI: Ptyhon curses by @mj-xmr in #5
- version by @mj-xmr in #6
- UI: Curses-menu by @mj-xmr in #7
- UI: Installation menu by @mj-xmr in #8
- Tests: full automation by @mj-xmr in #9
- UI: Menu adjustments by @mj-xmr in #10
- Add windows-curses as a windows-only requirement by @endorxmr in #12
- Initial simulator by @mj-xmr in #14
- Simulator with python by @mj-xmr in #15
- Multiple computers defined by a json file by @mj-xmr in #17
- Configurable battery by @mj-xmr in #18
- Python reads battery.json by @mj-xmr in #19
- Fetching weather by @mj-xmr in #20
- Caching weather download by @mj-xmr in #21
- Input initial battery state by @mj-xmr in #22
- Weather prediction n days ahead by @mj-xmr in #23
- Fix horizon indexing by @mj-xmr in #24
- Config templates by @mj-xmr in #25
- Geoip by @mj-xmr in #26
- Arrays definition by @mj-xmr in #27
- System voltage and wattage lot by @mj-xmr in #28
- Display hour fix by @mj-xmr in #29
- Individual system settings by @mj-xmr in #30
- Hashrate bonus ma by @mj-xmr in #31
- Habits json by @mj-xmr in #32
- Habits got infrastructure entries by @mj-xmr in #33
- Ci mac by @mj-xmr in #35
- Battery charge AH & V stub by @mj-xmr in #36
- Verbose functions by @mj-xmr in #37
- Runtime optimizations by @mj-xmr in #38
- Reenable tests by @mj-xmr in #39
- Enable local unit tests by @mj-xmr in #40
- Doc: safety by @mj-xmr in #13
- Array modelling by @mj-xmr in #41
- Doc: Economy by @mj-xmr in #42
- Arrays can be parametrised by @mj-xmr in #43
- [WIP] Historical price and difficulty fetching and saving by @endorxmr in #16
- Unit tests: Habits, etc. by @mj-xmr in #45
- Latest network diff taken into account by @mj-xmr in #46
- Hash for data by @mj-xmr in #47
- Simplified historical data fetching by @mj-xmr in #48
- Hash for data by @mj-xmr in #49
- Update linux.yml by @mj-xmr in #50
- Tuning: Don't mine on the last day to spare energy by @mj-xmr in #51
New Contributors
Full Changelog: https://github.com/mj-xmr/SolOptXMR/commits/v0.1-beta