From d04e942defb9ca5df548a25f542b83e9808f34f5 Mon Sep 17 00:00:00 2001 From: Robert Resch Date: Sun, 11 May 2025 16:13:53 +0000 Subject: [PATCH] Add models by similarity by UILogicId --- .gitignore | 3 +- deebot_client/hardware/deebot/5089oy.py | 1 + deebot_client/hardware/deebot/6cibhb.py | 1 + deebot_client/hardware/deebot/7c26ui.py | 1 + deebot_client/hardware/deebot/8o3xke.py | 1 + deebot_client/hardware/deebot/9rft3c.py | 1 + deebot_client/hardware/deebot/ao7fpw.py | 1 + deebot_client/hardware/deebot/aqdd5p.py | 1 + deebot_client/hardware/deebot/bheggm.py | 1 + deebot_client/hardware/deebot/czjwet.py | 1 + deebot_client/hardware/deebot/k1lgm7.py | 1 + deebot_client/hardware/deebot/m17zko.py | 1 + deebot_client/hardware/deebot/p1wg05.py | 1 + deebot_client/hardware/deebot/qhq6i0.py | 1 + deebot_client/hardware/deebot/ruhc0q.py | 1 + deebot_client/hardware/deebot/sa4tf7.py | 1 + deebot_client/hardware/deebot/wgxm70.py | 1 + deebot_client/hardware/deebot/xztz07.py | 1 + deebot_client/hardware/deebot/zjna8m.py | 1 + scripts/check_for_similar_models.py | 70 +++++++++++++++---------- 20 files changed, 62 insertions(+), 29 deletions(-) create mode 120000 deebot_client/hardware/deebot/5089oy.py create mode 120000 deebot_client/hardware/deebot/6cibhb.py create mode 120000 deebot_client/hardware/deebot/7c26ui.py create mode 120000 deebot_client/hardware/deebot/8o3xke.py create mode 120000 deebot_client/hardware/deebot/9rft3c.py create mode 120000 deebot_client/hardware/deebot/ao7fpw.py create mode 120000 deebot_client/hardware/deebot/aqdd5p.py create mode 120000 deebot_client/hardware/deebot/bheggm.py create mode 120000 deebot_client/hardware/deebot/czjwet.py create mode 120000 deebot_client/hardware/deebot/k1lgm7.py create mode 120000 deebot_client/hardware/deebot/m17zko.py create mode 120000 deebot_client/hardware/deebot/p1wg05.py create mode 120000 deebot_client/hardware/deebot/qhq6i0.py create mode 120000 deebot_client/hardware/deebot/ruhc0q.py create mode 120000 deebot_client/hardware/deebot/sa4tf7.py create mode 120000 deebot_client/hardware/deebot/wgxm70.py create mode 120000 deebot_client/hardware/deebot/xztz07.py create mode 120000 deebot_client/hardware/deebot/zjna8m.py diff --git a/.gitignore b/.gitignore index 9e02bc771..3f03efd83 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,5 @@ test.py *.cpython*.so .codspeed -models_map.json \ No newline at end of file + +similarity_output/ \ No newline at end of file diff --git a/deebot_client/hardware/deebot/5089oy.py b/deebot_client/hardware/deebot/5089oy.py new file mode 120000 index 000000000..7e53f007c --- /dev/null +++ b/deebot_client/hardware/deebot/5089oy.py @@ -0,0 +1 @@ +tpnwyu.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/6cibhb.py b/deebot_client/hardware/deebot/6cibhb.py new file mode 120000 index 000000000..bd7b2a8de --- /dev/null +++ b/deebot_client/hardware/deebot/6cibhb.py @@ -0,0 +1 @@ +2px96q.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/7c26ui.py b/deebot_client/hardware/deebot/7c26ui.py new file mode 120000 index 000000000..7b45a17d0 --- /dev/null +++ b/deebot_client/hardware/deebot/7c26ui.py @@ -0,0 +1 @@ +c8rj4y.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/8o3xke.py b/deebot_client/hardware/deebot/8o3xke.py new file mode 120000 index 000000000..9b831817e --- /dev/null +++ b/deebot_client/hardware/deebot/8o3xke.py @@ -0,0 +1 @@ +xco2fc.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/9rft3c.py b/deebot_client/hardware/deebot/9rft3c.py new file mode 120000 index 000000000..4499b03c5 --- /dev/null +++ b/deebot_client/hardware/deebot/9rft3c.py @@ -0,0 +1 @@ +yna5xi.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/ao7fpw.py b/deebot_client/hardware/deebot/ao7fpw.py new file mode 120000 index 000000000..e405b305a --- /dev/null +++ b/deebot_client/hardware/deebot/ao7fpw.py @@ -0,0 +1 @@ +2ap5uq.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/aqdd5p.py b/deebot_client/hardware/deebot/aqdd5p.py new file mode 120000 index 000000000..bf7209a4e --- /dev/null +++ b/deebot_client/hardware/deebot/aqdd5p.py @@ -0,0 +1 @@ +ls1ok3.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/bheggm.py b/deebot_client/hardware/deebot/bheggm.py new file mode 120000 index 000000000..7b45a17d0 --- /dev/null +++ b/deebot_client/hardware/deebot/bheggm.py @@ -0,0 +1 @@ +c8rj4y.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/czjwet.py b/deebot_client/hardware/deebot/czjwet.py new file mode 120000 index 000000000..f146066cd --- /dev/null +++ b/deebot_client/hardware/deebot/czjwet.py @@ -0,0 +1 @@ +cuoipb.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/k1lgm7.py b/deebot_client/hardware/deebot/k1lgm7.py new file mode 120000 index 000000000..9b831817e --- /dev/null +++ b/deebot_client/hardware/deebot/k1lgm7.py @@ -0,0 +1 @@ +xco2fc.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/m17zko.py b/deebot_client/hardware/deebot/m17zko.py new file mode 120000 index 000000000..b54005d51 --- /dev/null +++ b/deebot_client/hardware/deebot/m17zko.py @@ -0,0 +1 @@ +yinacl.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/p1wg05.py b/deebot_client/hardware/deebot/p1wg05.py new file mode 120000 index 000000000..b54005d51 --- /dev/null +++ b/deebot_client/hardware/deebot/p1wg05.py @@ -0,0 +1 @@ +yinacl.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/qhq6i0.py b/deebot_client/hardware/deebot/qhq6i0.py new file mode 120000 index 000000000..bd7b2a8de --- /dev/null +++ b/deebot_client/hardware/deebot/qhq6i0.py @@ -0,0 +1 @@ +2px96q.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/ruhc0q.py b/deebot_client/hardware/deebot/ruhc0q.py new file mode 120000 index 000000000..b866050fb --- /dev/null +++ b/deebot_client/hardware/deebot/ruhc0q.py @@ -0,0 +1 @@ +zgsvkq.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/sa4tf7.py b/deebot_client/hardware/deebot/sa4tf7.py new file mode 120000 index 000000000..336ee24bc --- /dev/null +++ b/deebot_client/hardware/deebot/sa4tf7.py @@ -0,0 +1 @@ +snxbvc.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/wgxm70.py b/deebot_client/hardware/deebot/wgxm70.py new file mode 120000 index 000000000..4fc9b1c4e --- /dev/null +++ b/deebot_client/hardware/deebot/wgxm70.py @@ -0,0 +1 @@ +0bdtzz.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/xztz07.py b/deebot_client/hardware/deebot/xztz07.py new file mode 120000 index 000000000..f146066cd --- /dev/null +++ b/deebot_client/hardware/deebot/xztz07.py @@ -0,0 +1 @@ +cuoipb.py \ No newline at end of file diff --git a/deebot_client/hardware/deebot/zjna8m.py b/deebot_client/hardware/deebot/zjna8m.py new file mode 120000 index 000000000..b2289778b --- /dev/null +++ b/deebot_client/hardware/deebot/zjna8m.py @@ -0,0 +1 @@ +nq9yhl.py \ No newline at end of file diff --git a/scripts/check_for_similar_models.py b/scripts/check_for_similar_models.py index 614f0aca0..fb41846af 100644 --- a/scripts/check_for_similar_models.py +++ b/scripts/check_for_similar_models.py @@ -17,10 +17,35 @@ from deebot_client.util import md5 -def _save_models(models_map: dict[str, list[str]]) -> None: - """Save models to file.""" - with Path("models_map.json").open("w") as f: - f.write(json.dumps(models_map, indent=4)) +def _save_file(name: str, data: dict[str, list[str]]) -> None: + """Save data to file.""" + path = Path("similarity_output") + path.mkdir(exist_ok=True) + with path.joinpath(name).open("w") as f: + f.write(json.dumps(data, indent=4)) + + +def _add_models_by_similarity(models: list[str]) -> None: + """Add models by similarity.""" + if len(models) < 2: + # No similar models + return + + model_to_link = None + for model in models: + if model in DEVICES: + model_to_link = model + break + + if model_to_link: + # Found a model to link + for model in models: + if model != model_to_link and model not in DEVICES: + os.symlink( + f"{model_to_link}.py", + f"{model}.py", + dir_fd=os.open("deebot_client/hardware/deebot", os.O_RDONLY), + ) async def main() -> None: @@ -38,37 +63,26 @@ async def main() -> None: ) api_client = ApiClient(authenticator) + iot_map = await api_client.get_product_iot_map() name_map: dict[str, list[str]] = {} - for key, value in (await api_client.get_product_iot_map()).items(): + ui_logic_map: dict[str, list[str]] = {} + for key, value in iot_map.items(): name_map.setdefault(value["name"], []).append(key) + ui_logic_map.setdefault(value["UILogicId"], []).append(key) - await asyncio.get_event_loop().run_in_executor(None, _save_models, name_map) + await asyncio.get_event_loop().run_in_executor( + None, _save_file, "models_map.json", name_map + ) + await asyncio.get_event_loop().run_in_executor( + None, _save_file, "ui_logic_map.json", ui_logic_map + ) # Load current models await asyncio.get_event_loop().run_in_executor(None, _load) - for models in name_map.values(): - if len(models) < 2: - # No similar models - continue - - model_to_link = None - for model in models: - if model in DEVICES: - model_to_link = model - break - - if model_to_link: - # Found a model to link - for model in models: - if model != model_to_link and model not in DEVICES: - os.symlink( - f"{model_to_link}.py", - f"{model}.py", - dir_fd=os.open( - "deebot_client/hardware/deebot", os.O_RDONLY - ), - ) + for map in (name_map, ui_logic_map): + for models in map.values(): + _add_models_by_similarity(models) if __name__ == "__main__":