Giter Site home page Giter Site logo

tillfleisch / esphome-philips-smart-coffee Goto Github PK

View Code? Open in Web Editor NEW
146.0 11.0 23.0 1.37 MB

ESPHome components which implement a Philips Series 2200/3200 Coffee Machine into HomeAssistant. Capable of brewing automatic coffee.

License: Other

C++ 87.41% Python 12.59%
automation coffee coffee-machine esphome homeassistant philips

esphome-philips-smart-coffee's Introduction

ESPHome Smart Coffee (Philips Series 2200/3200) CI

This project integrates a Philips Series 2200/3200 Coffee Machine into into Home Assistant through ESPHome. This component has been developed on a Philips EP2220 and an ESP8266 but it will happily run on an ESP32. Currently supported Coffee Machine models include:

Series Model Number
Series 2200 EP2220, EP2235
Series 3200 EP3243, EP3246

My modified EP2220: Modified Coffee Machine More information about the PCB used in this image is available here.

This component provides a Power Switch, a Status sensor and various Buttons which simulate user input as well as a Number component to customize beverage settings such as size and strength. The Power Switch can be used to turn on the coffee machine with and without a cleaning cycle during startup.

Provided entities in HomeAssistant

You might break/brick your coffee machine by modifying it in any way, shape or form. If you want to use this component, do so at your own risk.

Configuration variables

A example configuration can be found here

Philips Coffee Machine

  • id(Required, string):Controller ID which will be used for entity configuration.
  • display_uart(Required, string): ID of the UART-Component connected to the display unit
  • mainboard_uart(Required, string): ID of the UART-Component connected to the mainboard
  • power_pin(Required, Pin): Pin to which the MOSFET/Transistor is connected. This pin is used to temporarily turn of the display unit.
  • invert_power_pin(Optional: boolean): If set to true the output of the power pin will be inverted. Defaults to false.
  • power_trip_delay(Optional: Time): Determines the length of the power outage applied to the display unit, which is to trick it into turning on. Defaults to 500ms.
  • power_message_repetitions(Optional: uint): Determines how many message repetitions are used while turning on the machine. On some hardware combinations a higher value such as 25 is required to turn on the display successfully. Defaults to 5.
  • language(Optional: int): Status sensor language. Select one of en-US, de-DE, it-IT. Defaults to en-US.
  • model(Optional: int): Different models or revisions may use different commands. This option can be used to specify the command set used by this component. Select one of EP_2220, EP_2235, EP_3243, EP_3246. Defaults to EP_2220.

Philips Power switch

  • controller_id(Required, string): The Philips Coffee Machine-Controller to which this entity belongs
  • clean(Optional: boolean): If set to true the machine will perform a cleaning cycle during startup. Otherwise the machine will power on without cleaning. Defaults to true.
  • All other options from Switch

Action Button

  • controller_id(Required, string): The Philips Coffee Machine-Controller to which this entity belongs
  • action(Required, int): The action performed by this button. Select one of SELECT_COFFEE, MAKE_COFFEE, SELECT_ESPRESSO, MAKE_ESPRESSO, SELECT_HOT_WATER, MAKE_HOT_WATER, SELECT_STEAM, MAKE_STEAM, SELECT_CAPPUCCINO, MAKE_CAPPUCCINO, SELECT_LATTE, MAKE_LATTE, SELECT_AMERICANO, MAKE_AMERICANO, BEAN, SIZE, MILK, AQUA_CLEAN, CALC_CLEAN, PLAY_PAUSE. Note that some options are only available on select models.
  • long_press(Optional, boolean): If set to true this button will perform a long press. This option is only available for actions which don't include MAKE.
  • All other options from Button

Philips Status Sensor

  • controller_id(Required, string): The Philips Coffee Machine-Controller to which this entity belongs
  • All other options from Text Sensor

Bean and Size Settings

  • type(Required, string): The type of this number component. One of size, bean and milk. If size is selected, this component will report/manipulate the beverage size. If bean is used, this component will report/manipulate the beverage strength. If milk is used, this component will report/manipulate the amount of milk added to the beverage. Note that some options are only available on select models.
  • controller_id(Required, string): The Philips Coffee Machine-Controller to which this entity belongs
  • status_sensor_id(Required, string): Id of a status sensor which is also connected to the controller.
  • source(Optional, int): The source of this sensor. If non is provided, any selected beverage will enable this component. Select one of COFFEE, ESPRESSO, HOT_WATER, CAPPUCCINO, AMERICANO, LATTE_MACCHIATO. Note that some options are only available on select models or setting types.
  • All other options from Number

Fully automated coffee

The following script can be used to make a fully automated cup of coffee. The power switch used in this case does not perform a cleaning cycle. The cleaning check is required since after power loss the machine always cleans. This script will only continue to brew coffee under 2 conditions:

  • There was no cleaning cycle during start-up
  • A Mug is present
script:
  - id: coffee_script
    then:
      - if:
          condition:
            lambda: 'return id(status).state == "Off";'
          then:
            - switch.turn_on: power
            - wait_until:
                condition:
                  lambda: 'return (id(status).state == "Idle") || (id(status).state == "Cleaning");'
                timeout: 120s
            - if:
                condition:
                  lambda: 'return (id(status).state == "Idle") && id(mug_sensor).state;'
                then:
                  - delay: 5s
                  - button.press: make_coffee_button
          else:
            if:
              condition:
                lambda: 'return (id(status).state == "Idle") && id(mug_sensor).state;'
              then:
                - button.press: make_coffee_button

Wiring

The coffee machines display unit is connected to the mainboard via a 8-pin ribbon cable with Picoflex connectors. The display is powered by the mainboard and the two units communicate using a serial bus. The ESP is placed in between this bus to perform a man-in-the-middle attack. The RX/TX lines are piped through the ESP such that messages can be read, intercepted and injected.

When injecting a 'turn coffee machine on' command, the coffee machine does turn on, but the display unit does not. To circumvent this behavior we can re-boot the display unit by temporarily removing it's power. Thus the display will power on and operate normally. To perform this operation a transistor or MOSFET can be used.

The following wiring guideline can be used to add a Wemos D1 Mini to the coffee machine. The unlabeled wires should be connected without changes. More schematics are available here. Wiring guide

The ribbon cable wires have the following functionalities.

Pin Mainboard Functionality
0 5V 5V
1 GND GND
2 GND GND
3 unused unused
4 TX/RX Messages from mainboard to display
5 RX/TX Messages from display to mainboard
6 0V unknown - very noisy
7 5V

Voltage regulation

The Wemos D1 Mini has a built in Voltage regulator, thus connecting it to the 5V provided by the mainboard is no problem. If you use a different ESP Module/Board please make sure it is 5V tolerant or use a Voltage regulator. Otherwise you might release magic smoke.

Custom PCB

This project has convinced me to design my first PCB (printed circuit board). This rather simple ESP8266-12F-based design was inspired by the Wemos D1 Mini, which I was using previously. When using this PCB the ribbon cable connecting the mainboard to the display must not be cut in half and no soldering is required.

PCB Front side

The Schematics, PCB Layout and BOM are available here on oshwlab.com and an accompanying 3D-printable case for the small PCB is available here on printables.com. The SMD components were chosen such that they can still be hand-soldered without a hot-air station or reflow oven, given a little experience. Since this is my first design there may be mistakes and things that could be optimized. Everything is provided as is, without warranty or liability of any kind.

There are also other PCB designs like this one which relies on using a Wemos D1 Mini and does not require soldering SMD components.

Communication protocol

More information on the communication protocol used by this component can be found here.

Related Work

Troubleshooting

  • Make sure your wiring is correct
  • The UART debug function can be used to analyze communication and verify correct wiring
  • The commands used by the display unit may be different between different revisions/models (see Related Work)

Display not turning on

With some Hardware combinations and on some coffee machines, the display might not turn on reliably. If this is the case for you please try the following troubleshooting steps to resolve the issue:

  • Double-check wiring
  • Try increasing power_message_repetitions to 25 or some other value smaller/larger than this.
  • Try increasing power_trip_delay
  • Try adjusting invert_power_pin depending on the type of transistor used

esphome-philips-smart-coffee's People

Contributors

bkbartk avatar davidepanato avatar tillfleisch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esphome-philips-smart-coffee's Issues

Turning on issue (EP3221)

Hi,

I have an issue when trying to turn on my coffee machine thru HA.
When clicking on the Power switch, the machine beeps, turns on; but the switch goes back to Off, and display remains off.

Logs:

[01:17:10][D][switch:012]: 'Power' Turning ON.
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:0A:01:03:00:0E:00:00:00:2A:10
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][D][uart_debug:114]: >>> D5:55:01:01:03:00:0E:00:00:00:01:25
[01:17:10][W][component:214]: Component api took a long time for an operation (0.17 s).
[01:17:10][W][component:215]: Components should block for at most 20-30ms.
[01:17:10][D][uart_debug:114]: <<< D5:55:01:00:00:00:00:00:00:00:00:00
[01:17:10][D][uart_debug:114]: <<< 00:00:00:00:00:06:26:D5:55:01:00:00
[01:17:10][D][uart_debug:114]: >>> D5:55:01:00:00:00:00:00:00:00:00:00
[01:17:10][D][uart_debug:114]: >>> 00:00:00:00:00:06:26:D5:55:01:00:00
[01:17:10][D][number:012]: 'Coffee beans': Sending state nan
[01:17:10][D][number:012]: 'Coffee size': Sending state nan
[01:17:10][W][component:214]: Component esphome.coroutine took a long time for an operation (0.06 s).
[01:17:10][W][component:215]: Components should block for at most 20-30ms.
[01:17:11][W][component:214]: Component esphome.coroutine took a long time for an operation (0.75 s).
[01:17:11][W][component:215]: Components should block for at most 20-30ms.
[01:17:11][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00
[01:17:11][D][uart_debug:114]: <<< 00
[01:17:11][D][uart_debug:114]: <<< 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:11][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:11][D][uart_debug:114]: <<< 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:11][D][uart_debug:114]: >>> 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:11][D][philips_power_switch:089]: Performed 1 power trip(s).
[01:17:11][D][switch:055]: 'Power': Sending state ON
[01:17:11][W][component:214]: Component esphome.coroutine took a long time for an operation (0.12 s).
[01:17:11][W][component:215]: Components should block for at most 20-30ms.
[01:17:11][D][uart_debug:114]: >>> 00:00
[01:17:11][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:11][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:11][D][uart_debug:114]: <<< 00:00
[01:17:11][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:11][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:11][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00
[01:17:11][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00
[01:17:11][D][uart_debug:114]: <<< 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:11][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:11][D][uart_debug:114]: <<< 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:11][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:12][D][uart_debug:114]: >>> 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:12][W][component:214]: Component esphome.coroutine took a long time for an operation (0.19 s).
[01:17:12][W][component:215]: Components should block for at most 20-30ms.
[01:17:12][D][uart_debug:114]: >>> 00:00
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< 00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:12][D][uart_debug:114]: <<< 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:12][D][uart_debug:114]: >>> 26:D5:55:01:00:00:00:00:00:00:00:00
[01:17:12][W][component:214]: Component esphome.coroutine took a long time for an operation (0.19 s).
[01:17:12][W][component:215]: Components should block for at most 20-30ms.
[01:17:12][D][uart_debug:114]: >>> 00:00
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:12][D][uart_debug:114]: <<< 26:D5:55:00:03:00:07:00:00:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:06:26:D5:55:01:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00:00:00:00:06
[01:17:12][D][uart_debug:114]: >>> 26:D5:55:00:03:00:07:00:00:00:00:00
[01:17:12][W][component:214]: Component esphome.coroutine took a long time for an operation (0.19 s).
[01:17:12][W][component:215]: Components should block for at most 20-30ms.
[01:17:12][D][uart_debug:114]: >>> 00:00
[01:17:12][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< 00:00
[01:17:12][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:03:2C:D5:55:00:03:00:07
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:00:00:00:00:00:00:00:03
[01:17:12][D][uart_debug:114]: <<< 2C:D5:55:00:03:00:07:00:00:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:03:2C:D5:55:00:03:00:07
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:00:00:00:00:00:00:00:03
[01:17:12][D][uart_debug:114]: >>> 2C:D5:55:00:03:00:07:00:00:00:00:00
[01:17:12][W][component:214]: Component esphome.coroutine took a long time for an operation (0.19 s).
[01:17:12][W][component:215]: Components should block for at most 20-30ms.
[01:17:12][D][uart_debug:114]: >>> 00:00
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: <<< 00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:12][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:03:2C:D5:55:00:00:00:03
[01:17:12][D][uart_debug:114]: <<< 38:00:00:00:00:00:00:00:00:00:00:2C
[01:17:12][D][uart_debug:114]: <<< 1B:D5:55:00:00:00:03:38:00:00:00:00
[01:17:12][D][uart_debug:114]: >>> 00:00:00:00:03:2C:D5:55:00:00:00:03
[01:17:12][D][uart_debug:114]: >>> 38:00:00:00:00:00:00:00:00:00:00:2C
[01:17:12][D][uart_debug:114]: >>> 1B:D5:55:00:00:00:03:38:00:00:00:00
[01:17:12][W][component:214]: Component esphome.coroutine took a long time for an operation (0.18 s).
[01:17:12][W][component:215]: Components should block for at most 20-30ms.
[01:17:12][D][uart_debug:114]: >>> 00:00
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: <<< 00:00
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D:D5:55:00:01
[01:17:12][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D
[01:17:12][D][uart_debug:114]: <<< 00:00:00:00:2C:1B:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 18:38:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: <<< 09:D5:55:00:00:00:00:18:38:00:00:00
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:2C:1B:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: >>> 18:38:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: >>> 09:D5:55:00:00:00:00:18:38:00:00:00
[01:17:13][W][component:214]: Component esphome.coroutine took a long time for an operation (0.18 s).
[01:17:13][W][component:215]: Components should block for at most 20-30ms.
[01:17:13][D][uart_debug:114]: >>> 00:00
[01:17:13][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:13][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:13][D][uart_debug:114]: <<< 00:00
[01:17:13][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:13][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00:00:00:2F:0D
[01:17:13][D][uart_debug:114]: >>> D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: <<< D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: <<< 00:00:00:00:21:09:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 18:38:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: <<< 09:D5:55:00:00:00:00:18:38:00:00:00
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:21:09:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: >>> 18:38:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: >>> 09:D5:55:00:00:00:00:18:38:00:00:00
[01:17:13][W][component:214]: Component esphome.coroutine took a long time for an operation (0.18 s).
[01:17:13][W][component:215]: Components should block for at most 20-30ms.
[01:17:13][D][uart_debug:114]: >>> 00:00
[01:17:13][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: <<< 00:00
[01:17:13][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01:04:02:04:00
[01:17:13][D][uart_debug:114]: >>> 00:00:2F:0D:D5:55:00:01
[01:17:13][D][uart_debug:114]: <<< 00:00:2F:0D:D5:55:00:01
[01:17:13][D][uart_debug:114]: <<< 00:00:00:00:21:09:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 07:18:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: <<< 30:D5:55:00:00:00:00:07:18:00:00:00
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:21:09:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: >>> 07:18:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: >>> 30:D5:55:00:00:00:00:07:18:00:00:00
[01:17:13][W][component:214]: Component esphome.coroutine took a long time for an operation (0.19 s).
[01:17:13][W][component:215]: Components should block for at most 20-30ms.
[01:17:13][D][uart_debug:114]: >>> 00:00
[01:17:13][D][uart_debug:114]: <<< 04:02:04:00:00:00:2F:0D:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: <<< 55:00:01:04:02:04:00:00:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: <<< 00:00
[01:17:13][D][uart_debug:114]: >>> 04:02:04:00:00:00:2F:0D:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: >>> 55:00:01:04:02:04:00:00:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: >>> 55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: <<< 55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: <<< 00:00:00:00:21:30:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 07:18:00:00:00:00:00:00:00:00:00:21
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:21:30:D5:55:00:00:00:00
[01:17:13][D][uart_debug:114]: >>> 07:18:00:00:00:00:00:00:00:00:00:21
[01:17:13][W][component:214]: Component esphome.coroutine took a long time for an operation (0.15 s).
[01:17:13][W][component:215]: Components should block for at most 20-30ms.
[01:17:13][D][uart_debug:114]: >>> 30
[01:17:13][D][uart_debug:114]: <<< 00:2F:0D:D5:55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: <<< 00:2F:0D:D5:55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: <<< 30
[01:17:13][D][uart_debug:114]: >>> 00:2F:0D:D5:55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: >>> 00:2F:0D:D5:55:00:01:04:02:04:00:00
[01:17:13][D][uart_debug:114]: >>> 00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: <<< D5:55:00:00:07:00:03:00:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: >>> D5:55:00:00:07:00:03:00:00:00:00:00
[01:17:13][W][component:214]: Component esphome.coroutine took a long time for an operation (0.13 s).
[01:17:13][W][component:215]: Components should block for at most 20-30ms.
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:00:05:21
[01:17:13][D][uart_debug:114]: <<< 02:04:00:00:00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: <<< 02:04:00:00:00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: <<< 00:00:00:00:00:05:21
[01:17:13][D][uart_debug:114]: >>> 02:04:00:00:00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: >>> 02:04:00:00:00:2F:0D:D5:55:00:01:04
[01:17:13][D][uart_debug:114]: >>> 02:04:00:00:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: <<< D5:55:00:00:07:00:03:00:00:00:00:00
[01:17:13][D][uart_debug:114]: <<< 00:00:00:00:00:05:21:D5:55:00:00:07
[01:17:13][D][uart_debug:114]: <<< 02:04:00:00:00:2F:0D:D5
[01:17:13][D][uart_debug:114]: >>> D5:55:00:00:07:00:03:00:00:00:00:00
[01:17:13][D][uart_debug:114]: >>> 00:00:00:00:00:05:21:D5:55:00:00:07
[01:17:14][W][component:214]: Component esphome.coroutine took a long time for an operation (0.16 s).
[01:17:14][W][component:215]: Components should block for at most 20-30ms.
[01:17:14][D][uart_debug:114]: >>> 00:03:00:00:00:00:00:00
[01:17:14][D][uart_debug:114]: <<< 00:03:00:00:00:00:00:00
[01:17:14][D][uart_debug:114]: >>> 55:00:01:04:02:04:00:00:00:2F:0D
[01:17:14][D][uart_debug:114]: <<< 55:00:01:04:02:04:00:00:00:2F:0D
[01:17:14][W][component:214]: Component esphome.coroutine took a long time for an operation (0.05 s).
[01:17:14][W][component:215]: Components should block for at most 20-30ms.
[01:17:14][D][uart_debug:114]: <<< 00:00:00:00:05:21
[01:17:14][D][uart_debug:114]: >>> 00:00:00:00:05:21
[01:17:14][D][switch:055]: 'Power': Sending state OFF`

If I click again on the Power switch, then display turns on.
No issue for turning off, but if I try to turn it on again, I face the same issue again.

I tried to update the "power_message_repetitions" (5/25/50/200), or the "power_trip_delay" (500ms/750ms/1000ms/2000ms), without any success.
Tried also to update the "MAX_POWER_TRIP_COUNT" from the power.h, but no change again.

Appart from that, when turned on, all functionalities seems to respond (but didn't tried a lot yet).

Hardware :
Philips EP-3221
ESP32 S2 Mini
IRLZ44N Mofset, with 220 ohms resistor

Config (haven't changed anything yet about buttons/numbers configuration, I'll see that later):

esphome:
  name: machine-cafe
  friendly_name: machine-cafe

esp32:
  board: lolin_s2_mini
  framework:
    type: arduino

# Enable logging
logger:
  # Disable serial logging
  baud_rate: 0


external_components:
  - source: github://TillFleisch/ESPHome-Philips-Smart-Coffee@series-3200
    refresh: 0s

uart:
  # UART connected to the mainboard
  - tx_pin: GPIO39
    rx_pin: GPIO37   
    baud_rate: 115200
    id: uart_mainboard
    debug:
      after:
        bytes: 12

  # UART connected to the display
  - tx_pin: GPIO17
    rx_pin: GPIO21  
    baud_rate: 115200
    id: uart_display   
    debug:
      after:
        bytes: 12

philips_coffee_machine:
  display_uart: uart_display
  mainboard_uart: uart_mainboard
  power_pin: GPIO35
  id: philip
  model: EP_3243
  power_message_repetitions: 5
  power_trip_delay: 750ms

text_sensor:
  - platform: philips_coffee_machine
    controller_id: philip
    id: status
    name: "Status"

switch:
  - platform: philips_coffee_machine
    controller_id: philip
    name: "Power"
    clean: false
    icon: mdi:coffee-maker

button:
  - platform: philips_coffee_machine
    controller_id: philip
    action: MAKE_COFFEE
    name: "Make Coffee"
    icon: mdi:coffee

  - platform: philips_coffee_machine
    controller_id: philip
    action: SELECT_HOT_WATER
    name: "Select Hot Water"
    icon: mdi:tea

  - platform: philips_coffee_machine
    controller_id: philip
    action: PLAY_PAUSE
    name: "Select play/pause"
    icon: mdi:play-pause

number:
  - platform: philips_coffee_machine
    type: bean
    name: "Coffee beans"
    controller_id: philip
    status_sensor_id: status
    source: COFFEE

  - platform: philips_coffee_machine
    type: size
    name: "Coffee size"
    controller_id: philip
    status_sensor_id: status
    source: COFFEE

Implement HTCPCP

Implement Hyper Text Coffee Pot Control Protocol as specified by RFC 2324.
The implementation should use a user-defined script which will be executed upon a BREW request.

Turning on machine issue

First of all thank you very much for your responsiveness.
After all your answers everything is working almost perfect.
I have only one more issue.
I can turn on the machine and manage it without any issues via screen.
The only problem that I have is whenever I want to turn on the machine with esp. It needs to be pressed fastly 2-3 times to succeed. I read that this issue could be related to mosfet but I used an IRLZ44N. So do you have any idea what it could be?

Which parts do we need?

Hello, first of all congrats for this repository.
Is it possible to tell me which parts I need to replicate this? As I can see I need a mosftet and a cable with picoflex. Is it possible to update your guide with reference of these parts? Thank you in advance

Protocol Decoding

This is not really an issue, but rather a kind request for further input...

I have been reading up on most of the available documentation of the serial protocol.

My ultimate goal is to send a sequence for a recipe which is not available on the display of my EP223x Latte go.

  1. In order to try other values for the data bytes, one would have to find a way to do the checksum calculation. Although it would seem a waste of resources to use a 16bit checksum on this short payload, I went ahead with that very same assumption - and didn't get anywhere. I googled for 16 bit checksums but only came to https://crccalc.com. It might still be a custom CRC with special init parameters... but why make things so complicated.
  2. Following the recent adventures of @DivanX10 I was asking myself if the EP5xxx protocol would also work on the smaller EP22xx machines. That is under the assumption that the mainboard is the same for all products (as stated somewhere) running the same firmware.

I have yet to plugin in my MITM board. ESP and cables are just waiting to be soldered together. So please forgive me for these theoretic ramblings...

Any further insights are highly appreciated!

Tests with philips ep 2339/40

Hi,
I have an philips EP 2339/40 ( LatteGo series) that i would like to try this component on it , and talk about it here so someone else with the same machine could help and get some help to. I already read some "issues" here and get some ideas of what i could do. I am a litlle busy this week but i plan to maybe make a fork off this component , as you sugested to other users.

To be honest o already tried somethings. I made a litlle "pcb" with a perfored board using an esp32 wroom:

for the uart_mainboard i used tx_pin: GPIO1, rx_pin: GPIO3 and for the uart_display i used tx_pin: GPIO17 ,rx_pin: GPIO16. This is already hardware uarts that the esp32 have so i guess i,m doing the right think with it .

For the power_pin i first used GPIO12, but i had the problem about it beeing an strapping pin, so the esp didnt boot with all connected, so i tried one thing, connect first to the main board, wait for the esp32 to boot and then conect to the display. With this i could control somethings in the machine ( used the yaml example) make cofee, select expresso and start/pause. And when i selected "cappucino" the state of the machine says " steam selected" so i guess the code is similar to my machine. I couldn,t thow turn off the machine, and select the coffee size and water size in the machine it self , and the number entities in HA didnt work either.

But first i switch the power_pin to the GPIO13, and now the esp32 can boot with everythink connected ,but what happens is that the machine turns on with all the 4 leds on ( expresso, coffee, capuccino, hot water) and the aqua clean led orange(litting), when it should be blue after the clean cycle. And the machine doesnt respond to the buttons not even in HA.

I,m using an mosfet IRLZ44N as sugested , but maybe mine it,s too big has i bouht it to control led strips. I think the next test i will do is take off the mosfet and try the other commands, to see if this is a problem of the mosfet.

Migrate to ESP32 with Ethernet

Hello, is there a way to migrate to ESP32 with Ethernet like the WT32-ETH01 module?
I will also use it on a philips ep3246 - so the command may differ?

question: is there a reason why all gounds are connected?

Hello,

Is there a reason why all Grounds on pins 1 and 2 are connected?
I only connected the ground on pin 1 on both sides.

This gives some strange behaviar, the esp led is turned on, but esp in not accessible through webinterface or HA. that's the part I think is strange,

And no leds on the display of the coffee machine are turned on at any point of time, even not after removing the mosfet.
If this would be the reason I need both grounds I will change it(probabaly after the holidays)

but I actually think there is some other reason stuff is not working.

Report beverage specific "busy" state

Currently, the status sensor is reporting "busy" when preparing a beverage. The sensor should report the beverage type while making a beverage. This information may be used to track beverage counts.

Busy may be replaced by Brewing Coffee/Brewing 2x Coffee[...].

Suddenly lots of issues with previously working EP3243

I'm not sure how it could've happened but today when I turned on the coffee machine it stopped behaving normally. State said 'Preparing' like normal, but then suddenly 'Brewing Latte Macchiato', back to 'Preparing', back to 'Brewing Latte Machiato' and back to 'Preparing'. It did that 4-5 times before it said Idle. And now all lights are on and there's a blinking aqua clean. Buttons on display works sometimes and sometimes not depending if reinsert power to the wall etc. It's also not possible to turn it off anymore. Doing it from HA makes it turn on immediately afterwards. Very inconsistent behaviour. Pressing 'Americano' in HA selects Americano on the display but state says "Latte Macchiato selected". Could it be an update to ESPHome? Other ideas?

Beverage settings shows intermediate NAN state

can state nan be ignored?

20:36:33	[D]	[number:012]	

'Coffee beans': Sending state nan

20:36:33	[D]	[number:012]	

'Coffee size': Sending state nan

20:36:35	[D]	[number:012]	

'Coffee beans': Sending state 2.000000

20:36:35	[D]	[number:012]	

'Coffee size': Sending state 2.000000

20:36:35	[D]	[number:012]	

'Coffee size': Sending state nan

20:36:35	[D]	[number:012]	

'Coffee size': Sending state 2.000000

20:36:35	[D]	[number:012]	

'Coffee beans': Sending state nan

20:36:35	[D]	[number:012]	

'Coffee size': Sending state nan

20:36:37	[D]	[number:012]	

'Coffee beans': Sending state 2.000000

20:36:38	[D]	[number:012]	

when this happens, and I don't know if this is normal,
the number sensors are unknown for a really short period of time

giving some kind of vibrating effect
image

I have an EP22xx machine

Sensor for Bean/Coffee Size

Hello,

nice work with this component, works like a Charm ๐Ÿ‘Œ
I was wondering if there is an easy way to access the currently selected Bean/Coffee Size. At the moment I only see the Text Status Sensor.

When the mosfet resets the display Unit on my Maschine sometimes the settings for Bean/Coffee Size reset to 2/2. For A fully automated
Coffee it would be great to have those as a sensor to make the Coffee like I want. It looks like its also already decoded

https://github.com/TillFleisch/ESPHome-Philips-Smart-Coffee/blob/main/protocol.md#messages-from-the-display-to-the-mainboard-1

so should be trivial to implemet right?

thanks for your great Work.

Joshi

EP32xx state detection still buggy

Opening a new issue instead of commenting on the closed #63.

I'm still having issues where turning on the machine jumps between the states 'Brewing Latte Macchiato' and 'Cleaning'/'Preparing'. Below is log in HA of turning on the machine, waiting till it's idle, pressing coffee and start and then about 30 seconds after it's brewed I press the off button. Notice all the Lattes supposedly being brewed.

My graphs in HA therefore show that I brew about 50 fake Latte Macchiatos every day. Is there something I can do to make it easier to find the issue?

Or could a workaround be to add a small delay before updating state after machine has been turned on?

17:43:47 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Cleaning
17:43:42 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:43:42 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Cleaning
17:43:33 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:43:33 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Cleaning
17:43:31 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Idle
17:43:02 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Coffee
17:42:01 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Coffee selected
17:41:57 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Idle
17:35:35 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Cleaning
17:35:19 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:35:18 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Cleaning
17:35:10 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:35:07 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:35:06 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:35:04 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:35:03 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:35:01 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:35:00 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:58 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:34:57 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:52 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:34:51 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:46 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:34:46 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:43 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:34:42 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:40 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Brewing Latte Macchiato
17:34:39 - For 4 timer siden
ESP32 Kaffemaskin Status endret til Preparing
17:34:38 - For 4 timer siden```

Idle state not detected on some machines

Ciao Till, thanks for your good job, after latest changes I was also able to power on my coffe machine (previously this was not working but it has been fixed by message repetition).
I'm now moving forward with integrating all functionalities and I think that my machine 2220 has some difference in the protocol from yours since coffee beans and coffee size are not detected. Also when powering on I see the state moving from off to cleaning but never to ready.
Is there an easy way to print the messages shared between motherboard and display to try to debug the protocol? I have tried uart debugging but it prints tons of messages.

Another strange behavior is also happening sometimes, when powering on I hear ad duplicated "BIP" and display remains stuck with aqua clean icon blinking.

Thanks for your support
Davide

component formatting

I tried to get some help for customizing this component and ssieb on discord mentioned that the formatting wasn't the best. Since I have very little clue of what I'm doing in coding, I can't exactly make out how to modify my clone of your code and have it compile. However, I thought there's a chance that you might want to know this and modify your code. Keep in mind, the example I sent him was probably from ~6-12 months ago when I cloned your repo and modified it to work with my 3200.

image

His repo: https://github.com/ssieb/esphome_components/tree/espresso/components/philips_espresso

https://discord.com/channels/429907082951524364/1168697647276769390/1169195798014214165

Refactor project file structure

The current project file structure uses individual components for each different type of component. To be in-line with ESPHome's recommended way of building components, the files structure should be changed such that the 'sub-components' are nested within the Philips component like in the official homeassistant-compoennt or the i2_audio-component.

Having issues using esphome 2023.3.2 and example.yaml

First of all - really nice project and thanks for publishing the code!

I think the current example.yaml isn't up to date with newest version of esphome.

What version of esphome are you currently using?

I'm trying to run esphome run example.yaml, but getting the following errors

display_uart: uart_display
  mainboard_uart: uart_mainboard
  power_pin: GPIO12
  id: philip
text_sensor.philips_status_sensor: [source example.yaml:43]

  Platform not found: 'text_sensor.philips_status_sensor'.
  platform: philips_status_sensor
  controller_id: philip
  name: Status
switch.philips_power_switch: [source example.yaml:48]

  Platform not found: 'switch.philips_power_switch'.
  platform: philips_power_switch
  controller_id: philip
  name: Power
  icon: mdi:coffee-maker

Error in configuring status sensor

Hello Till,
I've tried to enable new config but it is throwing an error when building:
How should I configure the status sensors?

Thanks,
Davide

number.philips_bean_settings: [source /config/philips-ep2200.yaml:124]
platform: philips_bean_settings
name: Coffee beans
controller_id: philip

Couldn't find ID 'status'. Please check you have defined an ID with that name in your configuration.
status_sensor_id: status
source: COFFEE
disabled_by_default: False
mode: SLIDER
number.philips_size_settings: [source /config/philips-ep2200.yaml:130]
platform: philips_size_settings
name: Coffee size
controller_id: philip

Couldn't find ID 'status'. Please check you have defined an ID with that name in your configuration.
status_sensor_id: status
source: COFFEE
disabled_by_default: False
mode: SLIDER

Mug sensor

Is it possible to provide more details about your mug sensor? Which sensor do you use and where you located this sensor?

Power toggle keeps flickering between on/off

To start with: very nice work!

But I'm running into a problem with the 'Power toggle'. With the machine 'OFF', the power toggle in home assistant keeps flickering between 'turned on' and 'turned off'. The actual machine (and the status sensor) remain in the OFF state.

I've used your example .yaml with almost no changes, except for a couple of extra buttons for 'SELECT_COFFEE' and 'SELECT_ESPRESSO'.

Part of the logbook for the esp_coffee device:
April 13, 2023
esp_coffee Power turned on
19:58:31 - Now
esp_coffee Power turned off
19:58:31 - Now
esp_coffee Power turned on
19:58:29 - 3 seconds ago
esp_coffee Power turned off
19:58:29 - 3 seconds ago
esp_coffee Power turned on
19:58:27 - 5 seconds ago
esp_coffee Power turned off
19:58:27 - 5 seconds ago

Is this just with my device? I'm using a nodemcu v2 instead of a wemos d1 mini. But the controls in home assistant are working fine, so that doesn't seem to be the problem.

UART prblems

Hello, first of all thank you for your work, it's awesome!

I've tried t setup your project on my EP2200 but I'm facing some problems on UART behavior.
I have checked the HW and looks fine because I can both tx and rx data on the interfaces.

Unfortunately it seems that it is not working because I see a constant flow of data on the UART and web interface is not detecting any state change in the coffe macchine.

In the logs I can see (mainboard logs):

19:51:39 [D] [uart_debug:114] >>> 00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01
19:51:40 [D] [uart_debug:114] <<< 00:00:00:00:06:26:D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26
19:51:40 [D] [uart_debug:114] >>> D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00
19:51:40 [D] [uart_debug:114] <<< D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26
19:51:40 [D] [uart_debug:114] >>> 00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00
19:51:40 [D] [uart_debug:114] <<< D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26:D5:55:01:00:00:00:00:00:00:00:00:00:00
19:51:40 [D] [uart_debug:114] >>> 00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01
19:51:40 [D] [uart_debug:114] <<< 00:00:00:00:06:26:D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26
19:51:40 [D] [uart_debug:114] >>> D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00
19:51:40 [D] [uart_debug:114] <<< D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26
19:51:40 [D] [uart_debug:114] >>> 00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00:00:03:02:00:00:00:2D:01:D5:55:00:00
19:51:40 [D] [uart_debug:114] <<< D5:55:01:00:00:00:00:00:00:00:00:00:00:00:00:00:00:06:26:D5:55:01:00:00:00:00:00:00:00:00:00:00
19:51:40 [D] [uart_debug:114]

For some reason it looks like the data that it's receiving are not "aligned".

My system is base on an esp8266 amica nodemcu.
My yaml is exactly same as yours except for few changes:

Added log printing for mainboard UART
uart:
UART connected to the mainboard

  • tx_pin: GPIO1
    rx_pin: GPIO3
    baud_rate: 115200
    id: uart_mainboard
    debug:
    direction: BOTH
    dummy_receiver: false
    after:
    delimiter: "\n"
    sequence:
    - lambda: UARTDebug::log_hex(direction, bytes, ':');

added webserver
web_server:
port: 80

Any idea why I see this behavior?
Thank you!
Dave

Philips EP3221 Support

Hi,

As discussed in the EP3243 thread, I open a new one for 3221 support.
Indeed if both are part of the 3200 series, they have different options and code shouldn't be fully compatible.

EP3221 dashboard looks like this:
303142169-f07b3b8e-abc2-4942-8e5e-52e0d7981ab1

On left coffee part I have: Expresso, Expresso lungo, Coffee, Americano, Hot Water, Steam.
And on the right part: Bean, Size, Temperature, and then Aqua Clean and Clean.

I ordered hardware to build this (still waiting for it), but would you be able to tell me how to adapt the code for my machine? How to identify which command is sent when pressing a button, and what should I update in the code in order to add compatibility with my 3221 while not breaking 3243 one?

Thanks!

Erratic behavior on ESP boot

I just noticed that when the machine is on and i reboot the ESP, it spontaneously starts to make a coffee.
I'm not sure, but I thing that it wasn't doing that before.

Display stops working when connected mosfet

Hello.
Hope someone can help me.
I got a Philips Series 2200 and plugged in a Wemos D1 Mini. I didn't have a mosfet at the time, so I connected ESP without it.
Everything works, except turning it on from Homeassistant as expected.
Now I have found a mosfet, IRFZ44N, and plugged it in, but now it doesn't work as expected anymore.

From the display:
I can turn on the power to the coffee maker.
It starts and cycles through the icons. When it's done, only two random icons light up, not all four, and no buttons work.

From Home assistant:
I can turn on the device by double-triple clicking on power.
I can select product/strength/size and start brewing but the display on the coffee maker shows nothing.
Is the IRFZ44N the wrong choice? Anyone know one that works?

Trouble turning On

Hi and thank you so much for this awesome project!

I set it up on my Philips Series 2200 and everything works except one thing. Quite often (maybe 50% cases) when I turn the ON switch, the machine wont turn on and the switch returns into the OFF state. I would repeat the procedure a few times and maybe after 9 tries it finally works and the machine turns on (sometimes more, sometimes less).
But when after an unsuccessful attempt I push any button, e.g. Select Hot Water, the ON switch works immediately again.
Log attached: logs_coffeemaker_logs.txt

I hope you can help me resolve this issue. Thank you.

'Water empty' shown when there is an actual error

When all 3 warning lights are blinking (including the water tank empty one)
the status shows 'Water Empty'
but all 3 blinking at the same time means error.

I still don't know exactly what error I have, I need to powercycle to fix this.
not sure if I can grep any debug information to provide some help.

(the error is not caused by the integration as I have seen this one a couple of times in the week before I installed this one)

Power on without cleaning cycle

First of all, amazing what you have accomplished, thanks! I'm trying to connect a Philips 5400 as well, and I was wondering how you found out about the command to send to power on the machine without a cleaning cycle. As far as I'm aware the machines don't have any option like that on the display so I was wondering how you were able to find the command, thanks!

Ground coffee selection

As there is this function missing, I tried to implement it simply in YAML using uart.write action. Because a 3s long press is required, I set the uart.write action to be repeated 70x. This approach kind of works, the ground coffee is selected, but it causes the esp8266 to reboot.
Could you please help me to troubleshoot it?

I know that it is not really an Issue of this component, but as there is support for AQUA_CLEAN button which doesn't work (because there is not implemented the 3s long press, i suspect), so I think it is kind of relevant.

Disable auto clean after power on

Hello, as I can see on reddit, you said that it's possible to disable auto clean after startup. Could you tell me how to achieve this?

Coffee machine Philips EP5444/90 5400 Series LatteGo

image

23.04.2023 purchased a new Philips EP5444/90 5400 Series LatteGo coffee machine and I'm going to repeat your experience. The withdrawal of the warranty does not frighten me, I can repair it myself if something happens to it. I would like to clarify about connecting the display to the ESP8266 WeMos D1 Mini. You write about the transistor, but you did not specify which transistor to connect.

image

Which transistor should I connect? I have a TIP120 transistor

image

This is how the wiring to the display looks, just like you do, which may have a chance to control remotely. Do you think it will work?

image

Do I understand correctly that it is necessary to disconnect this cable from the display, connect some of the wires to the ESP8266 WeMos D1 Mini, and already pull the wiring from the ESP8266 WeMos D1 Mini to the connector?

ESP32-S2: power trip not working

I'd like to upgrade from my Wemos D1 Mini to a Wemos S2 Mini (which is based on ESP32-S2).
My initial testing revealed that power trip is not working.

Log:

[15:25:02][D][switch:012]: 'Power' Turning ON.
[15:25:02][W][component:214]: Component api took a long time for an operation (0.06 s).
[15:25:02][W][component:215]: Components should block for at most 20-30ms.
[15:25:03][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:03][W][component:215]: Components should block for at most 20-30ms.
[15:25:05][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:05][W][component:215]: Components should block for at most 20-30ms.
[15:25:07][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:07][W][component:215]: Components should block for at most 20-30ms.
[15:25:10][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:10][W][component:215]: Components should block for at most 20-30ms.
[15:25:12][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:12][W][component:215]: Components should block for at most 20-30ms.
[15:25:14][W][component:214]: Component esphome.coroutine took a long time for an operation (1.00 s).
[15:25:14][W][component:215]: Components should block for at most 20-30ms.
[15:25:15][E][philips_power_switch:024]: Power tripping display failed!

Config:

philips_series_2200:
  display_uart: uart_display
  mainboard_uart: uart_mainboard
  power_pin: GPIO9
  id: philip
  power_trip_delay: 1000ms

Probing with voltmeter shows that the pin just won't go low.

When tripped manually with a switch, it works:

switch:
  - platform: gpio
    pin: GPIO9
    name: "display"

I tried also different pins, same behavior.

ADD EP1220

Hello Till,

Is it possible to add the Philips EP1220?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.