Programa para rejilla de aire acondicionado en homeassistan con EspHome

Con esa debería darte menos problemas.

Buenas Miguel Ángel, cómo está tardando la placa, estoy pensando en seguir con las cosas que quiero hacer, lo que no sé es si abrir un nuevo tema…
Quiero que la luz del patio no se encienda mientras esté de dia, y sé que puedo utilizar, sun.sun de home assistant, lo que pasa es que no se como utilizar variables de Home assistant en el código de esphome…
Me podrías orientar…
Y si lo crees oportuno creo otro tema nuevo.
Un saludo…

No he llegado a usarlo, pero… ¿Por qué no haces que lo gestione el propio Home Assistant en vez del ESPHome?

Crea una automatización en el propio Home Assistant para que encienda/apague la luz cuando toque. Es mucho más cómodo y fácil.

La verdad es que tienes razón…
Pero me gusta, que si puede ser, el mecanismo haga la función sin necesitar la wifi, ademas así comiéndome la cabeza con estas cosas es como le cojo el tranquillo a este tema y aprendo.
Estuve buscando información y haciendo pruebas y conseguí tener una variable con el estado, aunque no se que hacer con ella por ahora.

text_sensor:

  • platform: homeassistant
    name: “Estado Sol”
    entity_id: sun.sun

Ahora estoy probando con (if condition) y lambdas, pero algo no escribo bien que no hay manera de que me deje

El problema es que va a necesitar wifi, pues si no tiene no puede saber el estado del sol, ergo, no funcionará correctamente.

Hay le has dado…, jaja, pues es verdad, no había caído en ese detalle…

Lo he conseguido sacar…

text_sensor:

  • platform: homeassistant
    name: “Estado Sol”
    entity_id: sun.sun
    id: my_text_sensor

binary_sensor:

  • platform: gpio
    name: “Pulsador Patio”
    pin: 02
    id: switch_1
    filters:
    • invert:
      on_press:
      if:
      condition:
      text_sensor.state:
      id: my_text_sensor
      state: ‘above_horizon’
      then:
      • switch.turn_off: relay_1
        else:
        • delay: 100ms
        • switch.toggle: relay_1

switch:

  • platform: gpio
    name: “Luz Patio”
    pin: 0
    inverted: false
    id: relay_1
    restore_mode: restore_default_off

Me alegro.

Yo me hice un sensor para calcular, más o menos, la luminosidad según la posición del sol y lo nublado que esté:


sensor:
  - platform: yr 
    name: tiempo_actual
    monitored_conditions:
      - temperature
      - precipitation
      - windSpeed
      - humidity
  - platform: template
    sensors:
      luminosidad:
        unit_of_measurement: brillibrilli
        value_template: "{{ [ state_attr('sun.sun', 'elevation') | float * ( 100.0 - states('sensor.tiempo_actual_cloudiness') | float ), 0.0] | max | float }}"

binary_sensor:   
  - platform: template
    sensors:
      oscuro:
        friendly_name: "Oscuro"
        value_template: "{{ states('sensor.luminosidad')|float < 300 }}"


También me hice un sensor binario para directamente determinar que «está oscuro».

Es que me encontré con el problema que días muy nublados, aunque había amanecido, necesitaba que se siguiese encendiendo las luces pues estaba muy oscuro.

Lo ideal en estos casos es usar un sensor lumínico, pero a falta de pan…

Que máquina, que eres…
Ayer me di cuenta, funcionar funcionaba, y me ayudó aprender algo más, pero para cuando marcaba que estaba bajo el horizonte ya no había luz, y por lo menos debería poder encender una hora antes, y luego está el tema, como dices, los días nublados no se encenderia y no mola.
Una pregunta, donde pones ese código, en un esp8266 no creo, no??.
En el configuración.yaml?

Igual me hago un sensor de luz…, eso sería lo suyo.

No, eso lo pongo en el Home Assistant, en la configuración. Me crea un sensor nuevo que podrías leer desde el ESP, aunque como te dije, no le veo utilidad respecto a ponerlo directamente en el HA.

Buenas Miguel Ángel.
Llevo unos días que reviso el código que has puesto. Lo copie y puse en mi HA y he visto las variables que aparecen y he conseguido ver de donde salen.
Con esto ya es otro tema…

  • platform: template
    sensors:
    luminosidad:

Sobre todo esto…

    unit_of_measurement: brillibrilli
    value_template: "{{ [ state_attr('sun.sun', 'elevation') | float * ( 100.0 - states('sensor.tiempo_actual_cloudiness') | float ), 0.0] | max | float }}"

binary_sensor:

  • platform: template
    sensors:
    oscuro:
    friendly_name: “Oscuro”
    value_template: “{{ states(‘sensor.luminosidad’)|float < 300 }}”

Esta parte es la que no pillo del todo.

Si te fijas, el primer sensor que pongo es el yr que crea un sensor «tiempo_actual».

Este sensor, tiene varios datos, como es el cloudiness (porcentaje de nubes).

Lo que hago es hacer un cálculo un poco «de aquella manera» para crearme un seor llamado luminosidad cuyo valor es la elevación del sol * (100 - porcentaje nubes)

Así, por ejemplo, si las nubes es 100, la luminosidad es 0, si están al 30% pues elevación * 0.70.

Después creo un segundo sensor binario que básicamente si la luminosidad (el sensor de antes) vale menos de 300 devuelve verdadero y si no pues falso.

La verdad que es muy ingenioso, y me mola…

De donde sacas el cómo hacer cálculos, he buscado pero no he encontrado dónde sacar información, el “yr” lo encontré y vi de donde sacabas y ya pude entender mejor el código.

Aquí puedes ver como hacer templates:

Y en el HA, en la parte de herramientas del desarrolladores -> estados puedes ver los diferentes campos.

Ya es cuestión de echarle rato e imaginación

Hola:

Yo he usado como bien dice MIguel Angel el hacer un template ya que use un ESP pero en vez de usar EspHome, lo hice con MicroPython; y para integrarlo con Home Assistant cree un template. Fijate bien en la documentación que suele estar bien explicado y con ejemplos.

Muchas gracias a los dos.
Me pondré a estudiar, que he visto que tiene bastante información…

Buenas al final lo tengo hecho…
Utilice una wemos D1 mini que tenia y me hice un sensor con una LDR que coloque en el patio. Ademas utilizo la variable para que no encienda las luces del porche, terraza y puerta hasta que baje la luminosidad…

> sensor:
>   - platform: resistance
>     sensor: source_sensor
>     configuration: UPSTREAM
>     resistor: 10kOhm
>     name: "Sensor Iluminacion"
>     reference_voltage: 3.3V
>     id: LDR
>     
>   - platform: adc
>     id: source_sensor
>     pin: A0
>     
> binary_sensor:
>   - platform: template
>     name: "Luminosidad"
>     id: luminosidad
>     lambda: |-
>       if (id(LDR).state > 1000000) {
>         return false;
>       } else {
>         return true;
>       }
>       
>   - platform: gpio
>     name: "Pulsador Patio"
>     pin: D1
>     id: switch_1
>     filters:
>       - invert:
>     on_click:
>       if:
>         condition:
>           binary_sensor.is_on: luminosidad
>         then:
>         - switch.turn_off: relay_1
>         else:
>           - delay: 10ms
>           - switch.toggle: relay_1

Lo malo es que una vez que pones el “if:” ya no puedes utilizar esto:

on_click:
- min_length: 100ms
max_length: 1000ms

Bueno o por lo menos yo no he sabido hacerlo y mira que he probado.

thanks you!