arthurrump / esphome-opentherm

Create your own smart modulating thermostat using the OpenTherm component for ESPHome
BSD 2-Clause "Simplified" License
73 stars 40 forks source link

Can't compile #10

Closed Arise closed 1 year ago

Arise commented 1 year ago

Not sure what I'm doing wrong but can't get this working:

when I run: esphome -v run thermostat-number-minimal.yaml I get below

INFO Reading configuration thermostat-number-minimal.yaml...
Failed config

opentherm: [source thermostat-number-minimal.yaml:25]

  Component not found: opentherm.
number.opentherm: [source thermostat-number-minimal.yaml:28]

  Platform not found: 'number.opentherm'.
  platform: opentherm
  t_set:
    name: Boiler Control setpoint

Whatever I do, can't get opentherm to be found.

In the same folder as my thermostat-number-minimal.yaml there is also this tree folder with stuff brought in from git:

.esphome\external_components\e2aecb28\components\opentherm\

So git kinda works to bring in the repo source, but after that don't know why it still complains about opentherm not being found.

arthurrump commented 1 year ago

Did you clone the repo, or did you copy thermostat-number-minimal.yaml into your own esphome folder? If the latter, did you replace the link to the external component with the GitHub link like this?

external_components:
  source: github://arthurrump/esphome-opentherm@main

Which version of esphome are you using?

arthurrump commented 1 year ago

I just tried compiling this configuration in a fresh and empty folder using the latest esphome v2022.12.4:

# An extremely minimal configuration which only enables you to set the boiler's
# water temperature setpoint as a number.

esphome:
  name: thermostat-number-minimal

external_components:
  source: github://arthurrump/esphome-opentherm@main

esp8266:
  board: d1_mini

logger:

api:
ota:
wifi:
  ap:
    ssid: "Thermostat"
    password: "MySecretThemostat"
captive_portal:

opentherm:

number:
  - platform: opentherm
    t_set:
      name: "Boiler Control setpoint"

This seems to work fine for me. The repo is indeed cloned into the .esphome\external_components\... folder and I also see the .h and .cpp files appear in the .esphome\build\thermostat-number-minimal\src\esphome\components\opentherm folder.

Arise commented 1 year ago

Tried in a new folder with the above mentioned example, esphome v2022.12.4.

The repo is brought in as a d4d3a138 folder inside .esphome/external_components

But that is it, no compilation takes place, because it complains of Component not found: opentherm. If I remove the line with
opentherm: from config yaml file then I can see everything compiling (obvious without the component).

I also tried to run directly compile_all.py, the examples all reference directly components\opentherm folder, but I get the same error. image

arthurrump commented 1 year ago

Then the problem might be with Python, that it is somehow unable to load the project and thus esphome is unable to find the component. What version of Python are you running? I'm on 3.10 locally and CI is running on 3.9, but I might well be using Python features that are not available in earlier versions.

Arise commented 1 year ago

Found the issue will trying to run generate_schema_docs.py After running pip install typing-extensions everything works now, I can compile successfully.

Don't know why this missing module is required and not flagged as such when trying to compile the config yaml files.

wildekek commented 10 months ago

Seems this issue is rearing it's head again in ESPHome 2023.11. I rolled back to ESPHome 2023.10 and it works fine there.

en-ver commented 10 months ago

Yes, I confirm, got the "Component not found: opentherm." after the update to 2023.11.0. BTW never had that issue before. I use ESPhome in docker on debian. Installed the extension on OS level sudo apt install python3-typing-extensions Didn't help. Please advise

wildekek commented 10 months ago

Fixed in ESPHome 2023.11.2

en-ver commented 10 months ago

@wildekek I've updated the esphome but the issue is still existing

Here is a validation error

INFO ESPHome 2023.11.2
INFO Reading configuration /config/014-wemos-d1-mini.yaml...
Failed config

opentherm: [source /config/014-wemos-d1-mini.yaml:45]

  Component not found: opentherm.
  ch_enable: True
  dhw_enable: True
output.opentherm: [source /config/014-wemos-d1-mini.yaml:49]

  Platform not found: 'output.opentherm'.
  platform: opentherm
  t_set: 
    id: t_set
    min_value: 35
    max_value: 55
    zero_means_zero: True
sensor.opentherm: [source /config/014-wemos-d1-mini.yaml:65]

  Platform not found: 'sensor.opentherm'.
  platform: opentherm
  rel_mod_level: 
    name: Gas Boiler Modulation
    icon: mdi:chart-bell-curve
  t_boiler: 
    name: Gas Boiler Temperature
    icon: mdi:coolant-temperature
  t_dhw_set: 
    name: Gas Boiler DWH Setpoint
    icon: mdi:hand-water
  dhw_flow_rate: 
    name: Boiler Water flow rate in DHW circuit
  t_storage: 
    name: Boiler Solar storage temperature
  t_flow_ch2: 
    name: Boiler Flow water temperature CH2 circuit
  t_dhw_set_ub: 
    name: Boiler Upper bound for adjustement of DHW setpoint
  t_dhw_set_lb: 
    name: Boiler Lower bound for adjustement of DHW setpoint
  max_t_set_ub: 
    name: Boiler Upper bound for adjustement of max CH setpoint
  max_t_set_lb: 
    name: Boiler Lower bound for adjustement of max CH setpoint
  max_t_set: 
    name: Boiler Maximum allowable CH water setpoint
binary_sensor.opentherm: [source /config/014-wemos-d1-mini.yaml:176]

  Platform not found: 'binary_sensor.opentherm'.
  platform: opentherm
  flame_on: 
    name: Gas Boiler Flame
    icon: mdi:fire
  diagnostic_indication: 
    name: Gas Boiler Diagnostic
    entity_category: diagnostic
switch.opentherm: [source /config/014-wemos-d1-mini.yaml:185]

  Platform not found: 'switch.opentherm'.
  platform: opentherm
  ch_enable: 
    name: Gas Heating
    mode: restore_default_on
    icon: mdi:water-boiler
  dhw_enable: 
    name: Gas Hot Water
    mode: restore_default_off
    icon: mdi:hand-water

And the config itself

substitutions:
  device_name: 014-wemos-d1-mini

esphome:
  name: ${device_name}
  comment: Gas Bolier

external_components:
  # Replace with a direct reference to GitHub in your own configuration
  source: github://arthurrump/esphome-opentherm@main
  #source: 
  #  type: local
  #  path: ./opentherm/

esp8266:
  board: d1_mini
  restore_from_flash: True

# Enable logging
logger:
#  level: WARN
#  baud_rate: 0

# Enable Home Assistant API
api:

ota:
  password: "f5923c3172c4457c9facb9908a4cc5ae"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ${device_name}
    password: !secret fallback_password

captive_portal:

#web_server:
#  port: 80

opentherm:
  ch_enable: true
  dhw_enable: true

output:
  - platform: opentherm
    t_set:
      id: t_set
      min_value: 35
#      auto_max_value: true
      max_value: 55
      zero_means_zero: true

#number:
#  - platform: opentherm
#    t_dhw_set:
#      name: "Gas Boiler DHW Setpoint"
#    max_t_set:
#      name: "Gas Boiler Max Setpoint"

sensor:
  - platform: opentherm
    rel_mod_level:
      name: "Gas Boiler Modulation"
      icon: mdi:chart-bell-curve
    t_boiler:
      name: "Gas Boiler Temperature"
      icon: mdi:coolant-temperature
    t_dhw_set:
      name: "Gas Boiler DWH Setpoint"
      icon: mdi:hand-water

#    ch_pressure:
#      name: "Boiler Water pressure in CH circuit"
    dhw_flow_rate:
      name: "Boiler Water flow rate in DHW circuit"
#    t_dhw:
#      name: "Boiler DHW temperature"
#    t_outside:
#      name: "Boiler Outside temperature"
#    t_ret:
#      name: "Boiler Return water temperature"
    t_storage:
      name: "Boiler Solar storage temperature"
#    t_collector:
#      name: "Boiler Solar collector temperature"
    t_flow_ch2:
      name: "Boiler Flow water temperature CH2 circuit"
#    t_dhw2:
#      name: "Boiler Domestic hot water temperature 2"
#    t_exhaust:
#      name: "Boiler Exhaust temperature"
#    burner_starts:
#      name: "Boiler Number of starts burner"
#    ch_pump_starts:
#      name: "Boiler Number of starts CH pump"
#    dhw_pump_valve_starts:
#      name: "Boiler Number of starts DHW pump/valve"
#    dhw_burner_starts:
#      name: "Boiler Number of starts burner during DHW mode"
#    burner_operation_hours:
#      name: "Boiler Number of hours that burner is in operation (i.e. flame on)"
#    ch_pump_operation_hours:
#      name: "Boiler Number of hours that CH pump has been running"
#    dhw_pump_valve_operation_hours:
#      name: "Boiler Number of hours that DHW pump has been running or DHW valve has been opened"
#    dhw_burner_operation_hours:
#      name: "Boiler Number of hours that burner is in operation during DHW mode"
    t_dhw_set_ub:
      name: "Boiler Upper bound for adjustement of DHW setpoint"
    t_dhw_set_lb:
      name: "Boiler Lower bound for adjustement of DHW setpoint"
    max_t_set_ub:
      name: "Boiler Upper bound for adjustement of max CH setpoint"
    max_t_set_lb:
      name: "Boiler Lower bound for adjustement of max CH setpoint"
    max_t_set:
      name: "Boiler Maximum allowable CH water setpoint"

    # Get the boiler setpoint in celcius
  - platform: template
    id: boiler_setpoint_temperature
    name: "Gas Boiler CH setpoint"
    lambda: |-
      return id(t_set).state;
    update_interval: 1s
    unit_of_measurement: "°C"
    device_class: "temperature"
    state_class: "measurement"
    accuracy_decimals: 2

  - platform: homeassistant
    id: ch_room_temperature
    entity_id: sensor.current_temp_gas
    filters: 
      # Push room temperature every second to update PID parameters
      - heartbeat: 1s

  - platform: pid
    name: "PID Climate RESULT"
    type: RESULT

  - platform: pid
    name: "PID Climate ERROR"
    type: ERROR

  - platform: pid
    name: "PID Climate PROPORTIONAL"
    type: PROPORTIONAL

  - platform: pid
    name: "PID Climate INTEGRAL"
    type: INTEGRAL

  - platform: pid
    name: "PID Climate HEAT"
    type: HEAT

  - platform: pid
    name: "PID Climate KP"
    type: KP

  - platform: pid
    name: "PID Climate KI"
    type: KI

  - platform: uptime
    name: ${device_name} Uptime
    id: node_uptime
    unit_of_measurement: "s"

binary_sensor:
  - platform: opentherm
    flame_on:
      name: "Gas Boiler Flame"
      icon: mdi:fire
    diagnostic_indication:
      name: "Gas Boiler Diagnostic"
      entity_category: diagnostic

switch:
  - platform: opentherm
    ch_enable:
      name: "Gas Heating"
      mode: restore_default_on
      icon: mdi:water-boiler
    dhw_enable:
      name: "Gas Hot Water"
      mode: restore_default_off
      icon: mdi:hand-water
  - platform: template
    name: "PID Autotune"
    icon: mdi:tune-vertical-variant
    turn_on_action:
      - climate.pid.autotune: 
          id: pid_climate
          noiseband: 0.1
  - platform: restart
    name: ${device_name} Restart

climate:
  - platform: pid
    id: pid_climate
    name: "Gas Boiler"
    heat_output: t_set
    default_target_temperature: 10
    sensor: ch_room_temperature
    icon: mdi:home-thermometer
    control_parameters: 
      kp: 0.1
      ki: 0.0
      kd: 0.0
ymatsiuk commented 9 months ago

Works only in esphome:2023.9.3 for me. docker run --rm --net host -v "${PWD}":/config -it ghcr.io/esphome/esphome:2023.9.3 run examples/thermostat-pid-basic.yaml

andreaconfa commented 9 months ago

Please help... i have the same issue running the Plugin version for home assistant.

I'm getting th error:

Failed config

opentherm: [source /config/esphome/opentherm-caldaia.yaml:36]

  Component not found: opentherm.
  in_pin: 4
  out_pin: 5

With this simple config:

esphome:
  name: opentherm-caldaia
  friendly_name: OpenTherm Caldaia

esp32:
  board: lolin32
  framework:
    type: arduino

external_components:
  source: github://arthurrump/esphome-opentherm@main

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXX"

ota:
  password: "XXXXXXX"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Opentherm-Caldaia"
    password: "bmiUPngRJlUj"

captive_portal:

opentherm:
  in_pin: 4
  out_pin: 5 
en-ver commented 9 months ago

@andreaconfa @ymatsiuk I've got it working by switching to another repo source: github://ov1d1u/esphome-opentherm@main

Bugracer commented 5 months ago

Hello, I have this error: UnknownPackageError: Could not find the package with 'ihormelnyk/OpenTherm Library @ 1.1.3' requirements for your system 'linux_aarch64'

withsource: github://ov1d1u/esphome-opentherm@main

Slevinoo commented 4 months ago

Hello, I have this error: UnknownPackageError: Could not find the package with 'ihormelnyk/OpenTherm Library @ 1.1.3' requirements for your system 'linux_aarch64'

withsource: github://ov1d1u/esphome-opentherm@main

I have the same error. I have forked the github repo and updated the version of the ihormelnyk to 1.1.5, but that results in the following error: Schermafbeelding 2024-04-27 104225

Bugracer commented 4 months ago

@Slevinoo , use github://Bugracer/esphome-opentherm@main I made the corrections

en-ver commented 2 months ago

@Slevinoo , use github://Bugracer/esphome-opentherm@main I made the corrections

@Bugracer thx! That worked! I can see a 1.1.5 version of the library is available, but your codebase uses 1.1.4. Maybe it makes sense to switch to the new version? I appreciate your efforts.