tinkerborg / thinq2-python

Reverse-engineered client for LG ThinQ v2 IoT devices
GNU General Public License v3.0
69 stars 19 forks source link

AttributeError: 'dict' object has no attribute 'device_type' in thinq2\model\thinq.py in method plymorphism #19

Open lion1109 opened 1 year ago

lion1109 commented 1 year ago

I had this error before I changed the follwing in file thinq2\model\thinq.py: @post_load(pass_original=True) def polymorphism(self, item, data, **kwargs):

C:\Users\eduar\PycharmProjects\thinq2-python\venv\Scripts\python.exe C:\Users\eduar\PycharmProjects\thinq2-python\KlimaG.py UserID: eduard.gode@gode.de User #: DE2210150767551

Devices:

Traceback (most recent call last): File "C:\Users\eduar\PycharmProjects\thinq2-python\KlimaG.py", line 108, in KlimaG.main() File "C:\Users\eduar\PycharmProjects\thinq2-python\Core.py", line 111, in main devices = thinq.mqtt.thinq_client.get_devices() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\builder.py", line 106, in call return execution.start( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 97, in start return self._io.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 122, in execute return self._io.execute(executable) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 122, in execute return self._io.execute(executable) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 122, in execute return self._io.execute(executable) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blocking_strategy.py", line 31, in execute return executable.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 36, in execute return execution.before_request(self._request) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 56, in before_request return self.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 105, in execute return execution.send( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 73, in send return self._io.invoke(self._client.send, (request,), {}, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blocking_strategy.py", line 21, in invoke return callback.on_success(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 96, in on_success return self._context.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 123, in execute return execution.after_response(self._request, self._response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 62, in after_response return self.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 65, in execute return execution.sleep( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 76, in sleep return self._io.sleep(duration, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 119, in sleep return self._io.sleep(duration, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 119, in sleep return self._io.sleep(duration, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 119, in sleep return self._io.sleep(duration, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blocking_strategy.py", line 25, in sleep return callback.on_success() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 52, in on_success return self._context.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 36, in execute return execution.before_request(self._request) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 56, in before_request return self.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 105, in execute return execution.send( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 73, in send return self._io.invoke(self._client.send, (request,), {}, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 116, in invoke return self._io.invoke(func, args, kwargs, callback) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blocking_strategy.py", line 21, in invoke return callback.on_success(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 96, in on_success return self._context.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 123, in execute return execution.after_response(self._request, self._response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 62, in after_response return self.execute() File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 93, in execute return self.state.execute(self) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\state.py", line 221, in execute return execution.finish(self._response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 79, in finish return self._io.finish(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 125, in finish return self._io.finish(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 125, in finish return self._io.finish(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 143, in finish return self._invoke( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 133, in _invoke return self._io.invoke(func, args, kwargs, FinishingCallback(self._io)) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blocking_strategy.py", line 19, in invoke return callback.on_failure(type(error), error, tb) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\execution.py", line 108, in on_failure return self._io.fail(exc_type, exc_val, exc_tb) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\interfaces.py", line 300, in fail compat.reraise(exc_type, exc_val, exc_tb) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\six.py", line 719, in reraise raise value File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\io\blockingstrategy.py", line 16, in invoke response = func(*arg, **kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\clients\requests.py", line 53, in apply_callback return callback(response) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\builder.py", line 47, in wrapper return func(self._consumer, *args, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\hooks.py", line 21, in wrapper return hook(*args, *kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\returns.py", line 39, in call return self._strategy(args, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\converters\interfaces.py", line 6, in call return self.convert(*args, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\uplink\converters\marshmallow_.py", line 59, in convert return self._extract_data(self._schema.load(json)) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 722, in load return self._do_load( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 861, in _do_load result = self._deserialize( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 664, in _deserialize value = self._call_and_store( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 500, in _call_and_store value = getter_func(data) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 661, in getter = lambda val: field_obj.deserialize( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 370, in deserialize output = self._deserialize(value, attr, data, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 673, in _deserialize return self._load(value, data, partial=partial) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 656, in _load valid_data = self.schema.load(value, unknown=self.unknown, partial=partial) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow_dataclass__init__.py", line 752, in load all_loaded = super().load(data, many=many, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 722, in load return self._do_load( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 861, in _do_load result = self._deserialize( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 664, in _deserialize value = self._call_and_store( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 500, in _call_and_store value = getter_func(data) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 661, in getter = lambda val: field_obj.deserialize( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 370, in deserialize output = self._deserialize(value, attr, data, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 788, in _deserialize result.append(self.inner.deserialize(each, kwargs)) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 370, in deserialize output = self._deserialize(value, attr, data, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 673, in _deserialize return self._load(value, data, partial=partial) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\fields.py", line 656, in _load valid_data = self.schema.load(value, unknown=self.unknown, partial=partial) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow_dataclass__init__.py", line 752, in load all_loaded = super().load(data, many=many, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 722, in load return self._do_load( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 897, in _do_load result = self._invoke_load_processors( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 1095, in _invoke_load_processors data = self._invoke_processors( File "C:\Users\eduar\PycharmProjects\thinq2-python\venv\lib\site-packages\marshmallow\schema.py", line 1223, in _invoke_processors data = processor(data, original_data, many=many, kwargs) File "C:\Users\eduar\PycharmProjects\thinq2-python\thinq2\model\thinq.py", line 78, in polymorphism device_schema = device_types.get(item.device_type, Device).Schema() AttributeError: 'dict' object has no attribute 'device_type'

Process finished with exit code 1

lion1109 commented 1 year ago

After inserting the condition above and logging the item I got this result:

C:\Users\eduar\PycharmProjects\thinq2-python\venv\Scripts\python.exe C:\Users\eduar\PycharmProjects\thinq2-python\KlimaG.py UserID: eduard.gode@gode.de User #: DE2210150767551

Devices:

2023-01-05 10:57:32 | urllib3.connectionpool | DEBUG | Starting new HTTPS connection (1): eic-service.lgthinq.com:46030 2023-01-05 10:57:33 | urllib3.connectionpool | DEBUG | https://eic-service.lgthinq.com:46030 "GET /v1/service/application/dashboard HTTP/1.1" 400 33 2023-01-05 10:57:33 | urllib3.connectionpool | DEBUG | Starting new HTTPS connection (1): de.lgeapi.com:443 2023-01-05 10:57:33 | urllib3.connectionpool | DEBUG | https://de.lgeapi.com:443 "POST /oauth/1.0/oauth2/token HTTP/1.1" 200 135 2023-01-05 10:57:35 | urllib3.connectionpool | DEBUG | https://eic-service.lgthinq.com:46030 "GET /v1/service/application/dashboard HTTP/1.1" 200 3660 2023-01-05 10:57:35 | thinq2.model.thinq | DEBUG | polymorphism item: {'fw_ver': '', 'utc_offset_display': '+01:00', 'remote_control_type': '', 'online': True, 'order': 0, 'utc_offset': 1, 'timezone_code_alias': 'Europe/Berlin', 'ssid': 'PowerLan', 'user_no': 'DE2210150767551', 'master_yn': 'Y', 'groupable_yn': 'Y', 'cur_offset': 1, 'alias': 'KlimaLG', 'dst_offset_display': '+02:00', 'model_name': 'RAC_056905_WW', 'cur_offset_display': '+01:00', 'network_type': '02', 'country_code': 'DE', 'device_state': 'E', 'area': 167921, 'timezone_code': 'Europe/Berlin', 'controllable_yn': 'Y', 'mac_address': '', 'reg_dt_utc': '20221015201440', 'dst_offset': 2, 'model_protocol': 'STANDARD', 'device_id': 'e81d2df7-38ac-1fd2-8585-4cbce9d84c6d', 'blackbox_yn': True, 'snapshot': Device(timestamp=1672906106703.0, static=DeviceStatic(device_type=401, country_code='DE')), 'reg_dt': 20221015221440.0, 'dr_service_yn': 'N', 'combined_product_yn': 'N', 'tclcount': 0, 'device_type': 401, 'new_reg_yn': 'N', 'model_country_code': 'WW'}, data: {'appType': 'NUTS', 'modelCountryCode': 'WW', 'countryCode': 'DE', 'modelName': 'RAC_056905_WW', 'deviceType': 401, 'deviceCode': 'AI01', 'alias': 'KlimaLG', 'deviceId': 'e81d2df7-38ac-1fd2-8585-4cbce9d84c6d', 'fwVer': '', 'imageFileName': 'ac_home_wall_airconditioner_img.png', 'imageUrl': 'https://objectcontent.lgthinq.com/9e0177e7-0956-4284-916d-61e213f1f5ab?hdnts=exp=1702173647~hmac=901906d227c5f83c361349057c369be8d9572fe702395be5644ea8eb87818d8d', 'smallImageUrl': 'https://objectcontent.lgthinq.com/c7e214d7-99f0-4641-b954-f238f9d55b64?hdnts=exp=1701594074~hmac=b705db599690ff2050be0ea8cbb6b77ee379facbe558aa0639e076581bf4a3f2', 'ssid': 'PowerLan', 'softapId': '', 'softapPass': '', 'macAddress': '', 'networkType': '02', 'timezoneCode': 'Europe/Berlin', 'timezoneCodeAlias': 'Europe/Berlin', 'utcOffset': 1, 'utcOffsetDisplay': '+01:00', 'dstOffset': 2, 'dstOffsetDisplay': '+02:00', 'curOffset': 1, 'curOffsetDisplay': '+01:00', 'sdsGuide': '{"deviceCode":"AI01"}', 'newRegYn': 'N', 'remoteControlType': '', 'userNo': 'DE2210150767551', 'tftYn': 'N', 'modelJsonVer': 12.39, 'modelJsonUri': 'https://objectcontent.lgthinq.com/39537465-00d9-49b4-a2ca-dd3558ca9aea?hdnts=exp=1735896261~hmac=9dc45d368d4e51d0620bd4747fb25cf78aa5a8f1fd64026508424d2721d3317d', 'appModuleVer': 12.49, 'appModuleUri': 'https://objectcontent.lgthinq.com/19b24102-f2c5-4ac4-97aa-bb1abe5b4c2e?hdnts=exp=1704438049~hmac=e8bddfbce6200d7e2aeef97c423dfc27f6a9f430a2a14d705c0d3455fce97928', 'appRestartYn': 'Y', 'appModuleSize': 6082481, 'langPackProductTypeVer': 76.4, 'langPackProductTypeUri': 'https://objectcontent.lgthinq.com/bfbd4c82-d57b-442b-a7db-77d3fb86a030?hdnts=exp=1733552606~hmac=bb3994658a0e445d8b2e0cbed92ce822f206775a35064b48e76e78295ebf7c77', 'deviceState': 'E', 'snapshot': {'airState.windStrength': 2.0, 'airState.wMode.lowHeating': 0.0, 'airState.diagCode': 0.0, 'airState.lightingState.displayControl': 0.0, 'airState.wDir.hStep': 1.0, 'mid': 155986197.0, 'airState.energy.onCurrent': 372.0, 'airState.wMode.airClean': 0.0, 'airState.quality.sensorMon': 0.0, 'airState.tempState.target': 19.0, 'airState.miscFuncState.autoDryRemainTime': 0.0, 'airState.operation': 0.0, 'airState.wMode.jet': 0.0, 'airState.wDir.vStep': 0.0, 'timestamp': 1672906106703.0, 'airState.powerSave.basic': 0.0, 'fwUpgradeInfo': {'upgSched': {'upgUtc': '0', 'cmd': 'none'}}, 'static': {'deviceType': '401', 'countryCode': 'DE'}, 'airState.tempState.current': 20.0, 'airState.miscFuncState.extraOp': 0.0, 'airState.reservation.sleepTime': 0.0, 'airState.miscFuncState.autoDry': 0.0, 'airState.reservation.targetTimeToStart': 0.0, 'meta': {'allDeviceInfoUpdate': False, 'messageId': 'e1S6cg2iSVuECrMYKuJ5vA'}, 'online': True, 'airState.opMode': 4.0, 'airState.reservation.targetTimeToStop': 0.0, 'airState.filterMngStates.maxTime': 0.0, 'airState.filterMngStates.useTime': 0.0}, 'online': True, 'platformType': 'thinq2', 'area': 167921, 'regDt': 20221015221440.0, 'blackboxYn': 'Y', 'modelProtocol': 'STANDARD', 'order': 0, 'drServiceYn': 'N', 'fwInfoList': [{'checksum': '00000409', 'order': 1.0, 'partNumber': 'SAA38690409'}], 'modemInfo': {'appVersion': 'clip_hna_v1.9.183', 'modelName': 'RAC_056905_WW', 'modemType': 'RTK_RTL8711am', 'oneshot': 'y', 'ruleEngine': 'y', 'size': 1572864.0}, 'guideTypeYn': 'Y', 'guideType': 'RAC_TYPE1', 'regDtUtc': '20221015201440', 'regIndex': 0, 'groupableYn': 'Y', 'controllableYn': 'Y', 'combinedProductYn': 'N', 'masterYn': 'Y', 'pccModelYn': 'N', 'sdsPid': {'sds4': '', 'sds3': '', 'sds2': '', 'sds1': ''}, 'autoOrderYn': 'N', 'initDevice': False, 'existsEntryPopup': 'N', 'tclcount': 0} e81d2df7-38ac-1fd2-8585-4cbce9d84c6d: KlimaLG (model RAC_056905_WW)

Listening for device events. Use Ctrl-C/SIGINT to quit.

And the programm ran and printed out the payload of the incomming MQTT messages. :-)

amrij commented 1 year ago

I did this modification but I still get the same error