domoticafacilconjota / capitulos

Copy y paste del canal
39 stars 50 forks source link

[AtoNodeRED] #59

Open thelegendclub opened 3 years ago

thelegendclub commented 3 years ago

Código de la automatización

timer:
  persiana_comedor_up:
    duration: '00:00:25'
  persiana_comedor_down:
    duration: '00:00:25'

input_number:
  persiana_comedor_position:
    name: "Posicion"
    min: 0
    max: 25
  persiana_comedor_set_position:
    name: "Posicionar"
    min: 0
    max: 100

switch:
    - platform: mqtt
      name: "Persiana Comedor Bajar"
      state_topic: "stat/persiana_comedor/POWER2"
      command_topic: "cmnd/persiana_comedor/POWER2"
      qos: 1
      payload_on: "ON"
      payload_off: "OFF"
      retain: false
    - platform: mqtt
      name: "Persiana Comedor Subir"
      state_topic: "stat/persiana_comedor/POWER1"
      command_topic: "cmnd/persiana_comedor/POWER1"
      qos: 1
      payload_on: "ON"
      payload_off: "OFF"
      retain: false

cover:
  - platform: template
    covers:
      persiana_comedor:
        friendly_name: "Persiana Comedor"
        position_template: "{{ (((states.input_number.persiana_comedor_position.state | int) * 100)/25 | int) }}"
        open_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER2'
              payload: 'OFF'
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER1'
              payload: 'ON'
        close_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER1'
              payload: 'OFF'
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER2'
              payload: 'ON'
        stop_cover:
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER1'
              payload: 'OFF'
          - service: mqtt.publish
            data:
              topic: 'cmnd/persiana_comedor/POWER2'
              payload: 'OFF'

automation:
  - id: 301_cabina
    alias: Persianas_cabina - MQTT Button1 OFF (up)
    trigger:
    - payload: 'OFF'
      platform: mqtt
      topic: stat/persiana_comedor/POWER1
    action:
    - service: timer.cancel
      entity_id: timer.persiana_comedor_up
  - id: 302_cabina
    alias: Persianas_cabina - MQTT Button2 OFF (down)
    trigger:
    - payload: 'OFF'
      platform: mqtt
      topic: stat/persiana_comedor/POWER2
    action:
    - service: timer.cancel
      entity_id: timer.persiana_comedor_down
  - id: 303_cabina
    alias: Persianas_cabina - Timer stopped
    trigger:
    - platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.persiana_comedor_up
    - platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.persiana_comedor_down
    action:
    - service: cover.stop_cover
      data:
        entity_id: cover.persiana_comedor
  - id: 311_cabina
    alias: Persianas_cabina - MQTT Button1 ON (up)
    trigger:
    - payload: 'ON'
      platform: mqtt
      topic: stat/persiana_comedor/POWER1
    condition:
      condition: template
      value_template: '{{ as_timestamp(now()) - as_timestamp(states.input_number.persiana_comedor_set_position.last_updated)
        > 3 }}'
    action:
    - service: timer.start
      data:
        duration: 00:00:25
      entity_id: timer.persiana_comedor_up
  - id: 312_cabina
    alias: Persianas_cabina - MQTT Button2 ON (down)
    trigger:
    - payload: 'ON'
      platform: mqtt
      topic: stat/persiana_comedor/POWER2
    condition:
      condition: template
      value_template: '{{ as_timestamp(now()) - as_timestamp(states.input_number.persiana_comedor_set_position.last_updated)
        > 3 }}'
    action:
    - service: timer.start
      data:
        duration: 00:00:25
      entity_id: timer.persiana_comedor_down
  - id: 411_cabina
    alias: Persianas_cabina - Position UP
    trigger:
      platform: time_pattern
      seconds: /1
    condition:
      condition: state
      entity_id: timer.persiana_comedor_up
      state: active
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.persiana_comedor_position
        value: '{{ (states.input_number.persiana_comedor_position.state | int) + 1 }}'
  - id: 412_cabina
    alias: Persianas_cabina - Position Down
    trigger:
      platform: time_pattern
      seconds: /1
    condition:
      condition: state
      entity_id: timer.persiana_comedor_down
      state: active
    action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.persiana_comedor_position
        value: '{{ (states.input_number.persiana_comedor_position.state | int) - 1 }}'
  - id: 511_cabina
    alias: Persianas_cabina - Set Position Down
    trigger:
      platform: state
      entity_id: input_number.persiana_comedor_set_position
    condition:
      condition: template
      value_template: '{{ (states.input_number.persiana_comedor_position.state | int)
        > ((((states.input_number.persiana_comedor_set_position.state | int ) * 25 )/100)
        | int) }}'
    action:
    - service: timer.start
      data_template:
        entity_id: timer.persiana_comedor_down
        duration: '{{ ''00:00:%02d'' | format( ((states.input_number.persiana_comedor_position.state
          | int) - ((((states.input_number.persiana_comedor_set_position.state | int
          ) * 25 )/100) | int) ) | abs ) }}'
    - service: cover.close_cover
      data:
        entity_id: cover.persiana_comedor
  - id: 512_cabina
    alias: Persianas_cabina - Set Position UP
    trigger:
      platform: state
      entity_id: input_number.persiana_comedor_set_position
    condition:
      condition: template
      value_template: '{{ (states.input_number.persiana_comedor_position.state | int)
        < ((((states.input_number.persiana_comedor_set_position.state | int ) * 25)/100)
        | int) }}'
    action:
    - service: timer.start
      data_template:
        entity_id: timer.persiana_comedor_up
        duration: '{{ ''00:00:%02d'' | format( ((states.input_number.persiana_comedor_position.state
          | int) - ((((states.input_number.persiana_comedor_set_position.state | int
          ) * 25 )/100) | int) ) | abs ) }}'
    - service: cover.open_cover
      data:
        entity_id: cover.persiana_comedor

Explicación de lo que hace actualmente la automatización La automatización hace que cuando subo o bajo la persiana del comedor mueve el slider de posición, para así saber que posición aproximada se encuentra la persiana. Un vez llega a 0 se para o si llega a 25 lo mismo. Si yo actúo con el slider de posicionar y lo coloco a un porcentaje X la persiana sube o baja, según el caso y se coloca en esa posición aproximada.

Notas del autor La automatización tiene un error que no supe solucionar. Y es que el slider cuando sube a veces no se pone a 25 y a veces es al revés, cuando baja no se pone a 0. Por lo que la persiana no acaba de subir del todo o bajar del todo. Se queda un 1 segundo por debajo, es decir, a 24, o a 1 cuando baja.

La automatización la vi en un tutorial hace mucho tiempo. Antes funcionaba bien, pero desde una de las actualizaciones de HA empezó este fallo. Lo medio solvente con otra auto.

Espero haberme explicado bien.

Muchas gracias.