PalmaSolutions

Ethermine power calculator

Dec 17th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # Ethermine.org stats and power cost calculations script
  3. #
  4. # v0.1  proof of concept
  5. # v0.2  adds time to next Ether calculation with human-friendly timeframe and datestamps
  6. #       adds number padding to prettify output and permit later addition of multiple currencies
  7. #       reordered output for aesthetic reasons; tabbed data first
  8. #   adds separate padding function for fiat currencies; work to two decimal places
  9. # v0.3  brings energy cost calcs into a function, avoids dependence on a separate script
  10. #   - despite the variable names, this supports any input currency known to fixer.io
  11. #   - simplified function to avoid needing external commands to extract data from it
  12. #   - adds power reporting in kWh, not just USD power cost
  13. # v0.4  improves multi-currency support
  14. #   - fetch a currency conversion rate for power costs only if currency != USD
  15. #   - fetch currency conversion data once per script run, not recursively within functions
  16. #   - add functions to return a conversion from USD to local currency and vice versa
  17. #   - add conversion of gross returns to local currency in which power cost is given
  18. #   - show the conversion rate from local to USD alongside
  19. #   - add reporting of power costs in local currency before USD conversion
  20. #   - add conversion of net returns to local currency
  21. #   - tested with USD, GBP, CAD, AUD, EUR, others probably work
  22. # v0.5  improves relevance of output in light of multi-currency support
  23. #   - suppress redundant output where currency = USD, use local currency when relevant
  24. #   - show currency conversion workings alongside returns in local currency
  25. #   - suppress redundant output where currency != USD and workings shown alongside
  26. #   - suppress 4 lines of output for power costs in non-local currency
  27. #   - suppress 4 lines of output for power costs in kWh; workings alongside fiat costs
  28. #   - process work data from last 100 rounds for average hashrate
  29. #   - tidy up the output
  30. # v0.6  - if we have a /tmp/wattage file, let it override the command line variable. This
  31. #   allows us to vary the specified wattage on the fly once the script is running e.g.
  32. #   when running in screen, basically to set wattage in line with variable rig usage
  33. #   or clock speeds.
  34. #   - add calculation for watts per MH/s
  35. #   - add more explanatory notes as to data sources; add long padding function
  36. # v0.7  Fixed average hash rate to use the 24h average from the pool rather than data from
  37. #   the last 100 rounds. Oops. Tidied up formatting a bit, prettified. Still no worker
  38. #   data as yet; this is pitched at global statistics so far.
  39. #   - suppress redundant currency conversions in power costs
  40. #   - add net estimate calculations for ETH and BTC values alongside gross estimates
  41. # v0.8  Adds support for output equivalents in altcoin using the ShapeShift HTTP API. The
  42. #   initial implementation adds an ETH-DASH conversion for comparison with X11 mining.
  43. #   - change description to "exchange" where a third-party exchange rate is involved
  44. #   - add exchange rate for BTC from Shapeshift.io; see how far it deviates from pool
  45. #   - add exchange rate for XMR from Shapeshift.io, because we can
  46. #   - support addresses with or without a leading 0x
  47. #   - add some help text, trigger it on improper or inadequate input
  48. #   - removed surplus blank lines
  49. version="0.8";
  50. watts=$2;
  51. [ -r /tmp/wattage ] && watts=`cat /tmp/wattage`;
  52. function help {
  53.  echo "";
  54.  echo "Usage: ./ethermine_stats <address> <total_wattage> <cost_per_kwh> <currency_code>";
  55.  echo "";
  56.  echo "where";
  57.  echo "";
  58.  echo "<address>        your miner address as used at the pool";
  59.  echo "<total_wattage>      power consumption in watts of the mining rigs on this address";
  60.  echo "<cost_per_kwh>       as a decimal price per kWh, such as 0.10629 or whatever";
  61.  echo "<currency_code>      your local currency: USD, GBP, EUR, CAD, AUD etc.";
  62.  echo "";
  63.  echo "You can use expressions for cost_per_kWh, such as 0.10629*1.05*0.98, if for instance";
  64.  echo "you have a base cost per kWh on which you pay 5% VAT but get 2% cashback on the total";
  65.  echo "amount (as happens to apply to the author). Examples:";
  66.  echo ""
  67.  echo "./ethermine_stats 0xc91B3f6a889a9963c7eaE2d5BD5Ca88a6Ae2d2EA 506 0.10629*1.05*0.98 GBP"
  68.  echo "";
  69.  echo "./ethermine_stats 0xc91B3f6a889a9963c7eaE2d5BD5Ca88a6Ae2d2EA 500 0.12 USD"
  70.  echo "";
  71.  echo "./ethermine_stats 0xc91B3f6a889a9963c7eaE2d5BD5Ca88a6Ae2d2EA 500 0.14 EUR"
  72.  echo "";
  73.  echo "The intention is that this script will typically be run at regular intervals, such as";
  74.  echo "with 'watch -n60 ./ethermine_stats [args]' and that it should remain compatible with";
  75.  echo "such use as part of a 'screen' session running ethminer and a host of other scripts.";
  76.  echo ""
  77.  echo "For the same reason, output is sized to fit in one page of a 140-character (or more)"
  78.  echo "terminal window. More functionality is planned, including per-worker statistics, use"
  79.  echo "of payouts data and potentially interfaces to other third-party services, but these"
  80.  echo "will most likely be implemented as separate functions to the main statistics page."
  81. }
  82. function lineohash {
  83. for ((i=0;i<139;i++)); do echo -n "#"; done; echo "#";
  84. }
  85. function lineodash {
  86. for ((i=0;i<139;i++)); do echo -n "-"; done; echo "-";
  87. }
  88. lineodash
  89. echo "ethermine.org pool, power and profitability statistics for Linux, version $version (`date`)"
  90. lineodash
  91. [[ "$4" == "" ]] && help && exit 0;
  92. [[ "$3" == "" ]] && help && exit 0;
  93. [[ "$2" == "" ]] && help && exit 0;
  94. [[ "$1" == "" ]] && help && exit 0;
  95. function energycosts {
  96.     WATTS=$1
  97.     PERKWH=$2
  98.     CUR=$3
  99.     VAR=$4
  100.     GBPKWH="`bc <<< "scale=6; x=$PERKWH; if(x<1) print 0; x"`";
  101.     [[ "$CUR" == "USD" ]] && GBPTOUSD="1.0" || GBPTOUSD=$(loc2usd 1);
  102.     USDKWH="`bc <<< "scale=6; x=$PERKWH*$GBPTOUSD; if(x<1) print 0; x"`";
  103.     KWHDAY="`/usr/bin/bc <<< "scale=3; x=$WATTS*24/1000; if(x<1) print 0; x"`";
  104.     USDDAY="`/usr/bin/bc <<< "scale=2; x=$KWHDAY*$USDKWH/1; if(x<1) print 0; x"`";
  105.     GBPDAY="`/usr/bin/bc <<< "scale=2; x=$KWHDAY*$GBPKWH/1; if(x<1) print 0; x"`";
  106.     KWHWEEK="`/usr/bin/bc <<< "scale=3; x=$WATTS*24*7/1000; if(x<1) print 0; x"`";
  107.     USDWEEK="`/usr/bin/bc <<< "scale=2; x=$KWHDAY*$USDKWH*7/1; if(x<1) print 0; x"`";
  108.     GBPWEEK="`/usr/bin/bc <<< "scale=2; x=$KWHDAY*$GBPKWH*7/1; if(x<1) print 0; x"`";
  109.     KWHYEAR="`/usr/bin/bc <<< "scale=3; x=$KWHDAY*365.25; if(x<1) print 0; x"`";
  110.     USDYEAR="`/usr/bin/bc <<< "scale=2; x=$USDDAY*365.25; if(x<1) print 0; x"`";
  111.     GBPYEAR="`/usr/bin/bc <<< "scale=2; x=$GBPDAY*365.25; if(x<1) print 0; x"`";
  112.     KWHMO="`/usr/bin/bc <<< "scale=3; x=$KWHYEAR/12; if(x<1) print 0; x"`";
  113.     USDMO="`/usr/bin/bc <<< "scale=2; x=$USDYEAR/12; if(x<1) print 0; x"`";
  114.     GBPMO="`/usr/bin/bc <<< "scale=2; x=$GBPYEAR/12; if(x<1) print 0; x"`";
  115. case "$5" in
  116.     "$CUR")
  117.     [[ "$4" == "day" ]] && echo $GBPDAY;
  118.     [[ "$4" == "week" ]] && echo $GBPWEEK;
  119.     [[ "$4" == "month" ]] && echo $GBPMO;
  120.     [[ "$4" == "year" ]] && echo $GBPYEAR;
  121.     ;;
  122.     "kWh")
  123.     [[ "$4" == "day" ]] && echo $KWHDAY;
  124.     [[ "$4" == "week" ]] && echo $KWHWEEK;
  125.     [[ "$4" == "month" ]] && echo $KWHMO;
  126.     [[ "$4" == "year" ]] && echo $KWHYEAR;
  127.     ;;
  128.     *)
  129.     [[ "$4" == "day" ]] && echo $USDDAY;
  130.     [[ "$4" == "week" ]] && echo $USDWEEK;
  131.     [[ "$4" == "month" ]] && echo $USDMO;
  132.     [[ "$4" == "year" ]] && echo $USDYEAR;
  133.     ;;
  134. esac
  135. }
  136. function pad {
  137.     out="`echo $1 | sed -e :a -e 's/^.\{1,13\}$/& /;ta'`";
  138.     echo "$out";
  139. }
  140. function p {
  141.     out="`echo $1 | sed -e :a -e 's/^.\{1,12\}$/& /;ta'`";
  142.     echo "$out";
  143. }
  144. function pl {
  145.     out="`echo $1 | sed -e :a -e 's/^.\{1,27\}$/& /;ta'`";
  146.     echo "$out";
  147. }
  148. function padf {
  149.     #Version for fiat currency, work to two decimal places
  150.     out="`printf %.2f $(echo $1 | bc -l) | sed -e :a -e 's/^.\{1,13\}$/& /;ta'`";
  151.     echo "$out";
  152. }
  153. function truncf {
  154.     #Version for fiat currency, work to two decimal places
  155.     out="`printf %.2f $(echo $1 | bc -l)`";
  156.     echo "$out";
  157. }
  158. case $4 in
  159.     "USD")
  160.     LOC2USD=1;
  161.     USD2LOC=1;
  162.     ;;
  163.     *)
  164.     LOC2USD=`wget -q -O- "http://api.fixer.io/latest?base=$4&symbols=USD" | jq .rates.USD`
  165.     USD2LOC=`wget -q -O- "http://api.fixer.io/latest?base=USD&symbols=$4" | jq .rates.$4`
  166.     ;;
  167. esac
  168. function loc2usd {
  169.     usd=`bc <<< "scale=8; x=$1*$LOC2USD; if(x<1) print 0; x"`;
  170.     echo $usd;
  171. }
  172. function usd2loc {
  173.     loc=`bc <<< "scale=8; x=$1*$USD2LOC; if(x<1) print 0; x"`;
  174.     echo $loc;
  175. }
  176. ETH2DASH=`wget -q -O- https://shapeshift.io/marketinfo/eth_dash | jq .rate`;
  177. ETH2BTC=`wget -q -O- https://shapeshift.io/marketinfo/eth_btc | jq .rate`;
  178. ETH2XMR=`wget -q -O- https://shapeshift.io/marketinfo/eth_xmr | jq .rate`;
  179. function eth2alt {
  180.     amount=$1;
  181.     dest=$2;
  182.     [[ "$dest" == "DASH" ]] && rate="$ETH2DASH";
  183.     [[ "$dest" == "BTC" ]] && rate="$ETH2BTC";
  184.     [[ "$dest" == "XMR" ]] && rate="$ETH2XMR";
  185.     alt=`bc <<< "scale=8; x=$amount*$rate; if(x<1) print 0; x"`;
  186.     echo $alt;
  187. }
  188. address="`echo $1 | sed -e 's/0x//g'`";
  189. w=$2
  190. perkwh=`bc <<< "scale=8; x=$3; if(x<1) print 0; x"`
  191. cur=$4
  192. json="`wget -q -O - http://ethermine.org/api/miner_new/$address`";
  193. hashrate=`echo "$json" | jq .hashRate | sed -e s/\"//g | awk {'print $1'}`;
  194. hashrate0=$(bc <<< "scale=2; x=$hashrate; x");
  195. avghashrate=`echo "$json" | jq .avgHashrate | sed -e s/\"//g | awk {'print $1'}`;
  196. avghashrate0=$(bc <<< "scale=1; x=$avghashrate/1000000; x");
  197. padhashrate=$(pad $hashrate);
  198. #workdata="`echo "$json" | jq .rounds | grep work | egrep -o [0-9]+`"
  199. #x=0;
  200. ##echo "$workdata" | while read v; do x=$(($x + $v)); done;
  201. #for v in `echo $workdata`; do x=$(($x + $v)); done;
  202. #avghash=`bc <<< "scale=1; x=$x/100; x"`;
  203. epm=`echo "$json" | jq .ethPerMin`;
  204. bpm=`echo "$json" | jq .btcPerMin`;
  205. upm=`echo "$json" | jq .usdPerMin`;
  206. bpm=`echo "${bpm}" | sed -e 's/[eE]+*/\\*10\\^/'`
  207. unpaidf=`echo "$json" | jq .unpaid`;
  208. unpaid=$(pad `bc <<< "scale=8; x=$unpaidf/1000000000000000000; if(x<1) print 0; x"`);
  209. tomine=`bc <<< "scale=8; x=1-$unpaid; if(x<1) print 0; x"`;
  210. minstomine=`bc <<< "scale=0; x=$tomine/$epm; if(x<1) print 0; x"`;
  211. hourstomine=`bc <<< "scale=0; x=$minstomine/60; if(x<1) print 0; x"`;
  212. daystomine=`bc <<< "scale=0; x=$minstomine/60/24; x"`;
  213. timeframe="";
  214. [[ "$daystomine" -gt "0" ]] && timeframe="$daystomine days";
  215. [[ "$daystomine" -eq "0" ]] && [[ "$hourstomine" -gt "0" ]] && timeframe="$hourstomine hours";
  216. [[ "$daystomine" -eq "0" ]] && [[ "$hourstomine" -eq "0" ]] && timeframe="$minstomin minutes.";
  217. [[ "$daystomine" -gt 0 ]] && remainderhours="`bc <<< "scale=0; x=$hourstomine-($daystomine*24); x"`" && timeframe="$timeframe, $remainderhours hours";
  218. [[ "$hourstomine" -gt 0 ]] && remainder="`bc <<< "scale=0; x=$minstomine-($hourstomine*60); x"`" && timeframe="$timeframe, $remainder minutes";
  219. timestampnow="`date +%s`";
  220. timestampnext="`bc <<< "scale=0; x=$timestampnow+($minstomine*60); x"`";
  221. timestamp="`date -d "@$timestampnext"`";
  222. eph=`bc <<< "scale=2; x=$epm*60/1; if(x<1) print 0; x"`;
  223. epd=`bc <<< "scale=8; x=$epm*60*24/1; if(x<1) print 0; x"`;
  224. epw=`bc <<< "scale=8; x=$epm*60*24*7/1; if(x<1) print 0; x"`;
  225. epy=`bc <<< "scale=8; x=$epm*60*24*365.25/1; if(x<1) print 0; x"`;
  226. epmo=`bc <<< "scale=8; x=$epy/12; if(x<1) print 0; x"`;
  227. uph=`bc <<< "scale=2; x=$upm*60/1; if(x<1) print 0; x"`;
  228. upd=`bc <<< "scale=8; x=$upm*60*24/1; if(x<1) print 0; x"`;
  229. upw=`bc <<< "scale=8; x=$upm*60*24*7/1; if(x<1) print 0; x"`;
  230. upy=`bc <<< "scale=8; x=$upm*60*24*365.25/1; if(x<1) print 0; x"`;
  231. upmo=`bc <<< "scale=8; x=$upy/12; if(x<1) print 0; x"`;
  232. bph=`bc <<< "scale=2; x=$bpm*60/1; if(x<1) print 0; x"`;
  233. bpd=`bc <<< "scale=8; x=$bpm*60*24/1; if(x<1) print 0; x"`;
  234. bpw=`bc <<< "scale=8; x=$bpm*60*24*7/1; if(x<1) print 0; x"`;
  235. bpy=`bc <<< "scale=8; x=$bpm*60*24*365.25/1; if(x<1) print 0; x"`;
  236. bpmo=`bc <<< "scale=8; x=$bpy/12; if(x<1) print 0; x"`;
  237. cpd=$(energycosts "$watts" "$3" "$4" "day")
  238. cpw=$(energycosts "$watts" "$3" "$4" "week")
  239. cpm=$(energycosts "$watts" "$3" "$4" "month")
  240. cpy=$(energycosts "$watts" "$3" "$4" "year")
  241. lcpd=$(energycosts "$watts" "$3" "$4" "day" "$4")
  242. lcpw=$(energycosts "$watts" "$3" "$4" "week" "$4")
  243. lcpm=$(energycosts "$watts" "$3" "$4" "month" "$4")
  244. lcpy=$(energycosts "$watts" "$3" "$4" "year" "$4")
  245. wpd=$(energycosts "$watts" "$3" "$4" "day" "kWh")
  246. wpw=$(energycosts "$watts" "$3" "$4" "week" "kWh")
  247. wpm=$(energycosts "$watts" "$3" "$4" "month" "kWh")
  248. wpy=$(energycosts "$watts" "$3" "$4" "year" "kWh")
  249. pct=$(truncf `bc <<< "scale=5; x=(($cpy/$upy)*100); x"`);
  250. keep=$(truncf `bc <<< "scale=5; x=(100-$pct); x"`);
  251. wpmhs=$(truncf `bc <<< "scale=5; x=($watts/$avghashrate0); x"`);
  252. nepd=`bc <<< "scale=8; x=$epd*($keep/100); if(x<1) print 0; x"`;
  253. nepw=`bc <<< "scale=8; x=$epw*($keep/100); if(x<1) print 0; x"`;
  254. nepy=`bc <<< "scale=8; x=$epy*($keep/100); if(x<1) print 0; x"`;
  255. nepmo=`bc <<< "scale=8; x=$epmo*($keep/100); if(x<1) print 0; x"`;
  256. nbpd=`bc <<< "scale=8; x=$bpd*($keep/100); if(x<1) print 0; x"`;
  257. nbpw=`bc <<< "scale=8; x=$bpw*($keep/100); if(x<1) print 0; x"`;
  258. nbpy=`bc <<< "scale=8; x=$bpy*($keep/100); if(x<1) print 0; x"`;
  259. nbpmo=`bc <<< "scale=8; x=$bpmo*($keep/100); if(x<1) print 0; x"`;
  260. lineodash
  261. echo "Hash rate and power consumption"
  262. lineodash
  263. echo ""
  264. echo "Hashrate:        $(pad $avghashrate0) $(p MH/sec) (average hash rate over the last 24 hours)"
  265. echo "                 $(pad $hashrate0) $(p MH/sec) (current hash rate over the last few minutes)"
  266. echo ""
  267. echo "Electricity:     $(pl "$watts watts continuous load")"
  268. echo "                 $(pl "$wpmhs watts per MH/sec")"
  269. echo "                 $(pl "Power costs $pct% of output") (calculated from USD power cost as percentage of USD returns)"
  270. echo ""
  271. echo "Unpaid:          $(pad $unpaid) $(p ETH) (amount accumulated at the pool towards next payout)";
  272. echo ""
  273. echo "Next Ether in:   $(pl "$timeframe") (estimate: $timestamp)";
  274. #echo "           at:   $timestamp";
  275. echo ""
  276. lineodash
  277. echo "Estimated rewards"
  278. lineodash
  279. echo ""
  280. echo "Output (ETH):    $(pad $epd) $(p ETH/day) (net: $nepd ETH/day after power cost)"
  281. echo "                 $(pad $epw) $(p ETH/week) (net: $nepw ETH/week)"
  282. echo "                 $(pad $epmo) $(p ETH/month) (net: $nepmo ETH/month)"
  283. echo "                 $(pad $epy) $(p ETH/year) (net: $nepy ETH/year)"
  284. echo "Output (BTC):    $(pad $bpd) $(p BTC/day) (net: $nbpd BTC/day)"
  285. echo "                 $(pad $bpw) $(p BTC/week) (net: $nbpw BTC/week)"
  286. echo "                 $(pad $bpmo) $(p BTC/month) (net: $nbpmo BTC/month)"
  287. echo "                 $(pad $bpy) $(p BTC/year) (net: $nbpy BTC/year)"
  288. echo "Exchange (DASH): $(pad $(eth2alt $epd DASH)) $(p DASH/day) (net: $(eth2alt $nepd DASH) DASH/day @ $ETH2DASH DASH/ETH; exchange rate: shapeshift.io)"
  289. echo "                 $(pad $(eth2alt $epw DASH)) $(p DASH/week) (net: $(eth2alt $nepw DASH) DASH/week)"
  290. echo "                 $(pad $(eth2alt $epmo DASH)) $(p DASH/month) (net: $(eth2alt $nepmo DASH) DASH/month)"
  291. echo "                 $(pad $(eth2alt $epy DASH)) $(p DASH/year) (net: $(eth2alt $nepy DASH) DASH/year)"
  292. echo "Exchange (XMR):  $(pad $(eth2alt $epd XMR)) $(p XMR/day) (net: $(eth2alt $nepd XMR) XMR/day @ $ETH2XMR XMR/ETH; exchange rate: shapeshift.io)"
  293. echo "                 $(pad $(eth2alt $epw XMR)) $(p XMR/week) (net: $(eth2alt $nepw XMR) XMR/week)"
  294. echo "                 $(pad $(eth2alt $epmo XMR)) $(p XMR/month) (net: $(eth2alt $nepmo XMR) XMR/month)"
  295. echo "                 $(pad $(eth2alt $epy XMR)) $(p XMR/year) (net: $(eth2alt $nepy XMR) XMR/year)"
  296. echo "Exchange (BTC):  $(pad $(eth2alt $epd BTC)) $(p BTC/day) (net: $(eth2alt $nepd BTC) BTC/day @ $ETH2BTC BTC/ETH; exchange rate: shapeshift.io)"
  297. echo "                 $(pad $(eth2alt $epw BTC)) $(p BTC/week) (net: $(eth2alt $nepw BTC) BTC/week)"
  298. echo "                 $(pad $(eth2alt $epmo BTC)) $(p BTC/month) (net: $(eth2alt $nepmo BTC) BTC/month)"
  299. echo "                 $(pad $(eth2alt $epy BTC)) $(p BTC/year) (net: $(eth2alt $nepy BTC) BTC/year)"
  300. case $4 in
  301.     "USD")
  302. echo "Output (USD):    $(padf $upd) $(p USD/day) (estimated from current performance, with data & exchange rates supplied by the pool)"
  303. echo "                 $(padf $upw) USD/week"
  304. echo "                 $(padf $upmo) USD/month"
  305. echo "                 $(padf $upy) USD/year"
  306.     ;;
  307.     *)
  308. echo "Exchange ($4):  $(padf $(usd2loc $upd)) $(p $4/day) (converted from $(truncf "scale=2; $upd"|bc) USD @ $(usd2loc 1) USD/$4; exchange rate: fixer.io)"
  309. echo "                 $(padf $(usd2loc $upw)) $(p $4/week) (converted from $(truncf "scale=2; $upw"|bc) USD @ $(usd2loc 1) USD/$4)"
  310. echo "                 $(padf $(usd2loc $upmo)) $(p $4/month) (converted from $(truncf "scale=2; $upmo"|bc) USD @ $(usd2loc 1) USD/$4)"
  311. echo "                 $(padf $(usd2loc $upy)) $(p $4/year) (converted from $(truncf "scale=2; $upy"|bc) USD @ $(usd2loc 1) USD/$4)"
  312.     ;;
  313. esac
  314. #echo "Power (kWh):     $(padf $wpd) kWh/day"
  315. #echo "                 $(padf $wpw) kWh/week"
  316. #echo "                 $(padf $wpm) kWh/month"
  317. #echo "                 $(padf $wpy) kWh/year"
  318. case $4 in
  319.     "USD")
  320. echo "Power (USD):     $(padf $cpd) $(p USD/day) ($wpd kWh/day @ $perkwh $4/kWh)"
  321. echo "                 $(padf $cpw) $(p USD/week) ($wpw kWh/week @ $perkwh $4/kWh)"
  322. echo "                 $(padf $cpm) $(p USD/month) ($wpm kWh/month @ $perkwh $4/kWh)"
  323. echo "                 $(padf $cpy) $(p USD/year) ($wpy kWh/year @ $perkwh $4/kWh)"
  324.     ;;
  325.     *)
  326. echo "Power ($4):     $(padf $lcpd) $(p $4/day) ($wpd kWh/day @ $perkwh$4/kWh = $cpd USD/day @ $(loc2usd 1) $4/USD = $(loc2usd $perkwh) USD/kWh)"
  327. echo "                 $(padf $lcpw) $(p $4/week) ($wpw kWh/week @ $perkwh$4/kWh = $cpw USD/week"
  328. echo "                 $(padf $lcpm) $(p $4/month) ($wpm kWh/month @ $perkwh$4/kWh = $cpm USD/month"
  329. echo "                 $(padf $lcpy) $(p $4/year) ($wpy kWh/year @ $perkwh$4/kWh = $cpy USD/year"
  330.     ;;
  331. esac
  332. lineodash
  333. case $4 in
  334.     "USD")
  335.     echo "Net (USD):       $(padf `echo "scale=2; $upd-$cpd"|bc`) USD/day";
  336.     echo "                 $(padf `echo "scale=2; $upw-$cpw"|bc`) USD/week";
  337.     echo "                 $(padf `echo "scale=2; $upmo-$cpm"|bc`) USD/month";
  338.     echo "                 $(padf `echo "scale=2; $upy-$cpy"|bc`) USD/year";
  339.     ;;
  340.     *)
  341.     echo "Net ($4):       $(padf `echo "scale=2; ($upd-$cpd)*$USD2LOC"|bc`) $(p $4/day) (converted from $(truncf "scale=2; $upd-$cpd"|bc) USD @ $(usd2loc 1) USD/$4; exchange rate: fixer.io)";
  342.     echo "                 $(padf `echo "scale=2; ($upw-$cpw)*$USD2LOC"|bc`) $(p $4/week) (converted from $(truncf "scale=2; $upw-$cpw"|bc) USD @ $(usd2loc 1) USD/$4)";
  343.     echo "                 $(padf `echo "scale=2; ($upmo-$cpm)*$USD2LOC"|bc`) $(p $4/month) (converted from $(truncf "scale=2; $upmo-$cpm"|bc) USD @ $(usd2loc 1) USD/$4)";
  344.     echo "                 $(padf `echo "scale=2; ($upy-$cpy)*$USD2LOC"|bc`) $(p $4/year) (converted from $(truncf "scale=2; $upy-$cpy"|bc) USD @ $(usd2loc 1) USD/$4)";
  345.     ;;
  346. esac
  347. lineodash
  348. echo ""
  349. echo "Useful? Feel free to leave me a tip. ETH: 0x58f7F4d641dc32A4a1349aad866F132C6794659e / BTC: 155D6ZLLUezX6c8k6CXTUgF55qDP1P2Uz4 - Thanks!"
Add Comment
Please, Sign In to add comment