Forbids comparison between pointer and integer calc with seconds?

Hi, I’m trying to compile some ESPhome code that involves calculations with seconds.

Since millis() doesn’t seem to work with lambda, I’ve tried using uptime.
I’m also having trouble comparing values ​​using a float variable.
Could you please help me with this?

The code:

---
substitutions: 
  devicename: esp32-s2-mini-saola
  board: esp32-s2-saola-1
  upper_devicename: ESP32_S2_TestBoard
  device_location: Schreibtisch
  device_description:  Testboard using ESPhome firmware
  ipaddress: !secret ESP32_S2_TESTBOX_IP
  last_update: "2025-10-23 22:54:12"


esphome:
  name: esp32-s2-mini-saola
  comment: Testboard
  includes: []
  libraries: []
  build_path: ESP32_S2_TestBoard
  platformio_options: {} 

esp32:
  board: esp32-s2-saola-1
  framework:
    type: esp-idf

api:
  encryption:
    key: !secret ESPHOME_API_KEY

wifi:
  power_save_mode: none # none (default for esp8266), light (default for esp32), high
  ssid: !secret WLAN_ASUS_SSID
  password: !secret WLAN_ASUS_PASSWORD
  manual_ip:
    static_ip: !secret ESP32_S2_TESTBOX_IP
    gateway: !secret WLAN_ASUS_GATEWAY_IP
    subnet: !secret WLAN_ASUS_SUBNET
    dns1: !secret WLAN_ASUS_DNS1

  ap:
    ssid: "ESP32-S2-MINI-Testboard"
    password: !secret WIFI_AP_PASSWORD

ota:
  - platform: esphome
    #safe_mode: true
    password: !secret HA_OTA_PASSWORD

web_server:
  port: 80
  auth:
    username: admin
    password: admin

globals:
   # global int variable
  - id: heater_run
    type: int
    restore_value: no
    initial_value: '0'

  - id: heat_level
    type: int
    restore_value: no
    initial_value: '10'

  - id: heat_level_now
    type: int
    restore_value: no
    initial_value: '10'

  - id: stepsDown_heatLevel
    type: int
    restore_value: no
    initial_value: '0'
  
  - id: stepsUp_heatLevel
    type: int
    restore_value: no
    initial_value: '0'

  - id: set_heat_level_to
    type: int
    restore_value: no
    initial_value: '0'
  # global string variable
  
  - id: change_heatLevel
    type: int
    restore_value: no
    initial_value: '0'
  # global string variable

  - id: string_heater_run_yes
    type: std::string
    restore_value: yes
    max_restore_data_length: 24
    initial_value: '"Heizung ist An"'

  - id: string_heater_run_no
    type: std::string
    restore_value: yes
    max_restore_data_length: 24
    initial_value: '"Heizung ist Aus"'

  - id: heater_minRunTimeInHeatLevel
    type: int
    restore_value: no
    initial_value: '0'

  - id: startTime
    type: int
    restore_value: no
    # initial_value: '0'
    initial_value: '0'

  - id: endTime
    type: int
    restore_value: no
    initial_value: '0'
  
  - id: changeHeaterLevel
    type: int
    restore_value: no
    initial_value: '0'


remote_receiver:
  pin: GPIO18
  #dump: all # rc_switch
  dump: # dump: all
    - rc_switch 
  # Settings to optimize recognition of RF devices
  tolerance: 50%
  idle: 4ms

remote_transmitter:
  pin: GPIO17
  carrier_duty_percent: 100% # change from 100%  to 50%

sensor:
  - platform: dht
    pin: GPIO11
    model: AM2302
    temperature:
      name: "Garage Temperatur DHT_1"
      id: TEMP_DHT_1
      unit_of_measurement: "°C"
      accuracy_decimals: 2
    humidity:
      name: "Garage Luftfeuchtigkeit DHT_1"
      id: HUMIDITY_DHT_1
      unit_of_measurement: "%"
      accuracy_decimals: 2
    update_interval: 10s
  - platform: template
    name: "Temp Garage delta"
    id: tempGarage_delta
    unit_of_measurement: "°C"
    accuracy_decimals: 2
    update_interval: 60s
    lambda: |-
      return id(TEMP_DHT_1).state - id(garage_thermostat).target_temperature;
    on_value:
      then:
        - script.execute: update_vevor_heaster_power
  - platform: uptime
    id: uptime_sec # it's work time esp…

# Example configuration entry
climate:
  - platform: thermostat
    name: "Garage Vevor Heizung"
    id: garage_thermostat
    sensor: TEMP_DHT_1
    heat_deadband: 0.0
    heat_overrun: 0.0
    visual:
      min_temperature: 15
      max_temperature: 40
      temperature_step: 0.1
    min_heating_off_time: 2s
    min_heating_run_time: 2s
    min_idle_time: 2s
    heat_action: []
    idle_action: []
    preset:
      - name: Kodus
        default_target_temperature_low: 20 °C
      - name: Eemal
        default_target_temperature_low: 18 °C

script:
  - id: check_heaterLevel_upDown
    parameters:
      heaterLevel: int
    then: 
      lambda: |-
        if(id(heat_level_now) == heaterLevel){
          id(change_heatLevel) = 0;
          // return id(heat_level_now);
          //return id(heat_level_now);
        }else{
          if(id(heat_level_now) > heaterLevel){
            id(stepsDown_heatLevel) = id(heat_level_now) - heaterLevel;
            id(change_heatLevel) = 1;
            id(heaterLevel_minus)->execute(id(stepsDown_heatLevel));
          };
          if(id(heat_level_now) < heaterLevel){
            id(stepsUp_heatLevel) = heaterLevel - id(heat_level_now);
            id(change_heatLevel) = 1;
            id(heaterLevel_plus)->execute(id(stepsUp_heatLevel));

          };
        };
        
  - id: heaterLevel_plus
    parameters:
      stepsUp_heaterLevel: int
    then:
      - remote_transmitter.transmit_rc_switch_raw: 
        #code Plus x steps up = stepsUp_heat_level
          code: '00011100010111100000100011110000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
      - logger.log: Heizung Plus!

  - id: heaterLevel_minus
    parameters:
      stepsDown_heaterLevel: int
    then:
      - remote_transmitter.transmit_rc_switch_raw: 
        #code Plus
          code: '00011100010111100000001010001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
      - logger.log: Heizung Minus!

  - id: calc_minRunTimeInHeatLevel
    parameters:
      delta_degress: float
    then: 
      - lambda: |-
                int OneMinute=60;
                int threeMinute=180;
                int fiveMinute=300;
                int sevenMinute=420;
                int tenMinute=600;
                int thirteenMinute=840;
                int sexteenMinute=960;
                int twentyMinute=1200;
                int seconds = (id(uptime_sec).state);

                if(id(startTime) == 0){
                  id(startTime) = seconds;
                }else if (seconds < endTime){
                  // hier abbruch
                  id(changeHeaterLevel) = 1;
                }else{
                  id(startTime) = seconds;
                  if (delta_degress < 0.5) {
                    id(endTime) = ((id(startTime)) + (OneMinute));
                  } 
                  if (delta_degress < 1) {
                    id(endTime) = ((id(startTime)) + (threeMinute));
                  }
                  if (delta_degress < 1.5) {
                    id(endTime) = (id(startTime) + fiveMinute);
                  }
                  if (delta_degress < 2) {
                    id(endTime) = (id(startTime) + sevenMinute);
                  }
                  if (delta_degress < 3) {
                    id(endTime) = (id(startTime) + tenMinute);
                  }
                  if (delta_degress < 4) {
                    id(endTime) = (id(startTime) + thirteenMinute);
                  }
                  if (delta_degress < 10) {
                    id(endTime) = (id(startTime) + sexteenMinute);
                  }
                  if (delta_degress >= 10) {
                    id(endTime) = (id(startTime) + twentyMinute);
                  }
                }
          
  - id: update_vevor_heaster_power
    mode: restart
    then:
      - if:
          # Heizstufe 10 
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -3.0
          then:
            # ausführen der Scripte 
            #calc_minRunTimeInHeatLevel
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 10    # vergleichen & setzen auf Heizstufe 10
    
      - if:
          # Heizstufe 9
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -2.5
              above: -3.0
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 9    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 8
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -2.0
              above: -2.49
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 8    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 7
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -1.6
              above: -1.99
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 7    # vergleichen & setzen auf Heizstufe 10

      - if:
          # Heizstufe 6
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -1.2
              above: -1.59
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 6    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 5
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -0.9
              above: -1.19
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 5    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 4
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -0.6
              above: -0.89
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 4    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 3
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -0.4
              above: -0.59
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 3    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 2
          condition:
            sensor.in_range:
              id: tempGarage_delta
              below: -0.1
              above: -0.39
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 2    # vergleichen & setzen auf Heizstufe 10
      - if:
          # Heizstufe 1
          condition:
            sensor.in_range:
              id: tempGarage_delta
              above: 0
          then:
            - script.execute:
                id: calc_minRunTimeInHeatLevel
                delta_degress: !lambda return id(tempGarage_delta);
            - script.execute:
                id: check_heaterLevel_upDown
                heaterLevel: 1    # vergleichen & setzen auf Heizstufe 10

switch:
  - platform: gpio
    pin: GPIO10
    name: "Heizung Strom An/Aus"
    id: RelayHeater

button:
  - platform: template
    name: Heizung An
    id: heaterOn
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100001000110110000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
      - logger.log: Heizung ANgeschaltet!
  - platform: template
    name: Heizung Aus
    id: heaterOff
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000010100001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
      - logger.log: Heizung AUSgeschaltet!
  - platform: template
    name: Heizleistung Plus
    id: heaterPlus
    on_press:
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000100011110000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
  - platform: template
    name: Heizleistung Minus
    id: heaterMinus
    on_press:
      #- script.call: heizleistung_1
      - remote_transmitter.transmit_rc_switch_raw:   
          code: '00011100010111100000001010001000'
          protocol: 
            pulse_length: 255
          repeat:
            times: 5
            wait_time: 0s
improv_serial:

## Enable logging
logger:
  level: DEBUG
  baud_rate: 9600

ther errors:

Compiling .pioenvs/esp32-s2-mini-saola/src/main.cpp.o
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:261:25: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
  261 |                 }else if (seconds < endTime){
      |                 ~~~~~~~~^~~~~~~~~
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:307:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  307 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:322:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  322 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:336:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  336 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:350:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  350 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:365:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  365 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:379:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  379 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:393:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  393 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:407:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  407 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:421:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  421 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
/config/esphome/test1.yaml: In lambda function:
/config/esphome/test1.yaml:434:14: error: cannot convert 'esphome::template_::TemplateSensor*' to 'float' in return
  434 |             - script.execute:
      |              ^~~~~~~~~~~~~~~~
      |              |
      |              esphome::template_::TemplateSensor*
*** [.pioenvs/esp32-s2-mini-saola/src/main.cpp.o] Error 1
========================= [FAILED] Took 65.41 seconds ======================

I think “seconds” is a reserved word. Try renaming that to something else.

Thank you so much.
I’ve now been able to correct most of the errors. I still have a few minor things to sort out, but it’s getting better and better.

Since I’m building an ESP standalone system, I have to factor in runtime in my code. I made the mistake of using millis() in lambda section and couldn’t figure it out at all.

Luckily, I discovered ChatGpt yesterday, and it’s giving me some great solutions using upTime.

Seeing examples makes it easier to understand, and my learning curve is much better, so I don’t have to keep bothering you with such silly questions.

Thanks again!