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!

3 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":"Dollar & 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 Dollar","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://www.google.com/search?q=1+usd","tls":"","persist":false,"proxy":"","authType":"","x":280,"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 DO DOLAR E A GASOLINA EM VITÓRIA","info":"","x":390,"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":[]}]
1 Like