Node-RED – Automação Capturar valor do Dólar $

Dando continuidade no Node-RED, hoje venho compartilhar uma automação dentro do NR para capturar o valor do dólar e com isso você fazer o que bem entender.

Exemplos:

  • Google avisar o valor do dólar quando tiver alguém em casa;
  • Enviar uma mensagem no Telegram;
  • Avisar quando o dólar estiver abaixo de X valor;

Nesse exemplo vamos configurar para todos os dias às 8:30 da manhã enviar via Telegram o valor do dólar atualizado através do site do google.

Como pretendemos iniciar através de uma determinada hora/data vamos começar com o nó “ inject ” que fica na categoria input.

Clique duas vezes para configurar o nó.

No campo Repeat vamos selecionar a opção “ at a specific time ” (em um horário específico). No campo at colocar a data que queremos que inicie, 08:30, e selecionar todos os dias ( sim, posso configurar para um determinado dia da semana também ), e no campo Name preencha como achar melhor. Resultado:

Agora que temos o “start” da automação, precisamos capturar o valor do dólar. Para isso vamos utilizar o site do google que dificilmente estará errado ou com problema.
Site: https://www.google.com/search?q=1+usd

Para capturar uma informação de um site, vamos usar o nó “ http request “. Arraste o nó para dentro do seu flow, e clique duas vezes para configurar o nó.

No campo URL insira o endereço do google citado acima, e no campo Name defina o nome que for mais apropriado para você.

Agora vamos precisar “tratar” o conteúdo que o nó http request irá pegar. Se vocês colocarem um nó de debug e iniciar a automação, irão perceber que irá trazer tudo que tem na página do google com o resultado do dólar. Vamos precisar filtrar esse conteúdo para pegar apenas o valor do dólar com código javascript, através de um nó “ function “.

Arraste o nó para seu flow e clique duas vezes para poder configurar.

Bom, essa parte é um pouco mais complexa, então vamos tentar resumir. O que está logo abaixo é o código em javascript para filtrar a informação do dólar no conteúdo todo retornado da página do google. Para isso é criado uma função que recebe 3 (três) parâmetros, define váriaveis de início, arrays, com uma estrutura de repetição e um método push que insere um ou mais elementos no final de um array.

Com o array criado, o primeiro resultado do array (posição) é exatamente o valor do dólar na página do google. Como a ideia é compartilhar o método de capturar o valor do dólar, não vamos entrar em mais detalhes. Você precisará simplesmente copiar o código abaixo e colocar dentro do nó no campo function e aplicar um nome para o nó.

function getMatches(string, regex, index) {
    index || (index = 1); // default to the first
    var matches = []
    var match;
    while (match = regex.exec(string)) {
        matches.push(match[index]);
    }
    return matches;
}

var regex = /(\d\,\d\d) Real brasileiro/g
var result = getMatches(msg.payload, regex, 1)
var dolar = result[0]
return { payload: dolar };

O resultado deve ficar assim no nó:

nó function com a função em javascript para filtrar o valor do dólar no site do google

Após configurado o nó function, vamos para o último nó. O “call service”, que nada mais é que chamar um serviço. No nosso tutorial será um serviço do telegram, mas poderia ser de notificação, de media player, de e-mails, etc.

Arraste o nó “ call service ” para seu flow e clique duas vezes para configurar.

Nos campos:

  • Domain: Preencha com notify;
  • Service: O nome do seu telegram configurado no seu HA
  • Entity Id: Deixe em branco
  • Data: Preencha com a mensagem que achar melhor e com o valor filtrado do nó function, exemplo:
    {“message”:”O Dólar hoje está em R$ {{payload}}”}

E clique em done. Após isso ligue os nós e pronto. Sua automação no Node-RED para capturar o dólar está pronto.

Para testar, uma das facilidades/benefício de se utilizar o nó inject , é que mesmo configurado para iniciar em um determinada hora ou data, basta você clicar no nó (ao lado da setinha) e a automação irá executar e com isso você poderá verificar o resultado.

É isso pessoal, como no início do tutorial, você pode configurar de diversas maneiras a informação do dólar. Esse é apenas um exemplo.

Créditos ao Marcio Granzotto que compartilhou a função em javascript.

2 Likes


Tentei seguir todos os passos, mas o meu retorna esse erro!

aviso_telegram é o nome que você colocou no notity com a plataforma telegram?
Exemplo:

  - name: aviso_telegram
    platform: telegram
    chat_id: !secret tg_chat_id

Para ver mais detalhes, sugiro vc colocar um nó debug, e ter mais detalhes do erro para podermos ver onde aplicar a solução.

Fala Douglas, sim coloquei o nome como aviso_telegram exatamente como seu exemplo. Fiz agora um nó debug e a mensagem é essa:
“Call-service API error. Error Message: extra keys not allowed @ data[‘0’]”

Marcelo, é o tipo de aspas que tais colocando no campo Data no texto para notificação.
Você está usando essas: “texto” e deveria ser essa "texto".

Altere e teste por favor.

1 Like

Você é muito bom mesmo!!! obrigado… funcionou perfeito…

1 Like

Olá boa tarde fiz esse processo todo porém fica aparecendo alguns erros como na foto abaixo alguns

Olá Vitor, vamos lá, você criou uma automação dentro de automation ao invés de utilizar o Node-RED, e está utilizando a plataforma openexchangerates.

E na ação da automação “action”, você colocou o serviço “ValordeDolarDiario”, nesse caso acredito que você queira ativar a notificação do telegram, faltou notify. na frente.

Além disso, você declarou o alias duas vezes, isso está incorreto. E a mensagem que deveria enviar, você colocou “O seu home assistant foi iniciado”, é isso mesmo? Faltou colocar o sensor que você criou para obter o valor do dólar, caso contrário você não receberá o valor do dólar.

Fala galera, tranquilo?!
Faz um tempo que venho recebendo dessa forma as notificações de dólar, alguém já pegou esse problema?

image

Além disso ele está sempre manado sempre uma hora mais tarde do programado…

Abraços

Fiz do dólar e euro, os dois funcionaram perfeitamente mas com mensagens diferentes, teria como mandar na mesma mensagem as duas cotações ou a payload não aceita?
Parabéns e obrigado.