mirror of
https://github.com/sususweet/midea-meiju-codec.git
synced 2025-12-18 10:25:52 +00:00
fix: MSmartHome APP Global Login issue. Fix #58.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -155,6 +155,7 @@ cython_debug/
|
|||||||
|
|
||||||
decrypt_lua.py
|
decrypt_lua.py
|
||||||
test.py
|
test.py
|
||||||
|
test_cloud.py
|
||||||
*.lua
|
*.lua
|
||||||
|
|
||||||
time.py
|
time.py
|
||||||
@@ -29,7 +29,6 @@ clouds = {
|
|||||||
"app_key": "ac21b9f9cbfe4ca5a88562ef25e2b768",
|
"app_key": "ac21b9f9cbfe4ca5a88562ef25e2b768",
|
||||||
"iot_key": bytes.fromhex(format(7882822598523843940, 'x')).decode(),
|
"iot_key": bytes.fromhex(format(7882822598523843940, 'x')).decode(),
|
||||||
"hmac_key": bytes.fromhex(format(117390035944627627450677220413733956185864939010425, 'x')).decode(),
|
"hmac_key": bytes.fromhex(format(117390035944627627450677220413733956185864939010425, 'x')).decode(),
|
||||||
# "api_url": "https://mp-eu-prod.appsmb.com/mas/v5/app/proxy?alias=",
|
|
||||||
"api_url": "https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=",
|
"api_url": "https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -51,7 +50,8 @@ class MideaCloud:
|
|||||||
app_key: str,
|
app_key: str,
|
||||||
account: str,
|
account: str,
|
||||||
password: str,
|
password: str,
|
||||||
api_url: str
|
api_url: str,
|
||||||
|
proxy: str | None = None
|
||||||
):
|
):
|
||||||
self._device_id = CloudSecurity.get_deviceid(account)
|
self._device_id = CloudSecurity.get_deviceid(account)
|
||||||
self._session = session
|
self._session = session
|
||||||
@@ -60,6 +60,7 @@ class MideaCloud:
|
|||||||
self._account = account
|
self._account = account
|
||||||
self._password = password
|
self._password = password
|
||||||
self._api_url = api_url
|
self._api_url = api_url
|
||||||
|
self._proxy = proxy
|
||||||
self._access_token = None
|
self._access_token = None
|
||||||
self._login_id = None
|
self._login_id = None
|
||||||
|
|
||||||
@@ -93,7 +94,14 @@ class MideaCloud:
|
|||||||
response:dict = {"code": -1}
|
response:dict = {"code": -1}
|
||||||
_LOGGER.debug(f"Midea cloud API url: {url}, header: {header}, data: {data}")
|
_LOGGER.debug(f"Midea cloud API url: {url}, header: {header}, data: {data}")
|
||||||
try:
|
try:
|
||||||
r = await self._session.request(method, url, headers=header, data=dump_data, timeout=30)
|
r = await self._session.request(
|
||||||
|
method,
|
||||||
|
url,
|
||||||
|
headers=header,
|
||||||
|
data=dump_data,
|
||||||
|
timeout=30,
|
||||||
|
proxy=self._proxy
|
||||||
|
)
|
||||||
raw = await r.read()
|
raw = await r.read()
|
||||||
_LOGGER.debug(f"Midea cloud API url: {url}, header: {header}, data: {data}, response: {raw}")
|
_LOGGER.debug(f"Midea cloud API url: {url}, header: {header}, data: {data}, response: {raw}")
|
||||||
response = json.loads(raw)
|
response = json.loads(raw)
|
||||||
@@ -151,7 +159,8 @@ class MideaCloud:
|
|||||||
async def _get_login_id(self) -> str | None:
|
async def _get_login_id(self) -> str | None:
|
||||||
data = self._make_general_data()
|
data = self._make_general_data()
|
||||||
data.update({
|
data.update({
|
||||||
"loginAccount": f"{self._account}"
|
"loginAccount": f"{self._account}",
|
||||||
|
"type": "1",
|
||||||
})
|
})
|
||||||
if response := await self._api_request(
|
if response := await self._api_request(
|
||||||
endpoint="/v1/user/login/id/get",
|
endpoint="/v1/user/login/id/get",
|
||||||
@@ -213,6 +222,7 @@ class MeijuCloud(MideaCloud):
|
|||||||
session: ClientSession,
|
session: ClientSession,
|
||||||
account: str,
|
account: str,
|
||||||
password: str,
|
password: str,
|
||||||
|
proxy: str | None = None,
|
||||||
):
|
):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
session=session,
|
session=session,
|
||||||
@@ -224,7 +234,8 @@ class MeijuCloud(MideaCloud):
|
|||||||
app_key=clouds[cloud_name]["app_key"],
|
app_key=clouds[cloud_name]["app_key"],
|
||||||
account=account,
|
account=account,
|
||||||
password=password,
|
password=password,
|
||||||
api_url=clouds[cloud_name]["api_url"]
|
api_url=clouds[cloud_name]["api_url"],
|
||||||
|
proxy=proxy
|
||||||
)
|
)
|
||||||
self._homegroup_id = None
|
self._homegroup_id = None
|
||||||
|
|
||||||
@@ -584,6 +595,7 @@ class MSmartHomeCloud(MideaCloud):
|
|||||||
session: ClientSession,
|
session: ClientSession,
|
||||||
account: str,
|
account: str,
|
||||||
password: str,
|
password: str,
|
||||||
|
proxy: str | None = None,
|
||||||
):
|
):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
session=session,
|
session=session,
|
||||||
@@ -595,7 +607,8 @@ class MSmartHomeCloud(MideaCloud):
|
|||||||
app_key=clouds[cloud_name]["app_key"],
|
app_key=clouds[cloud_name]["app_key"],
|
||||||
account=account,
|
account=account,
|
||||||
password=password,
|
password=password,
|
||||||
api_url=clouds[cloud_name]["api_url"]
|
api_url=clouds[cloud_name]["api_url"],
|
||||||
|
proxy=proxy
|
||||||
)
|
)
|
||||||
self._auth_base = base64.b64encode(
|
self._auth_base = base64.b64encode(
|
||||||
f"{self._app_key}:{clouds['MSmartHome']['iot_key']}".encode("ascii")
|
f"{self._app_key}:{clouds['MSmartHome']['iot_key']}".encode("ascii")
|
||||||
@@ -631,11 +644,12 @@ class MSmartHomeCloud(MideaCloud):
|
|||||||
async def _re_route(self):
|
async def _re_route(self):
|
||||||
data = self._make_general_data()
|
data = self._make_general_data()
|
||||||
data.update({
|
data.update({
|
||||||
"userType": "0",
|
"userName": f"{self._account}",
|
||||||
"userName": f"{self._account}"
|
"platformId": "1",
|
||||||
|
"userType": "0"
|
||||||
})
|
})
|
||||||
if response := await self._api_request(
|
if response := await self._api_request(
|
||||||
endpoint="/v1/multicloud/platform/user/route",
|
endpoint="/v1/unitcenter/router/user/name",
|
||||||
data=data
|
data=data
|
||||||
):
|
):
|
||||||
if api_url := response.get("masUrl"):
|
if api_url := response.get("masUrl"):
|
||||||
@@ -830,13 +844,14 @@ class MSmartHomeCloud(MideaCloud):
|
|||||||
return response is not None
|
return response is not None
|
||||||
|
|
||||||
|
|
||||||
def get_midea_cloud(cloud_name: str, session: ClientSession, account: str, password: str) -> MideaCloud | None:
|
def get_midea_cloud(cloud_name: str, session: ClientSession, account: str, password: str, proxy: str | None = None) -> MideaCloud | None:
|
||||||
cloud = None
|
cloud = None
|
||||||
if cloud_name in clouds.keys():
|
if cloud_name in clouds.keys():
|
||||||
cloud = globals()[clouds[cloud_name]["class_name"]](
|
cloud = globals()[clouds[cloud_name]["class_name"]](
|
||||||
cloud_name=cloud_name,
|
cloud_name=cloud_name,
|
||||||
session=session,
|
session=session,
|
||||||
account=account,
|
account=account,
|
||||||
password=password
|
password=password,
|
||||||
|
proxy=proxy
|
||||||
)
|
)
|
||||||
return cloud
|
return cloud
|
||||||
|
|||||||
Reference in New Issue
Block a user