Control your Jura coffee machine

Thanks guys. I have had some success with the Jura X9 Impressa.
There is a connector on the steam generator relay board beside the DB9 connector.
For the life of me, I could not make heads or tails of the read eeprom responses - they do not seem to reflect the brew counter counts shown on the display. Also the tray water/status is inconsistent and not representative of the machine.

The important part is that I can brew products and turn the machine on and off.
I used a NodeMCU clone without level shifters, getting the power from the same header (5v) to vin pin, and knock on wood - it’s chooching away with the 5v Rx and 3v Tx.

I created alexa voice routines to properly stack the multi-brews required and used the scheduler component to turn the machine on and off on work-mornings automatically.

# disable serial logging when using GPIO01/03
logger:
  baud_rate: 0
uart:
  tx_pin: GPIO1
  rx_pin:
    number: GPIO3
    inverted: no
  baud_rate: 9600
  #debug:
    #direction: BOTH
    #dummy_receiver: false
    #after:
    #  delimiter: "\n"
    #sequence:
    #  - lambda: UARTDebug::log_string(direction, bytes);
  id: uart_bus
  #rx_buffer_size: 512

#stream_server:
#   uart_id: uart_bus
#   port: 1234

switch:
  - platform: template
    name: 'Coffee Maker'
    icon: "mdi:coffee-maker"
    id: jura_on_off_switch
    turn_on_action:
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFF, 0xDB, 0xDF]  ## 'N'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xFF, 0xDB]  ## '1'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
    turn_off_action:
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFF, 0xDB, 0xDF]  ## 'N'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFB, 0xDB, 0xFF, 0xDB]  ## '2'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
    optimistic: true
    assumed_state: true
button:
  - platform: template
    name: 'Select Decaffe'
    icon: "mdi:cup-water"
    id: jura_select_decaffe
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFF, 0xDB, 0xFF, 0xDB]  ## '3'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
      - delay: 1000ms
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFF, 0xDB, 0xFF, 0xDB]  ## '3'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Coffee'
    icon: "mdi:cup-water"
    id: jura_make_coffee
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xFF, 0xDB]  ## '1'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Espresso'
    icon: "mdi:cup-water"
    id: jura_make_espresso
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFB, 0xDB, 0xFF, 0xDB]  ## '2'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Double'
    icon: "mdi:cup-water"
    id: jura_make_double
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDB, 0xDF, 0xFF, 0xDB]  ## '4'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'

sensor:
  - platform: uptime
    name: "Uptime"

  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: 60s

Thanks guys. I have had some success with the Jura X9 Impressa.
There is a connector on the steam generator relay board beside the DB9 connector.
For the life of me, I could not make heads or tails of the read eeprom responses - they do not seem to reflect the brew counter counts shown on the display. Also the tray water/status is inconsistent and not representative of the machine. The commands do come back starting with a lower-case of what I sent… so it’s not a serial line readback issue as far as I can tell.

The important part is that I can brew products and turn the machine on and off.
I used a NodeMCU clone without level shifters, getting the power from the same header (5v) to vin pin, and knock on wood - it’s chooching away with the 5v Rx and 3v Tx.

I created alexa voice routines to properly stack the multi-brews required and used the scheduler component to turn the machine on and off on work-mornings automatically.

# disable serial logging when using GPIO01/03
logger:
  baud_rate: 0
uart:
  tx_pin: GPIO1
  rx_pin:
    number: GPIO3
    inverted: no
  baud_rate: 9600
  #debug:
    #direction: BOTH
    #dummy_receiver: false
    #after:
    #  delimiter: "\n"
    #sequence:
    #  - lambda: UARTDebug::log_string(direction, bytes);
  id: uart_bus
  #rx_buffer_size: 512

#stream_server:
#   uart_id: uart_bus
#   port: 1234

switch:
  - platform: template
    name: 'Coffee Maker'
    icon: "mdi:coffee-maker"
    id: jura_on_off_switch
    turn_on_action:
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFF, 0xDB, 0xDF]  ## 'N'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xFF, 0xDB]  ## '1'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
    turn_off_action:
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFF, 0xDB, 0xDF]  ## 'N'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFB, 0xDB, 0xFF, 0xDB]  ## '2'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
    optimistic: true
    assumed_state: true
button:
  - platform: template
    name: 'Select Decaffe'
    icon: "mdi:cup-water"
    id: jura_select_decaffe
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFF, 0xDB, 0xFF, 0xDB]  ## '3'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
      - delay: 1000ms
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFF, 0xDB, 0xFF, 0xDB]  ## '3'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Coffee'
    icon: "mdi:cup-water"
    id: jura_make_coffee
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xFF, 0xDB]  ## '1'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Espresso'
    icon: "mdi:cup-water"
    id: jura_make_espresso
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xFB, 0xDB, 0xFF, 0xDB]  ## '2'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'
  - platform: template
    name: 'Brew Double'
    icon: "mdi:cup-water"
    id: jura_make_double
    on_press:
      - uart.write: [0xFB, 0xDF, 0xDB, 0xDF]  ## 'F'
      - delay: 8ms
      - uart.write: [0xDF, 0xDB, 0xDB, 0xDF]  ## 'A'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xFF, 0xDB]  ## ':'
      - delay: 8ms
      - uart.write: [0xDB, 0xDB, 0xFF, 0xDB]  ## '0'
      - delay: 8ms
      - uart.write: [0xDB, 0xDF, 0xFF, 0xDB]  ## '4'
      - delay: 8ms
      - uart.write: [0xDF, 0xFF, 0xDB, 0xDB]  ## '\r'
      - delay: 8ms
      - uart.write: [0xFB, 0xFB, 0xDB, 0xDB]  ## '\n'

sensor:
  - platform: uptime
    name: "Uptime"

  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: 60s