pypetkitapi 0.2.0__py3-none-any.whl → 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pypetkitapi/client.py +23 -7
- pypetkitapi/const.py +1 -0
- pypetkitapi/containers.py +1 -1
- {pypetkitapi-0.2.0.dist-info → pypetkitapi-0.3.0.dist-info}/METADATA +9 -13
- {pypetkitapi-0.2.0.dist-info → pypetkitapi-0.3.0.dist-info}/RECORD +7 -7
- {pypetkitapi-0.2.0.dist-info → pypetkitapi-0.3.0.dist-info}/LICENSE +0 -0
- {pypetkitapi-0.2.0.dist-info → pypetkitapi-0.3.0.dist-info}/WHEEL +0 -0
pypetkitapi/client.py
CHANGED
@@ -18,6 +18,7 @@ from pypetkitapi.const import (
|
|
18
18
|
ERR_KEY,
|
19
19
|
LOGIN_DATA,
|
20
20
|
RES_KEY,
|
21
|
+
SUCCESS_KEY,
|
21
22
|
Header,
|
22
23
|
PetkitEndpoint,
|
23
24
|
PetkitURL,
|
@@ -45,7 +46,7 @@ class PetKitClient:
|
|
45
46
|
_session: SessionInfo | None = None
|
46
47
|
_servers_list: list[RegionInfo] = []
|
47
48
|
account_data: list[AccountData] = []
|
48
|
-
device_list:
|
49
|
+
device_list: dict[int, Feeder | Litter | WaterFountain] = {}
|
49
50
|
|
50
51
|
def __init__(
|
51
52
|
self,
|
@@ -100,11 +101,16 @@ class PetKitClient:
|
|
100
101
|
await self._get_api_server_list()
|
101
102
|
_LOGGER.debug("Finding region server for region: %s", self.region)
|
102
103
|
|
104
|
+
if self.region == "china":
|
105
|
+
self._base_url = PetkitURL.CHINA_SRV
|
106
|
+
return
|
107
|
+
|
103
108
|
regional_server = next(
|
104
109
|
(
|
105
110
|
server
|
106
111
|
for server in self._servers_list
|
107
112
|
if server.name.lower() == self.region
|
113
|
+
or server.id.lower() == self.region
|
108
114
|
),
|
109
115
|
None,
|
110
116
|
)
|
@@ -263,22 +269,28 @@ class PetKitClient:
|
|
263
269
|
)
|
264
270
|
device_data = data_class(**response)
|
265
271
|
device_data.device_type = device.device_type # Add the device_type attribute
|
266
|
-
_LOGGER.debug(
|
267
|
-
|
272
|
+
_LOGGER.debug(
|
273
|
+
"Reading device type : %s (id=%s)", device.device_type, device.device_id
|
274
|
+
)
|
275
|
+
self.device_list[device.device_id] = device_data
|
268
276
|
|
269
277
|
async def send_api_request(
|
270
278
|
self,
|
271
|
-
|
279
|
+
device_id: int,
|
272
280
|
action: StrEnum,
|
273
281
|
setting: dict | None = None,
|
274
282
|
) -> None:
|
275
283
|
"""Control the device using the PetKit API."""
|
284
|
+
device = self.device_list.get(device_id)
|
285
|
+
if not device:
|
286
|
+
raise PypetkitError(f"Device with ID {device_id} not found.")
|
276
287
|
|
277
288
|
_LOGGER.debug(
|
278
|
-
"Control API
|
289
|
+
"Control API device=%s id=%s action=%s param=%s",
|
290
|
+
device.device_type,
|
291
|
+
device_id,
|
279
292
|
action,
|
280
293
|
setting,
|
281
|
-
device,
|
282
294
|
)
|
283
295
|
|
284
296
|
if device.device_type:
|
@@ -312,12 +324,16 @@ class PetKitClient:
|
|
312
324
|
params = action_info.params(device)
|
313
325
|
|
314
326
|
prep_req = PrepReq(base_url=self._base_url)
|
315
|
-
await prep_req.request(
|
327
|
+
res = await prep_req.request(
|
316
328
|
method=HTTPMethod.POST,
|
317
329
|
url=url,
|
318
330
|
data=params,
|
319
331
|
headers=headers,
|
320
332
|
)
|
333
|
+
if res == SUCCESS_KEY:
|
334
|
+
_LOGGER.info("Command executed successfully")
|
335
|
+
else:
|
336
|
+
_LOGGER.error("Command execution failed")
|
321
337
|
|
322
338
|
|
323
339
|
class PrepReq:
|
pypetkitapi/const.py
CHANGED
pypetkitapi/containers.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pypetkitapi
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.0
|
4
4
|
Summary: Python client for PetKit API
|
5
5
|
Home-page: https://github.com/Jezza34000/pypetkit
|
6
6
|
License: MIT
|
@@ -19,10 +19,6 @@ Description-Content-Type: text/markdown
|
|
19
19
|
|
20
20
|
---
|
21
21
|
|
22
|
-
# WIP - UNDER DEVELOPMENT
|
23
|
-
|
24
|
-
---
|
25
|
-
|
26
22
|
[][pypi_]
|
27
23
|
[][python version]
|
28
24
|
|
@@ -72,29 +68,29 @@ logging.basicConfig(level=logging.DEBUG)
|
|
72
68
|
|
73
69
|
async def main():
|
74
70
|
client = PetKitClient(
|
75
|
-
username="username", # Your PetKit account username
|
71
|
+
username="username", # Your PetKit account username or id
|
76
72
|
password="password", # Your PetKit account password
|
77
|
-
region="France", # Your region
|
73
|
+
region="France", # Your region or country code (e.g. FR, US, etc.)
|
78
74
|
timezone="Europe/Paris", # Your timezone
|
79
75
|
)
|
80
76
|
|
81
77
|
# To get the account and devices data attached to the account
|
82
78
|
await client.get_devices_data()
|
79
|
+
|
83
80
|
# Read the account data
|
84
81
|
print(client.account_data)
|
82
|
+
|
85
83
|
# Read the devices data
|
86
84
|
print(client.device_list)
|
87
85
|
|
88
|
-
# client.device_list[0] is the first device in the list in this example it's a Feeder
|
89
|
-
# Get the Feeder from the device list
|
90
|
-
my_feeder = client.device_list[0]
|
91
|
-
|
92
86
|
# Send command to the devices
|
93
87
|
### Example 1 : Turn on the indicator light
|
94
|
-
|
88
|
+
### Device_ID, Command, Payload
|
89
|
+
await client.send_api_request(012346789, DeviceCommand.UPDATE_SETTING, {"lightMode": 1})
|
95
90
|
|
96
91
|
### Example 2 : Feed the pet
|
97
|
-
|
92
|
+
### Device_ID, Command, Payload
|
93
|
+
await client.send_api_request(0123467, FeederCommand.MANUAL_FEED, {"amount": 1})
|
98
94
|
|
99
95
|
|
100
96
|
if __name__ == "__main__":
|
@@ -1,13 +1,13 @@
|
|
1
1
|
pypetkitapi/__init__.py,sha256=eVpyGMD3tkYtiHUkdKEeNSZhQlZ4woI2Y5oVoV7CwXM,61
|
2
|
-
pypetkitapi/client.py,sha256=
|
2
|
+
pypetkitapi/client.py,sha256=yb7RWlr_F1yrmmYRvQNKEt2Zd6PClsctRZYa0nRVtH0,14791
|
3
3
|
pypetkitapi/command.py,sha256=ibJ0zenONy-FBvUvyIA_IvUnYEUezLpPxhC_9XZ6SwM,9282
|
4
|
-
pypetkitapi/const.py,sha256=
|
5
|
-
pypetkitapi/containers.py,sha256=
|
4
|
+
pypetkitapi/const.py,sha256=XKiybtizB115OwVo7l9d2bZyVfkFjYWEtt9mBwYLcDk,2988
|
5
|
+
pypetkitapi/containers.py,sha256=XhNbRUztnBpIr9cypDoyE3MHojic831G5GSisK9B7kU,3123
|
6
6
|
pypetkitapi/exceptions.py,sha256=f9QY1EME9ha_vJJx4DuL_OBNpoynYVdtMFtVZbdfook,1129
|
7
7
|
pypetkitapi/feeder_container.py,sha256=IGXeAEbLkZhOTCzF2MhwqadIAKXg6jHbfU037dt6byY,10985
|
8
8
|
pypetkitapi/litter_container.py,sha256=aLAvcB8K_nx7iBRkAarZs-48HAj2NkG7XjJFonWMuME,8948
|
9
9
|
pypetkitapi/water_fountain_container.py,sha256=LcCTDjk7eSbnF7e38xev3D5mCv5wwJ6go8WGGBv-CaU,5278
|
10
|
-
pypetkitapi-0.
|
11
|
-
pypetkitapi-0.
|
12
|
-
pypetkitapi-0.
|
13
|
-
pypetkitapi-0.
|
10
|
+
pypetkitapi-0.3.0.dist-info/LICENSE,sha256=4FWnKolNLc1e3w6cVlT61YxfPh0DQNeQLN1CepKKSBg,1067
|
11
|
+
pypetkitapi-0.3.0.dist-info/METADATA,sha256=FaCJfahbgxUuDf8kfEeVhwn22vDPWu9bEfvmVRO43sk,3611
|
12
|
+
pypetkitapi-0.3.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
13
|
+
pypetkitapi-0.3.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|