Package: petsafe
PetSafe Smart Feed - Python APIConnect and control a PetSafe Smart Feed device using the PetSafe-SmartFeed API.BREAKING CHANGE:Version 2.0 uses the new PetSafe API.
You will need to request new tokens.PetSafe will lock your account if you request data more often than once per 5 minutes.Installationpip install petsafeIf installing from source code,python setup.py installLogin tokensYoumustuse tokens to interact with the PetSafe Smart-Feed API.There are two methods to retrieve tokens:Get tokens using command lineExecutepython -m petsafe [email_address]to request an email code.Check your email for an email code from PetSafe.Enter your code to generate tokens.Get tokens using Pythonimportpetsafeassf# replace with your email addressclient=sf.PetSafeClient(email="email@example.com")client.request_code()# check your email for a codecode=input("Enter email code: ")token=client.request_tokens_from_code(code)print("email:",client.email)print("id_token:",client.id_token)print("refresh_token:",client.refresh_token)print("access_token:",client.access_token)Example usageList feedersimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_feeders(client)# print all feedersfordeviceindevices:print(device)Feed 1/8 cup at normal speedimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_feeders(client)# get the first feederfeeder=devices[0]feeder.feed(amount=1,slow_feed=False)Get current battery level (0 - 100)importpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_feeders(client)# get the first feederfeeder=devices[0]print(feeder.battery_level)Get current food levelimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_feeders(client)# get the first feederfeeder=devices[0]status=feeder.food_low_statusifstatus==0:print("Feeder has food.")elifstatus==1:print("Feeder is low on food.")elifstatus==2:print("Feeder is out of food.")get litterboxesimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_litterboxes(client)# print all litterboxesfordeviceindevices:print(device)get litterbox activityimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_litterboxes(client)litterbox=devices[0]print(litterbox.get_schedule())rake the litterboximportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_litterboxes(client)litterbox=devices[0]litterbox.rake()modify the litterbox rake timerimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_litterboxes(client)litterbox=devices[0]litterbox.modify_timer(15)reset the litterbox rake countimportpetsafeassfclient=sf.PetSafeClient(email="email@example.com",id_token="YOUR_ID_TOKEN",refresh_token="YOUR_REFRESH_TOKEN",access_token="YOUR_ACCESS_TOKEN")devices=sf.devices.get_litterboxes(client)litterbox=devices[0]litterbox.reset()ContributingAll contributions are welcome.
Please, feel free to create a pull request!