Skip to main content

Unofficial library for interacting with the Emporia Vue energy monitor.

Project description

PyEmVue

A Python Library for reading data from the Emporia Vue energy monitoring system.

The library can be invoked directly to pull back some basic info but requires your email and password to be added to a keys.json file, which is then replaced with the access tokens.

The backing API documentation can be accessed here

keys.json

{
    "email": "you@email.com",
    "password": "password"
}

Usage

Log in with username/password

vue = PyEmVue()
vue.login(username='you@email.com', password='password', token_storage_file='keys.json')

token_storage_file is an optional file path where the access tokens will be written for reuse in later invocations. It will be updated whenever the tokens are automatically refreshed.

Log in with access tokens

with open('keys.json') as f:
    data = json.load(f)

vue = PyEmVue()
vue.login(id_token=data['idToken'],
    access_token=data['accessToken'],
    refresh_token=data['refreshToken'],
    token_storage_file='keys.json')

Get customer details

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

customer = vue.get_customer_details()

Returns a Customer object with email address, name, customer_gid, and creation date

Get devices

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

vue.get_devices()

Returns a list of VueDevices with device information, including device_gid and list of VueDeviceChannels associated with the device. VueDeviceChannels are passed to other methods to get information for the specific channel.

Get additional device properties

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

device1 = vue.get_devices()[0]
print(device1.device_name) # prints ""
device1 = vue.populate_device_properties(device1)
print(device1.device_name) # prints "Home"

Updates and returns the passed VueDevice with additional information about the device such as the device name (as set in the app), zip code, timezone, electricity costs, etc.

Arguments

  • device: A VueDevice as returned by get_devices. Will be updated and returned.

Get usages for devices

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

devices = vue.get_devices()
deviceGids = []
for device in devices:
    deviceGids.append(device.device_gid)

channel_usage_list = vue.get_devices_usage(deviceGids, None, scale=Scale.DAY.value, unit=Unit.KWH.value)
for channel in channel_usage_list:
    print(channel.usage, 'kwh')

Gets the usage for the given devices (specified by device_gid) over the provided time scale. May need to scale it manually to convert it to a rate, eg for 1 second data kilowatt={usage in kwh/s}*3600s/1h or for 1 minute data kilowatt={usage in kwh/m}*60m/1h.

Arguments

  • deviceGids: A list of device_gid values pulled from get_devices() or a single device_gid.
  • instant: What instant of time to check, will default to now if None.
  • scale: The time scale to check the usage over.
  • unit: The unit of measurement.

Get usage over time

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

devices = vue.get_devices()

usage_over_time, start_time = vue.get_chart_usage(devices[0].channels[0], datetime.datetime.utcnow()-datetime.timedelta(days=7), datetime.datetime.utcnow(), scale=Scale.DAY.value, unit=Unit.KWH.value)

print('Usage for the last seven days starting', start_time.isoformat())
for usage in usage_over_time:
    print(usage, 'kwh')

Gets the usage in the scale and unit provided over the given time range. Returns a tuple with the first element the usage list and the second the datetime that the range starts.

Arguments

  • channel: A VueDeviceChannel object, typically pulled from a VueDevice.
  • start: The start time for the time period. Defaults to now if None.
  • end: The end time for the time period. Default to now if None.
  • scale: The time scale to check the usage over.
  • unit: The unit of measurement.

Toggle outlets

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

outlets = vue.get_outlets()
for outlet in outlets:
    vue.update_outlet(outlet, on=(not outlet.outlet_on))
    # alternatively it can be set on the outlet object first
    outlet.outlet_on = not outlet.outlet_on
    outlet = vue.update_outlet(outlet)

The get_outlets call returns a list of outlets directly but it is also possible to get a full VueDevice for the outlet first through the get_devices call and access an OutletDevice through the outlet attribute off of the VueDevice (ie device.outlet).

Toggle EV Charger (EVSE)

vue = PyEmVue()
vue.login(id_token='id_token',
    access_token='access_token',
    refresh_token='refresh_token')

chargers = vue.get_chargers()
for charger in chargers:
    vue.update_charger(outlet, on=(not charger.charger_on), charge_rate=charger.max_charging_rate)
    # alternatively you can update the charger object first
    charger.charger_on = not charger.charger_on
    charger.charging_rate = 6
    charger.max_charging_rate = 16
    charger = vue.update_charger(charger)

The get_chargers call returns a list of chargers directly but it is also possible to get a full VueDevice for the charger first through the get_devices call and access a ChargerDevice through the ev_charger attribute off of the VueDevice (ie device.ev_charger).

Disclaimer

This project is not affiliated with or endorsed by Emporia Energy.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyemvue-0.13.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyemvue-0.13.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file pyemvue-0.13.0.tar.gz.

File metadata

  • Download URL: pyemvue-0.13.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.23.0 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1

File hashes

Hashes for pyemvue-0.13.0.tar.gz
Algorithm Hash digest
SHA256 a8dbea060d421012fb78f424e4e626ec32c01e0448ec83d0a21e3f1b994f0c58
MD5 8ec024f652359be496df9b2c49f5b892
BLAKE2b-256 f0fab9b4bffa7cf394c5655861cf8643964e8165332a695e823ec93852caf2dc

See more details on using hashes here.

File details

Details for the file pyemvue-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: pyemvue-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.23.0 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1

File hashes

Hashes for pyemvue-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 756257d998883bcc6cffe53312db5c1bae2357ebb8bfde548aed8890a8351c1a
MD5 bfc946ed87a21278575252c82a5b7e7e
BLAKE2b-256 207f3c7834cd7ce4ee02e0b403ae76368a800ce7503a79733c8b54e5ca4a8a74

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page