I see there is not much interest in this, but I choose to update this anyway.
I have created some macros to reveal hardware errors on temperature measurements. My first attempt was not very good, but now I think I have found a better way. The macros compare the temperature now, with the temperature 0.3 seconds ago. A large difference will reveal a problem. First, the macros as I use them:
[gcode_macro L410]
variable_beold: 0.00
variable_bedif: 0.00
variable_e0old: 0.00
variable_e0dif: 0.00
variable_e1old: 0.00
variable_e1dif: 0.00
variable_myold: 0.00
variable_mydif: 0.00
gcode:
M105
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=beold VALUE={printer.heater_bed.temperature}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=bedif VALUE=0.0
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e0old VALUE={printer.extruder.temperature}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e0dif VALUE=0.0
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e1old VALUE={printer.extruder1.temperature}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e1dif VALUE=0.0
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=myold VALUE={printer["temperature_fan my_temp_fan"].temperature}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=mydif VALUE=0.0
G4 P300
{% for i in range(100) %}
L411
G4 P300
{% endfor %}
L412
[gcode_macro L411]
gcode:
M105
{% set dib = printer.heater_bed.temperature - printer["gcode_macro L410"].beold %}
{% if dib < 0 %}
{% set dibb = 0 - dib %}
{% else %}
{% set dibb = dib %}
{% endif %}
{% if dibb > printer["gcode_macro L410"].bedif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=bedif VALUE={dibb}
{% endif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=beold VALUE={printer.heater_bed.temperature}
{% set dif = printer.extruder.temperature - printer["gcode_macro L410"].e0old %}
{% if dif < 0 %}
{% set diff = 0 - dif %}
{% else %}
{% set diff = dif %}
{% endif %}
{% if diff > printer["gcode_macro L410"].e0dif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e0dif VALUE={diff}
{% endif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e0old VALUE={printer.extruder.temperature}
{% set dig = printer.extruder1.temperature - printer["gcode_macro L410"].e1old %}
{% if dig < 0 %}
{% set digg = 0 - dig %}
{% else %}
{% set digg = dig %}
{% endif %}
{% if digg > printer["gcode_macro L410"].e1dif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e1dif VALUE={digg}
{% endif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=e1old VALUE={printer.extruder1.temperature}
{% set dim = printer["temperature_fan my_temp_fan"].temperature - printer["gcode_macro L410"].myold %}
{% if dim < 0 %}
{% set dimm = 0 - dim %}
{% else %}
{% set dimm = dim %}
{% endif %}
{% if dimm > printer["gcode_macro L410"].mydif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=mydif VALUE={dimm}
{% endif %}
SET_GCODE_VARIABLE MACRO=L410 VARIABLE=myold VALUE={printer["temperature_fan my_temp_fan"].temperature}
M118 Difference Bed {dibb} E0 {diff} E1 {digg} My {dimm}
[gcode_macro L412]
gcode:
M118
M118 Max Dif Bed {printer["gcode_macro L410"].bedif
} E0 {printer["gcode_macro L410"].e0dif
} E1 {printer["gcode_macro L410"].e1dif
} MY {printer["gcode_macro L410"].mydif}
[gcode_macro L420]
gcode:
M118 Temp {printer["temperature_fan my_temp_fan"].temperature}
And here is the result after a test, slightly embellished for easier reading:
Send: L410
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.02 E0 0.00 E1 0.01 My 0.26
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.37
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.36
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.13
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.08
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.31
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.03
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.22
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.14
Difference Bed 0.02 E0 0.01 E1 0.00 My 0.04
Difference Bed 0.03 E0 0.01 E1 0.01 My 0.13
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.06
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.05
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.25
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.11
Difference Bed 0.01 E0 0.02 E1 0.01 My 0.51
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.29
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.43
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.22
Difference Bed 0.01 E0 0.01 E1 0.02 My 0.03
Difference Bed 0.02 E0 0.01 E1 0.01 My 0.25
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.17
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.31
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.42
Difference Bed 0.02 E0 0.01 E1 0.01 My 0.26
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.35
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.67
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.44
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.0
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.02
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.07
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.14
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.43
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.56
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.01
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.08
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.36
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.1
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.0
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.03
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.32
Difference Bed 0.02 E0 0.01 E1 0.00 My 0.23
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.02
Difference Bed 0.02 E0 0.01 E1 0.01 My 0.3
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.31
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.2
Difference Bed 0.01 E0 0.02 E1 0.02 My 0.4
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.32
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.35
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.51
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.16
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.08
Difference Bed 0.02 E0 0.00 E1 0.01 My 0.03
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.34
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.4
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.03
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.12
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.42
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.65
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.28
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.11
Difference Bed 0.00 E0 0.00 E1 0.02 My 0.16
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.17
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.18
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.32
Difference Bed 0.00 E0 0.01 E1 0.02 My 0.22
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.27
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.33
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.3
Difference Bed 0.02 E0 0.00 E1 0.00 My 0.2
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.21
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.04
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.27
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.14
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.0
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.06
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.09
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.14
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.01
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.08
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.32
Difference Bed 0.00 E0 0.00 E1 0.00 My 0.19
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.34
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.4
Difference Bed 0.00 E0 0.01 E1 0.00 My 0.11
Difference Bed 0.01 E0 0.00 E1 0.00 My 0.13
Difference Bed 0.01 E0 0.01 E1 0.01 My 0.03
Difference Bed 0.00 E0 0.00 E1 0.01 My 0.14
Difference Bed 0.01 E0 0.01 E1 0.00 My 0.02
Difference Bed 0.02 E0 0.01 E1 0.01 My 0.14
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.12
Difference Bed 0.01 E0 0.01 E1 0.02 My 0.33
Difference Bed 0.00 E0 0.01 E1 0.01 My 0.27
Difference Bed 0.01 E0 0.00 E1 0.01 My 0.03
Recv:
Max Dif Bed 0.03 E0 0.02 E1 0.02 MY 0.67
The measurements after “MY” are the input that BTT has intended for Extruder1 to use (HOT1). It is quite clear to see that that input has problems. And with such problems with the temperature measurement, it becomes difficult to get a stable temperature, naturally enough.