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
Hydro Quebec API wrapper.

HydroQC Hydro Quebec API wrapper. This is a package to access some functionalities of Hydro Quebec API that are not documented. Documentation https://

Olivier BEAU 9 Dec 02, 2022
Is the CoWin website updated for registration?

CoWin-Update Is the CoWin website updated for registration? This is a very hacky PYTHON3 script to lookup the CoWin portal if they re-deployed their J

Yash Jakhotiya 5 May 10, 2021
Python API for working with RESQML models

resqpy: Python API for working with RESQML models Introduction resqpy is a pure python package which provides a programming interface (API) for readin

BP 44 Dec 14, 2022
Make your Pass (sanitaire) Fun Again

Make Your Pass (Sanitaire) Fun Again Customize your Pass Sanitaire (French name for EU digital Covide19 Certificate) with colors and images, thus make

101 Dec 01, 2022
A MassDM selfbot which is working in 2021

mass-dm-discord - Little preview of the Logger and the Spammer Features Logging User IDS Sending DMs to the logged IDs Blacklist IDs (add the ID of th

karma.meme 88 Dec 26, 2022
Instagram - Instagram Account Reporting Tool

Instagram Instagram Account Reporting Tool Installation On Termux $ apt update $

Aryan 6 Nov 18, 2022
Discord Token Generator - Python (Generates Tokens and Joins your Server Automatically) hCaptcha Bypass **FREE**

Best Discord Token Generator {hCaptcha bypass FREE Unlimited Memberboost} Install few requirements & run main.py it will redirect you to the Download

1 Oct 27, 2021
Python client for the Echo Nest API

Pyechonest Tap into The Echo Nest's Musical Brain for the best music search, information, recommendations and remix tools on the web. Pyechonest is an

The Echo Nest 655 Dec 29, 2022
A collective list of free APIs for use in software and web development.

Public APIs A collective list of free APIs for use in software and web development. A public API for this project can be found here! For information o

222.5k Jan 02, 2023
Deezer client for python

Deezer Python Client A friendly Python wrapper around the Deezer API. Installation The package is published on PyPI and can be installed by running: p

Bruno Alla 103 Dec 19, 2022
This is a open source discord bot project

pythonDiscordBot This is a open source discord bot project #based on the MAX A video: https://www.youtube.com/watch?v=jHZlvRr9KxM Prerequisites Python

Edson Holanda Teixeira Junior 3 Oct 11, 2021
Automate saving your Discover Weekly Playlist using Python.

SpotWeekly Automate saving your Discover Weekly Playlist using Python. Made with 3 and FastAPI. The saved playlist link is sent to my discord server

shourya 6 Jan 03, 2022
This repository is used to simplify the process of cloning the SSM documents across the AWS regions.

SSM Cloner Introduction This module is created in order to simplify the process of copying the SSM documents from one region to another regions. As an

6 Jun 04, 2022
A Python wrapper for discord slash-commands, designed to extend discord.py.

dislash.py An extending library for discord.py that allows to build awesome slash-commands. ⭐

173 Dec 19, 2022
PunkScape Discord bot to lookup rarities, create diptychs and more.

PunkScape Discord Bot A Discord bot created for the Discord server of PunkScapes, a banner NFT project. It was intially created to lookup rarities of

Akuti 4 Jun 24, 2022
Mandatory join to channel using pyTelegramBotAPI

Running set your bot token to config.py set channel username to config.py set channel url to config.py $ python join.py Attention Bot must be administ

Abdulatif 6 Oct 08, 2022
A Simple Telegram Bot that can Download Files From Mega.nz and Upload It to Telegram

MegaDL-Bot A Simple Telegram Bot By @mrkpbots to Download Files From Mega.nz and Upload It to Telegram Features No Login Required All Mega.nz File Lin

MRKP BOTS 5 Feb 20, 2022
This is a translator that i made by myself in python with the 'googletrans' library

Translator-Python This is a translator that i made by myself in python with the 'googletrans' library This application completely made in python allow

Thadeuks 2 Jun 17, 2022
UNLIMITED CALL AND SMS BOMBING PYTHON SCRIPT

cc_sim_crack v.1 An open-source SMS/call bomber for Linux And Termux. Note: Due misusing of cc_sim_crack, several API's died. Don't be afraid if you d

CYBER CRACKER OFFICIAL 3 Jul 05, 2021
Copier template for solving Advent of Code puzzles with Python

Advent of Code Python Template for Copier This template creates scaffolding for one day of Advent of Code. It includes tests and can download your per

Geir Arne Hjelle 6 Dec 25, 2022