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
Aplicação dos metodos de classificação em 3 diferentes banco de dados. Usando...

Machine Learning - Métodos de classificação Base de Dados utilizadas: Dados de crédito Dados do Census Métodos de classificação aplicados: Naive Bayes

1 Jan 18, 2022
🐍 The official Python client library for Google's discovery based APIs.

Google API Client This is the Python client library for Google's discovery based APIs. To get started, please see the docs folder. These client librar

Google APIs 6.2k Jan 08, 2023
Desafio de projeto sobre Git/Github

Maçã ou Laranja? 🤔 Desafio Projeto Dio para Git/Github 🔶 Para esse primeiro repositório, decidir adicionar o primeiro algoritmo de inteligência arti

José Filipe 2 Oct 23, 2022
SongBot2.0 With Python

SongBot2.0 Host 👨‍💻 Heroku 🚀 Manditary Vars BOT_TOKEN : Get It from @Botfather Special Feature Downloads Songs fastly and less errors as well as 0

Mr.Tanaji 5 Nov 19, 2021
Easy way to use Telegram bot to hide your identity.

telegram-support-bot Easy way to use Telegram bot to hide your identity. Useful for support, anonymous channel management. Free clone of Livegram Bot.

Daniil Okhlopkov 197 Dec 23, 2022
Tools for Twitter

Tools for Twitter Data This is a start of a collection of tools to use for collecting data via the Twitter API. If you do not have a Twitter Developer

DiscoverText 36 Oct 13, 2022
Analytics platform for Telegram Channels

Tele-Report Analytics platform for Telegram Channels 🚧 👷 Getting Started 1- Install redis and postgreSQL (it would be more generic in future, like u

2 Oct 11, 2022
Telegram bot to download almost all from Instagram

Instagram Manager Bot The most advanced Instagram Downloader Bot. Please fork this repository don't import code Made with Python3 (C) @subinps Copyrig

SUBIN 300 Dec 30, 2022
A library that revolutionizes the way people interact with NextDNS.

NextDNS-API An awesome way to interface with your NextDNS account - via Python! Explore the docs » Report Bug . Request Feature Table Of Contents Abou

34 Dec 07, 2022
Cogs version of iso6.9 with the help of thatOneArchUser

iso6.9-cogs (debloated) This is a cogs version of iso6.9 by αrchιshα#5518. iso6.9 is a Discord bot written in Python and is used to make your Discord

Kamilla Youver 2 Jun 10, 2022
ServiceX DID Finder Girder

ServiceX_DID_Finder_Girder Access datasets for ServiceX from yt Hub Finding datasets This DID finder is designed to take a collection id (https://gird

1 Dec 07, 2021
ETL python utilizando API do Spotify

Processo de ETL com Python e Airflow usando API do Spotify Sobre Projeto de ETL(Extract, Transform e Load) utilizando Python com API do Spotify e Airf

Leonardo 10 Mar 16, 2022
Instrument asyncio Python for distributed tracing with AWS X-Ray.

xraysink (aka xray-asyncio) Extra AWS X-Ray instrumentation to use distributed tracing with asyncio Python libraries that are not (yet) supported by t

Gary Donovan 12 Nov 10, 2022
Fully Automated Omegle Chatbot

omegle-bot tutorial features fast runs in background can run multiple instances at once Requirement Run this command in cmd, terminal or PowerShell (i

6 Aug 07, 2021
Twitter bot that turns comment chains into ace attorney scenes. Inspired by and using https://github.com/micah5/ace-attorney-reddit-bot

Ace Attorney twitter Bot Twitter bot that turns comment chains into ace attorney scenes. Inspired by and using https://github.com/micah5/ace-attorney-

Luis Mayo Valbuena 542 Dec 17, 2022
An API serving data on all creatures, monsters, materials, equipment, and treasure in The Legend of Zelda: Breath of the Wild

Hyrule Compendium API An API serving data on all creatures, monsters, materials, equipment, and treasure in The Legend of Zelda: Breath of the Wild. B

Aarav Borthakur 116 Dec 01, 2022
Flask-SQLAlchemy API for daisuki-web

💟 Anime Daisuki! API API de animes com cadastro de usuários. O usuário autenticado pode avaliar e favoritar animes, comentar episódios e verificar o

Paulo Thor 1 Nov 04, 2021
A bot that downloads all the necessary files from WeLearn and lists your assignments, filter due assignments, etc.

Welearn-bot This is a bot which lets you interact with WeLearn from the command line. It can Download all files/resources from your courses and organi

Parth Bibekar 17 Oct 19, 2022
Automatically scrape all of your artifacts in Genshin Impact.

Genshin Artifact Scraper Automatically scrape all of your artifacts in Genshin Impact. Features: Simple recalibration (2 steps). GUI to select OCR reg

21 Dec 17, 2022
This is a Anti Channel Ban Robots

AntiChannelBan This is a Anti Channel Ban Robots delete and ban message sent by channels Heroku Deployment 💜 Heroku is the best way to host ur Projec

BᵣₐyDₑₙ 25 Dec 10, 2021