Portão Rossi "Smart" + Tasker + Samsung Bixby

Boa tarde a todos,

Procurei aqui e achei poucos tópicos sobre portão eletrônico, então vou deixar aqui o código que usei no ESPHome.

Tenho 2 portões em casa, um para cada carro, então o hardware e o código que usei são para 2 portões. Caso for usar em apenas um portão, apagar as partes do código referente ao “Punto” e seguir a ligação do esquema abaixo, se for usar em 2 portões, replicar o esquema abaixo, ligando o segundo portão de acordo com a descrição dos pinos no código.

Por enquanto esta ligado apenas um portão, para ligar o segundo vou ter que abrir a caixa metálica que protege ele, pois fica virado para rua. Mas na bancada esta tudo OK.

OBS A Saída Sin da placa fica em 0V quando o portão esta fechado e 5V quando esta abrindo ou totalmente aberto, então usei ele como sensor “Fechado” e “Movendo”. E o sensor magnético para saber se esta totalmente aberto.

Esquema:
Ligar um resistor de 10k entre a GPIO e a saída SIN

Esse é o Frank:

OBS: Se for usar Shield para 2 portões tem que fazer um RTA (recurso tecnico alternativo) no segundo relé, no caso removi o pino D1 que vai na placa tripla e fiz um jumper entre D1 e D2 do relay shield. Da pra ver o jumper no lado esquerdo do shield.

esphome:
  name: portao
  platform: ESP8266
  board: d1_mini
  on_boot:
    priority: -100.0
    then:
      - text_sensor.template.publish:
            id: portao_version
            state: !lambda |-
              String versao = "1.0";
              return (String(versao)).c_str();

# Enable logging
logger:

# Enable Home Assistant API
api:

captive_portal:

ota:
  password: "bla"

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

web_server:
  port: 80

time:
  - platform: sntp
    id: sntp_time
    timezone: "America/Sao_Paulo"

sensor:
  - platform: uptime
    name: Uptime Portão
    id: portao_uptime_sensor
    update_interval: 60s
    internal: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: portao_uptime_human
            state: !lambda |-
              int seconds = round(id(portao_uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + "d " : "") +
                (hours ? String(hours) + "h " : "") +
                (minutes ? String(minutes) + "m " : "") +
                (String(seconds) + "s")
              ).c_str();


text_sensor:
  - platform: template
    name: Uptime Portão
    id: portao_uptime_human
    icon: mdi:clock-start

  - platform: template
    name: Portão Versão
    id: portao_version
    icon: mdi:clock-start
######################## Up! ########################
  - platform: template
    name: Portão Up!
    id: portao_status_up
    icon: "mdi:garage-variant"
######################## Up! ########################
######################## Punto ########################
  - platform: template
    name: Portão Punto
    id: portao_status_punto
    icon: "mdi:garage-variant"
######################## Punto ########################
    
interval:
  - interval: 30s
    then:
      - script.execute: check_sensors

binary_sensor:
######################## Up! #####################
###  LIGADO A SAIDA Sinaleira - Luz de garagem DA PLACA ROSSI COM RESISTOR 10K
  - platform: gpio
    name: "Up! Fechado"
    pin: 
      number: GPIO14 # D5 OK
      inverted: true
    id: portao_up_sensor_fechado
    on_state:
      then:
      - script.execute: check_sensors
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms

      
###  SENSOR MAGNETICO
  - platform: gpio
    name: "Up! Aberto"
    pin: 
      number: GPIO13 # D7 OK
      inverted: true
      mode:
        input: true
        pullup: true
    id: portao_up_sensor_aberto
    on_state:
      then:
      - script.execute: check_sensors
    filters:
      - delayed_on: 700ms #delay pois o imã do portão passa pelo o reed switch do D1 Mini

      
######################## Up! ########################
######################## Punto #####################

###  LIGADO A SAIDA Sinaleira - Luz de garagem DA PLACA ROSSI COM RESISTOR 10K
  - platform: gpio
    name: "Punto Fechado"
    pin: 
      number: GPIO12 # D6 OK
      inverted: true
    id: portao_punto_sensor_fechado
    on_state:
      then:
      - script.execute: check_sensors
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms

      

###  SENSOR MAGNETICO
  - platform: gpio
    name: "Punto Aberto"
    pin:  
      number: GPIO16 # D0 OK
      mode:
        input: true
        pulldown: true
    id: portao_punto_sensor_aberto
    on_state:
      then:
      - script.execute: check_sensors
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms


######################### Punto ########################
switch:
  #Comando reinicilizar esp remotamente
  - platform: restart
    id: portao_restart
    name: Reiniciar Portão
    icon: mdi:restart

  - platform: safe_mode
    name: "Portões (Safe Mode)"


######################## Up! ########################
  - platform: gpio
    pin: GPIO5 # D1
    id: portao_up_relay
    name: "Controle Up!"
    icon: "mdi:remote"
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: portao_up_relay

######################## Up! ########################
######################## Punto ########################
    
  - platform: gpio
    pin: GPIO4 # D2
    id: portao_punto_relay
    name: "Controle Punto"
    icon: "mdi:remote"
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: portao_punto_relay
######################## Punto ########################

script:
  - id: check_sensors
    then:
######################## Up! ########################

      - lambda: |-
          if ((id(portao_up_sensor_fechado).state == 0) && (id(portao_up_sensor_aberto).state == 1)) {
            id(portao_status_up).publish_state("ABERTO");

          }
                  
          else if ((id(portao_up_sensor_fechado).state == 0) && (id(portao_up_sensor_aberto).state == 0)) {
            id(portao_status_up).publish_state("MOVENDO");

          }
          else if ((id(portao_up_sensor_fechado).state == 1) && (id(portao_up_sensor_aberto).state == 0)) {
            id(portao_status_up).publish_state("FECHADO");

          }
          else {
            id(portao_status_up).publish_state("ERRO");

          }
          
######################## Up! ########################

######################## Punto ########################

      - lambda: |-
          if ((id(portao_punto_sensor_fechado).state == 0) && (id(portao_punto_sensor_aberto).state == 1)) {
            id(portao_status_punto).publish_state("ABERTO");

          }
                  
          else if ((id(portao_punto_sensor_fechado).state == 0) && (id(portao_punto_sensor_aberto).state == 0)) {
            id(portao_status_punto).publish_state("MOVENDO");

          }
          else if ((id(portao_punto_sensor_fechado).state == 1) && (id(portao_punto_sensor_aberto).state == 0)) {
            id(portao_status_punto).publish_state("FECHADO");

          }
          else {
            id(portao_status_punto).publish_state("ERRO");

          }
######################## Punto ########################


No tasker:
1 - criar uma tarefa HTTP Request
2 - Metodo POST
3 - url:
Mudar o IP:PORTA

https://IP:PORTA/api/services/switch/turn_on

4 - Headers:
Adicionar o “TOKEN” do HA

content-type: application/json
Authorization: Bearer TOKEN

5 - Body:
Mudar a entidade, caso tenha alterado o codigo do ESPHome

{"entity_id": "switch.controle_up"}

Vai ficar assim:

Basta criar um atalho na Home do android, é bom colocar senha ou biometria para executar a tarefa e evitar acionamento acidental.

Bixby:

Exportar a tarefa criada no tasker como APP e adicionar em comandos rápidos do Bixby.

O Bixby demora a encontrar o APP após instalado, recomendo instalar o APP, executar ao menos 1 vez, reiniciar o aparelho, executar novamente e só depois adicionar aos comandos rápidos.

Agora da pra usar o comando de voz para abrir o portão
:grinning:

5 curtidas

UAU!!! Cara, que TRAMPO!!! PARABÉNS

eu fiz uma solução parecida para o meu portão Rossi, porém escolhi o módulo ESP-12F que já vem com um regulador de tensão (AMS117) que permite alimentação de 12V que você pode obter dos bornes da luminária, sem precisar usar um HI-LINK na alimentação de 220V
image

Esse eu não conhecia.