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.