bambuddy/scripts/update_hms_actions.py
2026-06-26 14:40:25 +02:00

81 lines
2.6 KiB
Python

import asyncio
import json
import requests
HMS_ACTIONS_JSON_PATH = "backend/app/data/hms_actions.json"
HMS_REQUEST_URL = "https://e.bambulab.com/hms/GetActionImage.php"
HMS_ID_TO_ACTION_NAME_MAP: dict[int, str] = {
2: "RESUME_PRINTING",
3: "RESUME_PRINTING_DEFECTS",
4: "RESUME_PRINTING_PROBELM_SOLVED",
5: "STOP_PRINTING",
6: "CHECK_ASSISTANT",
7: "FILAMENT_EXTRUDED",
8: "RETRY_FILAMENT_EXTRUDED",
9: "CONTINUE",
10: "LOAD_VIRTUAL_TRAY",
11: "OK_BUTTON",
12: "FILAMENT_LOAD_RESUME",
13: "JUMP_TO_LIVEVIEW",
23: "NO_REMINDER_NEXT_TIME",
24: "REFRESH_NOZZLE",
25: "IGNORE_NO_REMINDER_NEXT_TIME",
27: "IGNORE_RESUME",
28: "PROBLEM_SOLVED_RESUME",
29: "TURN_OFF_FIRE_ALARM",
34: "RETRY_PROBLEM_SOLVED",
35: "STOP_DRYING",
37: "CANCLE", # Note: "CANCLE" is intentionally misspelled in the BambuStudio source code
39: "REMOVE_CLOSE_BTN",
41: "PROCEED",
49: "OK_JUMP_RACK",
51: "ABORT",
54: "DISABLE_PURIFICATION",
57: "DONT_REMIND_NEXT_TIME",
10000: "DBL_CHECK_CANCEL",
10001: "DBL_CHECK_DONE",
10002: "DBL_CHECK_RETRY",
10003: "DBL_CHECK_RESUME",
10004: "DBL_CHECK_OK",
}
async def main():
error_to_action_map: dict[str, list[str]] = {}
# get the json response from the url
response = requests.get(HMS_REQUEST_URL)
if response.status_code == 200:
data = response.json()
ready_data = {}
for item in data["data"]:
# error_code = item["ecode"][:4] + "_" + item["ecode"][4:]
mapped_actions = []
for hms_id in item["actions"]:
if hms_id not in HMS_ID_TO_ACTION_NAME_MAP:
print(f"Warning: Unrecognized HMS action ID {hms_id} for error code {item['ecode']}")
else:
mapped_actions.append(HMS_ID_TO_ACTION_NAME_MAP.get(hms_id, f"UNKNOWN_ACTION_{hms_id}"))
print(f"ecode: {item['ecode']}, actions: {mapped_actions}, device: {item['device']}")
if item["device"] not in ready_data:
ready_data[item["device"]] = {}
ready_data[item["device"]][item["ecode"]] = mapped_actions
# ready_data.append(
# {
# "ecode": item["ecode"],
# "actions": mapped_actions,
# "device": item["device"],
# }
# )
with open(HMS_ACTIONS_JSON_PATH, "w") as f:
json.dump(ready_data, f, indent=4)
else:
print("Failed to fetch data")
print(error_to_action_map)
# autogenerate
if __name__ == "__main__":
asyncio.run(main())