Asynchronous Python library for PetKit's API.
This is PetKit's undocumented API. With that said, future changes made by PetKit may break this library. The API endpoint used is determined based on the region your account is locked to. Although support has been added for the PetKit Asia API endpoint, I have not personally tested it.
Feeders
Litter Boxes
Purifiers
Water Fountains
PetKit accounts can only be logged in on one device at a time. Using this library will result in getting signed out of the mobile app. You can avoid this by creating a secondary account and sharing devices from the main account (except water fountains). However, some device functionality is lost when using a secondary account as well as not being able to share pets between accounts.
This package depends on aiohttp and tzlocal. Python 3.7
or greater is required.
import asyncio
from petkitaio import PetKitClient
from aiohttp import ClientSession
async def main():
async with ClientSession() as session:
# Create a client using PetKit account email and password
client = PetKitClient('email', 'password', session)
###################################################################################
Examples within the examples section utilize the PetKitClient instance created above
###################################################################################
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
# See model.py for details regarding Data Classes created
devices = await client.get_petkit_data()
# See model.py for details regarding "Feeder" class
# Reusing retrieved devices from above. Note: A valid amount (in grams) will depend on the capabilities of the feeder.
await client.manual_feeding(feeder=devices.feeders[feederid], amount=10)
# See constants.py FeederSetting class for available settings
# Additional import needed:
from petkitaio.constants import FeederSetting
# Enabling child lock on a D4 feeder. Note: Mini Feeders use a different setting.
# Reusing retrieved devices from above.
await client.update_feeder_settings(feeder=devices.feeders[feederid], setting=FeederSetting.CHILD_LOCK, value=1)
# Reusing retrieved devices from above.
await client.reset_feeder_desiccant(feeder=devices.feeders[feederid])
# A valid relay (set up through the PetKit app) is required in order to send commands to the Eversweet 3 Pro
# See constants.py W5Command class for available commands
# Additional import needed:
from petkitaio.constants import W5Command
# Set Water Fountain to Smart Mode. Reusing retrieved devices from above.
await client.control_water_fountain(water_fountain=devices.water_fountains[water_fountain_id], command=W5Command.SMART)