Gaggia Classic Boiler: step response, lag and temperature drop rate

Partly for my own notes, here are the results of some simple experiments with the Gaggia Classic boiler, to better understand its behaviour. Prior to these tests, the machine started out at ambient temperature of around 21°C. The temperature sensor is the TSIC 306 mounted in the same position as the original brew thermostat. There was no portafilter fitted. The tests were carried out on 240V AC mains in the UK, and this is the original Gaggia Classic with an Aluminium boiler.

This first graph shows the temperature (blue line) in °C versus time in seconds for a step input of heat at full power for 4s. The red line shows the timing of the heat pulse. Note the lag of about 4s before any measurable change in temperature after the element is switched on. In this example, the starting temperature was 21.7°C, the peak temperature was 29.8°C and the temperature rise was 8.1°C.


This second graph shows a step input of heat at full power for 8s. Again, there is a lag of about 3s before the temperature changes. Here the starting temperature was 23.2°C, the peak temperature 39.1°C and the temperature rise was 15.9°C. The original data can be downloaded as a CSV file.


Here’s a longer sequence, showing the first 35 seconds of the boiler heating up from “cold” after the heating elements are first switched on. The heating elements were on for the full duration of the graph below. Again, it takes 4 seconds before the first change in measured temperature. After 12 seconds, the temperature rise becomes almost linear, with a rate of increase of about 1.83°C/s (straight line fit to a linear subset of the data in Excel). The original data can be downloaded as a CSV file.


For the final test, the machine started at about 26.9°C and was driven up to 93°C under PID control then allowed to naturally cool down, to see how fast the temperature drops. Again, the data can be downloaded as a CSV file.


The initial temperature drop from 92.9°C to 90°C takes 29.25s, which is about 1°C every 10 seconds (0.099°C/s), within the small region between 90°C and 93°C where our temperature controller operates.

4 thoughts on “Gaggia Classic Boiler: step response, lag and temperature drop rate”

  1. Dear James,

    for a long time now i followed your (and similar projects) of building a “smart” espresso machine taylored for crazy coffee-persons needs an starting from zero i decided (much to the joy of my wife) to completely dissassemble a nuova simonelli oscar (hx-machine) and control it via a raspbberry pi, being able to steer the pump, control temps and so on. Since im a complete noob in the electronics and programming field (but time is of no matter, ill stick with it) this is destined to become a complete desaster – nonetheless i am going head on.

    Would it be possible to ask you one or two questions from time to time when i get totally stuck? Thanks in advance…

    Cheers Vincent

    1. Hi Vincent
      It’s always good to meet a fellow coffee-nerd 🙂
      Yes, certainly – I’ll email you this evening so we can correspond by email, it will be easier 😉
      Kind regards

  2. Hi James,

    Rod here, again. I implemented a PID on my gaggia classic to control the boiler temp. I researched a lot in coffee forums and people talks about an offset of 8°C between the temperature measurement at thermostat location and actual temperature inside the boiler.

    Of course in the long term, that offset should be tend to 0°C.

    But for now i set my PID with that +8°C offset in mind, i mean, i like 92°C brew temp so my setpoint is 100°C.

    Have u researched about that offset?


  3. I haven’t researched the issue of whether there’s a temperature offset (but I’ve read similar in the forums).
    However, I can only speak from experience in that I’ve been using a set-point of 93ºC for a few years and that gives great results for me personally. The best way to judge is to pull some shots and taste the results I’d say 😉

Leave a Reply to james Cancel reply

Your email address will not be published. Required fields are marked *