Configurar Sonoff Basic com Espurna para Portão de Correr

Tanto nesse link que enviaste, como no que coloquei eu, a questão do tempo não está muito bem esclarecida, porque a maioria o que procuram é que ao final de X tempo el feche ou abra, mas continuo a indagar para implementar.

Pelo que vejo no teu link , se estou a perceber bem, os atributos opening_time: e closing_time: definem o tempo dos movimentos de abertura e de fecho respectivamente.

No teu caso como demora 24s basta alterar os respectivos valores mas se o portão demorar tempo diferentes a abrir e a fechar podes alterar conforme o teu caso.

cover:
  - platform: template
    covers:
     testing:
        friendly_name: 'Just Testing'
        position_template: '{{ states.cover.testing.attributes.current_position | int }}'
        open_cover:
          service: switch.turn_on
          entity_id: switch.test
        close_cover:
          service: switch.turn_off
          entity_id: switch.test
        stop_cover:
          service: switch.turn_on
          entity_id: switch.test_stop    
        opening_time: 24
        closing_time: 24

O calculo para mostrar a posição e feito depois em função destes valores.

Eu experimentei esse todo, mas dá um erro, por isso tive de tirar o tempo:

Invalid config for [cover.template]: [opening_time] is an invalid option for [cover.template]. Check: cover.template->covers->portal->opening_time. (See ?, line ?). Please check the docs at https://home-assistant.io/components/cover.template/

Era isso que precisava de saber. Quando chegar a casa vou confirmar o código.

@j_assuncao

Vou experimentar esta solução:
Sonoff Dual Window Cover with set position

Tenta antes adaptar a “nossa” versão:
https://forum.cpha.pt/t/como-controlares-os-estores-electricos-e-estimares-a-sua-posicao/570

1 Curtiu

Apoio a ideia de tentares com a “nossa” versão que é bastante boa.

1 Curtiu

Estou a tentar, mas dá-me sempre o mesmo erro ao verificar config e eu só alterei os nomes, a opção de só 1 rele e nada mais.

Invalid config for [automation]: required key not provided @ data[‘action’]. Got None
required key not provided @ data[‘trigger’]. Got None. (See ?, line ?). Please check the docs at https://home-assistant.io/components/automation/

automation:

- id: iniciofecho
  alias: começou a fechar
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.iniciofecho
      value: '{{ now() }}'
- id: fimfecho
  alias: parou de fechar
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'off'
  condition:
  - condition: state
    entity_id: 'input_boolean.alterarslider'
    state: 'on'
  action:
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: >-
        {% if (states.input_number.aberturaportal.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int < 4 %}
          0
        {% else %}
          {{ (states.input_number.aberturaportal.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int }}
        {% endif %}
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportal
      value: '{{ states.input_number.aberturaportalold.state }}'
- id: inicioabertura
  alias: começou a abrir
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.inicioabertura
      value: '{{ now() }}'
- id: fimabertura
  alias: parou de abrir
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'off'
  condition:
  - condition: state
    entity_id: 'input_boolean.alterarslider'
    state: 'on'
  action:
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: >-
        {% if (states.input_number.aberturaportal.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int > 96 %}
          100
        {% else %}
          {{ (states.input_number.aberturaportal.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int }}
        {% endif %}
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportal
      value: '{{ states.input_number.aberturaportalold.state }}'

- id: aberturapeloslider
  alias: Abertura pelo slider
  trigger:
    platform: state
    entity_id: input_number.aberturaportal
  condition:
  - condition: template
    value_template: '{{ states.input_number.aberturaportal.state|int > states.input_number.aberturaportalold.state|int }}'
  action:
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.alterarslider
  - service: mqtt.publish
    data:
      topic: 'cmnd/wemosd1mini/Backlog'
      payload_template: "POWER ON; delay {% if is_state('input_number.aberturaportal', '100.0') %} {{ (((states.input_number.aberturaportal.state|int - states.input_number.aberturaportalold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}{{ (((states.input_number.aberturaportal.state|int - states.input_number.aberturaportalold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER OFF"
  - delay:
      milliseconds: 800
  - wait_template: "{{ is_state('binary_sensor.rele', 'off') }}"
  - service: input_boolean.turn_on
    data:
      entity_id: input_boolean.alterarslider
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: '{{ states.input_number.aberturaportal.state }}'
- id: fechopeloslider
  alias: Fecho pelo slider
  trigger:
    platform: state
    entity_id: input_number.aberturaportal
  condition:
  - condition: template
    value_template: '{{ states.input_number.aberturaportal.state|int < states.input_number.aberturaportalold.state|int }}'
  action:
  - service: input_boolean.turn_off
    data:
      entity_id: input_boolean.alterarslider
  - service: mqtt.publish
    data:
      topic: 'cmnd/wemosd1mini/Backlog'
      payload_template: "POWER ON; delay {% if is_state('input_number.aberturaportal', '0.0') %} {{(((states.input_number.aberturaportalold.state|int - states.input_number.aberturaportal.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}{{ (((states.input_number.aberturaportalold.state|int - states.input_number.aberturaportal.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER OFF"
  - delay:
      milliseconds: 800
  - wait_template: "{{ is_state('binary_sensor.rele', 'off') }}"
  - service: input_boolean.turn_on
    data:
      entity_id: input_boolean.alterarslider
  - service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: '{{ states.input_number.aberturaportal.state }}'

Tens os input-number e sensor criados e com os nomes correctos?

Atenção aos espaçamentos, o Yaml é muito sensivél a isso!

Assim de repente vi dois erros relacionados com a mensagem de erro que tens:

automation:

- id: iniciofecho
  alias: começou a fechar
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.iniciofecho
      value: '{{ now() }}'
- id: fimfecho
  alias: parou de fechar
  trigger:
  - platform: state
    entity_id: binary_sensor.rele
    to: 'off'

A seguir ao trigger: tens de dar mais dois espaços no - platform:

automation:

- id: iniciofecho
  alias: começou a fechar
  trigger:
    - platform: state
      entity_id: binary_sensor.rele
      to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.iniciofecho
      value: '{{ now() }}'
- id: fimfecho
  alias: parou de fechar
  trigger:
    - platform: state
      entity_id: binary_sensor.rele
      to: 'off'

Pode haver mais, não vi o código todo…

EDIT: Tens bastantes erros no código! Além da indentação também tens a falta do - antes do platform em alguns sítios do código…

Onde tenho de criar? Eu copiei do tutorial exatamente, se faltam coisas, é porque também falta no tutorial.

Obrigado, vou verificar. Eu copiei e colei o código direto do tutorial, verifiquem o tutorial se o tem correcto.

Acabo de verificar e no tutorial então tem errado, porque eu tenho exatamente como lá, deveriam de alterar.

Vou verificar isso. Obrigado!

1 Curtiu

@j_assuncao e verifiquei no teu github um exemplo e também tens assim: package_front_door.yaml

Pois tenho… Então os que estão mal são os que têm o - antes de platform.

Os - devem ser utilizados em listas, se for só uma platform como trigger tanto faz se tem ou não desde que esteja indentado. Se for mais que uma platform devem ser utilizados sempre os -

Podes verificar até aqui se esta tudo bem por favor?

automation:
- id: iniciofecho
  alias: começou a fechar
  trigger:
    platform: state
    entity_id: binary_sensor.rele
    to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.iniciofecho
      value: '{{ now() }}'
- id: fimfecho
  alias: parou de fechar
  trigger:
    platform: state
    entity_id: binary_sensor.rele
    to: 'off'
  condition:
    condition: state
    entity_id: 'input_boolean.alterarslider'
    state: 'on'
  action:
    service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: >-
        {% if (states.input_number.aberturaportal.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int < 4 %}
          0
        {% else %}
        {{ (states.input_number.aberturaportal.state)|int - ((as_timestamp(now()) - (as_timestamp(states.input_text.iniciofecho.state))|float|round(2))*100/(states.input_text.tempodefecho.state|int))|int }}
        {% endif %}
    service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportal
      value: '{{ states.input_number.aberturaportalold.state }}'

Sim, parece OK.

O p de platform alinha sempre por baixo do i de trigger excepto quanto leva -.

Nessa situação o - alinha por baixo do i de trigger e o que vier a seguir alinha com o p de platform.

:+1:

1 Curtiu

E esta parte?

- id: inicioabertura
  alias: começou a abrir
  trigger:
    platform: state
    entity_id: binary_sensor.rele
    to: 'on'
  action:
    service: input_text.set_value
    data_template:
      entity_id: input_text.inicioabertura
      value: '{{ now() }}'

- id: fimabertura
  alias: parou de abrir
  trigger:
    platform: state
    entity_id: binary_sensor.rele
    to: 'off'
  condition:
    condition: state
    entity_id: 'input_boolean.alterarslider'
    state: 'on'
  action:
    service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: >-
        {% if (states.input_number.aberturaportal.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int > 96 %}
        100
        {% else %}
        {{ (states.input_number.aberturaportal.state)|int + ((as_timestamp(now()) - (as_timestamp(states.input_text.inicioabertura.state))|float|round(2))*100/(states.input_text.tempodeabertura.state|int))|int }}
        {% endif %}
    service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportal
      value: '{{ states.input_number.aberturaportalold.state }}'

E por fim este,

- id: aberturapeloslider
  alias: Abertura pelo slider
  trigger:
    platform: state
    entity_id: input_number.aberturaportal
  condition:
    condition: template
    value_template: '{{ states.input_number.aberturaportal.state|int > states.input_number.aberturaportalold.state|int }}'
  action:
    service: input_boolean.turn_off
    data:
      entity_id: input_boolean.alterarslider
    service: mqtt.publish
    data:
      topic: 'cmnd/portal/Backlog'
      payload_template: "POWER ON; delay {% if is_state('input_number.aberturaportal', '100.0') %} {{ (((states.input_number.aberturaportal.state|int - states.input_number.aberturaportalold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
    {{ (((states.input_number.aberturaportal.state|int - states.input_number.aberturaportalold.state|int)*(states.input_text.tempodeabertura.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER OFF"
    delay:
      milliseconds: 800
      wait_template: "{{ is_state('binary_sensor.rele', 'off') }}"
    service: input_boolean.turn_on
    data:
      entity_id: input_boolean.alterarslider
    service: input_number.set_value
    data_template:
      entity_id: input_number.aberturaportalold
      value: '{{ states.input_number.aberturaportal.state }}'

- id: fechopeloslider
  alias: Fecho pelo slider
  trigger:
    platform: state
    entity_id: input_number.aberturaportal
  condition:
    condition: template
    value_template: '{{ states.input_number.aberturaportal.state|int < states.input_number.aberturaportalold.state|int }}'
    action:
      service: input_boolean.turn_off
      data:
        entity_id: input_boolean.alterarslider
      service: mqtt.publish
      data:
        topic: 'cmnd/portal/Backlog'
        payload_template: "POWER ON; delay {% if is_state('input_number.aberturaportal', '0.0') %} {{ (((states.input_number.aberturaportalold.state|int - states.input_number.aberturaportal.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) + 20 }} {% else %}
      {{ (((states.input_number.aberturaportalold.state|int - states.input_number.aberturaportal.state|int)*(states.input_text.tempodefecho.state|float)/100)|round(1)*10)|round(0) }} {% endif %}; POWER OFF"
      delay:
        milliseconds: 800
        wait_template: "{{ is_state('binary_sensor.rele', 'off') }}"
      service: input_boolean.turn_on
      data:
        entity_id: input_boolean.alterarslider
      service: input_number.set_value
      data_template:
        entity_id: input_number.aberturaportalold
        value: '{{ states.input_number.aberturaportal.state }}'

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade