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.
Tenta antes adaptar a “nossa” versão:
https://forum.cpha.pt/t/como-controlares-os-estores-electricos-e-estimares-a-sua-posicao/570
Apoio a ideia de tentares com a “nossa” versão que é bastante boa.
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!
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
.
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 }}'