Guest User

solar_chaser

a guest
Apr 10th, 2024
1,042
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.15 KB | None | 0 0
  1. function getChargeCurrent() {
  2.     if [ $(/usr/local/bin/lv VAPI_chargerCurrent) = "0.000" ] || [ $(/usr/local/bin/lv VAPI_chargerCurrent) = '"<invalid>"' ]; then
  3.         chargeCurrent=0
  4.     else
  5.         chargeCurrent=$(/usr/local/bin/lv VAPI_chargerCurrent)
  6.         chargeCurrent=${chargeCurrent:1}
  7.         chargeCurrent=${chargeCurrent%.*}
  8.         chargeCurrent=$(printf '%.*f\n' 0 $chargeCurrent)
  9.     fi
  10.     echo $chargeCurrent
  11. }
  12. function getStats() {
  13.     if curl --fail --silent --max-time 5 -X GET -H "Content-Type:application/json" 'http://192.168.1.99/current-sample' > /var/run/solarStats.json; then
  14.         #Very dirty variable trimming
  15.         #gen=`sed -E 's/\},\s*\{/\},\n\{/g' /var/log/solarStats.json | grep "GENERATION"`
  16.         #gen=`echo "$gen" | sed -nE 's/.*"p_W":(.*),"q_VAR.*/\1/p'`
  17.         gen=`sed -E 's/\},\s*\{/\},\n\{/g' /var/run/solarStats.json | grep "GENERATION" | sed -nE 's/.*"p_W":(.*),"q_VAR.*/\1/p'`
  18.         #load=`cat /var/log/solarStats.json | grep -o '\"ch":5.*?(?="type")'`
  19.         #load=`echo "$load" | sed -nE 's/.*"p_W":(.*),"q_VAR.*/\1/p'`
  20.         load=`sed -E 's/\},\s*\{/\},\n\{/g; s/],/],\n/g' /var/run/solarStats.json | grep "\"CONSUMPTION\"" | sed -nE 's/.*"p_W":(.*),"q_VAR.*/\1/p'`
  21.     else
  22.         echo "Failed to get stats"
  23.         #failure
  24.         continue
  25.     fi
  26. }
  27. function chargeRate() {
  28.     if [ $gen -gt 0 ] && [ $ampRequest -gt 0 ]; then
  29.         /usr/local/bin/sdv GUI_chargeEnableRequest true
  30.         /usr/local/bin/sdv GUI_userChargeEnableRequest true
  31.         #/usr/local/bin/sdv GUI_speedLimitMode true
  32.         if [ $ampRequest -gt 72 ]; then
  33.             echo "Setting power state... Amp request is " $ampRequest
  34.             #/usr/local/bin/sdv GUI_chargeCurrentRequest $(($gen-500))/240
  35.         else
  36.             if [ $ampRequest -ge 30 ]; then
  37.                 ampRequest=30
  38.             fi
  39.             echo "Setting power state... Amp request is " $ampRequest
  40.             /usr/local/bin/sdv GUI_chargeCurrentRequest $ampRequest
  41.             tries=0
  42.             while [ $(($ampRequest-$(getChargeCurrent))) -gt 1 ] || [ $(($ampRequest-$(getChargeCurrent))) -lt -1 ] && [ $tries -lt 5 ]
  43.                 do
  44.                     echo $(($ampRequest-$(getChargeCurrent)))
  45.                     echo 'Power Request currently' $ampRequest
  46.                     echo 'Waiting on ramp up in charge current, currently' $(getChargeCurrent)
  47.                     tries=$(($tries+1))
  48.                     echo $tries
  49.                     sleep 2
  50.                 done
  51.             powerRequest=$(($ampRequest*240))
  52.         fi
  53.         firstRun="false"
  54.         #sleep 5
  55.     else
  56.         /usr/local/bin/sdv GUI_chargeEnableRequest false
  57.         /usr/local/bin/sdv GUI_userChargeEnableRequest false
  58.         echo "No free energy available."
  59.         sleep 2
  60.     fi
  61. }
  62. firstRun="true"
  63. changeReqd="true"
  64. while [ true ]
  65. do
  66.     batteryLevel=$(/usr/local/bin/lv VAPI_batteryLevel)
  67.     echo -e "\n-------------"
  68.     echo "SoC:" ${batteryLevel:1:2}"%"
  69.     echo "-------------"
  70.  
  71.     if [ $(/usr/local/bin/lv LINK_wifiSsid) = '"WifiName"' ] \
  72.         && [ $(/usr/local/bin/lv LINK_wifiState) = '"online"' ] \
  73.         && [ $(/usr/local/bin/lv GTW_chargeState) != '"Disconnected"' ] \
  74.         && [ $(/usr/local/bin/lv GTW_chargeState) != '"Complete"' ]; then
  75.             getStats
  76.             echo 'Gen is ' $gen
  77.             echo 'Load is' $load
  78.             if [ $(getChargeCurrent) -ne 0 ]; then
  79.                 echo -n "Car currently charging at " $(getChargeCurrent)
  80.                 [ $(getChargeCurrent) -gt 1 ] && echo "amps." || echo "amp."
  81.                 if [ $firstRun == "true" ]; then
  82.                     ampRequest=$(getChargeCurrent)
  83.                 fi
  84.             fi
  85.             #if [[ $gen -le $(($load+240)) ]] && [ $(getChargeCurrent) -eq 0 ]; then
  86.             if [[ $gen -le $(($load)) ]] && [ $(getChargeCurrent) -eq 0 ]; then
  87.                 echo "Not enough solar energy to start charging"
  88.                 powerRequest=0
  89.                 ampRequest=0
  90.                 #continue
  91.             else
  92.                 getStats
  93.                 if [ $(getChargeCurrent) -eq 0 ]; then
  94.                     if [ $(($gen-$load)) -gt 240 ]; then
  95.                         powerRequest=$(($gen-$load))
  96.                         ampRequest=$(($powerRequest/240))
  97.                         echo "Power request ran IF and is" $powerRequest
  98.                     else
  99.                         echo "Not enough solar energy to call for 1 Amp"
  100.                     fi
  101.                 else
  102.  
  103.                     echo "Power request ran ELSE"
  104.                     echo 'Charge Current is currently ' $(getChargeCurrent)
  105.                     if [ $firstRun == "true" ]; then
  106.                         powerRequest=$(($(getChargeCurrent)*240))
  107.                     fi
  108.  
  109.                     echo 'Load was:' $load
  110.                     #refresh stats
  111.                     getStats
  112.                     echo 'PR was' $ampRequest
  113.                     echo 'Gen, Load, PR values:' $gen $load $powerRequest
  114.                     carlessLoad=$(($load-$(($(getChargeCurrent)*240))))
  115.                     powerRequest=$(($gen-$carlessLoad))
  116.                     #This gives an idea of how much free energy we've got available, and
  117.                     #checks to see if current amperage matches what we asked for.
  118.  
  119.                     echo "Free energy available:" $powerRequest
  120.                     echo "Load without car:" $carlessLoad
  121.  
  122.                     if [ $(($ampRequest-$(($powerRequest/240)))) -gt 1 ] || [ $(($ampRequest-$(($powerRequest/240)))) -lt -1 ]; then
  123.  
  124.                         ampRequest=$(($powerRequest/240))
  125.  
  126.                     else
  127.                         if [[ $(($gen-$load)) -ge 240 ]]; then
  128.                             ampRequest=$(($ampRequest+1))
  129.                         else
  130.                             changeReqd="false"
  131.                             echo "No change required"
  132.                         fi
  133.                         echo "Amp request is" $ampRequest
  134.                     fi
  135.                 fi
  136.             fi
  137.             if [ $changeReqd == "true" ]; then
  138.                 chargeRate
  139.             fi
  140.             changeReqd="true"
  141.     else
  142.         if [ $(/usr/local/bin/lv GTW_chargeState) = '"Disconnected"' ]; then
  143.             echo "Car not plugged in."
  144.         elif [ $(/usr/local/bin/lv GTW_chargeState) = '"Complete"' ]; then
  145.             echo "Car fully charged"
  146.         fi
  147.         sleep 10
  148.     fi
  149. done
  150.  
  151.  
Advertisement
Add Comment
Please, Sign In to add comment