# Portão garagem Sonoff Basic 2xReed

**URL:** <https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526>\
**Category:** Partilha de Projectos\
**Created:** [24 Janeiro , 2021 01:49 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526 "2021-01-24T01:49:21Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [24 Janeiro , 2021 01:49 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/1 "2021-01-24T01:49:21Z")

</div>

Boas,  
A ideia é controlar um portão de garagem com um sonoff+tasmota, mas os projetos que tenho visto não me agradam em termos de segurança. Pensei em adicionar um reed switch no fim e outro no topo para obter 3 estados, Fechado, A abrir e Aberto.

Caracteristicas:  
-O Botão de abrir está enabled se o portão tiver fechado.  
-O botão de fechar está enabled se o portão estiver aberto.  
-Para evitar aberturas acidentais, o card tem que ser debloqueado com um botão ou código

Dificuldade 1:  
Ligar ReedSwitch no SerialOut (o do Serial in funciona)

 ![image](https://forum.cpha.pt/uploads/default/original/2X/f/fb869d8b5a419071c756c0ee95e9477918fa4042.png)

Dificuldade 2:  
Sem ser bloquear os botões, não sei qual a melhor maneira de lidar com a “pausa” do portão ao voltar a pressionar quando está a abrir/fechar.

---

<div class="post-metadata">

**Author:** ![RodolfoVieira](https://forum.cpha.pt/user_avatar/forum.cpha.pt/rodolfovieira/32/14633_2.png) [@RodolfoVieira](https://forum.cpha.pt/u/RodolfoVieira)\
**Post date:** [24 Janeiro , 2021 03:39 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/2 "2021-01-24T03:39:55Z")

</div>

@joaopedrocmp já deste uma olhadela neste [projecto](https://forum.cpha.pt/t/monitorizar-o-portao-de-duas-folhas/666) ?

---

<div class="post-metadata">

**Author:** ![j\_assuncao](https://forum.cpha.pt/user_avatar/forum.cpha.pt/j_assuncao/32/3_2.png) [@j\_assuncao](https://forum.cpha.pt/u/j_assuncao)\
**Post date:** [24 Janeiro , 2021 11:07 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/3 "2021-01-24T11:07:19Z")

</div>

Ou este que me parece ainda melhor:

> [@Módulo para portão de garagem com sensores de fim de curso + Extras](https://forum.cpha.pt/t/modulo-para-portao-de-garagem-com-sensores-de-fim-de-curso-extras/3735):
>
> O objetivo deste tópico é partilhar a construção do modulo que construi para controlar o portão da garagem para caso alguém esteja a pensar contruir algo idêntico possa tirar ideias, ou então sugerir alterações que possam melhorar este projeto. Este módulo que criei é para controlar o abrir e fechar do portão de garagem utilizando um relé ligado em paralelo com um botão de pressão que tenho para abrir e fechar o portão. O local onde se ligam estes fios no motor do portão vai variar de motor par…

---

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [25 Janeiro , 2021 11:45 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/4 "2021-01-25T11:45:52Z")

</div>

Bom dia,  
Obrigado pelas respostas, já tinha visto os dois projetos mas estava a tentar não usar nodemcu mas sim Sonoff basic, no entanto tive a ideia de tentar ir buscar estado do relé do motor, então passo a conseguir saber se está em movimento ou parado.  
Sou capaz de optar então pelo nodeMCU mas com Esphome, que me dá mais liberdade no código.

---

<div class="post-metadata">

**Author:** ![Maddoctor](https://forum.cpha.pt/user_avatar/forum.cpha.pt/maddoctor/32/1508_2.png) [@Maddoctor](https://forum.cpha.pt/u/Maddoctor)\
**Post date:** [25 Janeiro , 2021 16:17 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/5 "2021-01-25T16:17:47Z")

</div>

não podes usar o tx/gpio1 para um reed, senão arriscas-te a que o sonoff não arranque

---

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [25 Janeiro , 2021 17:40 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/6 "2021-01-25T17:40:22Z")

</div>

Na vdd era para um reed

---

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [26 Janeiro , 2021 18:12 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/7 "2021-01-26T18:12:39Z")

</div>

Boas,  
Novidades. O portão é controlado apenas por um SW, ou seja, se está fechado abre, se está a abrir pára e se voltarmos a carregar fecha.

Usei Esphome num D1 mini , tem 4 sensores, os reed do totalmente aberto, o reed do fechado, o sentido do motor e se o motor está ou não a trabalhar. A ideia é, consoante o estado fazer o numero de “button press” para controlar o portão.

```auto
esphome:
  name: portao_garagem
  platform: ESP8266
  board: d1_mini

  on_boot:
    priority: -10
    # Aberto=1, Fechado=2, Parado=3, A Abrir = 4, A Fechar =5
    then:
      - lambda: |-
      
         id(rele_sw).turn_off();
         
         if (id(fim_curso_aberto).state == true && id(fim_curso_fechado).state == false ) 
         {
           id(estado)='1';
         }
         else if (id(fim_curso_aberto).state == false && id(fim_curso_fechado).state == true )
         {
           id(estado)='2';
         }
         else if (id(fim_curso_aberto).state == false && id(fim_curso_fechado).state == false && id(sensor_motor).state == 0)
         {
           id(estado)='3';
         }
         else if (id(fim_curso_aberto).state == false && id(fim_curso_fechado).state == false && id(sensor_motor).state == true && id(sensor_sentido).state == false)
         {
           id(estado)='4';
         }
          else if (id(fim_curso_aberto).state == false && id(fim_curso_fechado).state == false && id(sensor_sentido).state == true && id(sensor_motor).state == true)
         {
           id(estado)='5';
         }
         
wifi:
  ssid: "ssid"
  password: "pass"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Portao Garagem Fallback Hotspot"
    password: "pass"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "pass"

ota:
  password: "pass"

globals:
  - id: estado
    type: int
    restore_value: no
    initial_value: '0' 
  - id: estado_anterior
    type: int
    restore_value: no
    initial_value: '0' 
    
binary_sensor:
## Sensor Movimento
  - platform: gpio
    pin: D8 #D6
    name: "Movimento Garagem"
    device_class: motion
## Sensores Portao
  - platform: gpio
    pin:
      number: D4
      mode: INPUT_PULLUP
      inverted: True
    id: fim_curso_aberto
    internal: true
    on_press:
      then:
    
    
    
  - platform: gpio
    pin:
      number: D5
      mode: INPUT_PULLUP
      inverted: True
    id: fim_curso_fechado
    internal: true
    on_press:
      then:
    
    
  - platform: gpio
    pin:
      number: D6
      mode: INPUT_PULLUP
      inverted: True
    id: sensor_sentido
    internal: true
    on_press:
      then:
    on_release:
      then:    
    
  - platform: gpio
    pin:
      number: D7
      mode: INPUT_PULLUP
      inverted: True
    id: sensor_motor
    internal: true
    on_press:
      then:
    on_release:
      then:   
      
      
switch:
## Relé
  - platform: gpio
    id: rele_sw
    internal: true
    pin: D1

## Botões da Entidade
  - platform: template
    id: abrir_sw
    name: "Abrir"
    icon: "mdi:arrow-up-bold"
    turn_on_action:
      - lambda: |-
                id(stop_sw).turn_off();
                id(stop_sw).publish_state(false);
                id(fechar_sw).turn_off();
                id(fechar_sw).publish_state(false);
                id(abrir_sw).publish_state(true);
                
                // Está fechado
                if(id(estado) == '2')
                {
                  id(rele_sw).turn_on();
                  delay(500);
                  id(rele_sw).turn_off();
                }
                // Está parado
                else if(id(estado) == '3')
                {
                  // Estava a abrir antes de parar
                  if(id(estado_anterior) == '4')
                  {
                    id(rele_sw).turn_on();
                    delay(500);
                    id(rele_sw).turn_off();
                    delay(500);
                    id(rele_sw).turn_on();
                    delay(500);
                    id(rele_sw).turn_off();
                    delay(500);
                    id(rele_sw).turn_on();
                    delay(500);
                    id(rele_sw).turn_off();
                  }
                  //Estava a fechar antes de parar
                  else if(id(estado_anterior) == '5')
                  {
                    id(rele_sw).turn_on();
                    delay(500);
                    id(rele_sw).turn_off();
                  }
                }
                // Está a fechar
                else if(id(estado) == '5')
                {
                  id(rele_sw).turn_on();
                  delay(500);
                  id(rele_sw).turn_off();
                  delay(500);
                  id(rele_sw).turn_on();
                  delay(500);
                  id(rele_sw).turn_off();
                }
                
                id(estado_anterior) = '4';
                id(stop_sw).turn_off();

  - platform: template
    id: stop_sw
    name: "Parar"
    icon: "mdi:square"
    turn_on_action:
      - lambda: |-
                id(abrir_sw).turn_off();
                id(abrir_sw).publish_state(false);
                id(fechar_sw).turn_off();
                id(fechar_sw).publish_state(false);
                id(stop_sw).publish_state(true);
                
                if(id(estado) == '4' || id(estado) == '5')
                {
                  id(rele_sw).turn_on();
                  delay(500);
                  id(rele_sw).turn_off();
                }

  - platform: template    
    id: fechar_sw
    name: "Fechar"
    icon: "mdi:arrow-down-bold"
    turn_on_action:
      - lambda: |-
                id(abrir_sw).turn_off();
                id(abrir_sw).publish_state(false);
                id(stop_sw).turn_off();
                id(stop_sw).publish_state(false);
                id(fechar_sw).publish_state(true);
                
                if(id(estado) == '2')
                {
                  id(rele_sw).turn_on();
                  delay(500);
                  id(rele_sw).turn_off();
                }

```

Tenho uma questão, no boot faço uma verificação do estado consoante os inputs dos sensores, e a cada alteração de sensor tenciono fazer o mesmo para atualizar a entidade quando alguém altera o estado fora do sistema, queria chamar um método para não estar a repetir o mesmo código carradas de vezes, alguém sabe como fazer?  
**Edit:** Com scritps

Outra questão, como posso inativar o botão na entidade para não ser possível premir? (como na entidade garage cover do esphome)

Obrigado desde já

Edit: o turn\_on\_action do fechar\_sw ainda não está acabado

---

<div class="post-metadata">

**Author:** ![Maddoctor](https://forum.cpha.pt/user_avatar/forum.cpha.pt/maddoctor/32/1508_2.png) [@Maddoctor](https://forum.cpha.pt/u/Maddoctor)\
**Post date:** [26 Janeiro , 2021 18:50 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/8 "2021-01-26T18:50:15Z")

</div>

Não é uma resposta à tua pergunta, mas como implementaste o sensor do sentido do motor?

---

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [26 Janeiro , 2021 19:23 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/9 "2021-01-26T19:23:51Z")

</div>

A placa do portão tem 2 relés, um deles é ligar ou desligar a alimentação para o motor, e o outro é o sentido da rotação. Vou ás bobinas do relés buscar sinal, na placa do esp ligam num optoisolador e tenho sinal limpo e protegido.

---

<div class="post-metadata">

**Author:** ![Maddoctor](https://forum.cpha.pt/user_avatar/forum.cpha.pt/maddoctor/32/1508_2.png) [@Maddoctor](https://forum.cpha.pt/u/Maddoctor)\
**Post date:** [26 Janeiro , 2021 19:42 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/10 "2021-01-26T19:42:41Z")

</div>

Que sorte. Tentei fazer isso e queimei um transistor da placa… Provavelmente era demasiada corrente para alimentar o optoisolator… 😬

---

<div class="post-metadata">

**Author:** ![joaopedrocmp](https://forum.cpha.pt/letter_avatar_proxy/v4/letter/j/eb9ed0/32.png) [@joaopedrocmp](https://forum.cpha.pt/u/joaopedrocmp)\
**Post date:** [26 Janeiro , 2021 20:42 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/11 "2021-01-26T20:42:26Z")

</div>

Mas ligaste na bobina do relé um opto?  
20mA a mais de um led queimaram um transistor? Estranho

---

<div class="post-metadata">

**Author:** ![Maddoctor](https://forum.cpha.pt/user_avatar/forum.cpha.pt/maddoctor/32/1508_2.png) [@Maddoctor](https://forum.cpha.pt/u/Maddoctor)\
**Post date:** [29 Janeiro , 2021 14:39 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/12 "2021-01-29T14:39:01Z")

</div>

Sim… Infelizmente, sim

---

<div class="post-metadata">

**Author:** ![\_e1](https://forum.cpha.pt/user_avatar/forum.cpha.pt/_e1/32/11715_2.png) [@\_e1](https://forum.cpha.pt/u/_e1)\
**Post date:** [2 Fevereiro , 2022 12:06 UTC](https://forum.cpha.pt/t/portao-garagem-sonoff-basic-2xreed/6526/13 "2022-02-02T12:06:21Z")

</div>

bom dia João, tudo bem?  
esse projeto do portão, foi finalizado?

se sim, poderia compartilhar conosco?

grande abraço!!
