Sensor - Monitorar o preço médio da Gasolina na sua cidade

Bom dia pessoal, com esses recentes aumentos no preço da gasolina, pensei em algo pra monitorar o preço da mesma, em testes por um tempo aqui, está funcionando 100%.

O que basicamente você irá fazer é extrair essa informação desse site:

Entre nele e procure por sua cidade, a url deve ficar assim:

Ex URL → https://precodoscombustiveis.com.br/pt-br/city/brasil/sao-paulo/sao-paulo/3830

*A página deve conter aqueles cards na direita, com o preço médio, exemplo do card abaixo.

image

Feito isso bora pro node-red, onde você irá importar este fluxo:

[{"id":"7ee57ab16e681258","type":"inject","z":"4c37a5b6.d894bc","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"43200","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":910,"y":2200,"wires":[["ad21e7642f9be3ce"]]},{"id":"ad21e7642f9be3ce","type":"http request","z":"4c37a5b6.d894bc","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://precodoscombustiveis.com.br/pt-br/city/brasil/parana/curitiba/4005","tls":"","persist":false,"proxy":"","authType":"","x":1090,"y":2200,"wires":[["9bfa5e258bfce8d5"]]},{"id":"9bfa5e258bfce8d5","type":"html","z":"4c37a5b6.d894bc","name":"Selector","property":"payload","outproperty":"payload","tag":"#ListCountry > div:nth-child(3) > div.col-xl-3.p-5.pr-md-5.pl-md-4.pt-md-2 > div:nth-child(2) > div > span:nth-child(5)","ret":"html","as":"single","x":1260,"y":2200,"wires":[["97045f0ee80db69a"]]},{"id":"97045f0ee80db69a","type":"function","z":"4c37a5b6.d894bc","name":"","func":"msg.payload = parseFloat(msg.payload[0].replace('R$ ',''))\n\nmsg.entity_id = 'sensor.gasolina_media_curitiba'\n\nmsg.payload = {\n    data: {\n        state: msg.payload,\n        attributes: {\n            friendly_name: 'gasolina_media_curitiba',\n            unit_of_measurement: 'R$'\n        }\n    }\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1440,"y":2200,"wires":[["a5aab039e0fc91a0","1b3503195f058ec0"]]},{"id":"7c82e6d0197af56b","type":"comment","z":"4c37a5b6.d894bc","name":"GASOLINA","info":"","x":890,"y":2160,"wires":[]},{"id":"1b3503195f058ec0","type":"ha-api","z":"4c37a5b6.d894bc","name":"","server":"d854bbe5.321208","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"/api/states/{{entity_id}}","data":"","dataType":"json","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":1610,"y":2200,"wires":[[]]},{"id":"a5aab039e0fc91a0","type":"debug","z":"4c37a5b6.d894bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1610,"y":2260,"wires":[]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Trocar a sua URL pela URL que está dentro do nó “Http Request”, e finalizado =)
E trocar o nome do sensor para o que você preferir no node Function.

image

No HA com o elemento button-card.
image

Vlw!

4 Likes

Muito legal a iniciativa.
Tô tendo um problema. Não aparece esse sensor no meu HA.
nó function tem um sensor de Curitiba. Como crio o meu de Brasília?? Obrigado

oi fab, então, eu editei essa parte do tutorial, onde você tem que alterar o nome do seu sensor também, no nó “function”

E trocar o nome do sensor para o que você preferir no node Function.

Só mudar de Curitiba pra Brasilia e está feito!

1 Like

Obrigado, amigo. Tinha mudado aí tava procurando no HA depois de dar deploy, mas tive q ativar o inject aí funcionou. Valeu

1 Like

Dá pra enviar como buscar o preço medio do etanol?

Sim, é só vc alterar o selector no nó lá no node-red, pro selector onde fica o preço do Etanol.

Vai no crhome, aperta com o botão direito no preço, inspecionar, vai abrir o código HTML da página, nessa linha de código onde fica o preço, clica botão direito, copiar, copiar selector.

altera lá no node-red no nó html.

image

Obrigadão valeu, funcionou legal

1 Like

Como faço para mandar essa informação tb no Telegram?

Veja uns tutoriais de cconfiguração do telegram aqui no fórum, dai é só ligar os pontos =)

1 Like

Amigo, parabéns pela sua iniciativa. Então, o sensor não está aparecendo. Já troquei o nome, já cliquei no inject, já reiniciei o HA mas nada.
No debug aparece a mensagem:

8/11/2021 10:45:43node: 97045f0ee80db69afunction : (error)

“TypeError: Cannot read property ‘replace’ of undefined”

Segue o meu código

{"id":"7ee57ab16e681258","type":"inject","z":"d3aa8e69.760e3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"43200","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":150,"y":3580,"wires":[["ad21e7642f9be3ce"]]},{"id":"ad21e7642f9be3ce","type":"http request","z":"d3aa8e69.760e3","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://precodoscombustiveis.com.br/pt-br/station/brasil/rio-de-janeiro/itaborai/district/posto-amigao/3858","tls":"","persist":false,"proxy":"","authType":"","x":330,"y":3580,"wires":[["9bfa5e258bfce8d5"]]},{"id":"9bfa5e258bfce8d5","type":"html","z":"d3aa8e69.760e3","name":"Selector","property":"payload","outproperty":"payload","tag":"#ListCountry > div:nth-child(3) > div.col-xl-3.p-5.pr-md-5.pl-md-4.pt-md-2 > div:nth-child(2) > div > span:nth-child(5)","ret":"html","as":"single","x":500,"y":3580,"wires":[["97045f0ee80db69a"]]},{"id":"97045f0ee80db69a","type":"function","z":"d3aa8e69.760e3","name":"","func":"msg.payload = parseFloat(msg.payload[0].replace('R$ ',''))\n\nmsg.entity_id = 'sensor.gasolina_media_duques'\n\nmsg.payload = {\n    data: {\n        state: msg.payload,\n        attributes: {\n            friendly_name: 'Amigao',\n            unit_of_measurement: 'R$'\n        }\n    }\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":3580,"wires":[["a5aab039e0fc91a0","1b3503195f058ec0"]]},{"id":"7c82e6d0197af56b","type":"comment","z":"d3aa8e69.760e3","name":"GASOLINA  - Posto Amigão Duques","info":"","x":200,"y":3540,"wires":[]},{"id":"1b3503195f058ec0","type":"ha-api","z":"d3aa8e69.760e3","name":"","server":"d854bbe5.321208","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"/api/states/{{entity_id}}","data":"","dataType":"json","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":850,"y":3580,"wires":[[]]},{"id":"a5aab039e0fc91a0","type":"debug","z":"d3aa8e69.760e3","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":850,"y":3640,"wires":[]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}
1 Like

Amigo, fiz mais um teste e percebi que o meu problema era devido ao seu script estar parametrizado para exibir a média de 1 cidade apenas.
No meu caso eu gostaria de exibir apenas a atualização do valor da gasolina de 1 posto específico na minha cidade, não a média do valor da cidade.
Alguma dica de como fazer isso?

1 Like

acredito que não tenha como pelo menos nesse site ai, pois ele só mostra a média da cidade mesmo.

talvez achar outro site que contenha essa info dai podemos tentar pegar.

1 Like

A quem interessar, fiz um fluxo q me informa as 8h30, 12h e 18h o valor do Dolar, do Euro e da gasolina no Telegram.

Segue o fluxo:

[{"id":"78c88ac3.d7e674","type":"tab","label":"Dólar & Gasolina","disabled":false,"info":"","env":[]},{"id":"84b02be1.b6c208","type":"inject","z":"78c88ac3.d7e674","name":"12:00","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 12 * * 1,2,3,4,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":180,"wires":[["d93b65a.868ed98","9bd30b3e.8c00d8","9234bc1278634dc1"]]},{"id":"9bd30b3e.8c00d8","type":"http request","z":"78c88ac3.d7e674","name":"Google Dólar","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://www.google.com/search?q=1+usd","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":270,"y":120,"wires":[["707e4cde.ca48d4"]]},{"id":"707e4cde.ca48d4","type":"function","z":"78c88ac3.d7e674","name":"","func":"function getMatches(string, regex, index) {\n    index || (index = 1); // default to the first\n    var matches = []\n    var match;\n    while (match = regex.exec(string)) {\n        matches.push(match[index]);\n    }\n    return matches;\n}\n\nvar regex = /(\\d\\,\\d\\d) Real brasileiro/g\nvar result = getMatches(msg.payload, regex, 1)\nvar dolar = result[0]\nmsg.payload = dolar\nmsg = msg.payload;\nmsg = '{ \"text\" : \"O Dólar hoje está em R$ ' + msg + '\" }';\nreturn { payload : msg, method : 'sendMessage' };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":120,"wires":[["7aeb78792eb6933f"]]},{"id":"d93b65a.868ed98","type":"http request","z":"78c88ac3.d7e674","name":"Google Euro","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://www.google.com/search?q=1+euro","tls":"","persist":false,"proxy":"","authType":"","x":270,"y":180,"wires":[["338c10df.3d5b4"]]},{"id":"338c10df.3d5b4","type":"function","z":"78c88ac3.d7e674","name":"","func":"function getMatches(string, regex, index) {\n    index || (index = 1); // default to the first\n    var matches = []\n    var match;\n    while (match = regex.exec(string)) {\n        matches.push(match[index]);\n    }\n    return matches;\n}\n\nvar regex = /(\\d\\,\\d\\d) Real brasileiro/g\nvar result = getMatches(msg.payload, regex, 1)\nvar euro = result[0]\nmsg.payload = euro\nmsg = msg.payload;\nmsg = '{ \"text\" : \"O Euro hoje está em R$ ' + msg + '\" }';\nreturn { payload : msg, method : 'sendMessage' };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":180,"wires":[["7aeb78792eb6933f"]]},{"id":"1b421b42.a71c35","type":"inject","z":"78c88ac3.d7e674","name":"18:00","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"00 18 * * 1,2,3,4,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":240,"wires":[["9234bc1278634dc1","d93b65a.868ed98","9bd30b3e.8c00d8"]]},{"id":"227817da.b21788","type":"inject","z":"78c88ac3.d7e674","name":"8:30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"30 08 * * 1,2,3,4,5","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":120,"wires":[["9bd30b3e.8c00d8","d93b65a.868ed98","9234bc1278634dc1"]]},{"id":"9234bc1278634dc1","type":"http request","z":"78c88ac3.d7e674","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://precodoscombustiveis.com.br/pt-br/city/brasil/espirito-santo/vitoria/3173","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"x":270,"y":240,"wires":[["58824ba225c09af5"]]},{"id":"58824ba225c09af5","type":"html","z":"78c88ac3.d7e674","name":"Selector","property":"payload","outproperty":"payload","tag":"#ListCountry > div:nth-child(3) > div.col-xl-3.p-5.pr-md-5.pl-md-4.pt-md-2 > div:nth-child(2) > div > span:nth-child(5)","ret":"html","as":"single","x":440,"y":240,"wires":[["8a2e0362ba682ebb"]]},{"id":"c2b064a70915e663","type":"comment","z":"78c88ac3.d7e674","name":"ENVIA MSG TELEGRAM PREÇO DÓLAR / EURO E A GASOLINA EM VITÓRIA-ES","info":"","x":410,"y":60,"wires":[]},{"id":"7aeb78792eb6933f","type":"link out","z":"78c88ac3.d7e674","name":"","links":["4094bd5.670ac44","5b371212.5e3b5c","47703bfe.8a3ce4","d06cd702de544ea4"],"x":735,"y":180,"wires":[]},{"id":"8a2e0362ba682ebb","type":"function","z":"78c88ac3.d7e674","name":"","func":"msg.payload = parseFloat(msg.payload[0].replace('R$ ',''))\nmsg = msg.payload;\nmsg = '{ \"text\" : \"Preço médio da gasolina em Vitória: R$ ' + msg + '\" }';\nreturn { payload : msg, method : 'sendMessage' };","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":240,"wires":[["7aeb78792eb6933f"]]},{"id":"7ea02b3fa6c5d2b9","type":"comment","z":"78c88ac3.d7e674","name":"TELEGRAM","info":"","x":830,"y":180,"wires":[]}]
5 Likes

Eu consegui. Obrigado.

@Choske desculpa a pergunta, eu ainda tenho muito a aprender, gostaria de substituir o inject node por um event state ou call service, é possível? Eu estou tentando mas o sensor de gasolina não aparece como entidade. Eu não gostaria de ao ter que clicar no inject toda vez que desse um boot no HA.
Valeu !

Toda vez que eu reinicio o HA eu tenho que clicar no inject. Tem como fazer isto de outra forma?

@IceDragon , o Inject node pode ser configurado de várias maneiras. Ao verificar a programação dos Inject nodes acima, você verá que eu configurei cada Inject para iniciar o fluxo todos os dias (exceto sábados e domingos), porém cada node é acionado num horário específico (8h30, 12h e 18h). Agora, se quiser executar o comando no momento que você está monitorando o fluxo, basta acionar o botão do Inject node. Caso queira conhecer as outras formas de utilização deste node, acesse o link abaixo:

1 Like

@marciosvieira obrigado pela resposta. Eu não sei se fui muito claro, mas eu queria saber uma forma de substituir o botão de inject por outra espécie de trigger (nao sei qual) de forma que toda vez que eu precise reiniciar o home assistant não tenha que ir lá no node-red e tenha que acionar a automação apertando em um botão de inject.

Ice tem um esquema de fazer um trigger qdo o HA inicia…
Estou sem HA no momento e meu NUC está vindo da china, mas tenho esse trigger.
Se quiser pesquisa na net
“How to trigger node-red when HA starts”
deve achar algo.

1 Like

@marciosvieira o problema do inject tem uma outra questão que não consegui um workaround.
Eu estou construindo uma automação simples, com sensor de temperatura e switch que liga um ventilador. De forma que de 1 em 1 hora o fluxo cheque a temperatura >28C a partir das 20h até as 08h00 da manhã no dia seguinte, e desligue se tiver menor que isso.
Usando a função “interval between time” no inject as opções são apenas entre 20h00 a 00.

1 Like