A modern Python client for controlling Wyze devices.

Overview

Python Wyze SDK

A modern Python client for controlling Wyze devices.

PyPI version Python Version Read the Docs

Whether you're building a custom app, or integrating into a third-party service like Home Assistant, Wyze Developer Kit for Python allows you to leverage the flexibility of Python to get your project up and running as quickly as possible.

The Python Wyze SDK allows interaction with:

  • wyze_sdk.client.bulbs: for controlling Wyze Bulb and Wyze Bulb Color
  • wyze_sdk.client.entry_sensors: for interacting with Wyze Entry Sensor
  • wyze_sdk.client.cameras: for interacting with Wyze Cameras
  • wyze_sdk.client.events: for managing Wyze alarm events
  • wyze_sdk.client.locks: for interacting with Wyze Lock
  • wyze_sdk.client.motion_sensors: for interacting with Wyze Motion Sensor
  • wyze_sdk.client.plugs: for controlling Wyze Plug and Wyze Plug Outdoor
  • wyze_sdk.client.scales: for controlling Wyze Scale
  • wyze_sdk.client.thermostats: for controlling Wyze Thermostat
  • wyze_sdk.client.vacuums: for controlling Wyze Robot Vacuum

Disclaimer: This repository is for non-destructive use only. WyzeLabs is a wonderful company providing excellent devices at a reasonable price. I ask that you do no harm and be civilized.

As this repository is entirely reverse-engineered, it may break at any time. If it does, I will fix it to the best of my ability, but feel free to file a GitHub issue or patch yourself and submit a pull request.

Requirements


This library requires Python 3.8 and above. If you're unsure how to check what version of Python you're on, you can check it using the following:

Note: You may need to use python3 before your commands to ensure you use the correct Python path. e.g. python3 --version

python --version

-- or --

python3 --version

Installation

We recommend using PyPI to install the Wyze Developer Kit for Python.

$ pip install wyze_sdk

Basic Usage of the Web Client


Wyze does not provide a Web API that gives you the ability to build applications that interact with Wyze devices. This Development Kit is a reverse-engineered, module-based wrapper that makes interaction with that API possible. We have a few basic examples here with some of the more common uses but you are encouraged to explore the full range of methods available to you.

Listing devices in your Wyze account

One of the most common use-cases is querying device state from Wyze. If you want to access devices you own, or devices shared to you, this method will do both.

import os
from wyze_sdk import Client
from wyze_sdk.errors import WyzeApiError

client = Client(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD'])

try:
    response = client.devices_list()
    for device in client.devices_list():
        print(f"mac: {device.mac}")
        print(f"nickname: {device.nickname}")
        print(f"is_online: {device.is_online}")
        print(f"product model: {device.product.model}")
except WyzeApiError as e:
    # You will get a WyzeApiError is the request failed
    print(f"Got an error: {e}")

Turning off a switch

Some devices - like cameras, bulbs, and plugs - can be switched on and off. This is done with a simple command and even supports delayed actions via timers.

import os
from datetime import timedelta
from wyze_sdk import Client
from wyze_sdk.errors import WyzeApiError

client = Client(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD'])

try:
  plug = client.plugs.info(device_mac='ABCDEF1234567890')
  print(f"power: {plug.is_on}")
  print(f"online: {plug.is_online}")

  if plug.is_on:
    client.plugs.turn_off(device_mac=plug.mac, device_model=plug.product.model, after=timedelta(hours=3))
  else:
    client.plugs.turn_on(device_mac=plug.mac, device_model=plug.product.model)

    plug = client.plugs.info(device_mac=plug.mac)
    assert plug.is_on is True
except WyzeApiError as e:
    # You will get a WyzeApiError is the request failed
    print(f"Got an error: {e}")

Setting device properties

Every Wyze device has myriad properties and attributes that can be set in a common, intuitive way.

import os
from wyze_sdk import Client
from wyze_sdk.errors import WyzeApiError

client = Client(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD'])

try:
  bulb = client.bulbs.info(device_mac='ABCDEF1234567890')
  print(f"power: {bulb.is_on}")
  print(f"online: {bulb.is_online}")
  print(f"brightness: {bulb.brightness}")
  print(f"temp: {bulb.color_temp}")
  print(f"color: {bulb.color}")

  client.bulbs.set_brightness(device_mac=bulb.mac, device_model=bulb.product.model, brightness=100)
  client.bulbs.set_color(device_mac=bulb.mac, device_model=bulb.product.model, color='ff00ff')
  client.bulbs.set_color_temp(device_mac=bulb.mac, device_model=bulb.product.model, color_temp=3800)
  
  bulb = client.bulbs.info(device_mac='ABCDEF1234567890')
  assert bulb.brightness == 100
  assert bulb.color == 'ff00ff'
  assert bulb.color_temp == 3800

  client.bulbs.set_away_mode(device_mac=bulb.mac, device_model=bulb.product.model, away_mode=True)

except WyzeApiError as e:
    # You will get a WyzeApiError is the request failed
    print(f"Got an error: {e}")

Taking actions on devices

Want to unlock your lock, or tell your vacuum to clean certain rooms? Yeah, we got that.

import os
import wyze_sdk
from wyze_sdk import Client
from wyze_sdk.errors import WyzeApiError

client = Client(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD'])

try:
  lock = client.locks.info(device_mac='YD.LO1.abcdefg0123456789abcdefg0123456789')
  if lock is not None:
    print(f"is open: {lock.is_open}")
    print(f"is locked: {lock.is_locked}")

    if not lock.is_locked:
      ## let's try to figure out when it was unlocked
      for record in client.locks.get_records(device_mac='YD.LO1.abcdefg0123456789abcdefg0123456789', since=datetime.now() - timedelta(hours=12)):
        print(f"lock record time: {record.time}")
        print(f"lock record type: {record.type}")
        print(f"lock record source: {record.details.source}")

      ## lock up
      client.locks.lock(device_mac='YD.LO1.abcdefg0123456789abcdefg0123456789')

except WyzeApiError as e:
    # You will get a WyzeApiError is the request failed
    print(f"Got an error: {e}")


try:
  vacuum = client.vacuums.info(device_mac='JA_RO2_ABCDEF123456')

  from wyze_sdk.models.devices import VacuumMode

  # if our vacuum is out sweeping, let's find out where he is and tell him to go home
  if vacuum.mode == VacuumMode.SWEEPING:
    print(f"current position: {vacuum.current_position}")

    client.vacuums.dock(device_mac='JA_RO2_ABCDEF123456', device_model=vacuum.product.model)

  # idle hands are the devil's playground - go clean the kitchen
  elif vacuum.mode == VacuumMode.IDLE:
    # want to see what's going on behind the scenes?
    wyze_sdk.set_stream_logger('wyze_sdk', level=logging.DEBUG)

    client.vacuums.sweep_rooms(device_mac='JA_RO2_ABCDEF123456', room_ids=[room.id for room in vacuum.current_map.rooms if room.name == 'Kitchen'])

except WyzeApiError as e:
    # You will get a WyzeApiError is the request failed
    print(f"Got an error: {e}")
Comments
  • Persistent 2FA Storage

    Persistent 2FA Storage

    Great library first of all. I am excited to try some of this with a hombridge plugin to bridge the gap between cameras and devices using the wyze_docker repo.

    My question is, can I persist my 2FA authentication between python sessions? At the moment, every time I re-run a test script, I also have to input my 2FA key which is fine but for instance in an automatic scenario where I restart my application once a day this will become a bottleneck. Is there a way around this for testing and then deployment? I saw the refresh_token() method which could be useful but I am not sure if that helps in the case of shutting down the python app and restarting it. Thanks!

    question 
    opened by carTloyal123 10
  • Cancel cleaning vs. dock for vacuum

    Cancel cleaning vs. dock for vacuum

    More of a feature request, but if the vacuum returns to the dock to charge during a cleaning, there doesn't appear to be a way to cancel that cleaning via wyze-sdk. If dock is called, it's already docked so nothing is done. In the app, if you hit stop, it will cancel the cleaning routine (i.e. it won't pick back up where it left off after reaching 20% charge). Hoping this is something that can be added. IMG_2062 IMG_2063

    enhancement 
    opened by bdwilson 9
  • Calling the client won't let me login

    Calling the client won't let me login

    Seems something changed because I have an automation that log in automatically in my account and it stopped working. The password is fine and I can use the Wyze application as normal. Probably an API changed?

    opened by feliutg 9
  • Getting NoneType Object Not Scriptable when creating new Client

    Getting NoneType Object Not Scriptable when creating new Client

    When creating new client object with just email and password, python errors and returns the following:

    Traceback (most recent call last):
      File "/home/ctl/devel/homebridge/homebridge-wyze-suite/py_helpers/getThermostatDeviceList.py", line 13, in <module>
        client = Client(email=sys.argv[1], password=os.sys.argv[2])
      File "/home/ctl/.local/lib/python3.10/site-packages/wyze_sdk/api/client.py", line 59, in __init__
        self.login()
      File "/home/ctl/.local/lib/python3.10/site-packages/wyze_sdk/api/client.py", line 139, in login
        response = self._auth_client().user_login(email=self._email, password=self._password, totp_key=self._totp_key)
      File "/home/ctl/.local/lib/python3.10/site-packages/wyze_sdk/service/auth_service.py", line 76, in user_login
        if response['access_token']:
    TypeError: 'NoneType' object is not subscriptable
    

    This seems to be an intermittent issue like sometimes it will happen and sometimes it will work totally fine. Any suggestions welcome and would be good to have for further development.

    opened by carTloyal123 8
  • Off after time stopped working

    Off after time stopped working

    Was using the plug off function with time delay just fine. One day it stopped working and I had to set rule in Wyze app to turn off now

    Still can turn on and off with api just no delays

    opened by Sfrjoshpro 6
  • Wyze Vacuum Beta Firmware Bug - Multi Level Floors

    Wyze Vacuum Beta Firmware Bug - Multi Level Floors

    I think with the newer/beta version of the Wyze Vacuum, the protobuf map definition _robot_map_proto has changed so some users are experiencing crashing when asking for sweep_rooms

    See here for examples of crashing - https://github.com/romedtino/simple-wyze-vac/issues/9

    I'm not too familiar with how it all ties together but I know in the beta firmware they are testing multi-level maps so I'm thinking it's most likely because of this.

    opened by romedtino 6
  • Camera Streams?

    Camera Streams?

    Apologies if this is in the docs, but from skimming the code it doesn't support getting access to the camera's events, or live video stream, does it? Been loking for a way to do this forever, and I've always come up empty handed

    opened by wesbos 6
  • Getting a NoneType When using the client.scales

    Getting a NoneType When using the client.scales

    When I run this command:

    scale = client.scales.info(device_mac='WL_SC2_7C78B2FBFDF9')

    I get the NoneType. I'm using the the "S" series scale, and I was wondering if that was supported yet?

    Thanks, Keith

    opened by kevans2226 5
  • Token expiration

    Token expiration

    I added a few wyze lights controls to my home security python program. The doors at the top and bottom of the staircase have reed switches that my home security sees as buttons. When a door opens, two wyze bulbs turn on and time out for 30 minutes. If the door closes, they time out at 6 minutes. Everything works as I describe but only for a few days.

    What I am finding is that the program throws the following error after a few days and the bulbs do not respond until I restart the script:

    wyze_sdk.errors.WyzeApiError: The access token has expired. Please refresh the token and try again. The server responded with: {'ts': 1650590646583, 'code': '2001', 'msg': 'AccessTokenError', 'data': {}}

    Behold the script:

    from gpiozero import Button, LED from signal import pause from time import sleep from datetime import datetime from datetime import timedelta import requests

    from wyze_sdk import Client from wyze_sdk.errors import WyzeApiError client = Client(email="[email protected]", password="AintGettinIt")

    garagepassage = Button(20) # Input from garage passage door stairspassage = Button(18) # Input from door at top of stairs

    now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Door Started at ", current_time) r = requests.post("https://autoremotejoaomgcd.appspot.com/sendnotification?key=NothingToSeeHere&title=Just%20Saying&text=Switch%20monitoring%20has%20begun")

    #bulbD1 = client.bulbs.info(device_mac=XXXXXXXXXXXX') # One of the Den bulbs bulbS1 = client.bulbs.info(device_mac='XXXXXXXXXXXXXX') bulbS2 = client.bulbs.info(device_mac='XXXXXXXXXX') plugSLED = client.plugs.info(device_mac='XXXXXXXXXXXXXXX')

    def open(): now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Door open at " + current_time) #client.bulbs.turn_on(device_mac=bulbD1.mac, device_model=bulbD1.product.model) client.bulbs.turn_on(device_mac=bulbS1.mac, device_model=bulbS1.product.model) client.bulbs.turn_on(device_mac=bulbS2.mac, device_model=bulbS2.product.model) client.plugs.turn_on(device_mac=plugSLED.mac, device_model=plugSLED.product.model) #client.bulbs.turn_off(device_mac=bulbD1.mac, device_model=bulbD1.product.model, after=timedelta(hours=.5)) client.bulbs.turn_off(device_mac=bulbS1.mac, device_model=bulbS1.product.model, after=timedelta(hours=.5))
    client.bulbs.turn_off(device_mac=bulbS2.mac, device_model=bulbS2.product.model, after=timedelta(hours=.5)) client.plugs.turn_off(device_mac=plugSLED.mac, device_model=plugSLED.product.model, after=timedelta(hours=.5)) print("on")

    def closed(): now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Door closed at " + current_time) #client.bulbs.turn_off(device_mac=bulbD1.mac, device_model=bulbD1.product.model, after=timedelta(hours=.05)) client = Client(email="[email protected]", password="AintGettinIt") client.bulbs.turn_off(device_mac=bulbS1.mac, device_model=bulbS1.product.model, after=timedelta(hours=.1)) client.bulbs.turn_off(device_mac=bulbS2.mac, device_model=bulbS2.product.model, after=timedelta(hours=.1)) client.plugs.turn_off(device_mac=plugSLED.mac, device_model=plugSLED.product.model, after=timedelta(hours=.1)) #client = Client(email="[email protected]", password="AintGettinIt") print("off")

    stairspassage.when_pressed = closed stairspassage.when_released = open garagepassage.when_pressed = closed garagepassage.when_released = open

    pause()

    I thought having the "client = Client(email="[email protected]", password="AintGettinIt")" imbedded in the "def closed()" would refresh it upon each close event but that isn't working. How can I refresh this token without having to restart the python?

    opened by duckredbeard 5
  • Contact Sensors issues

    Contact Sensors issues

    Hello!

    I'm able to pull contact sensors from my Wyze account, I can see nicknames, macs, rssi, etc, but all of them are showing as closed when this is not the case. sensor.is_open returns False for everything.

    Additionally, it looks like the wiki might be mislabeled - It's got Contact Sensors and Entry Sensors, but the only thing under Entry Sensors is Motion Sensors.

    I did try client.entry_sensors.info(device_mac=mac) but that returned nothing. Interestingly without device_mac=, that statement errors out. TypeError: ContactSensorsClient.info() takes 1 positional argument but 2 were given

    Thanks!

    bug 
    opened by TheGreatSkeeve 5
  • Add control_light and color_mode to bulb info

    Add control_light and color_mode to bulb info

    resolves: #41

    control_light seems to be vestigial and I couldn't find anywhere that it was being utilized aside from being defined in BulbProps. Additionally, the PropDef seems to have been expecting that the value would boolean (0 or 1 from the api) but on color bulbs (MeshBulbs) it seems that the value will be either 1 indicating that it's in 'color' mode or 2 indicating that it's in temperature mode. This commit adds the control_light property to the info output for all bulbs and further adds a computed color_mode property to mesh bulbs that indicates if the bulb is in color mode or temperature mode.

    I have found this useful for caching a bulb's state in a reproducable way in order to do things like run color/brightness change sequences and then return the bulb to the original state - this was not possible without knowing if the bulb was originally utilizing the value from color or the color_temp.

    Apologies if my code is not idiomatic, this is my first foray into python, happy to make changes if necessary.

    I also have not tested with a non-color bulb but I assume that the value for white bulbs will still fall within the range 0-2.

    opened by JRGould 5
  • api response to is_on etc. for cameras

    api response to is_on etc. for cameras

    Hi Shaun, I am attempting to create a script that will run periodically to monitor my cameras and flag/send an alert if any go down or die or lose network connectivity.

    I can get a list of my cameras via your api (very nice thank you) and do a ping to see if they are up is is_online is True. But there be gaps. I have a few questions. how do i send questions, do you want an email (need address) or as an issue?

    opened by robughblah 1
  • Wyze Client Error: must provide email and password

    Wyze Client Error: must provide email and password

    So I'm not sure what's wrong here. But I've set os variables for WYZE_EMAIL/PASSWORD and I can even print those OS Variables the exact same way the authentication examples calls then for the API call:

    from dotenv import load_dotenv import os

    from wyze_sdk import Client

    load_dotenv() print(os.environ['WYZE_EMAIL']) print(os.environ['WYZE_PASSWORD']) response = Client().login(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD']) print(f"access token: {response['access_token']}") print(f"refresh token: {response['refresh_token']}")

    And when I run the script it prints out my email and password in the shell just fine.

    but then this is the error I get:

    Traceback (most recent call last): File "/home/ccasteel/wyze_Test/login.py", line 10, in <module> response = Client().login(email=os.environ['WYZE_EMAIL'], password=os.environ['WYZE_PASSWORD']) File "/home/ccasteel/.local/lib/python3.10/site-packages/wyze_sdk/api/client.py", line 59, in __init__ self.login() File "/home/ccasteel/.local/lib/python3.10/site-packages/wyze_sdk/api/client.py", line 137, in login raise WyzeClientConfigurationError("must provide email and password") wyze_sdk.errors.WyzeClientConfigurationError: must provide email and password

    What am I doing wrong?

    question 
    opened by theotherguy2175 1
  • Garage Door and Floodlight Support

    Garage Door and Floodlight Support

    First off, great work!

    Hopefully I didn't overlook this, but I was wondering if there was support for accessing/controlling the accessories that connect to the Cam v3's, specifically garage door, and the floodlight?

    enhancement 
    opened by mschindler504 14
  • No Air Purifier Support

    No Air Purifier Support

    Support for Wyze Air Purifier with potential use cases:

    Control:

    • Auto
    • Manual (Min/Mid/Max/Turbo) Timer (1hr/2hr/4hr/8hr/custom) (Device Lock/Unlock)
    • Sleep
    • Off

    Report:

    • current/historical AQI
    • Filter Type
    • Filter %
    • Pollens (Grass/Weed/Tree with scale 0-5)
    • Notifications (filter life/urgent air conditions)

    Please reach out and I can share a device.

    Best, Anthony

    enhancement 
    opened by anthonystabile 1
  • Discarded start_time for retrieving records from Wyze Scale

    Discarded start_time for retrieving records from Wyze Scale

    First of all, thank you for this library - this is exactly what I've been looking for for building a connector from Wyze to Garmin Connect.

    https://github.com/shauntarves/wyze-sdk/blob/284172fffe86c65a404a0e95e55535a11def597a/wyze_sdk/service/scale_service.py#L167

    The start_time isn't passed to the wyze endpoints - instead the entire history is retrieved as the start_time is set here to 0.

    opened by jspalink 1
  • Use more relaxed version of blackboxprotobuf

    Use more relaxed version of blackboxprotobuf

    Since wyze-sdk has a dependency on blackboxprotobuf, the version of protobuf it uses is very strict (3.10.0). There are other components as part of Home Assistant that require a completely different version. This is problematic on Home Assistant since it kind of dumps all different versions of its dependencies in the same shared directory and you get a bit of a race condition on which protobuf version actually gets installed. At least this is what I'm seeing. (See https://github.com/romedtino/simple-wyze-vac/issues/8 for a bit more background).

    I figured out a workaround for it by instead being dependent on https://github.com/chandlernine/blackboxprotobuf/tree/relax_requirements which has a more relaxed requirements for protobuf. This was just a change in your setup.py/Pipfile as seen here in my fork - here and here

    While it's not directly a problem for wyze-sdk, I figure might as well ask if you're willing to change it since I think (so far from my testing) it doesn't affect the performance and it fixes the issue I was seeing when using wyze-sdk in Home Assistant.

    What do you think? If there's another way to solve this I'm all for that too :)

    question 
    opened by romedtino 1
Releases(v1.10.0)
  • v1.10.0(Dec 9, 2022)

    What's Changed

    • Added logic and instructions to allow access token reuse by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/116

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.9.0...v1.10.0

    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Dec 9, 2022)

    What's Changed

    • update lock.type to the correct capitalization by @vtwaldo21 in https://github.com/shauntarves/wyze-sdk/pull/54
    • 90 does the outdoor plug report electric usage information by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/103
    • 66 support for wyze switch by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/104
    • 113 no support for s series scale by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/114

    New Contributors

    • @vtwaldo21 made their first contribution in https://github.com/shauntarves/wyze-sdk/pull/54

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.8.0...v1.9.0

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Nov 3, 2022)

    What's Changed

    • 36 cancel cleaning vs dock for vacuum by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/101
    • 94 thermostat room sensors by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/100

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.7.1...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Oct 27, 2022)

  • v1.7.0(Oct 26, 2022)

    What's Changed

    • 59 support for wyze light strips by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/98

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.6.0...v1.7.0

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Oct 14, 2022)

    What's Changed

    • 39 control door lock pincode via api by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/95

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.5.0...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Oct 5, 2022)

    What's Changed

    • Wyze Bulb v2 enhancements by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/92. Includes fixes for the following:
      • https://github.com/shauntarves/wyze-sdk/issues/91
      • https://github.com/shauntarves/wyze-sdk/issues/41
    • Support for multi-level vacuum firmware by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/93

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.4.0...v1.5.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Oct 3, 2022)

    What's Changed

    • Added newer model numbers for entry and motion sensors by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/79
    • Added last_updated property to Sensor objects by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/80
    • fix: missing () on BulbProps.away_mode by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/85
    • Updated sv code for timer actions by @shauntarves in https://github.com/shauntarves/wyze-sdk/pull/89

    Full Changelog: https://github.com/shauntarves/wyze-sdk/compare/v1.3.0...v1.4.0

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(May 6, 2022)

    Added

    • Support for retrieving Wyze Vacuum supply levels

    Fixes

    • Some older Wyze Vacuum maps were not properly parsing
    • Updated package installation instructions
    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Jan 3, 2022)

    Fixed

    • Refresh token server response is now wrapped within data field (thanks @anshuarya)
    • readthedocs client method documentation was not generating
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Aug 11, 2021)

    Fixed

    • Broken client login due to wyze changing the expected user-agent header value #35
    • Vacuum battery level was always None #34

    Added

    • Support for restarting a camera https://github.com/shauntarves/wyze-sdk/pull/33
    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(May 24, 2021)

    Changed

    • client.scale.info will now use the current calling user's id, if available, to populate the user_profile and goal_weight objects #20

    Added

    • Scale goal_weight and ScaleRecord will now convert values to lb unless otherwise requested
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(May 22, 2021)

  • v1.1.5(May 18, 2021)

  • v1.1.4(May 13, 2021)

    Fixed

    • Camera motion_state wasn't being initialized #18
    • Device info calls weren't properly parsing certain attributes #19

    Added

    • Basic support for Outdoor Cam BaseStation #13

    Changed

    • More attributes will properly display None instead of empty strings
    Source code(tar.gz)
    Source code(zip)
  • v1.1.3(May 11, 2021)

  • v1.1.2(May 10, 2021)

  • v1.1.1(May 2, 2021)

  • v1.1.0(Apr 28, 2021)

  • v1.0.2(Apr 28, 2021)

    Fixed

    • Thermostat modes were not parsing correctly #6
    • Lock properties for open/close and locked/unlocked states were incorrectly reporting #7
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Apr 23, 2021)

    Fixed

    • Plug and Bulb actions would throw an Exception when requested with time delay #4
    • Parsing LockGateway devices didn't account for None type when parsing child Locks #3
    • Typos in the code examples for interacting with Plugs #2

    Changed

    • Device.parse will now return a generic Device object instead of None when encountering an unsupported device #1
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Apr 22, 2021)

    Device Support

    • Wyze Bulb and Wyze Bulb Color
    • Wyze Entry Sensor
    • Wyze Cameras
    • Wyze Lock
    • Wyze Motion Sensor
    • Wyze Plug and Wyze Plug Outdoor
    • Wyze Scale
    • Wyze Thermostat
    • Wyze Robot Vacuum

    Alarm Support

    • Basic support for managing Wyze alarm events
    Source code(tar.gz)
    Source code(zip)
Owner
Shaun Tarves
Shaun Tarves
Modern Desktop Jellyfin Client written in Python and Vue for the UI [WIP]

JellyPlayer Modern Jellyfin Client Installation Install Requirements: Install Python 3 Install dependencies Install node deps for frontend, go to Jell

Prayag Prajapati 57 Dec 12, 2022
Python client and API for monitoring and controling energy diversion devices from MyEnergi

Python client and API for monitoring and controling energy diversion devices from MyEnergi A set of library functions and objects for interfacing with

null 1 Dec 17, 2021
A secure and customizable bot for controlling cross-server announcements and interactions within Discord

DiscordBot A secure and customizable bot for controlling cross-server announcements and interactions within Discord. Within the code of the bot, you c

Jacob Dorfmeister 1 Jan 22, 2022
Dns-Client-Server - Dns Client Server For Python

Dns-client-server DNS Server: supporting all types of queries and replies. Shoul

Nishant Badgujar 1 Feb 15, 2022
Raphtory-client - The python client for the Raphtory project

Raphtory Client This is the python client for the Raphtory project Install via p

Raphtory 5 Apr 28, 2022
Drcom-pt-client - Drcom Pt version client with refresh timer

drcom-pt-client Drcom Pt version client with refresh timer Dr.com Pt版本客户端 可用于网页认

null 4 Nov 16, 2022
A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python.

A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using async and await

Senpai Development 4 Nov 5, 2021
A modern,feature-rich, and async ready API wrapper for Discord written in Python

discord.io A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using asyn

Vincent 18 Jan 2, 2023
ro.py is a modern, asynchronous Python 3 wrapper for the Roblox API.

GitHub | Discord | PyPI | Documentation | Examples | License Overview Welcome to ro.py! ro.py is an asynchronous, object-oriented wrapper for the Robl

ro.py 81 Dec 26, 2022
A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python.

disfork A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using async a

null 2 Feb 9, 2022
Polar devices Python API and CLI.

loophole - Polar devices API About Python API for Polar devices. Command line interface included. Tested with: A360 Loop M400 Installation pip install

[roscoe] 145 Sep 14, 2022
A Python SDK for connecting devices to Microsoft Azure IoT services

V2 - We are now GA! This repository contains code for the Azure IoT SDKs for Python. This enables python developers to easily create IoT device soluti

Microsoft Azure 381 Dec 30, 2022
Python lib to control HottoH based stove devices

Project desciption This library can be used to discuss with HootoH based stove devices Actually tested and validated with a CMG Drum stove. To use thi

null 3 May 16, 2022
Python library for Seeedstudio Grove devices

grove.py Python library for Seeedstudio Grove Devices on embeded Linux platform, especially good on below platforms: Coral Dev Board (Wiki) NVIDIA Jet

Seeed Studio 123 Dec 17, 2022
Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and other financial information. This repository provides an SDK for developing applications to access the NCDS.

Nasdaq Cloud Data Service (NCDS) Nasdaq Cloud Data Service (NCDS) provides a modern and efficient method of delivery for realtime exchange data and ot

Nasdaq 8 Dec 1, 2022
A modern, easy to use, feature-rich, and async ready API wrapper improved and revived from original discord.py.

A Python API wrapper that is improved and revived from the original discord.py

Orion 19 Nov 6, 2021
A PowerPacked Version Of Telegram Leech Bot With Modern Easy-To-Use Interface & UI !

FuZionX Leech Bot A Powerful Telegram Leech Bot Modded by MysterySD to directly Leech to Telegram, with Multi Direct Links Support for Enhanced Leechi

MysterySD 28 Oct 9, 2022
The modern Lavalink wrapper designed for discord.py

Pomice The modern Lavalink wrapper designed for discord.py This library is heavily based off of/uses code from the following libraries: Wavelink Slate

Gstone 1 Feb 2, 2022
A minimalistic, modern Discord bot for roles and polls using dropdowns

DropBot A minimalistic, modern Discord bot for roles and polls using dropdowns Made by ThatOneCalculator Technologies used Instructions Type /, and na

ModernBots 1 Jun 27, 2022