• Stars
    star
    279
  • Rank 147,967 (Top 3 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 3 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Grafana Monitoring Dashboard for Tesla Solar and Powerwall Systems

Powerwall-Dashboard

Monitoring Dashboard for the Tesla Powerwall using Grafana, InfluxDB, Telegraf and pyPowerwall.

Animation Monthly Yearly Powerwall+ FreqVoltage Alerts Weather

Dashboards

The default dashboard.json shown above, pulls in the live power flows from the Powerwall web portal and embeds that animation in the Grafana dashboard.

A non-animated version of the dashboard is also available using dashboard-no-animation.json

Dashboard

Requirements

The host system will require:

  • docker (install help)
  • docker-compose (works with docker compose (v2) as well)
  • You should not need to run sudo to install this tool. See Docker Errors below for help.
  • TCP ports: 8086 (InfluxDB), 8675 (pyPowerwall), and 9000 (Grafana)

Setup

Clone this repo on the host that will run the dashboard:

    git clone https://github.com/jasonacox/Powerwall-Dashboard.git

Option 1 - Quick Start

Run the interactive setup script that will ask you for your Powerwall details and Local timezone. To find your timezone, see the second column in this table: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.

  cd Powerwall-Dashboard
  ./setup.sh

Follow the Grafana Setup instructions provided (or see below) to complete the setup.

Option 2 - Manual Install

If you prefer, you can perform the same steps that setup.sh performs.

Note: some manual configuration is required if you are running a non-standard docker installation (e.g. rootless). Also, ensure that the conf, env and sql files are readable by the docker services (e.g. chmod 644).

You will want to set your local timezone by editing pypowerwall.env, telegraf.conf, influxdb.sql and dashboard.json or you can use this handy tz.sh update script. A list of timezones is available here: TZ Table.

  # Replace with your timezone
  bash tz.sh "America/Los_Angeles"

Docker Containers

  • Copy pypowerwall.env.sample to pypowerwall.env and update the following details for your Powerwall:

        [email protected]
        PW_PASSWORD=password
        PW_HOST=192.168.91.1
        PW_TIMEZONE=America/Los_Angeles
        PW_DEBUG=no
  • Copy compose.env.sample to compose.env - you do not need to edit these defaults unless you are running a non-standard install such as docker rootless.

  • Copy telegraf.local.sample to telegraf.local. If you want to monitor custom measurements for your site (most users don't need this), add the required telegraf.conf TOML entries to this file. Once created, this file is not overwritten by upgrades or future runs of setup.sh.

  • Copy grafana.env.sample to grafana.env - you do not need to edit these defaults. However, there are optional settings for alert notifications and HTTPS.

  • Optional: If you want to pull in local weather data, copy weather/weather411.conf.sample to weather/weather411.conf and edit the file to include your location (Latitude and Longitude) and your OpenWeatherMap API Key. To get a Key, you need to set up a free account at openweathermap.org. Make sure you check your email to verify account. API keys can take a few hours to activate.

        [OpenWeatherMap]
        # Register and get APIKEY from OpenWeatherMap.org
        APIKEY = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        # Enter your location in latitude and longitude
        LAT = xxx.xxxx
        LON = yyy.yyyy
    
  • Start the docker containers with the utility docker-compose script

      ./compose-dash.sh up -d

InfluxDB

  • Connect to the Influx database to import setup commands:

      docker exec -it influxdb influx -import -path=/var/lib/influxdb/influxdb.sql

Note: It can take a while for InfluxDB to start. Also the influxdb.sql file is set to use America/Los_Angeles as timezone. Use the tz.sh script or manually update the database commands above to replace America/Los_Angeles with your own timezone.

Grafana Setup

  • Open up Grafana in a browser at http://<server ip>:9000 and login with admin/admin

  • From Configuration\Data Sources add InfluxDB database with:

    • Name: InfluxDB
    • URL: http://influxdb:8086
    • Database: powerwall
    • Min time interval: 5s
    • Click "Save & test" button
  • From Configuration\Data Sources add Sun and Moon database with:

    • Name: Sun and Moon
    • Enter your latitude and longitude. You can use this web page to find your GPS location if you don't know).
    • Click "Save & test" button
  • From Dashboard\Browse select New/Import, and upload one of the dashboard files below (in dashboards folder):

    1. dashboard.json - Dashboard with the live trend graph, monthly power graphs, an animated power flow diagram and a Powerwall+ section that includes String data, temperature, voltage and frequency graphs. This also includes a "grid status" graph below the animation to identify and track grid outages.
    2. dashboard-no-animation.json - Similar to above but without the animated power flow diagram.
    3. dashboard-simple.json - Similar to above but without the Powerwall+ metrics.

Notes

  • The database queries are set to use America/Los_Angeles as the timezone. Remember to edit the database commands influxdb.sql and powerwall.yml with your own timezone. During import of dashboards into Grafana you'll be prompted to enter your timezone for queries.

Upgrading

  • The included upgrade.sh script will attempt to upgrade your installation to the latest Powerwall-Dashboard version without removing existing data. A backup is still recommended.

Troubleshooting Tips and Tricks

Check the logs of the services using:

  docker logs -f pypowerwall
  docker logs -f telegraf
  docker logs -f influxdb
  docker logs -f grafana
  • Docker terminating with error 139: InfluxDB does not run reliably on older models of Raspberry Pi.
  • Grafana Error: Invalid interval string, expecting a number followed by one of "Mwdhmsy" - This indicates that the Grafana setup for InfluxDB is missing the time unit, "s", in the "Min time interval" field:
    • Min time interval: 5s

Missing Powerwalls or String data?

  • String data only shows up for Tesla inverters as part of Powerwall+ systems. Unfortunately, non-Tesla inverter data is not available via the Tesla API. If you find a way to pull this data, please submit an Issue or Pull Request to get it added.
  • The default dashboard and InfluxDB setup supports up to 12 Tesla Powerwalls. Support for more can be added by editing the dashboard.json and influxdb.sql files. Open an Issue and we can help (see #2).

Docker Errors

If you are getting permission errors running docker, or an error that it isn't installed:

  • Ensure docker is installed for your OS (run docker version to test)
  • If you see permission denied, add your user to the docker group and reboot your system:
    # Add your user to docker group
    sudo usermod -aG docker $USER
  • If the above step hasn't worked, and you get an error trying to run docker info like permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
    # Grant permissions to the docker daemon socket
    sudo chmod 666 /var/run/docker.sock
  • If you can't access the dashboard after a reboot, that means that docker was not set to start on reboot. On many OS distributions you can set it to start on boot with:
    # Set docker to start on boot
    sudo systemctl enable docker.service
    sudo systemctl enable containerd.service
  • See Docker install here for more information.
  • If you have docker installed but get "ERROR: docker-compose is not available or not running" make sure it is in your PATH or if needed, install the docker-compose cli tool:
    # install
    sudo pip3 install docker-compose
    
    # test
    docker-compose --version

Savings Errors

The savings estimates are based on a $0.19/kWh (by default) utility cost and net metering credit. You likely have a different value for this and during importing dashboards indicate your average cost per kWh to reflect your actual costs and credits. As of now there's one variable to set both cost and credit per kWh. To help, here are the variables used to calculate the savings:

  • s = kWh from solar (based on time frame selected)
  • fp = kWh from powerwall
  • tp = kWh to powerwall
  • tg = kWh to grid

The equations that are used to compute the estimated savings:

  • powerwall>home = fp * $/kWh [assumes all power to home from PW = savings]
  • solar>home = (s - tp - tg) * $/kWh [assumes all solar not going to PW or grid is going to the home = savings]
  • solar>grid = tg * $/kWh [assumes all power going to grid = savings]

Synology NAS and Rootless Docker

  • If you are having trouble getting this to work on a Synology NAS, view the resolution discovered in Issue #22 thanks to @jaydkay.
  • If you are running docker as a non-privileged (rootless) user, please some setup help here thanks to @BuongiornoTexas.
  • Most of the issues running the Dashboard on Synology NAS are related to user or file permission issues. Ensure that the conf, env and sql files are readable by the docker services (most can be set chmod 644).

Windows 11 Instructions

Installing Powerwall-Dashboard on a Windows 11 host requires some additional setup. Install and Setup using administrator PowerShell or Windows Command Prompt:

  • Install WSL (wsl --install) with an OS (recommend Ubuntu)
  • Install Git for Windows (https://gitforwindows.org/)
  • Install Docker Desktop for Windows (https://www.docker.com/)
  • From Git Bash prompt, Clone repo (git clone https://github.com/jasonacox/Powerwall-Dashboard.git)
  • Run cd Powerwall-Dashboard
  • Run ./setup.sh

Tips and Tricks

Since pyPowerwall proxy is part of this dashboard stack, you can query it to get raw data (read only) from the Powerwall API. This includes some aggregate functions you might find useful for other projects. I use this for ESP32 driven display for example. Replace localhost with the address of the system running the dashboard:

Since weather411 is part of this dashboard stack (if you set it up) you can query it to get current weather data from its built-in API.

Data Retention and Backups InfluxDB is configured to use a infinite retention policy (see influxdb.sql). It uses continuous queries to downsample Powerwall data and preserve disk space. However, this does not safeguard the data from accidental deletion or corruption. It is recommend that you set up a backup plan to snapshot the data for disaster recovery. See backups for some suggestions.

Credits

More Repositories

1

tinytuya

Python API for Tuya WiFi smart devices using a direct local area network (LAN) connection or the cloud (TuyaCloud API).
Python
927
star
2

Build-OpenSSL-cURL

Scripts to build OpenSSL, HTTP/2 (nghttp2) and cURL (libcurl) for MacOS, iOS and tvOS devices (x86_64, armv7, armv7s, arm64, arm64e). Now Supporting Apple Silicon, OpenSSL 3.0.x with TLS 1.3 and Mac Catalyst builds.
C
420
star
3

TinyLLM

Setup and run a local LLM and Chatbot using consumer grade hardware.
JavaScript
166
star
4

tuyapower

Python module to read status and energy monitoring data from Tuya based WiFi smart devices. This includes state (on/off), current (mA), voltage (V), and power (wattage).
Python
137
star
5

pypowerwall

Python API for Tesla Powerwall and Solar Power Data
JavaScript
126
star
6

TM1637TinyDisplay

Arduino library to display numbers and text on a 4 and 6 digit 7-segment TM1637 display modules.
C++
69
star
7

powermonitor

Monitor power usage through WiFi Smart Plug
Python
63
star
8

TinyStepper

Simple Arduino library to drive stepper motors. Small and easy to use.
C++
12
star
9

Powerwall-Display

Tesla Powerwall display based on 7-segment displays and ESP8266 to show current solar generation, powerwall (power and percentage), grid and load power usage.
C++
8
star
10

sfw2jpg

Convert SFW (Seattle FilmWorks) image files to JPG Format (sfwjpg pwpjpg flipjpeg)
C
7
star
11

ProtosAI

A Study in Artificial Intelligence - Simple scripts that explore capabilities provided by neural networks (NN), generative pre-trained transformers (GPT) and large language models (LLM).
Jupyter Notebook
7
star
12

TinySplunk

Tools and instructions to build and use a free version of Splunk for home
Shell
5
star
13

OpenGL-LIDAR-Display

This project reads LIDAR point cloud data (angle & distance) from a Slamtec RPLIDAR A1 device and displays the output on an OpenGL display in realtime. Tested on macOS. Uses rplidar_sdk for communication with LIDAR device.
C++
5
star
14

Ender3-Filament-Digital-Scale

Adds a load cell to the filament spool holder of a Creality Ender 3 Pro 3D-printer to measure weight and display on TM1637 LED display. Uses ATtiny85 microcontroller and HX711 module for weight measurement.
C++
4
star
15

WeatherStationWiFi

ESP8266 NodeMCU Based Solar Powered WiFi Weather Station - Record Temperature (x2), Humidity, Pressure, Rain, and Voltage
C++
4
star
16

gridbug

Simple web based visualization tool to show network connectivity between multiple nodes.
Python
4
star
17

iCurlHTTP

CurlHTTP is a simple, easy to use app for the iPhone, iPad and AppleTV that allows you to run MacOS/Linux terminal-like cURL tests against web URLs.
C
4
star
18

TinyRTTTL

Arduino library for Playing RTTTL Songs using tone() Function
C++
2
star
19

RPi-AirPiano

Use a Raspberry Pi as a Player Piano! Web interface to queue and play MIDI and WAV files on a MIDI piano.
PHP
2
star
20

human

Digital Twin of Jason A. Cox
2
star
21

SentryPi

Tools to help build a home monitoring platform using a Raspberry Pi
JavaScript
2
star
22

WaterDetectorWiFi

ESP8266 NodeMCU WiFi Based IoT Water Detector
C++
1
star
23

AutoLispCogo

LISP based coordinate geometry functions for AutoCAD
Common Lisp
1
star
24

Arduino-Sensor-Display

Arduino MEGA 2560 Project that gathers temp, humidity and measures the distance (in cm) to objects in front of the sensor. Outputs to 16x2 LCD Display along with current time (via RTC module).
C++
1
star
25

cookbooks

Chef Cookbooks
Ruby
1
star
26

ATtiny85-Weather-Station

ATtiny85 based Weather Station (Temperature + Humidity + Barometer on 7-Segment LED Display)
C++
1
star