Programa para rejilla de aire acondicionado en homeassistan con EspHome

Hola, tengo entre manos varios proyectos en mi casa, como he puesto en mi presentación soy nuevo en esto y con solo dos meses que conozco homeassistant.
he adquirido varios esp8266-01s relay y estoy viendo el potencial que tienen.
Varios los modifique para utilizar el gpio2, que no se utiliza en la placa para utilizarlo de entrada con los pulsadores de las habitaciones y van muy bien.
Ahora estoy con la rejilla del aire acondicionado, he modificado la rejilla y le he puesto un servo motor modificado y controlado por dos reles que a su vez maneja un esp8266. Con dos finales de carrera para saber si las lamas están abiertas o cerradas.
El problema es el código:

binary_sensor:

  • platform: gpio
    pin:
    number: 01
    mode: INPUT
    inverted: false
    name: “Rejilla Cerrada”
    id: r_cerrada
    on_press:

    • switch.turn_off: rele_1
  • platform: gpio
    pin:
    number: 03
    mode: INPUT
    inverted: false
    name: “Rejilla Abierta”
    id: r_abierta
    on_press:

    • switch.turn_off: rele_2

switch:

  • platform: gpio
    name: “Cerrar Rejilla”
    pin: 0
    id: rele_1
    on_turn_on:
    • delay: 2000ms
    • switch.turn_off: rele_1
      interlock: [rele_2]
      restore_mode: restore_default_off
  • platform: gpio
    name: “Abrir Rejilla”
    pin: 02
    id: rele_2
    restore_mode: restore_default_off
    on_turn_on:
    • delay: 2000ms
    • switch.turn_off: rele_2
      interlock: [rele_1]

Si le doy abrir, abre y cuando llega a su final de carrera para y igual con el cierre. Lo malo es que si esta ya en el final de carrera, por ejemplo abierta y le doy a abrir se activa el rele de abrir, (forzándose el motor y mas).
Lo que quiero hacer es que si un final de carrera esta activo como el ejemplo si le doy abrir no haga nada y solo se active si le doy a cerrar…

Espero haberme explicado… y muchas gracias…

Puedes usar if/else para determinar si debes o no moverlo:

Si te fijas, en la parte de lambdas, muestran un código de ejemplo.

Gracias…
Dónde lo pondría en la zona de binary_sensor o en la switch??
Esos detalles son los que me tienen bloqueado

En el switch. Si lo pones en el binary y pulsas directamente en el switch, no hará caso del if. Si lo pones en el switch, cuando pulses en el binary este llamará al switch y se comprobará igualmente.

No me aclaro, lo siento…
He estado probando de todo, y no me deja ni compilar, ademas no se como implementar ese ejemplo, no tengo idea de donde poner los “id” de los finales de carrera, ni como hacer que se active un rele y luego el otro…
hace muchísimo tiempo que no hago nada de programación y me esta costando coger el tema.

Aquí tienes el código con los ifs. Poniéndolos en el binary te lo he simplificado. Simplemente, pones un if con la condición de solo abrir si está cerrada y solo cerrar si está abierta.


binary_sensor:
  - platform: gpio
    pin:
      number: 01
      mode: INPUT
      inverted: false
    name: "Rejilla Cerrada"
    id: r_cerrada
    on_press:
      - if:
          condition:
            binary_sensor.is_on: r_abierta
      - switch.turn_off: rele_1
  
  - platform: gpio
    pin:
      number: 03
      mode: INPUT
      inverted: false
    name: "Rejilla Abierta"
    id: r_abierta
    on_press:
      - if:
          condition:
           binary_sensor.is_on: r_cerrada
      - switch.turn_off: rele_2  
  
switch:
  - platform: gpio
    name: "Cerrar Rejilla"
    pin: 0
    id: rele_1
    on_turn_on: 
      - delay: 2000ms
      - switch.turn_off: rele_1
    interlock: [rele_2]
    restore_mode: restore_default_off
  - platform: gpio
    name: "Abrir Rejilla"
    pin: 02
    id: rele_2
    restore_mode: restore_default_off
    on_turn_on:
      - delay: 2000ms
      - switch.turn_off: rele_1
    interlock: [rele_1]


muchas gracias, eso ya lo probe y me daba error al validar por el “if”.
con el codigo que me has puesto me da este error:
INFO Reading configuration /config/esphome/control_entradas.yaml…
ERROR Error while reading config: Invalid YAML syntax. Please see YAML syntax reference or use an online YAML syntax validator:

while parsing a block mapping
in “/config/esphome/control_entradas.yaml”, line 38, column 9:
- if:
^
expected , but found ‘-’
in “/config/esphome/control_entradas.yaml”, line 41, column 9:
- switch.turn_off: rele_1

Lo he traducido y espera el final del if y no veo que poner.
igual es una tontería pero no caigo…
Gracias por todo de verdad…

Había olvidado el then

binary_sensor:
  - platform: gpio
    pin:
      number: 01
      mode: INPUT
      inverted: false
    name: "Rejilla Cerrada"
    id: r_cerrada
    on_press:
      - if:
          condition:
            binary_sensor.is_on: r_abierta
          then:
          - switch.turn_off: rele_1
  
  - platform: gpio
    pin:
      number: 03
      mode: INPUT
      inverted: false
    name: "Rejilla Abierta"
    id: r_abierta
    on_press:
      - if:
          condition:
           binary_sensor.is_on: r_cerrada
          then:
           - switch.turn_off: rele_2  
  
switch:
  - platform: gpio
    name: "Cerrar Rejilla"
    pin: 0
    id: rele_1
    on_turn_on: 
      - delay: 2000ms
      - switch.turn_off: rele_1
    interlock: [rele_2]
    restore_mode: restore_default_off
  - platform: gpio
    name: "Abrir Rejilla"
    pin: 02
    id: rele_2
    restore_mode: restore_default_off
    on_turn_on:
      - delay: 2000ms
      - switch.turn_off: rele_1
    interlock: [rele_1]


Me respondo yo solo:

  • if:
    condition:
    binary_sensor.is_on: r_abierta
    - switch.turn_off: rele_1

En esta función tiene que ser así:

if:
condition:
switch.is_on: rele_1
# same goes for is_off
then:
- switch.turn_off: rele_1

No habia visto tu respuesta por no darle a refrescar a la pagina, jejeje

Te he ganado por 1m :stuck_out_tongue:

ya veo…
Muchas gracias ya lo tengo casi conseguido…
Para que el rele no se active he pensado hacerlo asi:
switch:

  • platform: gpio
    name: “Cerrar Rejilla”
    pin: 0
    id: rele_1
    on_turn_on:
    if:
    condition:
    binary_sensor.is_on: r_abierta
    then:
    - delay: 1ms
    - switch.turn_off: rele_1
    else:
    - delay: 3000ms
    - switch.turn_off: rele_1

Es un poco chapucero pero así no sufre el motor por un fallo. estoy probando solo con una salida.

El problema es que ahí has puesto la condición en «on_turn_on», vamos, que es «cuando se enciende haz esto», por tanto, si pones el if ahí, lo que harás es que se encenderá y no lo apagarás después.

Por eso lo he puesto en el binary, para evitar que lo enciendas.

Buenas Miguel Ángel…
De la manera que lo expones lo he probado y si el final de carrera está activo por ejem(abrir) y le das al switch de abrir, se activa el relé y igual pasa con cerrar…
Otra cosa es que este el final de carrera de abrir y le dé a cerrar, cuando llega a su final de carrera para y al revés también lo hace.
Mi idea es controlar la rejilla con una sonda de temperatura la cual abra y cierra la rejilla, con lo cual con esa configuración me valdría, lo que pasa es que quiero también tener los switch para que si una habitación está vacía cerrar la rejilla manualmente, lo que conlleva que alguno de la casa por error le dé a cerrar cuando ya esté cerrada… No sé si me he explicado…
He puesto “on_trun_on”, por que no se me ocurre que poner, lo ideal sería que si su final de carrera está activo, el switch aparezca desahabilitado o que si, se le da, no haga nada…
De todas maneras muchas gracias por tu ayuda…, por que ya le voy cogiendo un poco el hilo al tema, solo me faltan más conocimientos…jeje

Una pregunta, a ver si es que he entendido mal. ¿Los binary sensor es están ligados a los finales de carrera?

Es decir, cuando está abierta, ¿r_abierta marca true?

MI idea es que fuese así, y por tanto, solo cerrase si r_abierta es true.

Si, están ligados, el gpio1 y gpio3 los tengo conectados a unos micropulsadores normalmente cerrados, que me hacen de finales de carrera, el gpio0 y el gpio2 son las salidas a los relés…
Si te he entendido bien, es exactamente como dices.
Lo que ocurre es que si, la rejilla está abierta y le das abrir el relé de abrir se activa, se activa siempre que le des manualmente. Y no sé cómo evitar eso.

Ahh vale, ya te he entendido. Es que me he hecho un lío yo solo. Pensaba que los binary_sensor eran «botones» que pulsabas para abrir y cerrar, no que eran los finales de carrera en sí.

Entonces lo que se me ocurre es que crees un switch template que usaremos para «abrir y cerrar», y será este el que tengan las condiciones y llama a un switch u otro según si se abre y cierra.

De esta forma, tendrás solo un switch visible.

Para que los otros no sean visibles, le puedes añadir la propiedad internal, así el Home Assistant solo verá el que te interesa.

Switch template y propiedad internal, voy a investigar, a ver si me aclaro…

Muchas Gracias…

Migue Ángel, conoces el esp8266-01S?

Estoy teniendo problemas con el para hacer funcionar el motor…
El caso es que si alguno de los GPIO están a negativo la placa no arranca, como te dije utilizo el 1 y el 3 para los finales de carrera y claro cuando esta abierta la rejilla o cerrada siempre hay uno a masa…
Otra cosa no se por que motivo se queda colgada la placa “esp”, las salidas se las puse a unos optocopladores y estos a su vez activan los relés correspondientes, lo que me pasa es que al darle por ejem, a cerrar, cierra y una vez llega al final de carrera se desconecta la placa, me da la sensación que es por que tiene una caída de tensión importante y se viene a bajo, pero no entiendo el motivo teóricamente se debe de parar cuando se pulse el final de carrera… lo probé con led en vez de los optocopladores y me funcionaban bien pero a sido montarlo con los optocopladores y el motor y ya no va. Seguiré probando cosas. Me he pillado este modulo para el motor estoy esperando que me llegue. image
Aunque me gustaría saber si hay algún método para que si un pin de los gpio de el esp8266-01s esta a masa que me arranque la placa, igual por software hay algún método que desconozco…

Buffs… Es que estás usando el ESP8266 más simplón y con menos opciones de todos…

Ese está pensado para conectarlo a otro arduino y meramente ofrecerle WiFi… Cuando arranca seguramente entre en algún modo específico según tenga los valores de los GPIO’s.

Seguramente te quites muchos problemas si te pillas una placa más avanzada, tipo la wemo d1, que por 2-3€ la puedes encontrar.

Claro que el problema es que a saber cuando te llega a casa.

Buenas Miguel se que es el mas simplona, la cosa es que me pille unos cuantos de estos:
image
para ir probando y vi que son fáciles de programar y me valían para activar alguna cosa y al ver que el GPIO2 no lo utilizaba le coloque una resistencia y lo configure como entrada de un pulsador (lo que vendría a ser un sonoff mini pero a 5V), la verdad tengo tres puestos en unas habitaciones y van muy bien, lo malo es que tienen que funcionar con pulsadores, por que aunque podría programarlos como interruptores/conmutadores el problema lo tengo que si el GPIO2 esta a masa, si se va la luz y vuelve la placa no arranca, por eso la pregunta anterior.
Lo de la rejilla lo voy hacer con la placa que te puse
image ,
que lleva un L293D y un NodeMcu. Estoy a la espera de que venga…