       .on("job_upload_progress_changed", @_renderProgressBar)
       .on("sensor_changed", @_onSensorChanged)
       .on("target_temp_changed", @_onTargetTempChanged)
+      .on("target_temp_progress_changed", @_onTargetTempProgressChanged)
       .on("job_progress_changed", @_onJobChanged)
       .on("ack", @_onAck)
       .on("construct_error", @_onError)

  _lHeader: ->
    fields = []
    for k, v of @_sensors
      fields.push "#{k.capitalize()}: #{v} / #{@_targetTemp[k]||0}\u00B0C"
    fields.join("  ")

  _rHeader: ->

    @_targetTemp[@_sensorMap[k]] = v for k, v of data
    @cli.render()

  _onTargetTempProgressChanged: (data) =>
    @_targetTempEta[@_sensorMap[k]] = v for k, v of data
    @cli.render()

  _onSensorChanged: (data) =>
    @_sensors[data.name] = data.value
    @cli.render()
