diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d9c59cf..02d867f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,10 +30,13 @@ jobs: run: | pip install . - name: Lint with pylint + id: pylint run: | python3 -m pylint --version python3 -m pylint --persistent=n --jobs 0 --max-line-length=120 prusaerrors - name: Test + # Run the step even if the pylint step has failed + if: success() || (failure() && steps.pylint.conclusion == 'failure') run: | export PATH="${PATH}:$(pwd)" coverage run -m unittest discover --failfast --verbose tests diff --git a/README.md b/README.md index 27b7691..edd0155 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,13 @@ Example: 12201 * 13 `MK4` - Original Prusa MK4 * 16 `iX` - AFS IX * 17 `XL` - Original Prusa XL +* 21 `MK3.9` - Original Prusa MK3.9 * 23 `MK3.5` - Original Prusa MK3.5 +* 26 `MK4S` - Original Prusa MK4S +* 27 `MK3.9S` - Original Prusa MK3.9S +* 28 `MK3.5S` - Original Prusa MK3.5S +* 29 `M1` - Original Medical One +* 31 `COREONE` - Prusa Core One ## Error categories 1. Mechanical - XYZ motors, tower, axis range diff --git a/include/button_operations.h b/include/button_operations.h index c686d59..dae987d 100644 --- a/include/button_operations.h +++ b/include/button_operations.h @@ -11,4 +11,5 @@ enum class ButtonOperations : uint8_t { Unload = 4, StopPrint = 5, DisableMMU = 6, + Skip = 7, }; diff --git a/prusaerrors/connect/codes.py b/prusaerrors/connect/codes.py index afeaed5..45ebd47 100644 --- a/prusaerrors/connect/codes.py +++ b/prusaerrors/connect/codes.py @@ -1,7 +1,6 @@ # This file is part of the SL1 firmware # Copyright (C) 2020 Prusa Research a.s. - www.prusa3d.com # SPDX-License-Identifier: GPL-3.0-or-later - """ All printer type error/attention codes @@ -12,11 +11,13 @@ from typing import Optional import yaml +from prusaerrors.shared.codes import (Category, Code, Codes, Printer, + unique_codes) -from prusaerrors.shared.codes import unique_codes, Codes, Printer, Code, Category - - -BUDDY = ['MINI', 'MK4', 'IX', 'XL', 'MK35', 'MK39'] +BUDDY = [ + 'MINI', 'MK4', 'IX', 'XL', 'MK3.5', 'MK4S', 'MK3.9', 'MK3.9S', 'MK3.5S', + 'COREONE' +] class PrinterCode(Code): @@ -26,18 +27,23 @@ class PrinterCode(Code): """ # pylint: disable = too-many-arguments + # pylint: disable = too-many-positional-arguments def __init__( - self, - printer: Printer, - category: Category, - error: int, - title: str, - message: str, - approved: bool, - id_: str, + self, + printer: Printer, + category: Category, + error: int, + title: str, + message: str, + approved: bool, + id_: str, ): - super().__init__(printer=printer, category=category, error=error, - title=title, message=message, approved=approved) + super().__init__(printer=printer, + category=category, + error=error, + title=title, + message=message, + approved=approved) self.id = id_ @property @@ -60,10 +66,9 @@ def decor(cls): data = yaml.safe_load(src_file) assert "Errors" in data - code_re = re.compile( - r"^(?P([0-9][0-9]|XX))" - r"(?P[0-9])" - r"(?P[0-9][0-9])$") + code_re = re.compile(r"^(?P([0-9][0-9]|XX))" + r"(?P[0-9])" + r"(?P[0-9][0-9])$") for entry in data["Errors"]: code_parts = code_re.match(entry["code"]).groupdict() category = Category(int(code_parts["category"])) @@ -73,24 +78,26 @@ def decor(cls): if code_parts["printer"] == 'XX': if printers := entry.get("printers"): if 'MK4' in printers: - printers.append('MK39') + printers.extend(('MK4S', 'MK3.9', 'MK3.9S')) + elif 'MK3.5' in printers: + printers.append('MK3.5S') else: # if no printers specified code is valid for all buddy printers = BUDDY for printer in printers: printer = Printer[printer.upper().replace(".", "")] - code = PrinterCode( - printer, category, error, entry["title"], - entry["text"], entry.get("approved", False), - entry["id"]) + code = PrinterCode(printer, category, error, + entry["title"], entry["text"], + entry.get("approved", + False), entry["id"]) setattr(cls, str(code), code) # code contains printer number else: printer = Printer(int(code_parts["printer"])) - code = PrinterCode(printer, category, error, entry["title"], - entry["text"], entry.get("approved", False), - entry["id"]) + code = PrinterCode(printer, category, error, + entry["title"], entry["text"], + entry.get("approved", False), entry["id"]) setattr(cls, str(code), code) return cls diff --git a/prusaerrors/shared/codes.py b/prusaerrors/shared/codes.py index 08c5164..c0665b9 100644 --- a/prusaerrors/shared/codes.py +++ b/prusaerrors/shared/codes.py @@ -1,7 +1,6 @@ # This file is part of the Prusa firmware # Copyright (C) 2020 Prusa Research a.s. - www.prusa3d.com # SPDX-License-Identifier: GPL-3.0-or-later - """ Base classes for SL1 errors and warnings """ @@ -9,9 +8,9 @@ import functools import json import re -from enum import unique, IntEnum +from enum import IntEnum, unique from pathlib import Path -from typing import List, TextIO, Dict +from typing import Dict, List, TextIO, Optional import yaml @@ -31,9 +30,14 @@ class Printer(IntEnum): MK4 = 0x000D IX = 0x0010 XL = 0x0011 - MK35 = 0x0017 MK39 = 0x0015 - NEXT = 0x0019 + MK35 = 0x0017 + HONEYBEE = 0x0019 + MK4S = 0x001A + MK39S = 0x001B + MK35S = 0x001C + M1 = 0x001D + COREONE = 0x001F @unique @@ -41,7 +45,8 @@ class Category(IntEnum): """ Prusa error category codes - This mapping is taken from general Prusa guidelines on errors, do not modify. + This mapping is taken from general Prusa guidelines on errors, do not + modify. """ MECHANICAL = 1 # Mechanical failures, engines XYZ, tower @@ -62,16 +67,15 @@ class Code: """ # pylint: disable = too-many-arguments - def __init__( - self, - printer: Printer, - category: Category, - error: int, - title: str, - message: str, - approved: bool, - action: List[str] = None - ): + # pylint: disable = too-many-positional-arguments + def __init__(self, + printer: Printer, + category: Category, + error: int, + title: str, + message: str, + approved: bool, + action: Optional[List[str]] = None): if printer.value < 0 or printer.value > 99: raise ValueError(f"Printer class {printer} out of range") if category.value < 0 or category.value > 9: @@ -165,8 +169,9 @@ def approved(self): """ Whenever the message text was approved for use in production system - Unapproved tests are not supposed to be translated. This is planed to raise warnings and prevent the resulting - build from being used in production. + Unapproved tests are not supposed to be translated. This is planed + to raise warnings and prevent the resulting build from being used in + production. """ return self._approved @@ -212,7 +217,10 @@ def get_codes(cls) -> Dict[str, Code]: :return: Member code dict """ - return {item: var for item, var in vars(cls).items() if isinstance(var, Code)} + return { + item: var + for item, var in vars(cls).items() if isinstance(var, Code) + } @classmethod def get(cls, code: str): @@ -225,7 +233,10 @@ def get(cls, code: str): :return: Code instance """ if not cls._code_map: - cls._code_map = {code.code: code for code in cls.get_codes().values()} + cls._code_map = { + code.code: code + for code in cls.get_codes().values() + } return cls._code_map[code] @classmethod @@ -236,7 +247,13 @@ def dump_json(cls, file: TextIO) -> None: :param file: Where to dump :return: None """ - obj = {name.lower(): {"code": code.code, "message": code.message} for name, code in cls.get_codes().items()} + obj = { + name.lower(): { + "code": code.code, + "message": code.message + } + for name, code in cls.get_codes().items() + } return json.dump(obj, file, indent=True) @classmethod @@ -284,7 +301,9 @@ def dump_qml_dictionary(cls, file: TextIO): :return: None """ file.write("import QtQuick 2.10\n") - file.write("/* Generated by sla-errors. Your edits to this file will be lost. */\n") + file.write( + "/* Generated by sla-errors. Your edits to this file will be lost. */\n" + ) file.write("pragma Singleton\n") file.write("Item {\n") file.write("\treadonly property var messages:{\n") @@ -304,7 +323,9 @@ def dump_cpp_ts(cls, file: TextIO): :param file: Where to dump :return: None """ - file.write("// Generated translation string definitions for all defined error messages\n") + file.write( + "// Generated translation string definitions for all defined error messages\n" + ) for code in cls.get_codes().values(): if code.message: file.write(f"QT_TR_NOOP({code.raw_message});\n") @@ -329,7 +350,9 @@ def dump_google_docs(cls, file: TextIO) -> None: for name, code in cls.get_codes().items(): message = code.message if code.message else "" category = f"{c2docs[code.category]}\t{code.category.value}" - file.write(f'SL1\t10\t{category}\t{code.error}\t"{name}"\t"{message}"\t{code.code}\n') + file.write( + f'SL1\t10\t{category}\t{code.error}\t"{name}"\t"{message}"\t{code.code}\n' + ) @classmethod def dump_yaml(cls, file: TextIO) -> None: @@ -342,9 +365,13 @@ def dump_yaml(cls, file: TextIO) -> None: codes = [] for name, code in cls.get_codes().items(): - codes.append( - {"code": code.raw_code, "title": name, "text": code.message, "id": name, "approved": code.approved, } - ) + codes.append({ + "code": code.raw_code, + "title": name, + "text": code.message, + "id": name, + "approved": code.approved, + }) yaml.dump({"Errors": codes}, file, sort_keys=False) @@ -359,7 +386,8 @@ def unique_codes(cls): used = set() for name, code in cls.get_codes().items(): if code.code in used: - raise ValueError(f"Code {name} with value {code.code} is duplicate!") + raise ValueError( + f"Code {name} with value {code.code} is duplicate!") used.add(code.code) return cls @@ -375,7 +403,8 @@ def unique_titles(cls): used = set() for name, code in cls.get_codes().items(): if code.title in used: - raise ValueError(f"Code {name} with title {code.title} is duplicate!") + raise ValueError( + f"Code {name} with title {code.title} is duplicate!") used.add(code.title) return cls @@ -407,8 +436,23 @@ def yaml_codes(src_path: Path): """ def decor(cls): - for identifier, code in decode_yaml(src_path): - setattr(cls, identifier, code) + with src_path.open("r") as src_file: + data = yaml.safe_load(src_file) + assert "Errors" in data + + code_re = re.compile( + r"^(?P[0-9][0-9])(?P[0-9])(?P[0-9][0-9])$" + ) + for entry in data["Errors"]: + code_parts = code_re.match(entry["code"]).groupdict() + printer = Printer(int(code_parts["printer"])) + category = Category(int(code_parts["category"])) + error = int(code_parts["error"]) + action = entry.get("action", []) + setattr( + cls, entry["id"], + Code(printer, category, error, entry["title"], entry["text"], + entry["approved"], action)) return cls return decor diff --git a/prusaerrors/sl1/__init__.py b/prusaerrors/sl1/__init__.py index e69de29..f381b70 100644 --- a/prusaerrors/sl1/__init__.py +++ b/prusaerrors/sl1/__init__.py @@ -0,0 +1,4 @@ +# pylint: disable = missing-module-docstring +from pathlib import Path + +PRINTER_MODEL_PATH = Path("/run/model") diff --git a/prusaerrors/sl1/codes.py b/prusaerrors/sl1/codes.py index b5e55d8..7c10cb0 100644 --- a/prusaerrors/sl1/codes.py +++ b/prusaerrors/sl1/codes.py @@ -10,8 +10,12 @@ import builtins from pathlib import Path +from re import compile as re_compile -from prusaerrors.shared.codes import unique_codes, Codes, yaml_codes +import yaml + +from prusaerrors.shared.codes import Category, Code, Printer, unique_codes, Codes +from prusaerrors.sl1 import PRINTER_MODEL_PATH if "_" not in vars(builtins): @@ -19,6 +23,62 @@ def _(value): return value +def yaml_codes(src_path: Path): + """ + Add code definitions from YAML source + """ + + def decor(cls): + with src_path.open("r") as src_file: + data = yaml.safe_load(src_file) + assert "Errors" in data + + printer = Printer.UNKNOWN + model = [x.name for x in PRINTER_MODEL_PATH.iterdir() if x.is_file()] + if len(model) != 1: + raise KeyError(f"None or multiple model files found. Check {PRINTER_MODEL_PATH} folder.") + + model = model[0] + if Printer.M1.name.lower() in model: + printer = Printer.M1 + elif Printer.SL1.name.lower() in model: + # this case covers both SL1 and SL1S since they have identical error codes + printer = Printer.SL1 + + re = re_compile( + r"^(?P([0-9][0-9]|XX))" + r"(?P[0-9])" + r"(?P[0-9][0-9])$" + ) + for entry in data["Errors"]: + code_parts = re.match(entry["code"]).groupdict() + category = Category(int(code_parts["category"])) + error = int(code_parts["error"]) + printers = entry.get("printers") + action = entry.get("action", []) + + if code_parts["printer"] == 'XX': + if printer.name in printers: + setattr( + cls, + entry["id"], + Code( + printer, + category, + error, + entry["title"], + entry["text"], + entry.get("approved", False), + action + ) + ) + else: + raise KeyError("current code has specific prefix. It has to be XX...") + return cls + + return decor + + @unique_codes @yaml_codes(Path(__file__).parent / "errors.yaml") class Sl1Codes(Codes): diff --git a/prusaerrors/sl1/errors.yaml b/prusaerrors/sl1/errors.yaml index df3056f..b35deec 120000 --- a/prusaerrors/sl1/errors.yaml +++ b/prusaerrors/sl1/errors.yaml @@ -1 +1 @@ -../../10_SL1/errors.yaml \ No newline at end of file +../../yaml/sla-error-codes.yaml \ No newline at end of file diff --git a/tests/test_connect.py b/tests/test_connect.py index 5cc8284..ab54f66 100644 --- a/tests/test_connect.py +++ b/tests/test_connect.py @@ -14,15 +14,79 @@ class TestErrors(unittest.TestCase): - def test_code_lookup(self): + def test_XL(self): code = PrinterCodes.get("17505") - assert code.printer == Printer(17) + assert code.printer == Printer.XL assert code.category == Category(5) assert code.error == 5 assert code.title assert code.message assert code.id + def test_MK4(self): + code = PrinterCodes.get("13505") + assert code.printer == Printer.MK4 + assert code.category == Category(5) + assert code.error == 5 + assert code.title + assert code.message + assert code.id + + def test_MK4S(self): + code = PrinterCodes.get("26505") + assert code.printer == Printer.MK4S + assert code.category == Category(5) + assert code.error == 5 + assert code.title + assert code.message + assert code.id + + def test_MK39(self): + code = PrinterCodes.get("21505") + assert code.printer == Printer.MK39 + assert code.category == Category(5) + assert code.error == 5 + assert code.title + assert code.message + assert code.id + + def test_MK35(self): + code = PrinterCodes.get("23701") + assert code.printer == Printer.MK35 + assert code.category == Category(7) + assert code.error == 1 + assert code.title + assert code.message + assert code.id + + def test_MK35S(self): + code = PrinterCodes.get("28701") + assert code.printer == Printer.MK35S + assert code.category == Category(7) + assert code.error == 1 + assert code.title + assert code.message + assert code.id + + def test_COREONE(self): + # unique code for COREONE + code = PrinterCodes.get("31701") + assert code.printer == Printer.COREONE + assert code.category == Category(7) + assert code.error == 1 + assert code.title + assert code.message + assert code.id + # common code for buddy printers + code = PrinterCodes.get("31801") + assert code.printer == Printer.COREONE + + + def test_no_MK35S(self): + """MK35S doesn't have puppies.""" + code = PrinterCodes.get("28512") + assert code is None + def test_unknown_code(self): code = PrinterCodes.get("unknown_code") assert code is None diff --git a/tests/test_sl1.py b/tests/test_sl1.py index 8e50777..899878b 100644 --- a/tests/test_sl1.py +++ b/tests/test_sl1.py @@ -1,25 +1,60 @@ # This file is part of the SL1 firmware # Copyright (C) 2020 Prusa Research a.s. - www.prusa3d.com # SPDX-License-Identifier: GPL-3.0-or-later - # pylint: disable = missing-function-docstring # pylint: disable = missing-class-docstring # pylint: disable = missing-module-docstring - +from pathlib import Path +from tempfile import TemporaryDirectory import unittest - -from prusaerrors.sl1.codes import Sl1Codes +from unittest.mock import MagicMock, patch +from importlib import reload +from prusaerrors.shared.codes import Code class TestErrors(unittest.TestCase): + def _test_code(self, printer_model_file: str, code_id: str, code: str) -> Code: + # create docstring documentation for this method in google style + """ + Tests the code lookup for a given printer model. + Sl1Codes relies on the PRINTER_MODEL_PATH to find the correct model file. + Printer model file is lowercase short name of + the printer. E.g. sl1, sl1s, m1. + + :param printer_model_file: name of the printer model file + :param code_id: code id defined in yaml file. E.g. "TILT_HOME_FAILED" + :param code: code string with printer prefix and leading hash. E.g. "#29101" + :raises AttributeError: generated code does not match expected code + """ + with patch("prusaerrors.sl1.PRINTER_MODEL_PATH", new_callable=MagicMock, spec=Path) as mock: + with TemporaryDirectory() as temp: + full_path = temp + "/" + printer_model_file + mock.iterdir.return_value = [Path(full_path)] + + # we need to actually create a file so is_file() returns True + with open(full_path, "w+", encoding="utf-8") as _: + import prusaerrors.sl1.codes + reload(prusaerrors.sl1.codes) + from prusaerrors.sl1.codes import Sl1Codes + generated_code = getattr(Sl1Codes, code_id) + self.assertEqual(generated_code, Sl1Codes.get(code)) + return generated_code + def test_str_conversion(self): - self.assertEqual("#10500", str(Sl1Codes.NONE)) + code = self._test_code("sl1", "NONE", "#10500") + self.assertEqual("#10500", str(code)) + + def test_code_lookup_sl1(self): + self._test_code("sl1", "NONE", "#10500") + + def test_code_lookup_sl1s(self): + self._test_code("sl1s", "NONE", "#10500") - def test_code_lookup(self): - self.assertEqual(Sl1Codes.NONE, Sl1Codes.get("#10500")) + def test_code_lookup_m1(self): + self._test_code("m1", "NONE", "#29500") def test_unknown_code_lookup(self): - self.assertEqual(Sl1Codes.UNKNOWN, Sl1Codes.get("random string")) + self._test_code("sl1", "UNKNOWN", "random string") if __name__ == "__main__": diff --git a/tests/test_verify_buddy_errors_content.py b/tests/test_verify_buddy_errors_content.py new file mode 100644 index 0000000..ac1fdfb --- /dev/null +++ b/tests/test_verify_buddy_errors_content.py @@ -0,0 +1,43 @@ +import unittest +import yaml +from typing import List, Dict + +class TestVerifyPruseErrorContentsForBuddy(unittest.TestCase): + def verify_item_in_error(self, error: Dict, item_name: str, can_be_empty:bool = False): + assert item_name in error, f"Missing item {item_name} in error code {error['code']}" + if not can_be_empty: + assert len(error[item_name]) > 0, f"Item {item_name} in error code {error['code']} is empty" + + def verify_non_empty_array_item(self, error: Dict, item_name: str, is_optional: bool = False): + assert item_name in error or is_optional, f"Missing item {item_name} in error code {error['code']}" + if (is_optional and item_name in error) or not is_optional: + assert len(error[item_name]) > 0, f"Empty array item {item_name} defined in error code {error['code']}" + + def test_buddy_errors(self): + errors = [] + with open("./yaml/buddy-error-codes.yaml", "r") as buddy_errors: + errors = yaml.load(buddy_errors, Loader=yaml.Loader)["Errors"] + for error in errors: + assert "code" in error, f"Missing error code code in definition: {error}" + assert error["code"].startswith("XX"), f"Code {error['code']} is missing XX prefix" + self.verify_item_in_error(error, "id") + self.verify_item_in_error(error, "title") + self.verify_item_in_error(error, "text") + self.verify_non_empty_array_item(error, "printers", True) + + + def test_mmu_errors(self): + errors = [] + with open("./yaml/mmu-error-codes.yaml", "r") as mmu_errors: + errors = yaml.load(mmu_errors, Loader=yaml.Loader)["Errors"] + for error in errors: + assert "code" in error, f"Missing error code code in definition: {error}" + assert error["code"].startswith("04"), f"Code {error['code']} is missing 04 prefix" + self.verify_item_in_error(error, "id") + self.verify_item_in_error(error, "title") + self.verify_item_in_error(error, "text") + self.verify_item_in_error(error, "type") + self.verify_non_empty_array_item(error, "action") + +if __name__ == "__main__": + unittest.main() diff --git a/yaml/buddy-error-codes.yaml b/yaml/buddy-error-codes.yaml index 984b1a7..ede03e1 100644 --- a/yaml/buddy-error-codes.yaml +++ b/yaml/buddy-error-codes.yaml @@ -12,10 +12,15 @@ # BOOTLOADER xx6xx # # WARNINGS xx7xx # Category-less warnings # CONNECT xx8xx # Remote Dialogs for Connect (unlike xx4xx which includes things like "Can't register to Connect") +# +# "printers" is a list of firmware flavours (not actual printer models), +# e.g. MK4 covers all printers running MK4 firmware: MK4, MK4S, MK3.9 +# currently supported list: MINI, MK4, XL, iX, MK3.5 +# if no printers list exists, the error is applicable to all printers running Buddy FW. Errors: - code: "XX101" - printers: [MK4, iX] + printers: [MK4, COREONE, iX] title: "STUCK FILAMENT DETECTED" text: "The filament seems to be stuck, please unload it from nextruder and load it again." action: [Unload] @@ -30,7 +35,7 @@ Errors: approved: true - code: "XX102" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PRECISE REFINEMENT FAILED" text: "Consider adjusting belt tension." id: "PRECISE_REFINEMENT_FAILED" @@ -79,17 +84,41 @@ Errors: id: "STUCK_FILAMENT_DETECTED" approved: true + - code: "XX109" + printers: [iX, COREONE] + title: "STEEL SHEEL NOT DETECTED" + text: "Steel sheet was not detected. Please put the sheet on to prevent printer damage." + action: [Retry, Skip] + id: "STEEL_SHEET_NOT_DETECTED" + approved: false + + - code: "XX110" + printers: [COREONE] + title: "DOOR OPEN" + text: "Close the door to prevent air drafts, burns and other undesirable effects." + action: [] + id: "DOOR_OPEN" + approved: false + + - code: "XX111" + printers: [COREONE] + title: "UNEVEN BED" + text: "The bed doesn't seem to be aligned properly. Run Z alignment procedure?" + action: [] + id: "UNEVEN_BED_ALIGN_PROMPT" + approved: false + # TEMPERATURE xx2xx - code: "XX201" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "PREHEAT ERROR" text: "Check the heatbed heater & thermistor wiring for possible damage." id: "BED_PREHEAT_ERROR" approved: true - code: "XX202" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "PREHEAT ERROR" text: "Check the print head heater & thermistor wiring for possible damage." id: "HOTEND_PREHEAT_ERROR" @@ -109,7 +138,7 @@ Errors: approved: true - code: "XX204" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "THERMAL RUNAWAY" text: "Check the print head thermistor wiring for possible damage." id: "HOTEND_THERMAL_RUNAWAY" @@ -123,14 +152,14 @@ Errors: approved: true - code: "XX205" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "MAXTEMP ERROR" text: "Check the heatbed thermistor wiring for possible damage." id: "BED_MAXTEMP_ERROR" approved: true - code: "XX206" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "MAXTEMP ERROR" text: "Check the print head thermistor wiring for possible damage." id: "HOTEND_MAXTEMP_ERROR" @@ -144,14 +173,14 @@ Errors: approved: true - code: "XX207" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "MINTEMP ERROR" text: "Check the heatbed thermistor wiring for possible damage." id: "BED_MINTEMP_ERROR" approved: true - code: "XX208" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "MINTEMP ERROR" text: "Check the print head thermistor wiring for possible damage." id: "HOTEND_MINTEMP_ERROR" @@ -171,7 +200,7 @@ Errors: approved: true - code: "XX210" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "TEMP NOT MATCHING" text: "Measured temperature is not matching expected value. Check the thermistor is in contact with hotend. In case of damage, replace it." id: "HOTEND_TEMP_NOT_MATCHING" @@ -265,6 +294,25 @@ Errors: id: "MB_HEATER_CONNECTED" approved: false + - code: "XX259" + printers: [COREONE, XL] + title: "FAILED TO REACH CHAMBER TEMPERATURE" + text: "Failing to reach target chamber temperature. Keep waiting?" + id: "CHAMBER_FAILED_TO_REACH_TEMP" + approved: false + + - code: "XX260" + printers: [COREONE, XL] + title: "Chamber Overheating" + text: "Chamber temperature above safety limit. Ensure better ventilation." + id: "CHAMBER_OVERHEATING_TEMP" + + - code: "XX261" + printers: [COREONE, XL] + title: "Chamber Temperature Is Critical" + text: "Chmaber temperature critical. Aborting print to prevent printer damage." + id: "CHAMBER_CRITICAL_TEMP" + # ELECTRICAL xx3xx - code: "XX301" @@ -275,7 +323,7 @@ Errors: approved: true - code: "XX301" - printers: [MK4, iX] + printers: [MK4, COREONE, iX] title: "HOMING ERROR Z" text: "Failed to home the extruder in Z-axis, make sure the loadcell is working." id: "HOMING_ERROR_Z" @@ -310,7 +358,7 @@ Errors: approved: false - code: "XX304" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "HOMING ERROR X" text: "Failed to home the extruder in X-axis, make sure there is no obstacle on X-axis." id: "HOMING_ERROR_X" @@ -324,7 +372,7 @@ Errors: approved: true - code: "XX305" - printers: [MINI, MK4, MK3.5] + printers: [MINI, MK4, COREONE, MK3.5] title: "HOMING ERROR Y" text: "Failed to home the Y-axis, make sure there is no obstacle on Y-axis." id: "HOMING_ERROR_Y" @@ -357,7 +405,7 @@ Errors: approved: true - code: "XX308" - printers: [MINI, MK4, iX, MK3.5] + printers: [MINI, MK4, COREONE, iX, MK3.5] title: "NOZZLE HEATER OVERCURRENT" text: "Overcurrent detected on nozzle heater." id: "NOZZLE_OVERCURRENT" @@ -371,7 +419,7 @@ Errors: approved: true - code: "XX309" - printers: [MK4, MK3.5, iX] + printers: [MK4, COREONE, MK3.5, iX] title: "HEATBED PORT OVERCURRENT" text: "Overcurrent detected on xBuddy heatbed port, disconnect the device." id: "INPUT_OVERCURRENT" @@ -445,7 +493,7 @@ Errors: approved: true - code: "XX321" - printers: [MK4, iX, XL, MK3.5] + printers: [MK4, COREONE, iX, XL, MK3.5] title: "POWER PANIC" text: "Power panic detected on startup. Check power panic cable." id: "ACF_AT_INIT" @@ -458,6 +506,12 @@ Errors: id: "HEATER_HOTEND_OVERCURRENT" approved: false + - code: "XX323" + title: "ACCELEROMETER COMMUNICATION FAILED" + text: "Check that the accelerometer cable is plugged in and not damaged." + id: "ACCELEROMETER_COMMUNICATION_FAILED" + approved: false + - code: "XX401" title: "CONNECT REGISTRATION FAILED" text: "Registration to Prusa Connect failed due to:" @@ -529,133 +583,133 @@ Errors: approved: true - code: "XX511" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Address assignment error" id: "PUPPY_ADDR_ASSIGN_ERR" approved: false - code: "XX512" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Unassigned puppy found" id: "PUPPY_NO_ADDR" approved: false - code: "XX513" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy discovery error. No puppy found" id: "PUPPY_DISCOVER_ERR" approved: false - code: "XX514" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy %s not responding" id: "PUPPY_NOT_RESPONDING" approved: false - code: "XX515" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy uses incompatible bootloader protocol %04x, Buddy FW requires %04x" id: "PUPPY_INCOMPATIBLE_BOOTLODER" approved: false - code: "XX516" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Unknown puppy type" id: "PUPPY_UNKNOWN_TYPE" approved: false - code: "XX517" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Unable to start puppy application" id: "PUPPY_START_APP_ERR" approved: false - code: "XX518" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy %s firmware not found" id: "PUPPY_FW_NOT_FOUND" approved: false - code: "XX519" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy %s flash writing failed" id: "PUPPY_WRITE_FLASH_ERR" approved: false - code: "XX520" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Puppy %s firmware fingerprint mismatch" id: "PUPPY_FINGERPRINT_MISMATCH" approved: false - code: "XX521" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Waiting for fingerprint timed out" id: "PUPPY_FINGERPRINT_TIMEOUT" approved: false - code: "XX522" - printers: [iX, XL] + printers: [iX, XL, COREONE] title: "PUPPY ERROR" text: "Waiting for puppies to start timed out" id: "PUPPY_RUN_TIMEOUT" approved: false - code: "XX523" - printers: [MK4, iX, XL, MK3.5] + printers: [MK4, COREONE, iX, XL, MK3.5] title: "LOADCELL NOT CALIBRATED" - text: "Loadcell calibration is incomplete. Restart the printer and callibrate loadcell." + text: "Loadcell calibration is incomplete. Restart the printer and calibrate loadcell." id: "LOADCELL_INCOMPLETE_CONFIGURATION_ERROR" approved: true - code: "XX524" - printers: [MK4, iX, XL] + printers: [MK4, COREONE, iX, XL] title: "LOADCELL TARE ERROR" text: "There was an error requesting the tare for loadcell." id: "LOADCELL_TARE_ALREADY_REQUESTED" approved: true - code: "XX525" - printers: [MK4, iX, XL] + printers: [MK4, COREONE, iX, XL] title: "LOADCELL TARE FAILED" text: "Setting the tare failed. Check the loadcell wiring and connection." id: "LOADCELL_TARE_FAILED" approved: true - code: "XX526" - printers: [MK4, iX, XL] + printers: [MK4, COREONE, iX, XL] title: "LOADCELL MEASURE FAILED" text: "Loadcell measured an inifinite or undefined load value." id: "LOADCELL_INFINITE_LOAD" approved: true - code: "XX527" - printers: [MK4, iX, XL] + printers: [MK4, COREONE, iX, XL] title: "LOADCELL BAD CONFIGURATION" text: "The loadcell configuration is incorrect." id: "LOADCELL_BAD_CONFIGURATION" approved: true - code: "XX528" - printers: [MK4, iX, XL] + printers: [MK4, COREONE, iX, XL] title: "LOADCELL TIMEOUT" text: "There was a timeout while waiting for measurement sample, please repeat the action." id: "LOADCELL_TIMEOUT" approved: true - code: "XX529" - printers: [MK4, iX, XL, MK3.5] + printers: [MK4, COREONE, iX, XL, MK3.5] title: "LED MEMORY ERROR" text: "Memory allocation failed for scheduled LED animation" id: "LED_ANIMATION_BAD_SPACE_MANAGEMENT" @@ -692,12 +746,19 @@ Errors: - code: "XX535" title: "Gcode Cropped" - text: "G-code command was too long and did not fit in the internal buffers. As a result, it might have beet not executed correctly." + text: "G-code command was too long and did not fit in the internal buffers. As a result, it may have been executed incorrectly." id: "GCODE_CROPPED" approved: false + - code: "XX536" + printers: [XL] + title: "EXTRUDER ERROR" + text: "Extruder motor is not spinning on tool %d" + id: "DWARF_TMC" + approved: false + - code: "XX601" - title: "" + title: "UNKNOWN ERROR" text: "This error code is not found\nin our database.\nContact the support." id: "UNKNOWN_ERROR_CODE" approved: true @@ -746,14 +807,14 @@ Errors: - code: "XX609" printers: [MINI] - title: "" + title: "FIRMWARExPRINTER MISMATCH" text: "Firmware and hardware\nversions do not\nmatch. Make sure\nyou have the right\nfirmware file for\nyour printer." id: "HW_VERSION_ERR" approved: true - code: "XX609" - printers: [MK4, iX, XL, MK3.5] - title: "" + printers: [MK4, COREONE, iX, XL, MK3.5] + title: "FIRMWARExPRINTER MISMATCH" text: "Firmware and hardware versions do\nnot match. Make sure you have\nthe right firmware file for\nyour printer." id: "HW_VERSION_ERR" approved: true @@ -795,7 +856,7 @@ Errors: approved: true - code: "XX701" - printers: [MK4] + printers: [MK4, COREONE] title: "Firmware Update Required" text: "Insert the bundled USB drive, restart the printer and click the knob once during the boot. This will install the MK3.5 firmware." id: "DIFFERENT_FW_REQUIRED" @@ -809,12 +870,17 @@ Errors: approved: true - code: "XX702" - printers: [MK3.5, MK4, XL] + printers: [MK3.5, MK4, COREONE, XL] title: "Cold Pull" text: "Welcome to the Cold Pull wizard. Prepare a 30cm piece of PLA filament and follow the instructions. For more details, visit:" id: "COLD_PULL_INTRO" approved: true + - code: "XX703" + title: "Unknown file system" + text: "Use a different USB drive or reformat this one to the supported FAT32 file system." + id: "USB_DRIVE_UNSUPPORTED_FILE_SYSTEM" + - code: "XX801" title: "Warning" text: "Please complete Calibrations & Tests before using the printer." @@ -829,7 +895,7 @@ Errors: type: "CONNECT" - code: "XX802" - printers: [MK4, XL, MK3.5, iX] + printers: [MK4, COREONE, XL, MK3.5, iX] title: "Warning" text: "New firmware available" id: "PRINT_PREVIEW_NEW_FW" @@ -855,14 +921,14 @@ Errors: type: "CONNECT" - code: "XX805" - printers: [MK4, XL, MK3.5, iX] + printers: [MK4, COREONE, XL, MK3.5, iX] title: "Warning" text: "A filament specified in the G-code is either not loaded or wrong type." id: "PRINT_PREVIEW_WRONG_FILAMENT" type: "CONNECT" - code: "XX806" - printers: [MK4, MK3.5] + printers: [MK4, COREONE, MK3.5] title: "Warning" text: "Filament detected. Unload filament now? Select NO to start the print with the currently loaded filament." id: "PRINT_PREVIEW_MMU_FILAMENT_INSERTED" @@ -876,181 +942,207 @@ Errors: type: "CONNECT" - code: "XX808" - title: "" + title: "Warning" text: "The heatbed cooled down during the power outage, printed object might have detached. Inspect it before continuing." id: "POWER_PANIC_COLD_BED" type: "CONNECT" - code: "XX809" - title: "" + title: "CRASH DETECTED" text: "Length of an axis is too long.\nMotor current is too low, probably.\nRetry check, pause or resume the print?" id: "CRASH_RECOVERY_AXIS_LONG" type: "CONNECT" - code: "XX810" - title: "" + title: "CRASH DETECTED" text: "Length of an axis is too short.\nThere's an obstacle or bearing issue.\nRetry check, pause or resume the print?" id: "CRASH_RECOVERY_AXIS_SHORT" type: "CONNECT" - code: "XX811" - title: "" + title: "CRASH DETECTED" text: "Repeated collision has been detected.\nDo you want to resume or pause the print?" id: "CRASH_RECOVERY_REPEATED_CRASH" type: "CONNECT" - code: "XX812" - title: "" + title: "CRASH DETECTED" text: "Unable to home the printer.\nDo you want to try again?" id: "CRASH_RECOVERY_HOME_FAIL" type: "CONNECT" - code: "XX813" printers: [XL] - title: "" + title: "CRASH DETECTED" text: "Toolchanger problem has been detected.\nPark all tools to docks\nand leave the carriage free." id: "CRASH_RECOVERY_TOOL_PICKUP" type: "CONNECT" - code: "XX814" - printers: [MK4, XL, MK3.5] + printers: [MK4, COREONE, XL, MK3.5] title: "Tool mapping" text: "Changes of mapping available only in the Printer UI. Select Print to start the print with defaults." id: "PRINT_PREVIEW_TOOLS_MAPPING" type: "CONNECT" - code: "XX815" - printers: [MK4, MK3.5] - title: "" + printers: [MK4, COREONE, MK3.5] + title: "MMU Error" # This is a generic error for any MMU error, so we use generic title, until we send mmu errors directly text: "Waiting for user input" id: "MMU_LOAD_UNLOAD_ERROR" type: "CONNECT" - code: "XX816" - title: "" + title: "Warning" text: "Print fan not spinning. Check it for possible debris, then inspect the wiring." id: "PRINT_FAN_ERROR" type: "CONNECT" - code: "XX817" - title: "" + printers: [iX] + title: "Warning" + text: "Heating disabled due to 10 minutes of inactivity." + id: "HEATERS_TIMEOUT" + type: "CONNECT" + + - code: "XX817" + printers: [MINI, MK3.5, MK4, XL, COREONE] + title: "Warning" text: "Heating disabled due to 30 minutes of inactivity." id: "HEATERS_TIMEOUT" type: "CONNECT" - code: "XX818" - title: "" + title: "Warning" text: "Measured temperature is not matching expected value. Check the thermistor is in contact with hotend. In case of damage, replace it." id: "HOTEND_TEMP_DISCREPANCY" type: "CONNECT" - code: "XX819" - title: "" + printers: [iX] + title: "Warning" + text: "Heating disabled due to 10 minutes of inactivity." + id: "NOZZLE_TIMEOUT" + type: "CONNECT" + + - code: "XX819" + printers: [MINI, MK3.5, MK4, XL, COREONE] + title: "Warning" text: "Heating disabled due to 30 minutes of inactivity." id: "NOZZLE_TIMEOUT" type: "CONNECT" - code: "XX820" - title: "" + title: "Warning" text: "Steppers disabled due to inactivity." id: "STEPPERS_TIMEOUT" type: "CONNECT" - code: "XX821" - title: "" + title: "Warning" text: "USB drive or file error, the print is now paused. Reconnect the drive." id: "USB_FLASH_DISK_ERROR" type: "CONNECT" - code: "XX822" - title: "" + title: "Warning" text: "Heatbreak thermistor is disconnected. Inspect the wiring." id: "HEATBREAK_THERMISTOR_FAIL" type: "CONNECT" - code: "XX823" printers: [XL, MK3.5] - title: "" + title: "Warning" text: "Nozzle doesn't seem to have round cross section. Make sure it is clean and perpendicular to the bed." id: "NOZZLE_DOES_NOT_HAVE_ROUND_SECTION" type: "CONNECT" - code: "XX824" - title: "" + title: "Warning" text: "G-Code transfer running too slow. Check your network for issues or use different USB drive. Press Continue to resume printing." id: "NOT_DOWNLOADED" type: "CONNECT" - code: "XX825" - title: "" + title: "Warning" text: "MCU in Buddy is overheated, likely due to exceeding the printer's operating temperature. Prevent overheating for optimal performance." id: "BUDDY_MCU_MAX_TEMP" type: "CONNECT" - code: "XX826" printers: [XL] - title: "" + title: "Warning" text: "MCU in Dwarf is overheated, likely due to exceeding the printer's operating temperature. Prevent overheating for optimal performance." id: "DWARF_MCU_MAX_TEMP" type: "CONNECT" - code: "XX827" printers: [iX, XL] - title: "" + title: "Warning" text: "MCU in Modular Bed is overheated, likely due to exceeding the printer's operating temperature. Prevent overheating for optimal performance." id: "MOD_BED_MCU_MAX_TEMP" type: "CONNECT" - + - code: "XX828" - title: "" + title: "Warning" text: "Hotend fan not spinning. Check it for possible debris, then inspect the wiring." id: "HOTEND_FAN_ERROR" type: "CONNECT" - code: "XX829" - title: "Filament runout" - text: "Filament runout during print, please insert new one." + # Unfortunately, the printer doesn't know if it is out of filament because + # it just run out of it, or because it was unloaded in case of a stuck + # filament or for some other reason. So, the message needs to be slightly + # generic and simply ask for the filament to be inserted. + title: "Replace filament" + text: "Please replace filament." id: "FILAMENT_RUNOUT" type: "CONNECT" - code: "XX830" printers: [XL] - title: "" + title: "Warning" text: "Enclosure fan not spinning. Check it for possible debris, then inspect the wiring." id: "ENCLOSURE_FAN_ERROR" type: "CONNECT" - code: "XX831" printers: [XL] - title: "" + title: "Warning" text: "The HEPA filter is nearing the end of its life span (100 hours of printing time remaining). We recommend purchasing a new one. Visit prusa.io/xl-filter for more information." id: "ENCLOSURE_FILTER_EXPIRATION_WARNING" type: "CONNECT" - code: "XX832" printers: [XL] - title: "" + title: "Warning" text: "The HEPA filter has expired. Change the HEPA filter before your next print. Visit prusa.io/xl-filter for more information." id: "ENCLOSURE_FILTER_EXPIRATION" type: "CONNECT" - code: "XX833" - printers: [iX, MK4, MK3.5, MINI, XL] - title: "" + printers: [iX, MK4, COREONE, MK3.5, MINI, XL] + title: "Warning" text: "Bed leveling failed. Try again?" id: "PROBING_FAILED" type: "CONNECT" - code: "XX834" - printers: [iX, MK4, XL] - title: "" + printers: [iX, MK4, COREONE, XL] + title: "Warning" text: "Nozzle cleaning failed." id: "NOZZLE_CLEANING_FAILED" type: "CONNECT" - code: "XX835" - printers: [iX, MK4, MK3.5, MINI, XL] - title: "" + printers: [iX, MK4, COREONE, MK3.5, MINI, XL] + title: "Quick Pause" text: "Waiting for the user. Press \"Resume\" once the printer is ready." id: "QUICK_PAUSE" type: "CONNECT" + + - code: "XX836" + title: "Loading Timeout" + text: "Filament loading timed out." + id: "FILAMENT_LOADING_TIMEOUT" + type: "CONNECT" diff --git a/10_SL1/errors.yaml b/yaml/sla-error-codes.yaml similarity index 83% rename from 10_SL1/errors.yaml rename to yaml/sla-error-codes.yaml index e509bfa..aa6837d 100644 --- a/10_SL1/errors.yaml +++ b/yaml/sla-error-codes.yaml @@ -3,6 +3,7 @@ # Printer code # SL1 10xxx +# M1 29xxx # Error categories # MECHANICAL xx1xx # Mechanical failures, engines XYZ, tower @@ -17,69 +18,80 @@ # 1. The indentation of multiline texts must be 2 spaces from the 'text:' field. Errors: -# MECHANICAL 101xx # Mechanical failures, engines XYZ, tower -- code: "10101" +# MECHANICAL xx1xx # Mechanical failures, engines XYZ, tower +- code: "XX101" + printers: [SL1, M1] title: "TILT HOMING FAILED" text: "Tilt homing failed, check its surroundings and repeat the action." id: "TILT_HOME_FAILED" approved: true -- code: "10102" +- code: "XX102" + printers: [SL1, M1] title: "TOWER HOMING FAILED" text: "Tower homing failed, make sure there is no obstacle in its path and repeat the action." id: "TOWER_HOME_FAILED" approved: true -- code: "10103" +- code: "XX103" + printers: [SL1, M1] title: "TOWER MOVING FAILED" text: "Moving the tower failed. Make sure there is no obstacle in its path and repeat the action." id: "TOWER_MOVE_FAILED" approved: true -- code: "10104" +- code: "XX104" + printers: [SL1, M1] title: "TILT MOVING FAILED" text: "Moving the tilt failed. Make sure there is no obstacle in its path and repeat the action." id: "TILT_MOVE_FAILED" approved: true # Deprecated, use FAN_FAILED_ID -- code: "10106" +- code: "XX106" + printers: [SL1, M1] title: "FAN FAILURE" text: "Incorrect RPM reading of the %(failed_fans_text)s fan." id: "FAN_FAILED" approved: true -- code: "10108" +- code: "XX108" + printers: [SL1, M1] title: "RESIN TOO LOW" text: "Measured resin volume %(volume_ml)d ml is lower than required for this print. Refill the tank and restart the print." id: "RESIN_TOO_LOW" approved: true -- code: "10109" +- code: "XX109" + printers: [SL1, M1] title: "RESIN TOO HIGH" text: "Measured resin volume %(volume_ml)d ml is higher than required for this print. Make sure that the resin level does not exceed the 100% mark and restart the print." id: "RESIN_TOO_HIGH" approved: true -- code: "10113" +- code: "XX113" + printers: [SL1, M1] title: "CALIBRATION ERROR" text: "The printer is not calibrated. Please run the Wizard first." id: "NOT_MECHANICALLY_CALIBRATED" approved: true -- code: "10114" +- code: "XX114" + printers: [SL1, M1] title: "TOWER ENDSTOP NOT REACHED" text: "Failed to reach the tower endstop." id: "TOWER_ENDSTOP_NOT_REACHED" approved: true -- code: "10115" +- code: "XX115" + printers: [SL1, M1] title: "TILT ENDSTOP NOT REACHED" text: "Failed to reach the tilt endstop." id: "TILT_ENDSTOP_NOT_REACHED" approved: true -- code: "10118" +- code: "XX118" + printers: [SL1, M1] title: "TOWER AXIS CHECK FAILED" text: "Tower axis check failed! @@ -91,7 +103,8 @@ Errors: id: "TOWER_AXIS_CHECK_FAILED" approved: true -- code: "10119" +- code: "XX119" + printers: [SL1, M1] title: "TILT AXIS CHECK FAILED" text: "Tilt axis check failed! @@ -100,20 +113,23 @@ Errors: id: "TILT_AXIS_CHECK_FAILED" approved: true -- code: "10120" +- code: "XX120" + printers: [SL1, M1] title: "DISPLAY TEST FAILED" text: "Display test failed." id: "DISPLAY_TEST_FAILED" approved: true -- code: "10121" +- code: "XX121" + printers: [SL1, M1] title: "INVALID TILT ALIGN POSITION" text: "Invalid tilt alignment position." id: "INVALID_TILT_ALIGN_POSITION" approved: true # Deprecated, use FAN_RPM_OUT_OF_TEST_RANGE_ID -- code: "10122" +- code: "XX122" + printers: [SL1, M1] title: "FAN RPM OUT OF TEST RANGE" text: "RPM of %(fan)s not in range! @@ -123,7 +139,8 @@ Errors: id: "FAN_RPM_OUT_OF_TEST_RANGE" approved: true -- code: "10123" +- code: "XX123" + printers: [SL1, M1] title: "TOWER POSITION ERROR" text: "Tower not at the expected position. @@ -132,13 +149,15 @@ Errors: id: "TOWER_BELOW_SURFACE" approved: true -- code: "10124" +- code: "XX124" + printers: [SL1, M1] title: "RESIN MEASURING FAILED" text: "Measuring the resin failed. Check the presence of the platform and the amount of resin in the tank." id: "RESIN_MEASURE_FAILED" approved: true -- code: "10125" +- code: "XX125" + printers: [SL1, M1] title: "CLEANING ADAPTOR MISSING" text: "Cleaning adaptor was not detected, it does not seem to be correctly attached to the print platform. @@ -146,13 +165,15 @@ Errors: id: "CLEANING_ADAPTOR_MISSING" approved: true -- code: "10126" +- code: "XX126" + printers: [SL1, M1] title: "FAN FAILURE" text: "Incorrect RPM reading of the %(fan__map_HardwareDeviceId)s." id: "FAN_FAILED_ID" approved: true -- code: "10127" +- code: "XX127" + printers: [SL1, M1] title: "FAN RPM OUT OF TEST RANGE" text: "RPM of %(fan__map_HardwareDeviceId)s not in range! @@ -166,19 +187,22 @@ Errors: # TEMPERATURE 102xx # Temperature measurement, thermistors, heating # Deprecated, use TEMP_SENSOR_FAILED_ID -- code: "10205" +- code: "XX205" + printers: [SL1, M1] title: "TEMPERATURE SENSOR FAILED" text: "The %(sensor)s sensor failed." id: "TEMP_SENSOR_FAILED" approved: true -- code: "10206" +- code: "XX206" + printers: [SL1, M1] title: "UVLED HEAT SINK FAILED" text: "UV LED is overheating!" id: "UVLED_HEAT_SINK_FAILED" approved: true -- code: "10207" +- code: "XX207" + printers: [SL1, M1] title: "A64 OVERHEAT" text: "A64 temperature is too high. Measured: %(temperature).1f °C! Shutting down in 10 seconds..." @@ -186,7 +210,8 @@ Errors: approved: true # Deprecated, use TEMPERATURE_OUT_OF_RANGE_ID -- code: "10208" +- code: "XX208" + printers: [SL1, M1] title: "TEMPERATURE OUT OF RANGE" text: "%(sensor)s not in range! Measured temperature: %(temperature).1f °C. @@ -194,19 +219,22 @@ Errors: id: "TEMPERATURE_OUT_OF_RANGE" approved: true -- code: "10209" +- code: "XX209" + printers: [SL1, M1] title: "UV LED TEMP. ERROR" text: "Reading of UV LED temperature has failed! This value is essential for the UV LED lifespan and printer safety. Please contact tech support! Current print job will be canceled." id: "UV_TEMP_SENSOR_FAILED" approved: true -- code: "10210" +- code: "XX210" + printers: [SL1, M1] title: "TEMPERATURE SENSOR FAILED" text: "The %(sensor__map_HardwareDeviceId)s sensor failed." id: "TEMP_SENSOR_FAILED_ID" approved: true -- code: "10211" +- code: "XX211" + printers: [SL1, M1] title: "TEMPERATURE OUT OF RANGE" text: "Reading of %(sensor__map_HardwareDeviceId)s not in range! @@ -219,91 +247,106 @@ Errors: approved: true # ELECTRICAL 103xx # Electrical, MINDA, FINDA, Motion Controller, … -- code: "10301" +- code: "XX301" + printers: [SL1, M1] title: "MC WRONG REVISION" text: "Wrong revision of the Motion Controller (MC). Contact our support." id: "MOTION_CONTROLLER_WRONG_REVISION" approved: true -- code: "10306" +- code: "XX306" + printers: [SL1, M1] title: "UNEXPECTED MC ERROR" text: "The Motion Controller (MC) has encountered an unexpected error. Restart the printer." id: "MOTION_CONTROLLER_EXCEPTION" approved: true -- code: "10307" +- code: "XX307" + printers: [SL1, M1] title: "RESIN SENSOR ERROR" text: "The resin sensor was not triggered. Check whether the tank and the platform are properly secured." id: "RESIN_SENSOR_FAILED" approved: true -- code: "10308" +- code: "XX308" + printers: [SL1, M1] title: "PRINTER NOT UV CALIBRATED" text: "The printer is not UV calibrated. Connect the UV calibrator and complete the calibration." id: "NOT_UV_CALIBRATED" approved: true -- code: "10309" +- code: "XX309" + printers: [SL1, M1] title: "UVLED VOLTAGE ERROR" text: "UV LED voltages differ too much. The LED module might be faulty. Contact our support." id: "UVLED_VOLTAGE_DIFFER_TOO_MUCH" approved: true -- code: "10310" +- code: "XX310" + printers: [SL1, M1] title: "SPEAKER TEST FAILED" text: "Speaker test failed." id: "SOUND_TEST_FAILED" approved: true -- code: "10311" +- code: "XX311" + printers: [SL1, M1] title: "UV LED CALIBRATOR NOT DETECTED" text: "The UV LED calibrator is not detected. Check the connection and try again." id: "UV_LED_METER_NOT_DETECTED" approved: true -- code: "10312" +- code: "XX312" + printers: [SL1, M1] title: "UV LED CALIBRATOR CONNECTION ERROR" text: "Cannot connect to the UV LED calibrator. Check the connection and try again." id: "UV_LED_METER_NOT_RESPONDING" approved: true -- code: "10313" +- code: "XX313" + printers: [SL1, M1] title: "UV LED CALIBRATOR LINK ERROR" text: "Communication with the UV LED calibrator has failed. Check the connection and try again." id: "UV_LED_METER_COMMUNICATION_ERROR" approved: true -- code: "10314" +- code: "XX314" + printers: [SL1, M1] title: "UV LED CALIBRATOR ERROR" text: "The UV LED calibrator detected some light on a dark display. This means there is a light 'leak' under the UV calibrator, or your display does not block the UV light enough. Check the UV calibrator placement on the screen or replace the exposure display." id: "DISPLAY_TRANSLUCENT" approved: true -- code: "10315" +- code: "XX315" + printers: [SL1, M1] title: "UV LED CALIBRATOR READINGS ERROR" text: "The UV LED calibrator failed to read expected UV light intensity. Check the UV calibrator placement on the screen." id: "UNEXPECTED_UV_INTENSITY" approved: true -- code: "10316" +- code: "XX316" + printers: [SL1, M1] title: "UV LED CALIBRATOR UNKNONW ERROR" text: "Unknown UV LED calibrator error code: %(nonprusa_code)d" id: "UNKNOWN_UV_MEASUREMENT_ERROR" approved: true -- code: "10317" +- code: "XX317" + printers: [SL1, M1] title: "UV INTENSITY TOO HIGH" text: "Requested intensity cannot be reached by min. allowed PWM." id: "UV_TOO_BRIGHT" approved: true -- code: "10318" +- code: "XX318" + printers: [SL1, M1] title: "UV INTENSITY TOO LOW" text: "Requested intensity cannot be reached by max. allowed PWM." id: "UV_TOO_DIMM" approved: true -- code: "10319" +- code: "XX319" + printers: [SL1, M1] title: "UV CALIBRATION ERROR" text: "Correct settings were found, but the standard deviation @@ -313,76 +356,88 @@ Errors: id: "UV_INTENSITY_DEVIATION_TOO_HIGH" approved: true -- code: "10320" +- code: "XX320" + printers: [SL1, M1] title: "BOOSTER BOARD PROBLEM" text: "Communication with the Booster board failed." id: "BOOSTER_ERROR" approved: true -- code: "10321" +- code: "XX321" + printers: [SL1, M1] title: "Disconnected UV LED panel" text: "The UV LED panel is not detected." id: "UV_LEDS_DISCONNECTED" approved: true -- code: "10322" +- code: "XX322" + printers: [SL1, M1] title: "Broken UV LED panel" text: "A part of the LED panel is disconnected." id: "UV_LEDS_ROW_FAILED" approved: true -- code: "10323" +- code: "XX323" + printers: [SL1, M1] title: "Unknown printer model" text: "The printer model was not detected." id: "UNKNOWN_PRINTER_MODEL" approved: true # CONNECTIVITY 104xx # Connectivity - Wi - Fi, LAN, Prusa Connect Cloud -- code: "10401" +- code: "XX401" + printers: [SL1, M1] title: "MQTT UPLOAD FAILED" text: "Cannot send factory config to the database (MQTT)! Check the network connection. Please, contact support." id: "MQTT_SEND_FAILED" approved: true -- code: "10402" +- code: "XX402" + printers: [SL1, M1] title: "NO INTERNET CONNECTION" text: "The printer is not connected to the internet. Check the connection in the Settings." id: "NOT_CONNECTED_TO_NETWORK" approved: true -- code: "10403" +- code: "XX403" + printers: [SL1, M1] title: "CONNECTION FAILED" text: "Connection to Prusa servers failed, please try again later." id: "CONNECTION_FAILED" approved: true -- code: "10404" +- code: "XX404" + printers: [SL1, M1] title: "DOWNLOAD FAILED" text: "The download failed. Check the connection to the internet and try again." id: "DOWNLOAD_FAILED" approved: true # Deprecated from 1.8.0, use INVALID_PASSWORD -- code: "10405" +- code: "XX405" + printers: [SL1, M1] title: "INVALID API KEY" text: "Please turn on the HTTP digest (which is the recommended security option) or update the API key. You can find it in Settings > Network > Login credentials." id: "INVALID_API_KEY" approved: true # Deprecated from 1.8.0, use INVALID_PASSWORD -- code: "10406" +- code: "XX406" + printers: [SL1, M1] title: "UNAUTHORIZED" text: "The printer uses HTTP digest security. Please enable it also in your slicer (recommended), or turn off this security option in the printer. You can find it in Settings > Network > Login credentials." id: "UNAUTHORIZED" approved: true -- code: "10407" +- code: "XX407" + printers: [SL1, M1] title: "REMOTE API ERROR" text: "This request is not compatible with the Prusa remote API. See our documentation for more details." id: "REMOTE_API_ERROR" approved: true -- code: "10408" +- code: "XX408" + printers: [SL1, M1] title: "INVALID PASSWORD" text: "The password is incorrect. Please check or update it in: @@ -397,13 +452,16 @@ Errors: approved: false # SYSTEM 105xx # System - BSOD, ... -- code: "10500" +- code: "XX500" + printers: [SL1, M1] title: "PRINTER IS OK" text: "No problem detected. You can continue using the printer." id: "NONE" approved: true -- code: "10501" +- code: "XX501" + printers: [SL1, M1] + printers: [SL1, M1] title: "UNEXPECTED ERROR" text: "An unexpected error has occurred. @@ -415,80 +473,93 @@ Errors: id: "UNKNOWN" approved: true -- code: "10503" +- code: "XX503" + printers: [SL1, M1] title: "PRELOAD FAILED" text: "Image preloader did not finish successfully!" id: "PRELOAD_FAILED" approved: true # in 1.5.x, obsoleted by PROJECT_ERROR_* in 1.6.x -- code: "10504" +- code: "XX504" + printers: [SL1, M1] title: "OPENING PROJECT FAILED" text: "Opening the project failed, the file may be corrupted. Re-slice or re-export the project and try again." id: "PROJECT_FAILED" approved: true -- code: "10505" +- code: "XX505" + printers: [SL1, M1] title: "CONFIG FILE READ ERROR" text: "Failed to read the configuration file. Try to reset the printer. If the problem persists, contact our support." id: "CONFIG_EXCEPTION" approved: true -- code: "10506" +- code: "XX506" + printers: [SL1, M1] title: "PRINTER IS BUSY" text: "Another action is already running. Finish this action directly using the printer's touchscreen." id: "NOT_AVAILABLE_IN_STATE" approved: true -- code: "10507" +- code: "XX507" + printers: [SL1, M1] title: "INTERNAL ERROR" text: "Internal error (DBUS mapping failed), restart the printer. Contact support if the problem persists." id: "DBUS_MAPPING_ERROR" approved: true -- code: "10508" +- code: "XX508" + printers: [SL1, M1] title: "NO FILE TO REPRINT" text: "Error, there is no file to reprint." id: "REPRINT_WITHOUT_HISTORY" approved: true -- code: "10509" +- code: "XX509" + printers: [SL1, M1] title: "WIZARD FAILED" text: "The wizard did not finish successfully!" id: "MISSING_WIZARD_DATA" approved: true -- code: "10510" +- code: "XX510" + printers: [SL1, M1] title: "CALIBRATION FAILED" text: "The calibration did not finish successfully! Run the calibration again." id: "MISSING_CALIBRATION_DATA" approved: true -- code: "10511" +- code: "XX511" + printers: [SL1, M1] title: "UV CALIBRATION FAILED" text: "The automatic UV LED calibration did not finish successfully! Run the calibration again." id: "MISSING_UV_CALIBRATION_DATA" approved: true -- code: "10512" +- code: "XX512" + printers: [SL1, M1] title: "UV INTENSITY ERROR" text: "UV intensity not set. Please run the UV calibration before starting a print." id: "MISSING_UVPWM_SETTINGS" approved: true -- code: "10513" +- code: "XX513" + printers: [SL1, M1] title: "SETTING UPDATE CHANNEL FAILED" text: "Cannot set the update channel. Restart the printer and try again." id: "FAILED_UPDATE_CHANNEL_SET" approved: true -- code: "10514" +- code: "XX514" + printers: [SL1, M1] title: "UPDATE CHANNEL FAILED" text: "Cannot get the update channel. Restart the printer and try again." id: "FAILED_UPDATE_CHANNEL_GET" approved: true -- code: "10515" +- code: "XX515" + printers: [SL1, M1] title: "PRINT JOB CANCELLED" text: "The print job cancelled by the user." id: "WARNING_ESCALATION" @@ -496,13 +567,15 @@ Errors: # sl1fw/project/project.py # somewhere (filemanager?) -- code: "10516" +- code: "XX516" + printers: [SL1, M1] title: "INTERNAL MEMORY FULL" text: "Internal memory is full. Delete some of your projects first." id: "NOT_ENOUGH_INTERNAL_SPACE" approved: true -- code: "10517" +- code: "XX517" + printers: [SL1, M1] title: "ADMIN NOT AVAILABLE" text: "The admin menu is not available." id: "ADMIN_NOT_AVAILABLE" @@ -510,61 +583,71 @@ Errors: # sl1fw/project/project.py # filemanager -- code: "10518" +- code: "XX518" + printers: [SL1, M1] title: "FILE NOT FOUND" text: "Cannot find the selected file!" id: "FILE_NOT_FOUND" approved: true -- code: "10519" +- code: "XX519" + printers: [SL1, M1] title: "INVALID FILE EXTENSION" text: "File has an invalid extension! See the article for supported file extensions." id: "INVALID_EXTENSION" approved: true -- code: "10520" +- code: "XX520" + printers: [SL1, M1] title: "FILE ALREADY EXISTS" text: "File already exists! Delete it in the printer first and try again." id: "FILE_ALREADY_EXISTS" approved: true -- code: "10521" +- code: "XX521" + printers: [SL1, M1] title: "INVALID PROJECT" text: "The project file is invalid!" id: "INVALID_PROJECT" approved: true -- code: "10522" +- code: "XX522" + printers: [SL1, M1] title: "YOU SHALL NOT PASS" text: "This Wizard cannot be canceled, finish the steps first." id: "WIZARD_NOT_CANCELABLE" approved: true -- code: "10523" +- code: "XX523" + printers: [SL1, M1] title: "PRINT EXAMPLES MISSING" text: "Examples (any projects) are missing in the user storage. Redownload them from the 'Settings' menu." id: "MISSING_EXAMPLES" approved: true -- code: "10524" +- code: "XX524" + printers: [SL1, M1] title: "CALIBRATION LOAD FAILED" text: "Failed to load fans and LEDs factory calibration." id: "FAILED_TO_LOAD_FACTORY_LEDS_CALIBRATION" approved: true -- code: "10525" +- code: "XX525" + printers: [SL1, M1] title: "DATA PREPARATION FAILURE" text: "Failed to serialize Wizard data. Restart the printer and try again." id: "FAILED_TO_SERIALIZE_WIZARD_DATA" approved: true -- code: "10526" +- code: "XX526" + printers: [SL1, M1] title: "WIZARD DATA FAILURE" text: "Failed to save Wizard data. Restart the printer and try again." id: "FAILED_TO_SAVE_WIZARD_DATA" approved: true -- code: "10527" +- code: "XX527" + printers: [SL1, M1] title: "SERIAL NUMBER ERROR" text: "Serial numbers in wrong format! A64: %(a64)s @@ -573,134 +656,155 @@ Errors: id: "SERIAL_NUMBER_IN_WRONG_FORMAT" approved: true -- code: "10528" +- code: "XX528" + printers: [SL1, M1] title: "USB DRIVE NOT DETECTED" text: "No USB storage present" id: "NO_EXTERNAL_STORAGE" approved: true -- code: "10529" +- code: "XX529" + printers: [SL1, M1] title: "SETTING LOG DETAIL FAILED" text: "Failed to change the log level (detail). Restart the printer and try again." id: "FAILED_TO_SET_LOGLEVEL" approved: true -- code: "10530" +- code: "XX530" + printers: [SL1, M1] title: "DATA OVERWRITE FAILED" text: "Saving the new factory default value failed. Restart the printer and try again." id: "FAILED_TO_SAVE_FACTORY_DEFAULTS" approved: true -- code: "10531" +- code: "XX531" + printers: [SL1, M1] title: "DISPLAY TEST ERROR" text: "Error displaying test image." id: "FAILED_TO_DISPLAY_IMAGE" approved: true -- code: "10532" +- code: "XX532" + printers: [SL1, M1] title: "NO UV CALIBRATION DATA" text: "No calibration data to show!" id: "NO_UV_CALIBRATION_DATA" approved: true -- code: "10533" +- code: "XX533" + printers: [SL1, M1] title: "UV DATA EROR" text: "Data is from unknown UV LED sensor!" id: "DATA_FROM_UNKNOWN_UV_SENSOR" approved: true -- code: "10534" +- code: "XX534" + printers: [SL1, M1] title: "FIRMWARE UPDATE FAILED" text: "The update of the firmware failed! Restart the printer and try again." id: "UPDATE_FAILED" approved: true -- code: "10535" +- code: "XX535" + printers: [SL1, M1] title: "Display usage error" text: "No display usage data to show" id: "NO_DISPLAY_USAGE_DATA" approved: true -- code: "10536" +- code: "XX536" + printers: [SL1, M1] title: "HOSTNAME ERROR" text: "Failed to set hostname" id: "FAILED_TO_SET_HOSTNAME" approved: true -- code: "10537" +- code: "XX537" + printers: [SL1, M1] title: "PROFILE IMPORT ERROR" text: "Cannot import profile" id: "FAILED_PROFILE_IMPORT" approved: true -- code: "10538" +- code: "XX538" + printers: [SL1, M1] title: "PROFILE EXPORT ERROR" text: "Cannot export profile" id: "FAILED_PROFILE_EXPORT" approved: true # sl1fw/project/project.py -- code: "10539" +- code: "XX539" + printers: [SL1, M1] title: "CANNOT READ PROJECT" text: "Opening the project failed. The file is possibly corrupted. Please re-slice or re-export the project and try again." id: "PROJECT_ERROR_CANT_READ" approved: true # sl1fw/project/project.py -- code: "10540" +- code: "XX540" + printers: [SL1, M1] title: "NOT ENOUGHT LAYERS" text: "The project must have at least one layer" id: "PROJECT_ERROR_NOT_ENOUGH_LAYERS" approved: true # sl1fw/project/project.py -- code: "10541" +- code: "XX541" + printers: [SL1, M1] title: "PROJECT IS CORRUPTED" text: "Opening the project failed. The file is corrupted. Please re-slice or re-export the project and try again." id: "PROJECT_ERROR_CORRUPTED" approved: true # sl1fw/project/project.py -- code: "10542" +- code: "XX542" + printers: [SL1, M1] title: "PROJECT ANALYSIS FAILED" text: "Analysis of the project failed" id: "PROJECT_ERROR_ANALYSIS_FAILED" approved: true # sl1fw/project/project.py -- code: "10543" +- code: "XX543" + printers: [SL1, M1] title: "CALIBRATION PROJECT IS INVALID" text: "Calibration project is invalid" id: "PROJECT_ERROR_CALIBRATION_INVALID" approved: true # sl1fw/project/project.py -- code: "10544" +- code: "XX544" + printers: [SL1, M1] title: "WRONG PRINTER MODEL" text: "This project was prepared for a different printer" id: "PROJECT_ERROR_WRONG_PRINTER_MODEL" approved: true # sl1fw_fs/sources.py -- code: "10545" +- code: "XX545" + printers: [SL1, M1] title: "CANNOT REMOVE PROJECT" text: "Removing this project is not possible. The project is locked by a print job." id: "PROJECT_ERROR_CANT_REMOVE" approved: true -- code: "10546" +- code: "XX546" + printers: [SL1, M1] title: "DIRECTORY NOT EMPTY" text: "The directory is not empty." id: "DIRECTORY_NOT_EMPTY" approved: true -- code: "10547" +- code: "XX547" + printers: [SL1, M1] title: "LANGUAGE NOT SET" text: "The language is not set. Go to Settings -> Language & Time -> Set Language and pick preferred language." id: "LANGUAGE_ERROR" approved: true -- code: "10548" +- code: "XX548" + printers: [SL1, M1] title: "OLD EXPO PANEL" text: "Exposure screen that is currently connected has already been used on this printer. This screen was last used for approximately %(counter_h)d hours. @@ -709,8 +813,9 @@ Errors: id: "OLD_EXPO_PANEL" approved: true -- code: "10549" +- code: "XX549" # A generic error for crashed DBus services, parameters should specify which. + printers: [SL1, M1] title: "SYSTEM SERVICE CRASHED" text: "Something went wrong with the printer firmware. Please contact our support and do not forget to attach the logs. @@ -720,7 +825,8 @@ Errors: approved: true # BOOTLOADER xx6xx # -- code: "10601" +- code: "XX601" + printers: [SL1, M1] title: "BOOTED SLOT CHANGED" text: "The printer has booted from an alternative slot due to failed boot attempts using the primary slot. @@ -732,99 +838,115 @@ Errors: # WARNINGS 107xx # Category-less warnings -- code: "10700" +- code: "XX700" + printers: [SL1, M1] title: "NO WARNING" text: "There is no warning" id: "NONE_WARNING" approved: true -- code: "10701" +- code: "XX701" + printers: [SL1, M1] title: "UNKNOWN WARNING" text: "An unknown warning has occured. Restart the printer and try again. Contact our tech support if the problem persists." id: "UNKNOWN_WARNING" approved: true -- code: "10702" +- code: "XX702" + printers: [SL1, M1] title: "AMBIENT TEMP. TOO HIGH" text: "The ambient temperature is too high, the print can continue, but it might fail." id: "AMBIENT_TOO_HOT_WARNING" approved: true -- code: "10703" +- code: "XX703" + printers: [SL1, M1] title: "AMBIENT TEMP. TOO LOW" text: "The ambient temperature is too low, the print can continue, but it might fail." id: "AMBIENT_TOO_COLD_WARNING" approved: true -- code: "10704" +- code: "XX704" + printers: [SL1, M1] title: "CAN'T COPY PROJECT" text: "The internal memory is full, project cannot be copied. You can continue printing. However, you must not remove the USB drive during the print, otherwise the process will fail." id: "PRINTING_DIRECTLY_WARNING" approved: true # in 1.5.x, obsoleted by PRINTER_VARIANT_MISMATCH_WARNING in 1.6.x -- code: "10705" +- code: "XX705" + printers: [SL1, M1] title: "INCORRECT PRINTER MODEL" text: "The model was sliced for a different printer model. Reslice the model using the correct settings." id: "PRINTER_MODEL_MISMATCH_WARNING" approved: true -- code: "10706" +- code: "XX706" + printers: [SL1, M1] title: "NOT ENOUGH RESIN" text: "The amount of resin in the tank is not enough for the current project. Adding more resin will be required during the print." id: "RESIN_NOT_ENOUGH_WARNING" approved: true -- code: "10707" +- code: "XX707" + printers: [SL1, M1] title: "PARAMETERS OUT OF RANGE" text: "The print parameters are out of range of the printer, the system can try to fix the project. Proceed?" id: "PROJECT_SETTINGS_MODIFIED_WARNING" approved: true -- code: "10708" +- code: "XX708" + printers: [SL1, M1] title: "PERPARTES NOAVAIL WARNING" text: "Per-partes print not available." id: "PERPARTES_NOAVAIL_WARNING" approved: true -- code: "10709" +- code: "XX709" + printers: [SL1, M1] title: "MASK NOAVAIL WARNING" text: "Print mask is missing." id: "MASK_NOAVAIL_WARNING" approved: true -- code: "10710" +- code: "XX710" + printers: [SL1, M1] title: "OBJECT CROPPED WARNING" text: "Object was cropped because it does not fit the print area." id: "OBJECT_CROPPED_WARNING" approved: true # sl1fw/project/project.py -- code: "10711" +- code: "XX711" + printers: [SL1, M1] title: "PRINTER VARIANT MISMATCH WARNING" text: "The model was sliced for a different printer variant %(project_variant)s. Your printer variant is %(printer_variant)s." id: "PRINTER_VARIANT_MISMATCH_WARNING" approved: true -- code: "10712" +- code: "XX712" + printers: [SL1, M1] title: "RESIN LOW" text: "Measured resin volume is too low. The print can continue, however, a refill might be required." id: "RESIN_LOW" approved: true -- code: "10713" +- code: "XX713" + printers: [SL1, M1] title: "FAN WARNING" text: "Incorrect RPM reading of the %(failed_fans_text)s fan." id: "FAN_WARNING" approved: true -- code: "10714" +- code: "XX714" + printers: [SL1, M1] title: "EXPECT OVERHEATING" text: "Incorrect RPM reading of the %(failed_fans_text)s fan. The print may continue, however, there's a risk of overheating." id: "EXPECT_OVERHEATING" approved: true -- code: "10715" +- code: "XX715" + printers: [SL1, M1] title: "FILL THE RESIN" text: "Pour enough resin for the selected file into the tank and close the lid. The minimal amount of the resin is displayed on the touchscreen." id: "FILL_THE_RESIN"