File: example.py

package info (click to toggle)
tesla-powerwall 0.5.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 264 kB
  • sloc: python: 1,458; makefile: 8
file content (68 lines) | stat: -rw-r--r-- 1,654 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import os

from tesla_powerwall import MeterResponse, Powerwall


def getenv(var):
    val = os.getenv(var)
    if val is None:
        raise ValueError(f"{var} must be set")
    return val


def print_meter_row(meter_data: MeterResponse):
    print(
        "{:>8} {:>8} {:>17} {:>17} {!r:>8} {!r:>17} {!r:>17}".format(
            meter_data.meter.value,
            meter_data.get_power(),
            meter_data.get_energy_exported(),
            meter_data.get_energy_imported(),
            meter_data.is_active(),
            meter_data.is_drawing_from(),
            meter_data.is_sending_to(),
        )
    )


ip = getenv("POWERWALL_IP")
password = getenv("POWERWALL_PASSWORD")

power_wall = Powerwall(ip)
power_wall.login(password)
site_name = power_wall.get_site_info().site_name
meters_agg = power_wall.get_meters()

print(f"{site_name}:\n")

row_format = "{:>18}: {}"

values = [
    ("Charge (%)", round(power_wall.get_charge())),
    ("Capacity", power_wall.get_capacity()),
    ("Nominal Energy", power_wall.get_energy()),
    ("Grid Status", power_wall.get_grid_status().value),
    ("Backup Reserve (%)", round(power_wall.get_backup_reserve_percentage())),
    ("Device Type", power_wall.get_device_type().value),
    ("Software Version", power_wall.get_version()),
]


for val in values:
    print(row_format.format(*val))

print("\n")

print(
    "{:>8} {:>8} {:>17} {:>17} {:>8} {:>17} {:>17}".format(
        "Meter",
        "Power",
        "Energy exported",
        "Energy imported",
        "Active",
        "Drawing from",
        "Sending to",
    )
)

for meter in meters_agg.meters.values():
    print_meter_row(meter)