""" Update LAN rule.""" # -*- coding: utf-8 -*- # pylint: disable=relative-beyond-top-level from os import path from common import ( http_get, load_yaml_file, save_yaml_file) ROOT_PATH: str = path.dirname(path.abspath(__file__)) LAN_PROFILE_MODELS_FILE: str = path.join( ROOT_PATH, '../custom_components/xiaomi_home/miot/lan/profile_models.yaml') SPECIAL_MODELS: list[str] = [ # model2class-v2 'chuangmi.camera.ipc007b', 'chuangmi.camera.ipc019b', 'chuangmi.camera.ipc019e', 'chuangmi.camera.ipc020', 'chuangmi.camera.v2', 'chuangmi.camera.v5', 'chuangmi.camera.v6', 'chuangmi.camera.xiaobai', 'chuangmi.radio.v1', 'chuangmi.radio.v2', 'hith.foot_bath.q2', 'imou99.camera.tp2', 'isa.camera.hl5', 'isa.camera.isc5', 'jiqid.mistory.pro', 'jiqid.mistory.v1', 'lumi.airrtc.tcpco2ecn01', 'lumi.airrtc.tcpecn02', 'lumi.camera.gwagl01', 'miir.light.ir01', 'miir.projector.ir01', 'miir.tv.hir01', 'miir.tvbox.ir01', 'roome.bhf_light.yf6002', 'smith.waterpuri.jnt600', 'viomi.fridge.u2', 'xiaovv.camera.lamp', 'xiaovv.camera.ptz', 'xiaovv.camera.xva3', 'xiaovv.camera.xvb4', 'xiaovv.camera.xvsnowman', 'zdeer.ajh.a8', 'zdeer.ajh.a9', 'zdeer.ajh.zda10', 'zdeer.ajh.zda9', 'zdeer.ajh.zjy', 'zimi.clock.myk01', # specialModels 'chuangmi.camera.ipc004b', 'chuangmi.camera.ipc009', 'chuangmi.camera.ipc010', 'chuangmi.camera.ipc013', 'chuangmi.camera.ipc013d', 'chuangmi.camera.ipc016', 'chuangmi.camera.ipc017', 'chuangmi.camera.ipc019', 'chuangmi.camera.ipc021', 'chuangmi.camera.v3', 'chuangmi.camera.v4', 'isa.camera.df3', 'isa.camera.hlc6', 'lumi.acpartner.v1', 'lumi.acpartner.v2', 'lumi.acpartner.v3', 'lumi.airrtc.tcpecn01', 'lumi.camera.aq1', 'miir.aircondition.ir01', 'miir.aircondition.ir02', 'miir.fan.ir01', 'miir.stb.ir01', 'miir.tv.ir01', 'mijia.camera.v1', 'mijia.camera.v3', 'roborock.sweeper.s5v2', 'roborock.vacuum.c1', 'roborock.vacuum.e2', 'roborock.vacuum.m1s', 'roborock.vacuum.s5', 'rockrobo.vacuum.v1', 'xiaovv.camera.xvd5'] def update_profile_model(file_path: str): profile_rules: dict = http_get( url='https://miot-spec.org/instance/translate/models') if not profile_rules and 'models' not in profile_rules and not isinstance( profile_rules['models'], dict): raise ValueError('Failed to get profile rule') local_rules: dict = load_yaml_file( yaml_file=file_path) or {} for rule, ts in profile_rules['models'].items(): if rule not in local_rules: local_rules[rule] = {'ts': ts} else: local_rules[rule]['ts'] = ts for mode in SPECIAL_MODELS: if mode not in local_rules: local_rules[mode] = {'ts': 1531108800} else: local_rules[mode]['ts'] = 1531108800 local_rules = dict(sorted(local_rules.items())) save_yaml_file( yaml_file=file_path, data=local_rules) update_profile_model(file_path=LAN_PROFILE_MODELS_FILE) print('profile model list updated.')