⭐ Como enviar SMS através do HA


(Rodolfo) #1

Malta, hoje a internet está em todo o lado…e vivemos conectados dia e noite quer queiramos quer não , são os dias de hoje.
Contudo por vezes existe momentos em que não temos os dados móveis ou WIFI ligado nos nossos dispositivos, e existe momentos em que nos faria falta uma alternativa para recebermos notificações usando somento os dados GSM.
Pois bem, em fase de exploração encontrei o github do @sthopeless em que fiz umas ligeiras modificações e conseguimos deste modo enviar não só SMS via Home Assistant, como também localizar os dispositivos, envia comandos tasker, definir wallpapers etc.

COMO FUNCIONA:

Precisamos de instalar a aplicação Android localizada em: https://play.google.com/store/apps/details?id=com.joaomgcd.join&hl=en_US

Após instalada a app, clica onde diz: “SETTINGS” depois " SMS and Phone Calls" e activa a opção que diz SMS and call Service e dá permissão aos passos seguintes que aparecerem.

Ok

De seguida caso já estejas logado no browser com o teu endereço igual ao que usaste no Play Store, vai a:

https://joinjoaomgcd.appspot.com/

Vai aparecer algo tipo isto:

Clicas ai em cima do lado esquerdo onde diz o nome do teu equipamento e de seguida vai aparecer isto:

Clicas no separador que diz " Join API"

Depois vai aparecer isto:

Clicas onde diz “Show” e vai guardar em um bloco de nota ou outro os seguintes dados:

  • Nome do teu dispositivo (esta em cima do lado esquerdo em baixo do icone do tlm amarelo)

  • Device Id

  • Api Key

CÓDIGO PARA O HOME ASSISTANT

Dentro do teu groups.yaml colocas:

default_view:
  view: yes
  icon: mdi:home
  entities:
    - group.join_joaoapps 

Caso já tenhas os grupos apenas tens que chamar o grupo: - group.join_joaoapps

Dentro da tua pasta Packages crias um ficheiro chamado join.yamll e colas lá dentro o seguinte código:

homeassistant:
###############################################################################
#                                                                             #
#                         C U S T O M I Z E                                   #
#                                                                             #
###############################################################################   

  customize:
    script.join_mega_script:
      icon: mdi:email
    input_text.msg_text:
      icon: mdi:comment-text-outline
    input_text.phone_number:
      icon: mdi:phone-classic
    input_text.join_url:
      icon: mdi:web
    input_text.join_cmd:
      icon: mdi:console
    input_select.contact_list:
      icon: mdi:account-group
    input_select.join_services:
      icon: mdi:sitemap
  customize_glob:
    "script.join_script_*":
      hidden: true

###############################################################################
#                                                                             #
#                         G R O U P                                           #
#                                                                             #
###############################################################################         
      
group:
  join_joaoapps:
    name: "Join"
    control: hidden
    view: no
    entities:
      - input_select.contact_list
      - input_text.phone_number
      - input_text.msg_text
      - input_text.join_url
      - input_text.join_cmd
      - input_select.join_services
      - script.join_mega_script
      
###############################################################################
#                                                                             #
#                         N O T I F Y                                         #
#                                                                             #
###############################################################################         
      
notify:
  - platform: joaoapps_join
    name: Join
    api_key: 
    device_id: 
    device_names: K10000 Pro

joaoapps_join:
  - name: rodolfo
    device_id: 
    api_key: 
    
###############################################################################
#                                                                             #
#                         I N P U T    S E L E C T                            #
#                                                                             #
###############################################################################       

input_select:
  join_services:
    name: Serviços
    options:
     - Enviar SMS
     - Enviar Ficheiro
     - Enviar URL
     - Enviar comando tasker
     - Tocar Telemóvel
     - Definir Wallpaper
    initial: Enviar SMS

  contact_list:
    name: Contactos
    options:
     - Rodolfo
     - Contact 2
     - Contact 3
     - Contact 4
     - Contact 5
     - "Número"        ## with this option we can set the phone number in the Number input_text
    initial: "Número"
###############################################################################
#                                                                             #
#                         I N P U T    T E X T                                #
#                                                                             #
###############################################################################   
    
input_text:
  msg_text:
    name: "SMS:"
    initial: ""

  phone_number:
    name: "Número:"
    max: 15
    initial: ""

  join_url:
    name: "Endereço URL:"
    initial: ""

  join_cmd:
    name: "Comando Tasker:"
    initial: Comando Tasker
    
###############################################################################
#                                                                             #
#                         S C R I P T                                         #
#                                                                             #
###############################################################################       

script:
  join_script_ring:
    alias: "Script Join Ring"
    sequence:
      - service: joaoapps_join.rodolfo_ring
      
  join_script_send_file:
    alias: "Script Join Send File"
    sequence:
      - service: joaoapps_join.rodolfo_send_file
        data_template:
          url: '{{ states("input_text.join_url") }}'
      - delay: 00:00:01
      - service: input_text.set_value
        data:
          entity_id: input_text.join_url
          value: Endereço URL
          
  join_script_send_sms:
    alias: "Script Join Send SMS"
    sequence:
      - service: joaoapps_join.rodolfo_send_sms
        data_template:
          message: '{{ states("input_text.msg_text") }}'
          number: >
            {% if is_state("input_select.contact_list", "Rodolfo") %} 96xxxxxx
            {% elif is_state("input_select.contact_list", "Contact 2") %} 
            {% elif is_state("input_select.contact_list", "Contact 3") %} 
            {% elif is_state("input_select.contact_list", "Contact 4") %} 
            {% elif is_state("input_select.contact_list", "Contact 5") %} 
            {% elif is_state("input_select.contact_list", "Número") %} {{ states("input_text.phone_number") }}
            {% endif %}
      - delay: 00:00:05
      - service: input_text.set_value
        data:
          entity_id: input_text.msg_text
          value: ""
      - service: input_text.set_value
        data:
          entity_id: input_text.phone_number
          value: ""
          
  join_script_send_tasker:
    alias: "Script Join Send Tasker"
    sequence:
      - service: joaoapps_join.rodolfo_send_tasker
        data_template:
          command: '{{ states("input_text.join_cmd") }}'
      - delay: 00:00:01
      - service: input_text.set_value
        data:
          entity_id: input_text.join_cmd
          value: Comando Tasker
          
  join_script_send_url:
    alias: "Script Join Send URL"
    sequence:
      - service: joaoapps_join.rodolfo_send_url
        data_template:
          url: '{{ states("input_text.join_url") }}'
      - delay: 00:00:01
      - service: input_text.set_value
        data:
          entity_id: input_text.join_url
          value: Endereço URL
          
  join_script_set_wallpaper:
    alias: "Script Join Send URL"
    sequence:
      - service: joaoapps_join.rodolfo_set_wallpaper
        data_template:
          url: '{{ states("input_text.join_url") }}'
      - delay: 00:00:01
      - service: input_text.set_value
        data:
          entity_id: input_text.join_url
          value: Endereço URL
          
  join_mega_script:
    alias: "Enviar"
    sequence:
      - service: homeassistant.turn_on 
        data_template:
          entity_id: >
           {% if is_state("input_select.join_services", "Tocar Telemóvel") %} script.join_script_ring
           {% elif is_state("input_select.join_services", "Enviar Ficheiro") %} script.join_script_send_file
           {% elif is_state("input_select.join_services", "Enviar SMS") %} script.join_script_send_sms
           {% elif is_state("input_select.join_services", "Enviar comando tasker") %} script.join_script_send_tasker
           {% elif is_state("input_select.join_services", "Enviar URL") %} script.join_script_send_url
           {% elif is_state("input_select.join_services", "Definir Wallpaper") %} script.join_script_set_wallpaper
           {% endif %}

NOTAS IMPORTANTES:

Aqui no código onde te aparece:

notify:
  - platform: joaoapps_join
    name: Join
    api_key: 
    device_id: 
    device_names: 

joaoapps_join:
  - name: rodolfo
    device_id: 
    api_key: 

tens que coloca os dados que em cima te disse para guardares em um bloco de notas.

Onde te aparece:

  contact_list:
    name: Contacts
    options:
     - Rodolfo
     - Contact 2
     - Contact 3
     - Contact 4
     - Contact 5
     - "Outro número"        ## with this option we can set the phone number in the Number input_text
    initial: "Outro número"

Tens que colocar a lista com o nome das pessoas a quem queres que sejam enviadas as mensages.

onde te aparece:

  join_script_send_sms:
    alias: "Script Join Send SMS"
    sequence:
      - service: joaoapps_join.rodolfo_send_sms
        data_template:
          message: '{{ states("input_text.msg_text") }}'
          number: >
            {% if is_state("input_select.contact_list", "Rodolfo") %} 96xxxxxxx
            {% elif is_state("input_select.contact_list", "Contact 2") %} 
            {% elif is_state("input_select.contact_list", "Contact 3") %} 
            {% elif is_state("input_select.contact_list", "Contact 4") %} 
            {% elif is_state("input_select.contact_list", "Contact 5") %} 
            {% elif is_state("input_select.contact_list", "Outro número") %} {{ states("input_text.phone_number") }}

Onde te aparece Rodolfo e a frente 96xxxxxx tens que por o nome da pessoa que puseste na lista no passo anterior e o numero dessa pessoa a frente conforme te mostro ai nesse exemplo.

O que vais ver no teu frontend é isto:


(Carlos Alberto Martins) #2

Parabéns pelo tópico !!!
E como faz para enviar SMS automaticamente em alguma automação por exemplo ?


(Hopeless Automations) #3

@CarlosMartins podes criar uma automation deste estilo:

automation:
  - alias: 'Enviar SMS Alarm Triggered'
    trigger:
      - platform: state
        entity_id: alarm_control_panel.ha_alarm
        to: 'triggered'
    action:
      - service: joaoapps_join.sthope_send_sms
        data:
          message: "ALARM! The alarm has been triggered"
          number: "Numero para enviar"

(Flávio Afonso) #4

Muito bom! Obrigado!


(Paulo Rosa) #5

Excelente. Com este projecto, aprendi uma maneira de configurar que me tinha passado ao lado desde o inicio que comecei a programar o homeassistant há mais de 1 ano. :crazy_face:
A opção de poder juntar todas as configurações num pacote (package). Não sei se não seria oportuno colocar uma linha a mostrar como se faz ou criar um post no forum sobre esta opção. (pessoalmente tive que pesquisar no forum oficial depois de ver este post para perceber o que era isso do package) .


(Hopeless Automations) #6

@paulo106 da uma vista de olhos na documentacao https://www.home-assistant.io/docs/configuration/packages/

Eu basicamente tenho

homeassistant:
  packages: !include_dir_named packages

E na pasta de config do Home Assistant tenho uma pasta chamada de packages onde meto para la as yaml configs.

Podes tambem dar uma vista de olhos nesta configuracao do Home Assistant https://github.com/mf-social/Home-Assistant


(Paulo Rosa) #7

Obrigado Hopeless.
Hé hé. Descobri mesmo essa informação ontem ao pesquisar para fazer esta configuração.
Poderá ser util para quem ainda não tinha ouvido falar desta opção como eu. :grinning:


(Rodolfo) #8

@paulo106 relativamente à questão dos packages essa informação já estava aqui no fórum. Como podes ver neste link


(Paulo Rosa) #9

Ok. Obrigado pela informação. Vou guarda-lo nos meus marcadores. Na altura que pesquisei, não sei como fiz, mas não encontrei. O meu comentário não foi pejorativo. Só estava a destacar que era uma ferramenta muito útil que eu desconhecia e que descobri com este teu post. :grinning: Se pudesse ter o link que colocaste logo no post, era menos voltas que se dava para quem não é muito craque na programação (ou é distraído como eu).