1010class FirmwareBrokenChecks (object ):
1111 @classmethod
1212 def as_dict (cls ):
13- return dict (checks = (CbdCheck (), ZwlfCheck ()),
13+ return dict (checks = (CbdCheck (), ZwlfCheck (), CrealityDoubleTempCheck (), CrealityEqualsTempCheck () ),
1414 message = gettext ("Your printer's firmware is known to have a broken implementation of the "
15- "communication protocol. This will cause print failures. You'll need to "
16- "take additional steps for OctoPrint to work with it." ),
15+ "communication protocol. This may cause print failures or other annoyances. "
16+ "You'll need to take additional steps for OctoPrint to fully work with it." ),
1717 severity = Severity .INFO )
1818
1919
@@ -29,3 +29,30 @@ def _is_match(self, line):
2929class ZwlfCheck (CbdCheck ):
3030 name = "zwlf"
3131 FRAGMENT = "ZWLF make it" .lower ()
32+
33+
34+ class CrealityDoubleTempCheck (LineCheck ):
35+ name = "creality_double_temp"
36+ url = "https://faq.octoprint.org/warning-firmware-broken-creality-double-temp"
37+
38+ def m115 (self , name , data ):
39+ # we cannot stop scanning after an M115 report as we might not yet have seen a temperature report then
40+ pass
41+
42+ def _is_match (self , line ):
43+ # broken report: TT::27.9327.93 //0.000.00 BB::39.6739.67 //0.000.00 @@::00 BB@@::00
44+ return "TT::" in line
45+
46+ def _is_ruled_out (self , line ):
47+ # first thing that looks like a proper report stops scanning
48+ return ' T:' in line or line .startswith ('T:' ) or ' T0:' in line or line .startswith ('T0:' ) \
49+ or ((' B:' in line or line .startswith ('B:' )) and not 'A:' in line )
50+
51+
52+ class CrealityEqualsTempCheck (CrealityDoubleTempCheck ):
53+ name = "creality_equals_temp"
54+ url = "https://faq.octoprint.org/warning-firmware-broken-creality-equals-temp"
55+
56+ def _is_match (self , line ):
57+ # broken report: ==T:145.66 /210.00 ==B:60.15 /60.00 @:127 B@:0
58+ return "==T:" in line
0 commit comments