[ create a new paste ] login | about

Link: http://codepad.org/2mQPaw46    [ raw code | fork ]

Plain Text, pasted on Feb 2:
#bin/bash
#Required Unix tool bc & jq

###### SHELLY EM SECTION #######
#insert Shelly EM admin user
readonly SHEM_USER="admin"
#insert Shelly EM admin password
readonly SHEM_PWD="password"
#insert Shelly EM local IP
readonly SHEM_IP="192.168.255.12"
#insert Shelly EM ID of PhotoVoltaic Meter PRODUCTION POSITIVE VALUE
readonly SHEM_PV_ID="0"
#insert Shelly EM ID of Grid Meter GRID POSITIVE VALUE FOR CONSUMED, NEGATIVE FOR RETURNED
readonly SHEM_GRID_ID="1"
#insert Multiplayer in percent for Energy correction, 0 for no correction, positive for increment, negative to reduce
readonly SHEM_MISUREMENT_ADJUST="0"

###### PV Output SECTION #######
#insert PV Output API Key (from https://pvoutput.org/account.jsp)
readonly PVOUTPUT_APIKEY="70f5f3188593efcxxxxxxxxxxxxxxxxxxxx"
#insert PV Output System ID (from https://pvoutput.org/account.jsp)
readonly PVOUTPUT_SYSID="12345"
#insert "yes" to upload also production data from Shelly EM, "no" to upload only consumption
readonly UPLOAD_PROD="yes"

###### SOLAREDGE SECTION #######
#if you want to skip SolarEdge data upload uncomment the following line
readonly SEUPDATE="no"
#insert SolarEdge Site ID
readonly SE_SITEID="1571234"
#insert SolarEdge Inverter Serial Number
readonly INVERTERSN="7111D11B-E7"
#insert SolarEdge API Key
readonly SE_APIKEY="FIDS42EINB4UXXXXXXXXXXXXXX"

readonly VAR_FILE="$HOME/INITIALVALUES"
readonly LOG_FILE="$HOME/Shelly2PVOutput.log"
SEUPDATE="yes"

echo "Start getting measurement from Shelly EM "$SHEM_IP" and upload to PVOutput "$PVOUTPUT_SYSID | tee -a $LOG_FILE
echo "START TIME: "$(date +%R:%S) | tee -a $LOG_FILE

[[ -f $VAR_FILE ]] && { [[ $(date -r $VAR_FILE +%F) == $(date +%F) ]] && source $VAR_FILE || rm -f $VAR_FILE; }

if ! [[ -f $VAR_FILE ]]; then
	CONSUMED=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total')
	echo "SHELLY ENERGY CONSUMED: "$CONSUMED" Wh" | tee -a $LOG_FILE
	RETURNED=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total_returned')
	echo "SHELLY ENERGY RETURNED: "$RETURNED" Wh" | tee -a $LOG_FILE
	PV=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.total')
	echo "SHELLY ENERGY PRODUCED: "$PV" Wh" | tee -a $LOG_FILE
	TOTAL=$(bc -l <<<"$CONSUMED-$RETURNED+$PV")
	echo "SHELLY ENERGY TOTAL BALANCE: "$TOTAL" Wh" | tee -a $LOG_FILE
	PVOutputSTART=$(curl -s -d "d="$(date +%Y%m%d) -d "stats=1" -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID https://pvoutput.org/service/r2/getstatus.jsp)
	IFS=';' read -ra TEMP <<< "$PVOutputSTART"
	IFS=',' read -ra TEMP0 <<< "${TEMP[0]}"
	IFS=',' read -ra TEMP1 <<< "${TEMP[1]}"
	re='^[0-9]+$'
	if ! [[ $TEMP0 =~ $re ]] ; then
		PVOutputENERGY=0
	else
		PVOutputENERGY=${TEMP0}
	fi
	echo "PV Output ENERGY PRODUCED: "$PVOutputENERGY" Wh" | tee -a $LOG_FILE
	if ! [[ $TEMP1 =~ $re ]] ; then
		PVOutputENERGYUSED=0
	else
		PVOutputENERGYUSED=${TEMP1}
	fi
	echo "PV Output ENERGY USED: "$PVOutputENERGYUSED" Wh" | tee -a $LOG_FILE
	echo -e "TOTAL=$TOTAL\nPVOutputENERGY=$PVOutputENERGY\nPVOutputENERGYUSED=$PVOutputENERGYUSED\nPV=$PV" > $VAR_FILE
	echo "First Time of the day. Exit" | tee -a $LOG_FILE
	exit 0
fi
echo -e "LAST TOTAL ENERGY COUNTER: "$TOTAL" Wh\nPVOutput ENERGY Production: "$PVOutputENERGY" Wh\nPVOutput ENERGY Used: "$PVOutputENERGYUSED" Wh" | tee -a $LOG_FILE
CONSUMED_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total')
RETURNED_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.total_returned')
PV_now=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.total')
PV_POWER=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.power') 
if [[ $PV_POWER =~ "-" ]]; then
    PV_POWER=0
fi
GRID_POWER=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_GRID_ID | jq '.power')
VOLTAGE=$(curl --user $SHEM_USER:$SHEM_PWD -s http://$SHEM_IP/emeter/$SHEM_PV_ID | jq '.voltage')
CONSUMPTION_POWER=$(bc -l <<<"$PV_POWER+$GRID_POWER")
TOTAL_now=$(bc -l <<<"($CONSUMED_now-$RETURNED_now+$PV_now)")
echo "TOTAL ENERGY COUNTER @"$(date +%R) $TOTAL_now" Wh" | tee -a $LOG_FILE
ENERGY=$(bc -l <<<"(($TOTAL_now-$TOTAL)*(1+$SHEM_MISUREMENT_ADJUST/100)+$PVOutputENERGYUSED)")
PV_ENERGY=$(bc -l <<<"($PV_now-$PV)*(1+$SHEM_MISUREMENT_ADJUST/100)+$PVOutputENERGY")
printf "\e[1;34mData from Shelly @"$(date +%R:%S)"\n\e[0m" | tee -a $LOG_FILE
echo "PV Power: "$PV_POWER" W" | tee -a $LOG_FILE
echo "Cons Power: "$CONSUMPTION_POWER" W" | tee -a $LOG_FILE
printf "PV Energy now: %.1f Wh\n" $PV_ENERGY | tee -a $LOG_FILE
printf "Energy now: %.1f Wh\n" $ENERGY | tee -a $LOG_FILE
if test "$UPLOAD_PROD" = "yes"; then
	curl -d "d="$(date +%Y%m%d) -d "t="$(date +%R) -d "v1="$PV_ENERGY -d "v2="$PV_POWER -d "v3="$ENERGY -d "v4="$CONSUMPTION_POWER -d "v6="$VOLTAGE -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID https://pvoutput.org/service/r2/addstatus.jsp | tee -a $LOG_FILE
else
	curl -d "d="$(date +%Y%m%d) -d "t="$(date +%R) -d "v2="$PV_POWER -d "v3="$ENERGY -d "v4="$CONSUMPTION_POWER -d "v6="$VOLTAGE -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID https://pvoutput.org/service/r2/addstatus.jsp | tee -a $LOG_FILE
fi
printf "\n" | tee -a $LOG_FILE
if test "$SEUPDATE" = "yes"; then
	SEUPDATE="no"
	TENMINSAGO=$(($(date +%s)-15*60))
	SELIVEDATA=$(curl -s "https://monitoringapi.solaredge.com/equipment/"$SE_SITEID"/"$INVERTERSN"/data.json?startTime=$(date -d @$TENMINSAGO +%F)%20$(date -d @$TENMINSAGO +%T)&endTime=$(date +%F)%20$(date +%T)&api_key="$SE_APIKEY)
	count=$(echo $SELIVEDATA | jq '.data.count')
	for i in $(seq 0 $(($count-1))); do
		SELIVEDATAAR=$(echo $SELIVEDATA | jq '.data.telemetries['$i'].date,.data.telemetries['$i'].temperature,.data.telemetries['$i'].L1Data.acVoltage,.data.telemetries['$i'].L1Data.activePower')
		eval "array=($SELIVEDATAAR)"
		SELIVEDATA_date=${array[0]}
		SELIVEDATA_temp=${array[1]}
		SELIVEDATA_acV=${array[2]}
		SELIVEDATA_Power=${array[3]}
		printf "\e[1;31mData from SolarEdge\n\e[0m" | tee -a $LOG_FILE
		echo "SE data: "$SELIVEDATA_date | tee -a $LOG_FILE
		echo "SE Temp: "$SELIVEDATA_temp" °C" | tee -a $LOG_FILE
		echo "SE AC V: "$SELIVEDATA_acV" V" | tee -a $LOG_FILE
		echo "SE Power: "$SELIVEDATA_Power" W" | tee -a $LOG_FILE
		curl -d "d="$(date -d "$SELIVEDATA_date" +%Y%m%d) -d "t="$(date -d "$SELIVEDATA_date" +%R) -d "v2="$SELIVEDATA_Power -d "v5="$SELIVEDATA_temp -d "v6="$SELIVEDATA_acV -H "X-Pvoutput-Apikey: "$PVOUTPUT_APIKEY -H "X-Pvoutput-SystemId: "$PVOUTPUT_SYSID https://pvoutput.org/service/r2/addstatus.jsp | tee -a $LOG_FILE
		printf "\n" | tee -a $LOG_FILE
	done
else
	SEUPDATE="yes"
fi
echo -e "TOTAL=$TOTAL\nPVOutputENERGY=$PVOutputENERGY\nPVOutputENERGYUSED=$PVOutputENERGYUSED\nPV=$PV\nSEUPDATE=$SEUPDATE" > $VAR_FILE



Create a new paste based on this one


Comments: