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
This tool is created by Shahzain and is one of the best self bots out there!

Shahzain SelfBot This tool is created by Shahzain and is one of the best self bots out there! Features Token Destroyer! Server Nuker(50-100 Bans Per S

Shahzain 6 Apr 02, 2022
RDMAss - A Python Discord bot creating an interaction with RDM API

RDMAss A Python Discord bot creating an interaction with RDM API. Features Assig

5 Sep 21, 2022
Python lib for Embedly

embedly-python Python library for interacting with Embedly's API. To get started sign up for a key at embed.ly/signup. Install Install with Pip (recom

Embedly 80 Oct 05, 2022
Git Plan - a better workflow for git

git plan A better workflow for git. Git plan inverts the git workflow so that you can write your commit message first, before you start writing code.

Rory Byrne 178 Dec 11, 2022
quote is a python wrapper for the Goodreads Quote API, powered by gazpacho.

About quote is a python wrapper for the Goodreads Quote API, powered by gazpacho.

Max Humber 11 Nov 10, 2022
An example Music Bot written in Disnake and uses slash commands to operate.

Music Bot An example music bot that is written in Disnake [Maintained discord.py Fork] Disnake Disnake is a maintained and updated fork of discord.py.

6 Jan 08, 2022
Retrieve information from DBLP and update BibTex files automatically

Rebib TLDR: This script retrieves information from DBLP to update your BibTex files. python rebib.py --bibfile xxx.bib It first parses the bib entries

Shangtong Zhang 49 Jan 01, 2023
Infrastructure template and Jupyter notebooks for running RoseTTAFold on AWS Batch.

AWS RoseTTAFold Infrastructure template and Jupyter notebooks for running RoseTTAFold on AWS Batch. Overview Proteins are large biomolecules that play

AWS Samples 20 May 10, 2022
Integrating the Daraja-Api with Python language

Mpesa-Daraja-Api Integrating the Daraja-Api with Python language. Credentials.py file This file contains the consumer key and the consumer secrete key

Morvin Ian 3 Nov 09, 2022
Cogs for RedDiscord-Bot V3

Cogs v3 Disclaimer: This is an unapproved repo, meaning no one has formally reviewed this repo yet and any loss of data in your bot isn't my fault (An

Honkertonken 5 Nov 17, 2022
fair-test is a library to build and deploy FAIR metrics tests APIs supporting the specifications used by the FAIRMetrics working group.

☑️ FAIR test fair-test is a library to build and deploy FAIR metrics tests APIs supporting the specifications used by the FAIRMetrics working group. I

Maastricht University IDS 6 Oct 30, 2022
DiscWrappy - A Python wrapper for the Discord bot API

DiscWrappy - A Python wrapper for the Discord bot API

Jeff Morris 4 Apr 25, 2022
Telegram bot for making Heroku app.json by @AbirHasan2005

Heroku-app.json A Telegram bot for making Heroku app.json by @AbirHasan2005. Demo Bot Host Bot Deploy to Heroku Click Below Button to Deploy to Heroku

Abir Hasan 46 Nov 13, 2022
DadBot 2.0 is an interactive bot that reflects the personality of a typical dad

DadBot 2.0 is an interactive bot that reflects the personality of a typical dad! You can start by running main while all directories are maintained as they are on this GitHub.

1 Dec 04, 2021
Picot - A discord bot made to fetch images from Pexels and unsplash API and provide raw images directly in channels

Picot A discord bot made to fetch images from Pexels and unsplash API and provid

Ayush Chandwani 5 Jan 12, 2022
Red-mail - Advanced email sending library for Python

Red Mail Next generation email sender What is it? Red Mail is an advanced email

Mikael Koli 313 Jan 08, 2023
Unofficial Python wrapper for official Hacker News API

haxor Unofficial Python wrapper for official Hacker News API. Installation pip install haxor Usage Import and initialization: from hackernews import H

147 Sep 18, 2022
Ulaavi for nuke, helps to keep our stocl elements organised.

Ulaavi Ulaavi for nuke, helps to keep our stock elements organised. Installation Downlaod ffmpeg from ffmpeg.org linux : https://johnvansickle.com/ffm

Arun Subramaniyam 17 Aug 24, 2022
Bot para automatizacao de registros no Vacivida para o COVID19

VACIBOT v.06 - Bot para automatizacao de registros no Vacivida para o COVID19 by Victor Fragoso - Prefeitura Municipal de Santo André Email:

Prefeitura de Santo André 22 Sep 19, 2022
A Telegram Bot which notifies the user when a vaccine is available on CoWin Platform.

Cowin Vaccine Availability Notifier Telegram Bot A bot that notifies the available vaccines at given district in realtime. Introduction • Requirements

Arham Shah 7 Jul 31, 2021