Last active
August 18, 2023 00:07
-
-
Save leeliu/c9c77f0f3485528331c21318ab005f17 to your computer and use it in GitHub Desktop.
tesla-energy-perfect-modes.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
JQ=/usr/local/bin/jq | |
ACCESS_TOKEN=na-XXXX | |
ENERGY_SITE_ID=XXXX | |
BACKUP_RESERVE_PERCENT=20 | |
DESIRED_NODE=autonomous # autonomous OR self_consumption | |
# midnight to 8:59am | |
OFF_PEAK_START_HOUR=0 | |
SOLAR_START_HOUR=9 | |
log() { | |
echo `date "+[%y%m%d %T]"` $* | |
} | |
setMode() { | |
curl -X POST "https://owner-api.teslamotors.com/api/1/energy_sites/${ENERGY_SITE_ID}/operation" \ | |
-H "Authorization: Bearer ${ACCESS_TOKEN}" \ | |
-H 'Content-Type: application/json' \ | |
-d '{"default_real_mode": "'$1'"}' | |
echo | |
log Mode set: $1 | |
} | |
setBackup() { | |
curl -X POST "https://owner-api.teslamotors.com/api/1/energy_sites/${ENERGY_SITE_ID}/backup" \ | |
-H "Authorization: Bearer ${ACCESS_TOKEN}" \ | |
-H 'Content-Type: application/json' \ | |
-d '{"backup_reserve_percent": '$1'}' | |
echo | |
log Backup reserve set: $1 % | |
} | |
siteInfo() { | |
curl -s "https://owner-api.teslamotors.com/api/1/energy_sites/${ENERGY_SITE_ID}/site_info" \ | |
-H "Authorization: Bearer ${ACCESS_TOKEN}" | |
} | |
getMode() { | |
SITE_INFO=$(siteInfo) | |
if [ "$SITE_INFO" == "" ]; then | |
echo Error: ACCESS_TOKEN invalid | |
else | |
echo $SITE_INFO | $JQ -r '.response.default_real_mode' | |
fi | |
} | |
getBackup() { | |
SITE_INFO=$(siteInfo) | |
if [ "$SITE_INFO" == "" ]; then | |
echo Error: ACCESS_TOKEN invalid | |
else | |
echo $SITE_INFO | $JQ -r '.response.backup_reserve_percent' | |
fi | |
} | |
desiredMode() { | |
echo $DESIRED_NODE | |
} | |
desiredBackup() { | |
HOUR=$(date +%H) | |
if [ $HOUR -ge $OFF_PEAK_START_HOUR ] && [ $HOUR -lt $SOLAR_START_HOUR ]; then | |
echo 100 | |
else | |
echo $BACKUP_RESERVE_PERCENT | |
fi | |
} | |
log Getting current mode... | |
CURRENT_MODE=$(getMode) | |
DESIRED_MODE=$(desiredMode) | |
if [ "$CURRENT_MODE" == "Error: ACCESS_TOKEN invalid" ]; then | |
log $CURRENT_MODE | |
exit 1 | |
fi | |
log Current mode: $CURRENT_MODE | |
log Desired mode: $DESIRED_MODE | |
if [ "$CURRENT_MODE" != "$DESIRED_MODE" ]; then | |
log Setting mode... | |
setMode $DESIRED_MODE | |
fi | |
log Getting current backup reserve... | |
CURRENT_BACKUP=$(getBackup) | |
DESIRED_BACKUP=$(desiredBackup) | |
log Current backup reserve: $CURRENT_BACKUP % | |
log Desired backup reserve: $DESIRED_BACKUP % | |
if [ "$CURRENT_BACKUP" != "$DESIRED_BACKUP" ]; then | |
log Setting backup reserve... | |
setBackup $DESIRED_BACKUP | |
fi | |
log All done. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment