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
An example of a chatbot with a number-based menu that can be used as a starting point for a project.

NumMenu Bot NumMenu Bot is an example chatbot showing a way to design a number-based menu assistant with Rasa. This type of bot is very useful on plat

Derguene 19 Nov 14, 2022
A discord.py bot template with easy deployment through Github Actions

discord.py bot template A discord.py bot template with easy deployment through Github Actions. You can use this template to just run a Python instance

Thomas Van Iseghem 1 Feb 09, 2022
Twitter bot code can be found in twitterBotAPI.py

NN Twitter Bot This github repository is BASED and is yanderedev levels of spaghetti Neural net code can be found in alexnet.py. Despite the name, it

167 Dec 19, 2022
A bot can be used to broadcast your messages ( Text & Media ) to the Subscribers

Broadcast Bot A Telegram bot to send messages and medias to the subscribers directly through bot. Authorized users of the bot can send messages (Texts

Shabin-k 8 Oct 21, 2022
Using multiple API sources, create an app that allows users to filter through random locations based on their temperature range choices.

World_weather_analysis Overview Using multiple API sources, create an app that allows users to filter through random locations based on their temperat

Jason Boyer 2 Sep 16, 2022
Data Platform com AWS CDK

Welcome to your CDK Python project! This is a blank project for Python development with CDK. The cdk.json file tells the CDK Toolkit how to execute yo

Andre Sionek 8 Jul 02, 2022
Construindo API's robustas utilizando Python

🐂 Construindo API's robustas utilizando Python Neste tutorial vamos aprender a construir API's utilizando Python e FastAPI, integrá-las a serviços ex

luizalabs 296 Dec 13, 2022
Twitter automation tool for growing organic followers.

Tiwoto Tiwoto is a simple python program that automates some kind of behaviors and keep your account active. Create an .env file in this directory and

Mehmetcan Yildiz 6 Sep 22, 2022
A telegram bot written in Python to fetch random SFW & NSFW anime images

Tsuzumi A telegram bot written in python to fetch both random SFW & NSFW Anime images using nekos.life & waifu.pics API Commands SFW Commands : /

Nisarga Adhikary 3 Oct 12, 2022
Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily

Leakvertise Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily. You can

Quatrecentquatre 9 Oct 06, 2022
A Sublime Text plugin that displays inline images for single-line comments formatted like `// ![](example.png)`.

Inline Images Sometimes ASCII art is not enough. Sometimes an image says more than a thousand words. This Sublime Text plugin can display images inlin

Andreas Haferburg 8 Jul 01, 2022
The easiest way to deploy this Bot

How To Host The easiest way to deploy this Bot Update Channe

Isekai Reszz 1 Jan 23, 2022
A small Python app to create Notion pages from Jira issues

Jira to Notion This little program will capture a Jira issue and create a corresponding Notion subpage. Mac users can fetch the current issue from the

Dr. Kerem Koseoglu 12 Oct 27, 2022
A bot which is a ghost and you can make friends with it

This is a bot which is a ghost and you can make friends with it. It will haunt your friends. Explore and test the bot in replit !

Siwan SR 0 Oct 06, 2022
Seamlessly Connecting Notion Database with Python Pandas DataFrame

notion-df: Seamlessly Connecting Notion Database with Pandas DataFrame Please Note: This project is currently in pre-alpha stage. The code are not app

Shannon Shen 38 Dec 28, 2022
Получение интересной информации о любой пиццерии Додо

dodopizza-abuse Получение инфорации о выбранной пиццерии Додо Установка и запуск на Linux Устанавливаем git и python: apt-get update && apt-get -y ins

Хозя 24 Nov 02, 2022
Rhythm bot clone for discord written in Python and uses YouTube to get media files.

Tunebot About Rhythm bot clone for discord written in Python and uses YouTube to get media files. Usage You need a .env file within the same directory

1 Oct 21, 2021
Matrix trivia bot with python

Matrix-trivia-bot Getting started See SETUP.md for how to setup and run the template project. Project structure A reference of each file included in t

1 Nov 16, 2021
A slack bot that notifies you when a restaurant is available for orders

Slack Wolt Notifier A Slack bot that notifies you when a Wolt restaurant or venue is available for orders. How does it work? Slack supports bots that

Gil Matok 8 Oct 24, 2022
This project uses Youtube data API's to do youtube tags analysis based on viewCount, comments etc.

Youtube video details analyser Steps to run this project Please set the AuthKey which you can fetch from google developer console and paste it in the

1 Nov 21, 2021