Skip to content

Instantly share code, notes, and snippets.

@leeliu
Last active August 18, 2023 00:07
Show Gist options
  • Save leeliu/c9c77f0f3485528331c21318ab005f17 to your computer and use it in GitHub Desktop.
Save leeliu/c9c77f0f3485528331c21318ab005f17 to your computer and use it in GitHub Desktop.
tesla-energy-perfect-modes.sh
#!/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