Found someone on Jeedom who partially reverse engineered the serial line.
Now I reverse engineered it some more and adapted it for HA.
Since it relies on a serial2lan solution, I use ESP-Link.
There is also a ESPhome solution available (which I donât find that stable), as well as an ESPEasy solution. Both are confirmed working, but for now Iâll stick to ESP-Link.
The easiest way to install ESP-Link is to use this page from my GitHub site ESP-Link You should use a supported browser and an usb2serial port must be available on your machine.
Note that I have re-compiled the firmware to host on ports 23 and 2000, which enables the use of the newer myDPRemote app too (as it has port 2000 hardcoded; on the older app it was configurable).
The HA Integration can be found on HACS
and is configured like this example:
# Example configuration.yaml entry
climate:
- platform: duepi_evo
name: <your heaters name here>
host: 192.168.1.123
port: 2000
scan_interval: 60
min_temp: 20
max_temp: 30
auto_reset: True
unique_id: <unique_name>
temp_nofeedback: 16
init_command: False
Configuration variables:
- name (optional): The name of your climate entity. Defaults to âDuepi Evoâ.
- host (required): The IP address used for the serial@tcp device.
- port (optional): The port being used. Defaults to 2000. (when using my ESPLink version, you can also use the default telnet port 23)
- scan_interval (required): The scan interval being used in seconds.
- min/max_temperature (optional): The available setpoint range within HA. Default is 16-30 degs celsius.
- auto_reset (optional): Auto reset the stove when âIgnition failedâ or âOut of pelletsâ defaults to False.
- unique_id (optional): A unique name for the device. Defaults to âduepi_uniqueâ. Change when using multiple stoves
- temp_nofeedback (optional): The default setpoint temperature for stoves that do not store the current setpoint. Defauls to 16.
- init_command (optional): Some stoves require a additional init_command before it accepts a command. Use this when you receive time-outs on new commands (see log).
PS: The advice is to set the scan_interval at least at 10s, you donât want to send a new request before the unit finished replying to the previous request ![]()
and my LoveLace card yaml:
- type: vertical-stack
cards:
- type: thermostat
entity: climate.pellet_stove
features:
- type: climate-hvac-modes
hvac_modes:
- heat
- 'off'
- type: history-graph
entities:
- entity: climate.pellet_stove
hours_to_show: 4
- type: entities
entities:
- entity: climate.pellet_stove
type: attribute
name: Burner Status
attribute: burner_status
- entity: climate.pellet_stove
type: attribute
name: Error code
attribute: error_code
- entity: climate.pellet_stove
type: attribute
name: Exhaust fan speed
attribute: exh_fan_speed
- entity: climate.pellet_stove
type: attribute
name: Flu gas temperature
attribute: flu_gas_temp
- entity: climate.pellet_stove
type: attribute
name: Pellet speed
attribute: pellet_speed
- entity: climate.pellet_stove
type: attribute
name: Power level
attribute: power_level
Confirmed working on:
- Amesti 7100/8100 plus2
- ALP srl Guisy
- AMG
- Artel
- Casatelli Leonardo 8/9
- Centrometal
- Duroflame Carré
- Duroflame Pelle
- Duroflame Rembrand
- FireShop Dinamica 6
- Foco
- Interstove
- Italia mod 8 el
- Julia Next
- Kalor
- Qlima Viola 85 S-Line
- Wamsler Westminster Quatro 6
All info and more is available on GitHub
How to physically connect:
If you like to help out, join us on Telegram
Big thanks go to Pascal Bornat (who initially started reverse engineering for Jeedom).
PS: it seems @mvroosmalen1970 managed to convert this into an ESPHome solution ![]()












