Faça seu próprio acompanhador de preços no HA usando Node-Red!

Buenas galera, agora em épocas de pré-black fraude, vou compartilhar aqui um método de vcs trazerem o preço de items para o HA via node-red e acompanhar o mesmo graficamente.

Basicamente vamos pegar os valores que estão na Zoom como menor preço á vista.


(Imagem Exemplo do item que vamos utilizar e o preço vai ser o R$5.174,47, mas nada impede de pegar os outros valores parcelado tbm! Mas nesse momento vamos focar em somente 1)

Vamos lá.

O que você irá precisar:

1 - HA + Node Red;
2 - Alguns conhecimentos básicos em páginas WEB (mais especificamente HTML);

1º Passo -
Digite item que deseja no zoom, e fique na mesma página ali da imagem que enviei a cima,
clique com o botão direito no preço e vá em INSPECIONAR

image

Para você que não conhece, a aba que vai abrir é o HTML da página, onde podemos pegar qualquer elemento dela, o que importa para nós é onde fica localizado o preço.

image

Clique com o botão direito na tag na qual o preço está dentro, nesse caso perceba que o preço está dentro de < strong > < / strong>, e va até Copy → Copy Selector

O que vai ser copiado será uma referência de onde está localizado o preço no HTML da página, vulgo CSS SELECTOR
"#productInfo > div > div.product-price > p > span.price > a > strong"

Provavelmente o seu será igual ao meu se estiver no zoom, pois os preços ficam sempre no mesmo lugar.

2º Passo -
Agora que você já tem a onde fica o preço na página, e o seu produto, vamos ao node-red.

Código do fluxo

O primeiro node que é o inject, você pode alterar a periodicidade dele pra qual achar melhor.

No node “http-request” abra ele e insira a URL do seu produto (da página do zoom)

No node do HTML, aqui é onde inserimos o CSS SELECTOR que pegamos na página HTML

image

No primeiro node function é onde a coisa fica mais complicadinha, temos que tratar o texto que sai do HTML para o node-red entender que é um valor.
Nele basicamente são feito essas etapas:

  • Retirada dos espaços;

  • Retirada do “R$”;

  • Trocar a VIRGULA por PONTO (precisamos fazer isso pois o formato de número é diferente)

  • E por fim transforma o resultado em número e pega as 3 casa decimais;

Agora o segundo function passa os parâmetros que a gente precisa do Node-Red pro HA, isso vai virar nosso sensor!

Pode alterar os nomes que você achar legal e melhor pra vc!

E por fim o último node API é o responsável por enviar o nosso sensor pro HA.

Agora é só montar o gráfico no HA :slight_smile:

image

10 Likes

O link que voce disponibilizou não está mais funcionando, poderia enviar o código do fluxo ?

1 Like

Deletei o arquivo sem querer…
Verifica agora se está funcionando!

1 Like

Boa noite, primeiramente parabéns!

Sou novo por aqui e resolvi fazer algumas modificações no projeto que o @Choske postou…

Implementei um template para armazenar todas as URLs dos produtos que quero monitorar, com isso consigo ter uma manutenção simplificada.


também implementei uma padrão de nomenclatura dos sensores “sensor.price_monitor_” + [descrição do produto sem acentuação e espaço]
Exemplos:

  • sensor.price_monitor_geladeira_electrolux_ss72x_frost_free_side_by_side_504_litros_inox
  • sensor.price_monitor_geladeira_philco_prf520di_frost_free_side_by_side_520_litros_agua_e_gelo
  • sensor.price_monitor_geladeira_samsung_rs50n_rs50n3413s8_frost_free_side_by_side_501_litros_inox

segue modificações

[{"id":"7b069a755c99a059","type":"inject","z":"e365e98a6da9f8d3","name":"trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"1200","crontab":"","once":false,"onceDelay":"","topic":"","payloadType":"date","x":360,"y":180,"wires":[["dbf32f21791fca41"]]},{"id":"975242f076be249b","type":"group","z":"e365e98a6da9f8d3","name":"Monitoramento de preços","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["dbf32f21791fca41","1cc15b85b1e1e746","5b45530a1d493a34","938cd513299a06db"],"x":528,"y":139,"w":830,"h":528},{"id":"dbf32f21791fca41","type":"template","z":"e365e98a6da9f8d3","g":"975242f076be249b","name":"Lista de produtos","field":"products","fieldType":"msg","format":"handlebars","syntax":"plain","template":"[\n  {\n     \"url\":\"https://www.zoom.com.br/geladeira/geladeira-samsung-rs50n-rs50n3413s8-frost-free-side-by-side-501-litros-inox?_lc=10088&searchterm=geladeira&highlightedItemID=200128960&highlightedItemID=200128960#lista-de-ofertas\"\n  },\n  {\n     \"url\":\"https://www.zoom.com.br/geladeira/geladeira-electrolux-frost-free-504-litros-side-by-side-ss72x?_lc=10088&searchterm=geladeira\"\n  },\n  {\n     \"url\":\"https://www.zoom.com.br/geladeira/geladeira-philco-prf520di-frost-free-side-by-side-520-litros-agua-e-gelo?_lc=10088&searchterm=geladeira\"\n  }\n]","output":"json","x":650,"y":180,"wires":[["1cc15b85b1e1e746"]]},{"id":"1cc15b85b1e1e746","type":"array-iterator","z":"e365e98a6da9f8d3","g":"975242f076be249b","name":"proximo produto para ser analizado","input":"products","inputType":"msg","outputType":"msg","output":"product","repeat":true,"x":930,"y":180,"wires":[["60cb7edd38876c4e"]]},{"id":"5b45530a1d493a34","type":"group","z":"e365e98a6da9f8d3","g":"975242f076be249b","name":"Realiza Request","style":{"label":true,"fill":"#ffffbf","color":"#000000"},"nodes":["60cb7edd38876c4e","a5480369a15d92b5","bf0dc68f03c944d7"],"x":554,"y":233,"w":778,"h":234},{"id":"60cb7edd38876c4e","type":"http request","z":"e365e98a6da9f8d3","g":"5b45530a1d493a34","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"{{{product.url}}}","tls":"","persist":false,"proxy":"","authType":"","x":650,"y":300,"wires":[["cb3a5b3c39328c1d"]]},{"id":"a5480369a15d92b5","type":"group","z":"e365e98a6da9f8d3","g":"5b45530a1d493a34","name":"Ajusta Preço atual do produto","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["358d9b6a51b4baac","5a60f43ce82a9c8d"],"x":734,"y":359,"w":572,"h":82},{"id":"358d9b6a51b4baac","type":"html","z":"e365e98a6da9f8d3","g":"a5480369a15d92b5","name":"Preço A vista","property":"","outproperty":"product.price","tag":"#__next > div.ProductPageBody_ContentBody__1a8U1 > div.ProductPageBody_OverviewSection__36_9E > div > div > div > div.container-lg > div > div.col-lg-5 > div.OverviewArea_Info__26GxV > div:nth-child(1) > div > a","ret":"text","as":"multi","x":830,"y":400,"wires":[["5a60f43ce82a9c8d"]]},{"id":"5a60f43ce82a9c8d","type":"function","z":"e365e98a6da9f8d3","g":"a5480369a15d92b5","name":"Função para ajustar o preço atual do produto","func":"var_USD = parseFloat(global.get(\"var_USD\"))\n\n\nif(typeof msg.product.price != \"string\") msg.product.price = String(msg.product.price);\n\nif(msg.product.price.match(/\\./g)) {\n    msg.product.price = msg.product.price.replace(/\\,/g, \".\");\n    msg.product.price = msg.product.price.replace(/\\.(?!.*\\.)/g, \",\");\n    msg.product.price = msg.product.price.replace(\"R$\",\"\")\n    msg.product.price = msg.product.price.replace(/\\s/g, '')\n} else {\n    msg.product.price = msg.product.price.replace(/\\,/g, \".\");\n}\n\nmsg.product.price = parseFloat(msg.product.price).toFixed(3)\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1110,"y":400,"wires":[["a41226662559e6b8"]]},{"id":"bf0dc68f03c944d7","type":"group","z":"e365e98a6da9f8d3","g":"5b45530a1d493a34","name":"Ajusta Descrição e ID do produto","style":{"fill":"#dbcbe7","label":true,"color":"#000000"},"nodes":["cb3a5b3c39328c1d","0eae1519102f1a74"],"x":734,"y":259,"w":532,"h":82},{"id":"cb3a5b3c39328c1d","type":"html","z":"e365e98a6da9f8d3","g":"bf0dc68f03c944d7","name":"Descrição","property":"","outproperty":"product.friendly_name","tag":"#__next > div.ProductPageBody_ContentBody__1a8U1 > div.ProductPageBody_OverviewSection__36_9E > div > div > div > div.container-lg > div > div.col-lg-5 > div.OverviewArea_Title__HP-kQ > h1","ret":"text","as":"multi","x":820,"y":300,"wires":[["0eae1519102f1a74"]]},{"id":"0eae1519102f1a74","type":"function","z":"e365e98a6da9f8d3","g":"bf0dc68f03c944d7","name":"Função para ajustar o ID do produto","func":"var str = msg.product.friendly_name;\n\nstr = str.replace(/^\\s+|\\s+$/g, ''); // remover espaco do comeco e do fim\nstr = str.toLowerCase();\n\n// remover acentuacao\nvar from = \"ãàáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\nvar to   = \"aaaaaeeeeiiiioooouuuunc------\";\nfor (var i=0, l=from.length ; i<l ; i++) {\nstr = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n}\n\nstr = str.replace(/[^a-z0-9 -]/g, '') // remover caracteres inválidos\n.replace(/\\s+/g, '_') // Remover espaços\n.replace(/-+/g, ''); //Remover traços\n\nmsg.product.id = str;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1090,"y":300,"wires":[["358d9b6a51b4baac"]]},{"id":"938cd513299a06db","type":"group","z":"e365e98a6da9f8d3","g":"975242f076be249b","name":"Ajusta e publica o estado atual do produto","style":{"label":true,"fill":"#e3f3d3","color":"#000000"},"nodes":["aac1fe918a527024","a41226662559e6b8","3926c8f73e2065b5"],"x":554,"y":499,"w":772,"h":142},{"id":"aac1fe918a527024","type":"debug","z":"e365e98a6da9f8d3","g":"938cd513299a06db","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1090,"y":600,"wires":[]},{"id":"a41226662559e6b8","type":"function","z":"e365e98a6da9f8d3","g":"938cd513299a06db","name":"Função para montar o payload do produto","func":"msg.entity_id = 'sensor.price_monitor_' + msg.product.id;\n\nmsg.payload = {\n    data: {\n        state: msg.product.price,\n        attributes: {\n            friendly_name: msg.product.friendly_name,\n            unit_of_measurement: 'R$'\n        }\n    }\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":560,"wires":[["aac1fe918a527024","3926c8f73e2065b5"]]},{"id":"3926c8f73e2065b5","type":"ha-api","z":"e365e98a6da9f8d3","g":"938cd513299a06db","name":"Posta o estado atual do produto","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":1170,"y":540,"wires":[[]]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Bom espero ter contribuído!
Muito obrigado

4 Likes

Showww
Mandou bem @ryamada

Parabéns!

Bom dia @Choske,

Novamente estou aqui postando uma nova forma de monitorar os preços… dessa vez implementei uma extração dos detalhes do produto e imagem.

image

Para realizar essa extração estou me baseando no trecho HTML que contem todas as informações do produto:

Com essa modificação é possível extrair todas as informações de uma única vez.

Segue fluxo:

[{"id":"288c85bde5149ca9","type":"inject","z":"ace1418e2116a0eb","name":"Manual","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payloadType":"date","x":270,"y":100,"wires":[["2470e538f76c9b20"]]},{"id":"52e5e0486c215783","type":"group","z":"ace1418e2116a0eb","name":"Monitoramento de preços","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["675e8f1c9a9d2cc0","2470e538f76c9b20","ead65f39f6c9ca02"],"x":388,"y":79,"w":944,"h":288},{"id":"675e8f1c9a9d2cc0","type":"group","z":"ace1418e2116a0eb","g":"52e5e0486c215783","name":"Realiza Request","style":{"label":true,"fill":"#ffffbf","color":"#000000"},"nodes":["6ad02e8de40c0f64","f6e62bf06ef31ec8","b045718c315daaa3","331acc5ecd03ee10","a39df42779e879e3","f70a8ea23fbc986b","03b3f94760fc8d81"],"x":414,"y":179,"w":892,"h":162},{"id":"6ad02e8de40c0f64","type":"http request","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"{{{product.url}}}","tls":"","persist":false,"proxy":"","authType":"","x":510,"y":220,"wires":[["b045718c315daaa3"]]},{"id":"f6e62bf06ef31ec8","type":"debug","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1210,"y":300,"wires":[]},{"id":"b045718c315daaa3","type":"html","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"Extrai informações","property":"payload","outproperty":"product.next_data","tag":"#__NEXT_DATA__","ret":"html","as":"multi","x":750,"y":220,"wires":[["331acc5ecd03ee10"]]},{"id":"331acc5ecd03ee10","type":"html-entities","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"Decode das informações","property":"product.next_data","mode":"decode","optionsStrict":false,"optionsUseNamedReferences":false,"optionsPreferDecimal":false,"optionsEncodeEverything":false,"optionsAllowUnsafeSymbols":false,"optionsIsAttributeValue":false,"x":990,"y":220,"wires":[["a39df42779e879e3"]]},{"id":"a39df42779e879e3","type":"json","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"","property":"product.next_data","action":"","pretty":false,"x":1230,"y":220,"wires":[["f6e62bf06ef31ec8","f70a8ea23fbc986b"]]},{"id":"f70a8ea23fbc986b","type":"function","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"Monta Payload","func":"var dataPage = msg.product.next_data.props.pageProps.page;\nvar dataProduct = dataPage.product;\n\nmsg.next_data =  msg.product.next_data;\n\n\nvar info = {\n    data: {\n        state: dataPage.bestOffer == null ? 0 : dataPage.bestOffer.price,\n        attributes: {\n            friendly_name: dataProduct.product.name,\n            unit_of_measurement: 'R$',\n            icon: \"mdi:cart-arrow-down\",\n            url: msg.product.url,\n            entity_picture: dataProduct.mediaImages[0].url\n        }\n    }\n};\n\nfor (var i=0, l=dataProduct.attributes.length; i<l ; i++) {\n    var attr = dataProduct.attributes[i];\n    for (var j=0, k=attr.values.length; j<k ; j++) {\n        var val = attr.values[j];\n        info.data.attributes[val.name] = val.values[0];\n    }\n    \n}\nmsg.payload = info;\n\n\nvar str = dataProduct.product.name;\n\nstr = str.replace(/^\\s+|\\s+$/g, ''); // remover espaco do comeco e do fim\nstr = str.toLowerCase();\n\n// remover acentuacao\nvar from = \"ãàáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\nvar to   = \"aaaaaeeeeiiiioooouuuunc------\";\nfor (var i=0, l=from.length ; i<l ; i++) {\n    str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n}\n\nstr = str.replace(/[^a-z0-9 -]/g, '') // remover caracteres inválidos\n.replace(/\\s+/g, '_') // Remover espaços\n.replace(/-+/g, ''); //Remover traços\n\nmsg.entity_id = 'sensor.price_monitor_' + str;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":300,"wires":[["03b3f94760fc8d81"]]},{"id":"03b3f94760fc8d81","type":"ha-api","z":"ace1418e2116a0eb","g":"675e8f1c9a9d2cc0","name":"Posta o estado atual do produto","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":970,"y":300,"wires":[["f6e62bf06ef31ec8"]]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"2470e538f76c9b20","type":"template","z":"ace1418e2116a0eb","g":"52e5e0486c215783","name":"Lista de produtos","field":"products","fieldType":"msg","format":"handlebars","syntax":"plain","template":"[\n \n  {\n    \"url\": \"https://www.zoom.com.br/forno/forno-de-embutir-eletrico-brastemp-84-l-bot84ar?_lc=10088&searchterm=forno%20eletrico\"\n  }\n]","output":"json","x":510,"y":120,"wires":[["ead65f39f6c9ca02"]]},{"id":"ead65f39f6c9ca02","type":"array-iterator","z":"ace1418e2116a0eb","g":"52e5e0486c215783","name":"proximo produto para ser analizado","input":"products","inputType":"msg","outputType":"msg","output":"product","repeat":true,"x":790,"y":120,"wires":[["6ad02e8de40c0f64"]]}]

Obrigado

3 Likes

Show de Bola!! Parabens! Obrigado por compartilhar!

1 Like

ai ficou profissa de mais hahaha
mandou bem!

Já vou implementar nos meus quando fizer os sensores heheh

1 Like

Fala @PauloSantos e @Choske,

Estou implementando uma gestão dos produtos via telegram, a ideia é ser notificado a cada vez que o produto atingir um preço alvo.

Segue previa hehe

1 Like

Aí vai ficar Show!! Sucesso nessa implementação!! :clap: :clap:

Boa noite, jaja posto novidades, estou fazendo apenas “perfumaria”.

Adicionando produto:

Detalhes do produto:

Removendo produto:

Lista de Produtos:

Ajuda:

Boa noite,

estou pensando em escrever um novo tópico para detalhar todos as configurações que realizei.

Antes de importar o fluxo, crie o arquivo /config/price_monitor/products.json contendo o código abaixo:

[]

Depois de importar o fluxo abaixo, realize a configuração do bot do telegram:

[{"id":"ad363b4715bb07df","type":"group","z":"a29803852fc0d69c","name":"Monitoramento de Preços","style":{"fill":"#d1d1d1","fill-opacity":"0.63","label":true,"color":"#000000"},"nodes":["29d7c2aa26829ec2","396060c72ebfb932","60adaa9eebd31a6d","d88b7bb911fca27b","a1d6164ae55b1cef","cc2dd817e09c5c51","1df5738c4c916e87","2e26330f604e0baa"],"x":2,"y":7,"w":1756,"h":3126},{"id":"29d7c2aa26829ec2","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Monitoramento de preços","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["b9efa72718c78357","258d684a225ba657"],"x":28,"y":33,"w":1184,"h":294},{"id":"b9efa72718c78357","type":"group","z":"a29803852fc0d69c","g":"29d7c2aa26829ec2","name":"Realiza Request","style":{"label":true,"fill":"#ffffbf","color":"#000000"},"nodes":["8c3619b95303f27d","30ee5062b4ef9a6f","5a5b70dcf307354b","3d62073d0846745a","c67fddbd7b290d52","32c3fa6d6ab1c989","98c04ebed43f814d","0d1261d788cda1d5","273fee8a7eb17afd"],"x":54,"y":159,"w":1132,"h":142},{"id":"8c3619b95303f27d","type":"http request","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"{{{product.url}}}","tls":"","persist":false,"proxy":"","authType":"","x":570,"y":200,"wires":[["5a5b70dcf307354b"]]},{"id":"30ee5062b4ef9a6f","type":"debug","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"debug","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":990,"y":260,"wires":[]},{"id":"5a5b70dcf307354b","type":"html","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"Extrai informações","property":"payload","outproperty":"product.next_data","tag":"#__NEXT_DATA__","ret":"html","as":"multi","x":810,"y":200,"wires":[["3d62073d0846745a"]]},{"id":"3d62073d0846745a","type":"html-entities","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"Decode das informações","property":"product.next_data","mode":"decode","optionsStrict":false,"optionsUseNamedReferences":false,"optionsPreferDecimal":false,"optionsEncodeEverything":false,"optionsAllowUnsafeSymbols":false,"optionsIsAttributeValue":false,"x":1050,"y":200,"wires":[["c67fddbd7b290d52"]]},{"id":"c67fddbd7b290d52","type":"json","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"","property":"product.next_data","action":"","pretty":false,"x":210,"y":260,"wires":[["32c3fa6d6ab1c989"]]},{"id":"32c3fa6d6ab1c989","type":"function","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"Monta Payload","func":"var dataPage = msg.product.next_data.props.pageProps.page;\nvar dataProduct = dataPage.product;\n\nmsg.next_data =  msg.product.next_data;\n\nvar info = {\n    data: {\n        state: dataPage.bestOffer == null ? 0 : dataPage.bestOffer.price,\n        attributes: {\n            friendly_name: dataProduct.product.name,\n            unit_of_measurement: 'R$',\n            icon: \"mdi:cart-arrow-down\",\n            url: msg.product.url,\n            entity_picture: dataProduct.mediaImages[0].url\n        }\n    }\n};\n\nfor (var i=0, l=dataProduct.attributes.length; i<l ; i++) {\n    var attr = dataProduct.attributes[i];\n    for (var j=0, k=attr.values.length; j<k ; j++) {\n        var val = attr.values[j];\n        info.data.attributes[val.name] = val.values[0];\n    }\n    \n}\nmsg.payload = info;\n\n\nvar str = dataProduct.product.name;\n\nstr = str.replace(/^\\s+|\\s+$/g, ''); // remover espaco do comeco e do fim\nstr = str.toLowerCase();\n\n// remover acentuacao\nvar from = \"ãàáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\nvar to   = \"aaaaaeeeeiiiioooouuuunc------\";\nfor (var i=0, l=from.length ; i<l ; i++) {\n    str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n}\n\nstr = str.replace(/[^a-z0-9 -]/g, '') // remover caracteres inválidos\n.replace(/\\s+/g, '_') // Remover espaços\n.replace(/-+/g, ''); //Remover traços\n\nmsg.entity_id = 'sensor.price_monitor_' + str;\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":260,"wires":[["98c04ebed43f814d"]]},{"id":"98c04ebed43f814d","type":"ha-api","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"Posta o estado atual do produto","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":730,"y":260,"wires":[["30ee5062b4ef9a6f"]]},{"id":"0d1261d788cda1d5","type":"array-iterator","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"proximo produto para ser analizado","input":"products","inputType":"msg","outputType":"msg","output":"product","repeat":true,"x":310,"y":200,"wires":[["8c3619b95303f27d"]]},{"id":"273fee8a7eb17afd","type":"link in","z":"a29803852fc0d69c","g":"b9efa72718c78357","name":"","links":["e5c4454e11c8e06c"],"x":95,"y":200,"wires":[["0d1261d788cda1d5"]]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"258d684a225ba657","type":"group","z":"a29803852fc0d69c","g":"29d7c2aa26829ec2","name":"Trigger de monitoramento","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["6b60ae135d88a5fc","a99195d2c1906b51","6a33e26abb99296e"],"x":54,"y":59,"w":642,"h":82},{"id":"6b60ae135d88a5fc","type":"inject","z":"a29803852fc0d69c","g":"258d684a225ba657","name":"Trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":160,"y":100,"wires":[["a99195d2c1906b51"]]},{"id":"a99195d2c1906b51","type":"function","z":"a29803852fc0d69c","g":"258d684a225ba657","name":"Função para montar o payload de gatilho","func":"msg.method = \"trigger\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":100,"wires":[["6a33e26abb99296e"]]},{"id":"6a33e26abb99296e","type":"link out","z":"a29803852fc0d69c","g":"258d684a225ba657","name":"","links":["eeea874c64531af5"],"x":655,"y":100,"wires":[]},{"id":"396060c72ebfb932","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Detalhamento do Produto selecionado","style":{"fill":"#ffbfbf","label":true,"color":"#000000"},"nodes":["08183b0d49eb0bb5","0b1bd1794e2ca75b","8341c050537ebeff"],"x":38,"y":1513,"w":1574,"h":534},{"id":"08183b0d49eb0bb5","type":"group","z":"a29803852fc0d69c","g":"396060c72ebfb932","name":"Capitura solicitação de detalhamento","style":{"fill":"#dbcbe7","label":true,"color":"#000000"},"nodes":["fb89f3d7ee50b03b","2b4897b656fdec06","81afafbc171ff3a4","9dbed522c79d49c4"],"x":74,"y":1539,"w":812,"h":122},{"id":"fb89f3d7ee50b03b","type":"telegrambot-command","z":"a29803852fc0d69c","g":"08183b0d49eb0bb5","name":"/detail_","bot":"","command":"/detail_[0-9]+","commandType":"re","commandCase":false,"x":150,"y":1600,"wires":[["2b4897b656fdec06"]]},{"id":"2b4897b656fdec06","type":"function","z":"a29803852fc0d69c","g":"08183b0d49eb0bb5","name":"Função para montar o payload de detalhe do produto","func":"msg.method = \"detail\";\nmsg.args = msg.telegram.text.slice(0).trim().split(/_+/g);\nmsg.product = {\n    id: msg.args[1]\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":1600,"wires":[["81afafbc171ff3a4","9dbed522c79d49c4"]]},{"id":"81afafbc171ff3a4","type":"link out","z":"a29803852fc0d69c","g":"08183b0d49eb0bb5","name":"","links":["eeea874c64531af5"],"x":755,"y":1580,"wires":[]},{"id":"9dbed522c79d49c4","type":"debug","z":"a29803852fc0d69c","g":"08183b0d49eb0bb5","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":1620,"wires":[]},{"id":"0b1bd1794e2ca75b","type":"group","z":"a29803852fc0d69c","g":"396060c72ebfb932","name":"Verifica se o produto esta cadastrado e filtra o produto selecionado","style":{"fill":"#ffffbf","label":true,"color":"#000000"},"nodes":["cccf69a15b2cc761","794ce97b13e25495","d13029a9d4fb2208","702fc586cc353ed0","b0135af5f1d82b1f","2c10c642cfe33625","7f8398e35ed17cbf","11af96a52802ca21"],"x":64,"y":1679,"w":1522,"h":182},{"id":"cccf69a15b2cc761","type":"debug","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":950,"y":1760,"wires":[]},{"id":"794ce97b13e25495","type":"link in","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"","links":["20983a4d67b412fb"],"x":105,"y":1760,"wires":[["d13029a9d4fb2208"]]},{"id":"d13029a9d4fb2208","type":"function","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"Filtra Produto na Lista de Produtos cadastrados","func":"var id = msg.product.id;\nmsg.product=null;\nfor (var i=0, l=msg.products.length ; i<l ; i++) {\n    var prd = msg.products[i];\n    if (id==prd.id) {\n        msg.product = prd;\n        break;\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":1760,"wires":[["702fc586cc353ed0"]]},{"id":"702fc586cc353ed0","type":"switch","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"Verifica se o produto foi encontrado","property":"product","propertyType":"msg","rules":[{"t":"nnull"},{"t":"null"}],"checkall":"true","repair":false,"outputs":2,"x":700,"y":1760,"wires":[["cccf69a15b2cc761","7f8398e35ed17cbf"],["2c10c642cfe33625"]]},{"id":"b0135af5f1d82b1f","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"Telegram - Notifica Produto não cadastrado","bot":"","chatId":"-560382055","message":"","parseMode":"","x":1390,"y":1820,"wires":[]},{"id":"2c10c642cfe33625","type":"function","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"Payload de produto não cadastrado","func":"msg.payload = \"❌ Produto não cadastrado. \\n\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1040,"y":1820,"wires":[["b0135af5f1d82b1f","11af96a52802ca21"]]},{"id":"7f8398e35ed17cbf","type":"link out","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"","links":["1b218451c1fb1bf9"],"x":915,"y":1720,"wires":[]},{"id":"11af96a52802ca21","type":"debug","z":"a29803852fc0d69c","g":"0b1bd1794e2ca75b","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1270,"y":1760,"wires":[]},{"id":"8341c050537ebeff","type":"group","z":"a29803852fc0d69c","g":"396060c72ebfb932","name":"Notifica Detalhes do Produto","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["81136754e96918ba","125016da6c815221","d54bd4b9709109e1","5e3f9365c53fa387"],"x":74,"y":1879,"w":912,"h":142},{"id":"81136754e96918ba","type":"link in","z":"a29803852fc0d69c","g":"8341c050537ebeff","name":"","links":["c982afe944af3b6c"],"x":115,"y":1920,"wires":[["d54bd4b9709109e1"]]},{"id":"125016da6c815221","type":"debug","z":"a29803852fc0d69c","g":"8341c050537ebeff","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":690,"y":1920,"wires":[]},{"id":"d54bd4b9709109e1","type":"function","z":"a29803852fc0d69c","g":"8341c050537ebeff","name":"Função para montar payload de detalhes do Produto","func":"var prodtData = msg.product.info.data;\nvar prodtAttr = prodtData.attributes;\n\nvar message = \"📍\" + prodtAttr.friendly_name + \"\\n\\n\";\nmessage += \"Id: \" + prodtAttr.id + \"\\n\";\n//message += \"Entity Id: \" + prodtAttr.entity_id + \"\\n\";\nmessage += \"Melhor Preço: \" + prodtAttr.unit_of_measurement + \" \" + prodtData.state + \"\\n\";\nmessage += \"Remover: /del_\" + prodtAttr.id + \"\\n\";\nmessage += \"Url: \" + prodtAttr.url + \"\\n\\n\";\n\n\nfor (var attr in prodtAttr) {\n    \n    if (attr != \"friendly_name\" && \n            attr != \"unit_of_measurement\" && \n            attr != \"icon\" && \n            attr != \"url\" && \n            attr != \"entity_picture\" && \n            attr != \"entity_id\" &&\n            attr != \"id\") {\n                \n        message += attr + \": \" + prodtAttr[attr] + \"\\n\";        \n    }\n}\n\nmsg.payload = message + \"\\n\\n\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":1920,"wires":[["125016da6c815221","5e3f9365c53fa387"]]},{"id":"5e3f9365c53fa387","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"8341c050537ebeff","name":"Telegram - Notifica detalhes do Produto","bot":"","chatId":"-560382055","message":"","parseMode":"","x":800,"y":1980,"wires":[]},{"id":"60adaa9eebd31a6d","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Captura e atualiza sensor","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["3ce83d26a116657a","6729e0244553e67b","1b218451c1fb1bf9"],"x":34,"y":819,"w":1238,"h":348},{"id":"3ce83d26a116657a","type":"group","z":"a29803852fc0d69c","g":"60adaa9eebd31a6d","name":"Atualiza sensor","style":{"fill":"#ffffbf","label":true,"color":"#000000"},"nodes":["7eebf00b44eb8868","5565bd98d22b204a","df4c76289bcaef0e","0e926c3f81eda3d9","c982afe944af3b6c"],"x":134,"y":959,"w":432,"h":182},{"id":"7eebf00b44eb8868","type":"switch","z":"a29803852fc0d69c","g":"3ce83d26a116657a","name":"","property":"method","propertyType":"msg","rules":[{"t":"eq","v":"add","vt":"str"},{"t":"eq","v":"detail","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":210,"y":1100,"wires":[["df4c76289bcaef0e"],["c982afe944af3b6c"]]},{"id":"5565bd98d22b204a","type":"ha-api","z":"a29803852fc0d69c","g":"3ce83d26a116657a","name":"Atualiza estado do sensor","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":270,"y":1000,"wires":[["0e926c3f81eda3d9"]]},{"id":"df4c76289bcaef0e","type":"link out","z":"a29803852fc0d69c","g":"3ce83d26a116657a","name":"","links":["3f57b8ddaed47a71"],"x":315,"y":1060,"wires":[]},{"id":"0e926c3f81eda3d9","type":"debug","z":"a29803852fc0d69c","g":"3ce83d26a116657a","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":470,"y":1000,"wires":[]},{"id":"c982afe944af3b6c","type":"link out","z":"a29803852fc0d69c","g":"3ce83d26a116657a","name":"","links":["81136754e96918ba"],"x":315,"y":1100,"wires":[]},{"id":"6729e0244553e67b","type":"group","z":"a29803852fc0d69c","g":"60adaa9eebd31a6d","name":"Captura e transforma as informações da Request","style":{"label":true,"fill":"#dbcbe7","color":"#000000"},"nodes":["7cc6ab9cb557d7fd","6a2b67b408d31676","107c10f019b4676f","ec892f6e89acc3dd","271a959b1b920b5f"],"x":134,"y":859,"w":1112,"h":82},{"id":"7cc6ab9cb557d7fd","type":"http request","z":"a29803852fc0d69c","g":"6729e0244553e67b","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"{{{product.url}}}","tls":"","persist":false,"proxy":"","authType":"","x":230,"y":900,"wires":[["6a2b67b408d31676"]]},{"id":"6a2b67b408d31676","type":"html","z":"a29803852fc0d69c","g":"6729e0244553e67b","name":"Extrai informações","property":"payload","outproperty":"next_data","tag":"#__NEXT_DATA__","ret":"html","as":"multi","x":430,"y":900,"wires":[["107c10f019b4676f"]]},{"id":"107c10f019b4676f","type":"html-entities","z":"a29803852fc0d69c","g":"6729e0244553e67b","name":"Decode das informações","property":"next_data","mode":"decode","optionsStrict":false,"optionsUseNamedReferences":false,"optionsPreferDecimal":false,"optionsEncodeEverything":false,"optionsAllowUnsafeSymbols":false,"optionsIsAttributeValue":false,"x":710,"y":900,"wires":[["ec892f6e89acc3dd"]]},{"id":"ec892f6e89acc3dd","type":"json","z":"a29803852fc0d69c","g":"6729e0244553e67b","name":"","property":"next_data","action":"","pretty":false,"x":930,"y":900,"wires":[["271a959b1b920b5f"]]},{"id":"271a959b1b920b5f","type":"function","z":"a29803852fc0d69c","g":"6729e0244553e67b","name":"Monta Payload","func":"var dataPage = msg.next_data.props.pageProps.page;\nvar dataProduct = dataPage.product;\n\n\n//---------------------------------------------------------------------\n//Monta o entity_id\n//---------------------------------------------------------------------\nvar str = dataProduct.product.name;\n\nstr = str.replace(/^\\s+|\\s+$/g, ''); // remover espaco do comeco e do fim\nstr = str.toLowerCase();\n\n// remover acentuacao\nvar from = \"ãàáäâèéëêìíïîòóöôùúüûñç·/_,:;\";\nvar to   = \"aaaaaeeeeiiiioooouuuunc------\";\nfor (var i=0, l=from.length ; i<l ; i++) {\n    str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));\n}\n\nstr = str.replace(/[^a-z0-9 -]/g, '') // remover caracteres inválidos\n.replace(/\\s+/g, '_') // Remover espaços\n.replace(/-+/g, ''); //Remover traços\n\nmsg.entity_id = 'sensor.price_monitor_' + dataPage.productID + '_' + str;\n//---------------------------------------------------------------------\n\n\n\n//---------------------------------------------------------------------\n//Monta as informações do produto\n//---------------------------------------------------------------------\nvar info = {\n    data: {\n        state: dataPage.bestOffer == null ? 0 : dataPage.bestOffer.price,\n        attributes: {\n            friendly_name: dataProduct.product.name,\n            unit_of_measurement: 'R$',\n            icon: \"mdi:cart-arrow-down\",\n            url: msg.product.url,\n            entity_picture: dataProduct.mediaImages[0].url,\n            entity_id: msg.entity_id,\n            id: dataPage.productID\n        }\n    }\n};\n\nfor (var t=0, q=dataProduct.attributes.length; t<q ; t++) {\n    var attr = dataProduct.attributes[t];\n    for (var j=0, k=attr.values.length; j<k ; j++) {\n        var val = attr.values[j];\n        info.data.attributes[val.name] = val.values[0];\n    }\n    \n}\nmsg.payload = info;\nmsg.product.info = info;\n//---------------------------------------------------------------------\n\ndelete msg.headers;\ndelete msg.responseUrl;\ndelete msg.redirectList;\ndelete msg.retry;\ndelete msg.responseCookies;\ndelete msg.parts;\ndelete msg.statusCode;\ndelete msg.next_data;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1140,"y":900,"wires":[["5565bd98d22b204a","7eebf00b44eb8868"]]},{"id":"1b218451c1fb1bf9","type":"link in","z":"a29803852fc0d69c","g":"60adaa9eebd31a6d","name":"product_add_in","links":["88c45c48fd4c68fb","7f8398e35ed17cbf"],"x":75,"y":860,"wires":[["7cc6ab9cb557d7fd"]]},{"id":"d88b7bb911fca27b","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Remoção de Produto","style":{"fill":"#ffefbf","label":true,"color":"#000000"},"nodes":["bdafbfafe6807e52","f572cd43f270e3b4"],"x":28,"y":2613,"w":1704,"h":494},{"id":"bdafbfafe6807e52","type":"group","z":"a29803852fc0d69c","g":"d88b7bb911fca27b","name":"Captura solicitação de remoção do Produto","style":{"fill":"#ffffbf","label":true,"color":"#000000"},"nodes":["ea904d04f8896bb6","115f032cf7ccf673","8ffa9b22cc1e2e66","325786aaf8136bd7"],"x":54,"y":2639,"w":872,"h":122},{"id":"ea904d04f8896bb6","type":"telegrambot-command","z":"a29803852fc0d69c","g":"bdafbfafe6807e52","name":"/del_","bot":"","command":"/del_[0-9]+","commandType":"re","commandCase":false,"x":130,"y":2680,"wires":[["115f032cf7ccf673"]]},{"id":"115f032cf7ccf673","type":"function","z":"a29803852fc0d69c","g":"bdafbfafe6807e52","name":"Função para montar o payload do produto que será removido","func":"msg.method = \"del\";\nmsg.args = msg.telegram.text.slice(0).trim().split(/_+/g);\nmsg.product = {\n    id: msg.args[1]\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":2680,"wires":[["8ffa9b22cc1e2e66","325786aaf8136bd7"]]},{"id":"8ffa9b22cc1e2e66","type":"link out","z":"a29803852fc0d69c","g":"bdafbfafe6807e52","name":"","links":["eeea874c64531af5"],"x":795,"y":2680,"wires":[]},{"id":"325786aaf8136bd7","type":"debug","z":"a29803852fc0d69c","g":"bdafbfafe6807e52","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":830,"y":2720,"wires":[]},{"id":"f572cd43f270e3b4","type":"group","z":"a29803852fc0d69c","g":"d88b7bb911fca27b","name":"Remove Produto e notifica no telegram","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["ee349c30e2bc09cd","4df52039afd4e2a4","baa52ee935352e1a","0c227405ad1d632d","022504b015db653c","dcd6cf1b2cdb489f","3d3c2e6ab0241675","f1f3ec06cce76fd1","897668ff3b81f014","8602606813999317"],"x":54,"y":2799,"w":1652,"h":282},{"id":"ee349c30e2bc09cd","type":"link in","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"","links":["8f90e3e1fa9e5955"],"x":95,"y":2940,"wires":[["4df52039afd4e2a4"]]},{"id":"4df52039afd4e2a4","type":"function","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Função para remover o produto da lista de produtos monitorados","func":"var pos = null;\n\nfor (var i=0, l=msg.products.length; i<l ; i++) {\n    var prd = msg.products[i];\n    if (msg.product.id==prd.id) {\n        pos = i;\n        break;\n    }\n}\n\nif (pos != null) {\n    msg.products.splice(pos, 1);\n}\nmsg.payload = JSON.stringify(msg.products, null, 4);\nmsg.del_position = pos;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":2940,"wires":[["0c227405ad1d632d"]]},{"id":"baa52ee935352e1a","type":"debug","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1610,"y":2900,"wires":[]},{"id":"0c227405ad1d632d","type":"switch","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"","property":"del_position","propertyType":"msg","rules":[{"t":"nnull"},{"t":"null"}],"checkall":"true","repair":false,"outputs":2,"x":710,"y":2940,"wires":[["8602606813999317"],["3d3c2e6ab0241675"]]},{"id":"022504b015db653c","type":"function","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Função para montar o Payload de sucesso ao remover Produto","func":"var message = \"✅ Produto removido com sucesso!\\n\\n\";\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1290,"y":2900,"wires":[["baa52ee935352e1a","dcd6cf1b2cdb489f"]]},{"id":"dcd6cf1b2cdb489f","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Telegram - Produto removido com sucesso","bot":"","chatId":"-560382055","message":"","parseMode":"","x":1290,"y":2840,"wires":[]},{"id":"3d3c2e6ab0241675","type":"function","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Função para montar o Payload de erro ao remover Produto","func":"var message = \"❌ Erro ao remover o Produto!\\n\\n\";\nmessage += \"/del_\" + msg.product.id + \"\\n\\n\";\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1020,"y":2980,"wires":[["f1f3ec06cce76fd1","897668ff3b81f014"]]},{"id":"f1f3ec06cce76fd1","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Telegram - Erro ao remover o Produto","bot":"","chatId":"-560382055","message":"","parseMode":"","x":1510,"y":2980,"wires":[]},{"id":"897668ff3b81f014","type":"debug","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1410,"y":3040,"wires":[]},{"id":"8602606813999317","type":"file","z":"a29803852fc0d69c","g":"f572cd43f270e3b4","name":"Salva a lista de produtos","filename":"/config/price_monitor/products.json","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"none","x":910,"y":2900,"wires":[["022504b015db653c"]]},{"id":"a1d6164ae55b1cef","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Detalhamento de todos os produtos","style":{"fill":"#e3f3d3","label":true,"color":"#000000"},"nodes":["b5c3e7a5f007ff11","274e361e9d99acbb"],"x":28,"y":2073,"w":1044,"h":334},{"id":"b5c3e7a5f007ff11","type":"group","z":"a29803852fc0d69c","g":"a1d6164ae55b1cef","name":"Captura solicitação de detalhamento de todos os Produtos","style":{"fill":"#dbcbe7","label":true,"color":"#000000"},"nodes":["f8f281dbd1e3e21d","a860336979f5a065","db7056123c2143a6","8954e51a86e26084"],"x":54,"y":2099,"w":832,"h":122},{"id":"f8f281dbd1e3e21d","type":"telegrambot-command","z":"a29803852fc0d69c","g":"b5c3e7a5f007ff11","name":"/details","bot":"","command":"/details","commandType":"str","commandCase":false,"x":130,"y":2140,"wires":[["a860336979f5a065"]]},{"id":"a860336979f5a065","type":"function","z":"a29803852fc0d69c","g":"b5c3e7a5f007ff11","name":"Função para montar o payload dos produtos que serão listados","func":"msg.method = \"details\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":2140,"wires":[["db7056123c2143a6","8954e51a86e26084"]]},{"id":"db7056123c2143a6","type":"link out","z":"a29803852fc0d69c","g":"b5c3e7a5f007ff11","name":"","links":["eeea874c64531af5"],"x":755,"y":2140,"wires":[]},{"id":"8954e51a86e26084","type":"debug","z":"a29803852fc0d69c","g":"b5c3e7a5f007ff11","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":2180,"wires":[]},{"id":"274e361e9d99acbb","type":"group","z":"a29803852fc0d69c","g":"a1d6164ae55b1cef","name":"Envia notificação no Telegram com os produtos cadastrados","style":{"fill":"#ffffbf","label":true,"color":"#000000"},"nodes":["7d5bb6d4f9e31063","f49842aa01118fea","1bc0031aefdeaab7","c134747d114ae80f"],"x":54,"y":2239,"w":992,"h":142},{"id":"7d5bb6d4f9e31063","type":"link in","z":"a29803852fc0d69c","g":"274e361e9d99acbb","name":"","links":["26a171ba4249edd6","7dedf87434667f4b"],"x":95,"y":2300,"wires":[["f49842aa01118fea"]]},{"id":"f49842aa01118fea","type":"function","z":"a29803852fc0d69c","g":"274e361e9d99acbb","name":"Função para montar o Payload de notificação no Telegram","func":"var message = \"Lista de Produtos:\\n\\n\";\n\nfor (var i=0, l=msg.products.length; i<l ; i++) {\n    var prd = msg.products[i];\n    message += \"📍\" + prd.friendly_name + \"\\n\";\n    message += \"Detalhes: /detail_\" + prd.id + \"\\n\";\n    message += \"Remover: /del_\" + prd.id + \"\\n\\n\";\n}\n\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":2300,"wires":[["1bc0031aefdeaab7","c134747d114ae80f"]]},{"id":"1bc0031aefdeaab7","type":"debug","z":"a29803852fc0d69c","g":"274e361e9d99acbb","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":690,"y":2280,"wires":[]},{"id":"c134747d114ae80f","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"274e361e9d99acbb","name":"Telegram - Notifica detalhes de todos os Produtos","bot":"","chatId":"-560382055","message":"","parseMode":"","x":830,"y":2340,"wires":[]},{"id":"cc2dd817e09c5c51","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Adiciona um novo produto na lista de Produtos","style":{"fill":"#ffbfbf","label":true,"color":"#000000"},"nodes":["ab1f49794ab00f71","d8fdebde8dbb9561"],"x":28,"y":373,"w":1524,"h":414},{"id":"ab1f49794ab00f71","type":"group","z":"a29803852fc0d69c","g":"cc2dd817e09c5c51","name":"Recebe e ajusta o produto que será incluido","style":{"fill":"#dbcbe7","label":true,"color":"#000000"},"nodes":["a3b6dcec0c9001d2","d02fab236eaac549","9c9c4505c3e83d66","4614fd8be55ab6e9"],"x":54,"y":399,"w":712,"h":142},{"id":"a3b6dcec0c9001d2","type":"telegrambot-command","z":"a29803852fc0d69c","g":"ab1f49794ab00f71","name":"/add","bot":"","command":"/add","commandType":"re","commandCase":false,"x":130,"y":500,"wires":[["d02fab236eaac549"]]},{"id":"d02fab236eaac549","type":"function","z":"a29803852fc0d69c","g":"ab1f49794ab00f71","name":"Função para montar o payload que será adicionado","func":"msg.method = \"add\";\nmsg.args = msg.telegram.text.slice(0).trim().split(/ +/g);\nmsg.product = {\n    url: msg.args[1]\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":500,"wires":[["9c9c4505c3e83d66","4614fd8be55ab6e9"]]},{"id":"9c9c4505c3e83d66","type":"link out","z":"a29803852fc0d69c","g":"ab1f49794ab00f71","name":"out_add_product","links":["eeea874c64531af5"],"x":655,"y":500,"wires":[]},{"id":"4614fd8be55ab6e9","type":"debug","z":"a29803852fc0d69c","g":"ab1f49794ab00f71","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":670,"y":440,"wires":[]},{"id":"d8fdebde8dbb9561","type":"group","z":"a29803852fc0d69c","g":"cc2dd817e09c5c51","name":"Salva o produto na lista de produtos","style":{"fill":"#ffffbf","label":true,"color":"#000000"},"nodes":["3f57b8ddaed47a71","80a52467d7db7cf6","6da16a72ab26b1e9","2984e6ba82cb8789","11a6cbdc6e152748","4498ad998eef9261","5179a03e965231b1","aefb5babd8f4b9d3","29666be66f1fdac6"],"x":54,"y":579,"w":1472,"h":182},{"id":"3f57b8ddaed47a71","type":"link in","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"in_add_save_product","links":["df4c76289bcaef0e"],"x":95,"y":660,"wires":[["80a52467d7db7cf6"]]},{"id":"80a52467d7db7cf6","type":"function","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"Adiciona o produto na lista de produtos","func":"var attr = msg.product.info.data.attributes;\n\nvar exists = false;\n\nfor (var i=0, l=msg.products.length; i<l ; i++) {\n    var prdt = msg.products[i];\n    if (prdt.id == attr.id) {\n        exists = true;\n        break;\n    }\n}\n\nif (!exists) {\n    var prd = {\n        id: attr.id,\n        friendly_name: attr.friendly_name,\n        url: attr.url\n    };\n    \n    msg.products.push(prd);\n    msg.payload = JSON.stringify(msg.products, null, 4);\n}\nmsg.product_push = !exists;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":660,"wires":[["5179a03e965231b1"]]},{"id":"6da16a72ab26b1e9","type":"file","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"Salva a lista de produtos","filename":"/config/price_monitor/products.json","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"none","x":750,"y":660,"wires":[["4498ad998eef9261"]]},{"id":"2984e6ba82cb8789","type":"debug","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1150,"y":620,"wires":[]},{"id":"11a6cbdc6e152748","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"Telegram - Notifica Produto cadastrado com sucesso","bot":"","chatId":"-560382055","message":"","parseMode":"","x":1300,"y":660,"wires":[]},{"id":"4498ad998eef9261","type":"function","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"","func":"var attr = msg.product.info.data.attributes;\n\nvar message = \"✅ Produto cadastrado com sucesso!\\n\\n\";\nmessage += \"📍\" + attr.friendly_name + \"\\n\";\nmessage += \"Detalhes: /detail_\" + attr.id + \"\\n\\n\";\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":660,"wires":[["2984e6ba82cb8789","11a6cbdc6e152748"]]},{"id":"5179a03e965231b1","type":"switch","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"","property":"product_push","propertyType":"msg","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":550,"y":660,"wires":[["6da16a72ab26b1e9"],["29666be66f1fdac6"]]},{"id":"aefb5babd8f4b9d3","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"Telegram - Notifica Produto já estava cadastrado","bot":"","chatId":"-560382055","message":"","parseMode":"","x":980,"y":720,"wires":[]},{"id":"29666be66f1fdac6","type":"function","z":"a29803852fc0d69c","g":"d8fdebde8dbb9561","name":"","func":"var attr = msg.product.info.data.attributes;\n\nvar message = \"❌ Produto já estava cadastrado!\\n\\n\";\nmessage += \"📍\" + attr.friendly_name + \"\\n\";\nmessage += \"Detalhes: /detail_\" + attr.id + \"\\n\\n\";\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":720,"wires":[["aefb5babd8f4b9d3"]]},{"id":"1df5738c4c916e87","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Posta ajuda no telegram","style":{"fill":"#dbcbe7","label":true,"color":"#000000"},"nodes":["1e4b912a7e114889","5fa432992f5d81cb","fdc6b25d60254aca","a9d1f72c0f271196"],"x":34,"y":2439,"w":912,"h":142},{"id":"1e4b912a7e114889","type":"telegrambot-command","z":"a29803852fc0d69c","g":"1df5738c4c916e87","name":"/help","bot":"","command":"/help","commandType":"str","commandCase":false,"x":110,"y":2480,"wires":[["5fa432992f5d81cb"]]},{"id":"5fa432992f5d81cb","type":"function","z":"a29803852fc0d69c","g":"1df5738c4c916e87","name":"Função para montar o Payload de ajuda do Telegram","func":"var message = \"Olá, posso ajudá-lo a gerenciar o monitoramento de preços dos seus produtos!\\n\";\nmessage += \"Você pode me controlar enviando estes comandos:\\n\\n\";\n\nmessage += \"Adicionar um produto:\\n\";\nmessage += \"/add [url_site_zoom] - Adiciona um produto no monitoramento\\n\";\nmessage += \"exemplo:\\n\";\nmessage += \"/add https://www.zoom.com.br/celular/smartphone-apple-iphone-11-64gb-ios?_lc=200\\n\\n\";\n\nmessage += \"Detalhamento dos Produtos cadastrados:\\n\";\nmessage += \"/details - Lista todos os produtos cadastrados\\n\\n\";\n\nmessage += \"Detalhamento de um produto específico:\\n\";\nmessage += \"/detail_[id_produto] - Lista todas as informações dos disponíveis no sensor\\n\";\nmessage += \"exemplo:\\n\";\nmessage += \"/detail_5664807\\n\\n\";\n\nmessage += \"Remove um produto da lista de monitoramento:\\n\";\nmessage += \"/del_[id_produto] - Remove o produto do monitoramento\\n\";\nmessage += \"exemplo:\\n\";\nmessage += \"/del_5664807\\n\\n\";\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":2480,"wires":[["fdc6b25d60254aca","a9d1f72c0f271196"]]},{"id":"fdc6b25d60254aca","type":"telegrambot-notify","z":"a29803852fc0d69c","g":"1df5738c4c916e87","name":"Telegram - Notifica ajuda","bot":"","chatId":"-560382055","message":"","parseMode":"","x":810,"y":2480,"wires":[]},{"id":"a9d1f72c0f271196","type":"debug","z":"a29803852fc0d69c","g":"1df5738c4c916e87","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":2540,"wires":[]},{"id":"2e26330f604e0baa","type":"group","z":"a29803852fc0d69c","g":"ad363b4715bb07df","name":"Realiza a Leitura de todos os produtos salvos no arquivo","style":{"fill":"#bfdbef","label":true,"color":"#000000"},"nodes":["25940304f8f7a350","cc8bdc08357b7085","639569c62d2c2811","eeea874c64531af5","729aa1072739c015","88c45c48fd4c68fb","5cbe5d6363714d8f","20983a4d67b412fb","7dedf87434667f4b","8f90e3e1fa9e5955","e5c4454e11c8e06c"],"x":34,"y":1219,"w":1002,"h":242},{"id":"25940304f8f7a350","type":"file in","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"Leitura de Produtos","filename":"/config/price_monitor/products.json","format":"utf8","chunk":false,"sendError":false,"encoding":"utf8","allProps":false,"x":230,"y":1340,"wires":[["cc8bdc08357b7085"]]},{"id":"cc8bdc08357b7085","type":"json","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","property":"payload","action":"","pretty":false,"x":430,"y":1340,"wires":[["639569c62d2c2811"]]},{"id":"639569c62d2c2811","type":"function","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"Função para converter produtos","func":"msg.products = msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":1340,"wires":[["729aa1072739c015","5cbe5d6363714d8f"]]},{"id":"eeea874c64531af5","type":"link in","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"in_products","links":["81afafbc171ff3a4","9c9c4505c3e83d66","db7056123c2143a6","8ffa9b22cc1e2e66","6a33e26abb99296e"],"x":75,"y":1340,"wires":[["25940304f8f7a350"]]},{"id":"729aa1072739c015","type":"switch","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","property":"method","propertyType":"msg","rules":[{"t":"eq","v":"add","vt":"str"},{"t":"eq","v":"detail","vt":"str"},{"t":"eq","v":"details","vt":"str"},{"t":"eq","v":"del","vt":"str"},{"t":"eq","v":"trigger","vt":"str"}],"checkall":"true","repair":false,"outputs":5,"x":870,"y":1340,"wires":[["88c45c48fd4c68fb"],["20983a4d67b412fb"],["7dedf87434667f4b"],["8f90e3e1fa9e5955"],["e5c4454e11c8e06c"]]},{"id":"88c45c48fd4c68fb","type":"link out","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"out_products_add","links":["1b218451c1fb1bf9"],"x":995,"y":1260,"wires":[]},{"id":"5cbe5d6363714d8f","type":"debug","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":870,"y":1280,"wires":[]},{"id":"20983a4d67b412fb","type":"link out","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","links":["794ce97b13e25495"],"x":995,"y":1300,"wires":[]},{"id":"7dedf87434667f4b","type":"link out","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","links":["7d5bb6d4f9e31063"],"x":995,"y":1340,"wires":[]},{"id":"8f90e3e1fa9e5955","type":"link out","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","links":["ee349c30e2bc09cd"],"x":995,"y":1380,"wires":[]},{"id":"e5c4454e11c8e06c","type":"link out","z":"a29803852fc0d69c","g":"2e26330f604e0baa","name":"","links":["273fee8a7eb17afd"],"x":995,"y":1420,"wires":[]}]

Depois, disso a “magica” esta pronta HAHAHA

Bom espero que gostem, e claro se tiver duvidas ou algum bug estou a disposição para auxiliar.

3 Likes

Cria outro tópico como monitorador de preços 2.0 hahahah
ficou top de mais, parabéns mano!

1 Like

Boa noite!

Estou finalizando a notificação quando o produto atingir um preço alvo, acho que amanhã consigo postar a solução.

Estou pensando em colocar um gráfico na notificação detalhamento do produto… acho que ficaria legal essa informação.

Claro, se tiverem alguma sugestão seria ótimo hehehe.

Cara pensei em algo do tipo:

Pega todo o histórico do preço do produto, a mínima dos preços. por ex:
O Menor preço foi 500 de x data até y data

Sempre que ele buscar, faz essa comparação, do preço mínimo (500) com o atual (600)
Dai vem a lógica:
Se o preço atual MAIOR que o mínimo, talvez aqui nem precisa notificar

Caso contrário se o preço atual for 400: notifica Preço Atual menor que o preço mínimo histórico.

O que acha?

Top vou pensar em algo nesse sentido.

Valeu

Ficou Show!! Parabens!!

Amigo, boa noite. Segui à risca o passo a passo, porém na hora de add os produtos o trem não vai. Dou o comando /add + link, mas não acontece nada… porém quando dou o comando /details ele me retorna “Lista de Produtos:” sem nada também (só pra constar q está funcionando tranquilo… o problema está no /add)… Dá um help aí… valeu!

@Choske tudo bem? Eu já consegui fazer o sensor para acompanhar preço de gasolina como você ensinou em outro tópico. Agora gostaria de uma ajudinha em obter as condições climáticas a partir de um site com o mesmo método. Criei este tópico na área de ajuda do fórum e queria te perguntar se pode me dar um help nele? Ajuda para criar sensor de Weather com http request (tipo o de gasolina e preços)
Parabéns pelo trabalho!

@ryamada parabéns cara, ficou muito top! Estou começando agora com o NodeRed, importei seu fluxo aqui, instalei os pacotes do telegram pendentes, e configurei o bot (token e tudo mais), porém toda mensagem que recebo do bot, o node debug me retorna o seguinte, received unauthorized message in 1067060652 from ‘{nome_usuario_telegram}’.

Nas configurações do Telegram Bot, deixei o seguinte:

Bot-Name: Nome do bot criado, Home Assistant
Token: Token gerado no @botfather
Users: aqui esta minha dúvida, devo colocar o nome de usuário que ele pede para o bot no celular, ou o meu usuário do Telegram?
Chat ID: Obtive na página de detalhes

desde já agradeço !