Skip to content

Jura Ena Micro 90 Commands

Andrew J Freyer edited this page May 9, 2023 · 16 revisions

Introduction

Jura has implemented a transfer encoding that spreads data bytes through a number of other bytes. Explained here and here and here and here.

Unfortunately, each machine has a slighly different set of commands that it responds to and encodes its sensors differently. The following are inferred from testing, review of hydraulic system topology and review of schematics of other machines. I believe that these are correct, but it's likely there are some nuances I don't appreicate or haven't figured out yet.

Useful Commands

Command Response Presumed Acronym Description
"IC:" IC:hhhh Input Controller (??) Four (evidently) hexadecimal valus returned, corresponding to status of the input board
"RT:####" RT:0xhhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh Reihentest (??) Sixteen (evidently) hexadecimal values from EEPROM address specified at input
"RR:hh" RR:hhhh Read RAM (??) Possible ram values? Only some values change over time. [Investigating; not used]
"HZ:" HZ:bbbbbbbbbbb,hhhh,hhhh,hhhh,hhhh,hhhh,d,bbbbb Heißwasser-Zubereitung (??) Values related to hot water and steam preparation automations
"CS:" CS:hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh Circuits und Systeme (??) Sixteen (evidently) hexadecimal valus returned, corresponding digital system values and variables
"FA:hh" OK Funktion auswählen (??) Select a programmed operaiton of the machine to initiate (e.g., predetermined sequences of FN commands, like button presses or "brewgorup move to position")
"FN:hh" OK Funktion (??) Initate a mechanical function of the machine (be careful here)
"AS:" AS:hhhh hhhh,hhhh hhhh Analoger Sensor (??) Analog values of sensors (e.g., resistance of thermistors) [Investigating; not used]
"DI:" OK Drainage Init (??) Initialize the drainage/output valve (linear, servo-controlled, not ceramic valve)
"GB:" OK ?? Disable power board, shut down machine without rinsing
"MI:" OK ?? Drainage valve move to 1 position
"MC:" OK ?? Drainage valve move to 2 position
"MV:" OK ?? Drainage valve validate position; (e.g., cycle through throw of server to reposition)

Interpretation "IC:"

Received via UART as a string, so references are from left to right as indexes of the corresponding char array:

String Index Type Manipulation Intepretation
0 1-byte hex Convert to binary four bits correspond to error flags for reed switches connected to the input board
1 1-byte hex Convert to binary position output of flow meter
2 ??? ??? always zero??
3 1-byte hex ??? Some machine state representation; when 2, machine is can be ready; when 3 machine is moving water
  • IC [0]

    • Binary representation of hex value == four binary flags. From left to right (again, referenced as char array here; zero index on left; h = bbbb = 0123

      • [0] = bean hopper lid state; 0 = open; 1 = OK (momentary switch under vent on top of machine is closed)

      • [1] = water tank error; 0 = OK, 1 = problem (reed switch is in presence of foating magnet in reservior)

      • [2] = bypass doser; 0 = OK; 1 = bypass doser door open (reed switch is in presence of magnet in door)

      • [3] = drip tray removed; 1 = seated properly; 0 = open (momentary switch behind tray front is closed)

  • IC [1]

    • Apparently a flow meter. Value cycles through odd values when water is moving through the system. Hexidecimal 0xF appears to be the state that represents "confirmed, no flow." The value can stop changing on other values though, and does not appear to consistenty reset to 0xF after an operation has stopped. Sometimes, it will reset to 0xF immediately after flow stops, other times it will take 180 seconds to reset. This value is captured in the Arduino sketch and wrapped in a 5 second timeout.
  • IC [2]

    • Unknown, appears to be always zero.
  • IC [3]

    • Some input board status flag; still investigating. When value == 2, system is ready.

Interpretation "RT:0000"

This is the first word of the EEPROM at address 0000. Almost every byte is useful, but many have undiscovered purposes. Again, these are output by the machine as a string, so the indexing is from left to right, as an array of characters. Index 0 here is the left-most value output. Specifically:

RT:hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh 
   0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15
String Index Type Manipulation Intepretation
0 4-byte hex Convert to decimal lifetime count of espresso
1 4-byte hex Convert to decimal lifetime count of double espresso [not an option; always zero]
2 4-byte hex Convert to decimal lifetime count of coffee
3 4-byte hex Convert to decimal lifetime count of double coffee [not an option; always zero]
4 4-byte hex Convert to decimal lifetime count of cappuccino
5 4-byte hex Convert to decimal lifetime count of macchiato
6 4-byte hex ??? ???
7 4-byte hex Convert to decimal lifetime count of rinse cycles (also referred to as low pressure pump operations)
8 4-byte hex Convert to decimal lifetime count of cleaning cycles
9 4-byte hex Convert to decimal lifetime count of descaling cycles (???)
10 4-byte hex ??? ???
11 4-byte hex ??? ???
12 4-byte hex ??? ???
13 4-byte hex Convert to decimal ???
14 4-byte hex Convert to decimal count of spent grounds grounds since last tray empty
15 4-byte hex Convert to decimal count preparations since last clean

Interpretation "RT:0010"

This is the first word of the EEPROM at address 0010. Again, almost every byte is useful, but many have undiscovered purposes. As with other outputs, these are output by the machine as a string, so the indexing is from left to right, as an array of characters. Index 0 here is the left-most value output. Specifically:

RT:hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh 
   0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15
String Index Type Manipulation Intepretation
0 4-byte hex Convert to decimal high pressure pump operations (preparations + milk cleaning and venturi and steam operations)
1 4-byte hex ??? ???
2 4-byte hex ??? ???
3 4-byte hex Convert to decimal lifetime count of milk foam preparations (separate from milked coffee drinks)
4 4-byte hex Convert to decimal lifetime count of hot water preprations
5 4-byte hex Convert to decimal lifetime count of grinder operations
6 4-byte hex ??? ???
7 4-byte hex ??? ???
8 4-byte hex ??? ???
9 4-byte hex ??? ???
10 4-byte hex ??? Appears to be 90 when a filter is required [under investigation]
11 4-byte hex Convert to decimal lifetime count of m-clean operations
12 4-byte hex ??? large number that iterates by 2s for each operation
13 4-byte hex ??? ???
14 4-byte hex ??? ???
15 4-byte hex ??? ???

Interpretation "RT:0020"

Investigated RT:0020 through 0060, and very few values appear to regularly change; RT:0020 worth continued investigation, but others likely not. [under investigation]

RT:hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh 
   0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15
String Index Type Manipulation Intepretation
0 4-byte hex ??? ???
1 4-byte hex ??? ???
2 4-byte hex ??? ???
3 4-byte hex ??? ???
4 4-byte hex ??? ???
5 4-byte hex ??? ???
6 4-byte hex ??? ???
7 4-byte hex ??? ???
8 4-byte hex ??? ???
9 4-byte hex ??? ???
10 4-byte hex ??? ???
11 4-byte hex ??? ???
12 4-byte hex ??? ???
13 4-byte hex ??? ???
14 4-byte hex ??? ???
15 4-byte hex ??? ???

Interpretation "RR:XX"

Investigated RR:00 through FF, and very few values appear to regularly change, some change cyclically. [under investigation]

RT:hhhh
   0   
String Index Type Manipulation Intepretation
0 4-byte hex ??? ???

Interpretation "HZ:"

These values appear to relate to preparation of hot water and/or steam beverages. Not related just temperature, not related just to water. Presume the acronym is similar to Heißwasser-Zubereitung.

NOTE: Spaces added below for readability; spaces do not appear in output from machine. Commas do appear in the output from the machine.

RT:bbbbbbbbbbb, hhhh, hhhh, hhhh, hhhh, hhhh, d, bbbbb
   ^            ^     ^     ^     ^     ^     ^  ^
   0            12    17    22    27    32    37 38    <- string index
   0            11    12    13    14    15    16 17    <- parse index (binary as individual numbers, hex as ints)
String Index Start Type Manipulation Intepretation
0 11-bit binary ??? Bitfield described below; not all bits discovered
11 ","
12 4-byte hex ??? Does not appear to change ??
16 ","
17 4-byte hex ??? Linear actuator state position & output valve position, but not all bits are captured or understood at this time, specifically when converted to binary only 128, 256, and 512 appear to be related to output valve positions; remainder are unknown. May be related to stepper motor control, many seem to shift in pairs AA, BB, etc.
21 ","
22 4-byte hex decimal Last dispense (resets to zero before new preparation)
26 ","
27 4-byte hex decimal Thermoblock temperature * 10
31 ","
32 4-byte hex ??? ??? / seems to be equivalent to RT:0000 [9]??
36 ","
37 1 decimal ??? Integer position state of the ceramic valve; Know from part research (see Schematics that the ceramic valve can take roughly six different positions, which are divided between steam modes and non-steam modes (defined by water temperature coming out of the thermoblock). Positions are hot water, brew, block, vent, venturi, or steam.
38 ","
39 5-bit binary ??? Each bit corresponds to an error, some error states not known here.
  • HZ [0] - [10]

    • Binary, referenced as a char array (indexing from left to right, or MSB first as a binary number)

      • [0] = ??? always asserted?
      • [1] = ???
      • [2] = Rinse required == 1; After water rinse, goes to 0; durable on power loss
      • [3] = ??? may be 1 when venturi is active, maybe milk related/steam related?
      • [4] = Thermoblock preheated/at temperature
      • [5] = Brewgroup in INIT position
      • [6] = ??? may relate to brewing?
      • [7] = ??? unknown; on observation, does not appear to be related to rinse or water
      • [8] = ??? unknown; on observation, does not appear to be related to rinse or water
      • [9] = ???
      • [10] = ???
  • HZ [39]

    • Binary, duplicate data to grounds hopper error.
  • HZ [40]

    • Binary, ???
  • HZ [41]

    • Binary, duplicate data to water reservoir error.
  • HZ [42]

    • Binary, ???
  • HZ [43]

    • Binary, duplicate data to tray error.

Interpretation "CS:"

THIS SECTION UNDER CONSTRUCTION - SEE CODE


Interpretation "AS:"

THIS SECTION UNDER CONSTRUCTION - SEE CODE


Interpretation "FN:XX"

THIS SECTION UNDER CONSTRUCTION - SEE CODE


Interpretation "FA:XX"

THIS SECTION UNDER CONSTRUCTION - SEE CODE

Clone this wiki locally