Hi,

compiled and burned.
Why do you set "car_ambient_temp" twice?
--------------snip---------------
    case 0x801f:  // Outside temperature (filtered)
      car_ambient_temp = ((int)value >> 1) - 0x28;
      break;
.
.
    case 0x0046:  // Ambient temperature
      car_ambient_temp = (signed char)((int)value - 0x28);
      break;
--------------snap---------------
I comment 0046 out.
AND: there is NO /2 in the calc necessary. Only -40 needed.

Log attached.