Diyless + esphome + viessmann vitodens 100-W not working as expected

Hello,

I have the diyless shield + wemos d1 mini to control a viessman vitodens 100-W.

It seems the boiler is not turning off if target temperature is lower than the current temperature. It does it at some point but not quick enough.

Also viceverse. If the boiler is off and I increase the target temperature is not starting it but only after a while.

Starting up. Almost two hours until firing up.

Thanks a lot!

# DIYLESS Thermostat
# https://diyless.com/product/opentherm-thermostat

esphome:
  name: diyless-thermostat
  friendly_name: DIYLESS Thermostat

esp8266:
  board: d1_mini

# Enable logging
logger:
  level: INFO

# Enable Home Assistant API
api:
  encryption:
     key: !secret api_key

# Enable Over-The-Air (OTA) platform to remotely install modified/updated firmware
ota:
 - platform: esphome
   password: ""

wifi:
  ssid: !secret wifi_iot_ssid
  password: !secret wifi_iot_password
  domain: ".home.local"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "DIYLESS Thermostat"
    password: ""

# Enable captive portal as fallback mechanism for when connecting to the configured WiFi fails.
captive_portal:

# Enable simple web server to remotelly control the device using web interface
web_server:  

# mqtt:
#   topic_prefix: opentherm-esphome
#   broker: !secret mqtt_ip
#   username: !secret mqtt_user
#   password: !secret mqtt_password

# Enable OpenTherm communication
# https://esphome.io/components/opentherm.html
opentherm:
  in_pin: 4 # WeMos D1 Mini ESP32 input pin for stacking with Master OpenTherm Shield
  out_pin: 5 # WeMos D1 Mini ESP32 output pin for stacking with Master OpenTherm Shield


# Use switches to enable/disable central heating and hot water from HA interface
# https://esphome.io/components/opentherm.html#switch
switch:
  - platform: opentherm
    ch_enable:
      id: ch_enable
      name: "Heating"
      restore_mode: RESTORE_DEFAULT_OFF
      internal: false
    dhw_enable:
      id: dhw_enable
      name: "Hot Water"
      restore_mode: RESTORE_DEFAULT_OFF

# Use outputs to control numerical values like Central Heating setpoint using some automatic algorithms
output:
  - platform: opentherm
    t_set:
      id: ch_setpoint
      min_value: 30
      max_value: 55
      zero_means_zero: true


# Use numbers to control numerical values like CH/DHW setpoint from HA interface
# https://esphome.io/components/opentherm.html#numerical-values 
number:
  # - platform: opentherm
  #   t_set:
  #     id: ch_setpoint
  #     name: "Heating Setpoint"
  #     step: 1
  #     min_value: 30
  #     max_value: 80
  #     restore_value: true
  #     initial_value: 60
  - platform: opentherm
    t_dhw_set:
      id: dhw_setpoint
      name: "How Water Setpoint"
      step: 1
      min_value: 30
      max_value: 50
      restore_value: true
      initial_value: 60

# Use binary sensors (on/off) to monitor the states and conditions of different boiler entities.
# https://esphome.io/components/opentherm.html#binary-sensor
binary_sensor:
  - platform: opentherm
    ch_active:
      id: ch_active
      name: "Heating Active"
    dhw_active:
      id: dhw_active
      name: "Hot Water Active"
      
    flame_on:
      id: flame_on
      name: "Flame On"
    fault_indication:
      id: fault_indication
      name: "Boiler Fault"
      entity_category: diagnostic
    diagnostic_indication:
      id: diagnostic_indication
      name: "Boiler Diagnostic"
      entity_category: diagnostic
    service_request:
      name: Service Required
      entity_category: diagnostic

    lockout_reset:
      name: Lockout Reset
      entity_category: diagnostic
    low_water_pressure:
      name: Low Water Pressure Fault
      entity_category: diagnostic
    flame_fault:
      name: Flame Fault
      entity_category: diagnostic
    air_pressure_fault:
      name: Air Pressure Fault
      entity_category: diagnostic
    water_over_temp:
      name: Water Overtemperature
      entity_category: diagnostic      




# Enable 1-Wire bus for DS18B20 temperature sensor
one_wire:
  - platform: gpio
    pin: 14 # WeMos D1 Mini ESP32 1-wire pin for stacking with Master OpenTherm Shield

sensor:
# Wired DALLAS DS18B20 sensor
- platform: dallas_temp
  id: dallas_sensor
  name: "Wired Sensor Temperature"
  update_interval: 30s
  accuracy_decimals: 2
  filters:
    - sliding_window_moving_average:
        window_size: 5
        send_every: 2
    - heartbeat: 1s
- platform: homeassistant
  id: current_temperature
  entity_id: sensor.tuya_zigbee_temperature_temperature

# OpenTherm sensors
# https://esphome.io/components/opentherm.html#sensor
- platform: opentherm
  t_boiler:
    id: ch_temperature
    name: "Heating Temperature"
  t_dhw:
    id: dhw_temperature
    name: "Hot Water Temperature"
  t_dhw2:
    name: "Hot Water Temperature 2"

  rel_mod_level:
    id: rel_mod_level
    name: "Boiler Relative Modulation Level"
  t_outside:
    name: Outside Temperature
  t_ret:
    name: Return Water Temperature

  max_t_set:
    name: Max CH Setpoint    
  max_t_set_ub:
    name: Upper Bound of CH Setpoint    
  max_t_set_lb:  
    name: Lower Bound CH Setpoint
  t_exhaust:    
    name: Boiler Exhaust Temperature
    entity_category: diagnostic
  ch_pressure:    
    name: Water Pressure
    entity_category: diagnostic
  oem_fault_code:
    name: OEM Fault Code
    entity_category: diagnostic
  oem_diagnostic_code:
    name: OEM Diagnostic Code
    entity_category: diagnostic

# Use PID Climate component for automatic boiler setpoint calculation
# https://esphome.io/components/climate/pid
climate:
  - platform: pid
    id: ch_climate
    name: "Heating Climate"
    heat_output: ch_setpoint
    default_target_temperature: 22
    sensor: current_temperature
    visual:
      min_temperature: 15
      max_temperature: 30
      temperature_step:
        target_temperature: 0.5
        current_temperature: 0.1
    control_parameters: 
      kp: 0.77
      ki: 0.0005
      kd: 0
      output_averaging_samples: 10
    deadband_parameters:
      threshold_high: 0.5
      threshold_low: -0.5      
      kp_multiplier: 0
      ki_multiplier: 0.15
      kd_multiplier: 0.0
      deadband_output_averaging_samples: 15
    on_state:
      - if:
          condition:
          - lambda: 'return id(ch_climate).mode == CLIMATE_MODE_OFF;'
          then:
            - switch.turn_off: ch_enable
          else:
            - switch.turn_on: ch_enable
          
      - logger.log:
          format: "climate mode=%s, t=%.1f"
          args: ['std::string(LOG_STR_ARG(climate_mode_to_string(x.mode))).c_str()', 'x.target_temperature' ]            
          level: INFO
9:04:08	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:04:10	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:04:20	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:04:31	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:04:32	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:04:40	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:04:40	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:04:41	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:04:49	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:05:28	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:06:15	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:06:42	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:06:51	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:07:09	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:08:17	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:09:10	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:09:39	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_CHANGE_TOO_LONG

09:10:09	[W]	[opentherm:375]	

Protocol error occured while receiving response: NO_TRANSITION

09:10:41	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:10:43	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:11:01	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:11:30	[W]	[opentherm:382]	

Timeout while waiting for response from device

09:11:39	[W]	[opentherm:382]	

Timeout while waiting for response from device

Noticed a lot of entries like this in the log.