In a post last week I wrote on my exploits into “black-box” reverse-engineering my Tassimo Hot Beverage Dispensing System. In the article, I detailed how I began probing the Tassimo’s inner-workings by analyzing the barcodes that are printed on the surface of the beverage T-DISC pods with a barcode scanner and a little ingenuity. While I did discover that each disc is encoded with a six-digit number, I ran into a bit of a wall as I couldn’t discern any patterns that would correlate the codes to the machine’s functions of temperature, water and brew cycle.
Stumped, I decided that I should see what help I could get from the most definitive reverse-engineering community I could think of: Makezine.com. The folks in charge of the blog there shared my curiosity, and as a result I not only had a whack of hits on the old blog, but also got some really interesting and tantalizing leads to crack the Tassimo code!
Patents, 13 Bits and Operational Parameters
Of the feedback I received, one in particular has contributed significantly to advancing my understanding of how the barcodes on the T-DISCs relate to the operation of the Tassimo machine. An anonymous benefactor (!!) provided me with this link to the original patent for the Tassimo via Google Patent Search.
Ok, first: D’oh! Second: Google has a Patent Search? Excellent!
Turning to page 36 I gleaned a major break in the case:
The cartridge 1 comprises a code provided on or in the cartridge 1 representing the operational parameters required for the optimal dispensation of the beverage in that cartridge 1. The code is in binary format and comprises a plurality of data bits corresponding to the variables stored in the control processor memory. Table 3 illustrates how 13 bits of data can be used to represent the necessary variables for the operational parameters described above.
Bingo!
Looking at the table, I discovered that contrary to my first assumption, there are five, not three operational parameters that the Tassimo uses to brew a beverage which are in turn programmed via segments of bits in a code:
- Water temperature (Bits 0,1)
- Cartridge charge (Bits 2,3)
- Beverage volume (Bits 4,5,6,7)
- Flow rate (Bits 8,9,10)
- Purge (Bits 11,12)
As the patent describes, each parameter is “programmed” via a series of 13 bits, with an additional 3 bits for error checking:
The code on or in cartridge 1 will normall comprise one or more extra data bits for error checking. In one example, a 16 bit code is provided. For example, using the variables listed in Table 3, a cartridge 1 bearing the code “1000100011110” would have the following operational parameters:
10 – Water temperature of 83* C
00 – Fast charge with soak
1000 – Dispensed drink volume of 150 ml
111 – Flow rate equals 100%
10 – Fast air flow purge / short period
Cool. So, what does that code look like in regular base-10? Easy-peasy: Paste the binary into your calculator thus:

Convert to decimal and we get:

Presto! Now we have another piece of the puzzle – only four of the six digits in the barcodes are relevant to controlling the Tassimo’s five operating parameters. We’re thus left to assume that the remaining two digits must be dedicated to some form of error checking. I’ll revisit this later as there are a number of methods for applying checksums that need to be considered.
Applying the 13–Bit Coding Scheme to the Sample T-DISCS
Given what we know about the encoding scheme, it’s a relatively simple process to use a calculator to break down the deciphered barcodes into binary and begin mapping them to the operational parameter table from the patent application. Of course, we need to know which four digits are relevant to the encoding. I took an educated guess and went with the leftmost or most significant four digits. Here’s my results:

These findings are close approximations to the observations I recorded earlier – but they are inconsistent, if not totally wrong. Here’s what I’ve noticed:
- The Temperature parameter is perhaps the most consistent with what I recorded given I was using an analog meat thermometer!
- The Charge parameter is only correct – I think – for the Columbian and Cafe Crema programs; it is entirely wrong for the Espresso program which definitely has a soak stage, and for the Latte and Cappucino programs which have no soak program whatsoever.
- The Volume parameter is wildly inconsistent with the actual results for each program. For example, both the Columbian and Crema programs produce drinks with 250ml of water – not 150ml and 210ml respectively. Similarly, the Espresso program uses 60ml of water, not 170ml, and the Latte and Cappucino discs use 148ml and 118ml of water.
- Given that I can’t reliably project at this point that bits 3–5 control flow (ie. can’t experiment) I’m running with the Flow percentages being fairly accurate from what I’ve observed, with the exception of the Cappucino program, which I think has a similar flow to the Latte disc.
- The Purge cycle seems consistent with the observations I’ve made about how long the machine seems to run “dry” after expunging all liquid. I do need to verify and quantify this better.
Conclusions
Given that we’re seeing such inconsistency, three possiblities exist from our efforts so far:
- First, the operational parameter table in the patent application is a little different from what made it into the programming of the retailed Tassimo machines. This could mean that the order of the bits is wrong, or that the number of options within a parameter, eg. water volume, is actually less than suggested.
- Second, the rightmost four digits of the code should be decoded.
- Third, some additional encoding is performed by the Tassimo’s control unit.
Tackling the first possibility will take a bit of methodical guesswork; the second possibility I tried out with the Columbian program and found the results even more out-of-step with my recorded findings, so I discarded them. The third possibility is difficult to assess – I think it plausible, but not likely, as it makes programming the discs even more challenging than it needs to be.
So, back to the drawing board! I think we’re close – really close – to solving the riddle!