CORREIOS - Sistema de rastreio no Home Assistant + adicionar, excluir e notificações telegram (nodered+card homeassistant)

Aqui esta normal amigo. Inclusive recebi a pouco uma notificação de status

É estranho, porque eu não alterei nada, e funcionava antes…
Outro detalhe, é que vira e mexe perco todos os cadastros, eles apagam sozinho.

Alguma dica de como posso debugar, e tentar corrigir isso ?

@fabianomga Verifica se esta tudo atualizado (addon, integração no hacs e paletas)

Eu fiz algumas alterações no fluxo do kelvinrafaeli para meu uso, se quiser testar:

  • Remoção dos sub-flows
  • Remoção dos helpers. Tudo é criado usando o node red. ( Os nós usados para isso ainda estão na versão beta, mas esta funcionando tudo normal por enquanto)
  • Adicionar rastreios pelo Telegram enviando msg no formato: Teste / NM471076999BR / sim
    (tem que habilitar e configurar os nós para isso)
  • Acho que removi a parte que apaga os rastreios automaticamente :thinking:
  • Mudanças nos nós que gravam os rastreios em arquivo
  • Mais algumas coisa que não me lembro

Fluxo:

[{"id":"a79c03486459c6c8","type":"tab","label":"Correios","disabled":false,"info":"","env":[]},{"id":"f2c90c6b2db09388","type":"group","z":"a79c03486459c6c8","style":{"stroke":"#999999","stroke-opacity":"1","fill":"none","fill-opacity":"1","label":true,"label-position":"nw","color":"#a4a4a4"},"nodes":["bb7ad635364d8f85","fc7e36ea7d95d35d","ae3248fb88ebafb3","683da37594845817","9ebb54c67629f053","7e18bb798c58efe3","b8519a4afdd3a317","0f92785d5aa6274a","e2035d886fc674b7"],"x":54,"y":679,"w":1052,"h":149.5},{"id":"214d29bdd74385e1","type":"group","z":"a79c03486459c6c8","name":"Mudança de status","style":{"label":true},"nodes":["0c3ac19265a3db18","346d8557fdba1a04","cc3513557d3e7dbc","0405a73dfc16925c","ab6cc7c258ac5e1e","99b9c74f5e97ef4b","a1def123038ad0e0","eba6f26651d44ffb","847d72c30481827f","622eb83b073642f7","e74ed48ae4640a18"],"x":54,"y":179,"w":1342,"h":162},{"id":"94fa28ae0e629086","type":"group","z":"a79c03486459c6c8","name":"Atualização","style":{"label":true},"nodes":["97743002073c0dda","7fd965e17382d880","cf5331c8c6002452","51b72149e9653038","6494e811268c1a12","8f100ae5af1baa9e","b67c28f2692bec5f","04fbd1ea0757f708","96abe99b2cf42cbf","fee2a02a9187719b","64dce67d84eb7967","e4c9dce3eb69949a","4fccdd304eb40de2","a8690319ecb8b892","f213d423e8295017","24830b2b312f08b1","587f5b97bcedaed5","4c0f5ecf0a06e111","b9921cc413f1ede8","60850bf887b2bc0e","c30428f6f697958a","32636e87678747f6","b153f5e9eaef8ecb","ddeb7971ea9d1c0d","e61a0c7c2f0ea6af","7ec9f299b1ad8ff5","64a675dc6850b375"],"x":54,"y":379,"w":1932,"h":262},{"id":"0a05b3e2b2f5d771","type":"group","z":"a79c03486459c6c8","name":"Adicionar Rastreio","style":{"label":true},"nodes":["20103fce5a92a1d4","c7a5408f8cc5dbdf","cf9439e6e43cd887","acf2ac1079f62b18","d3c47e986ae2c3ec","d5a56adb75958012","5bd760b668a3ba07","6566bdf22e4ef401","9a8cac12b789e0d4"],"x":68,"y":873,"w":1138,"h":248},{"id":"1b3fae49edc700db","type":"group","z":"a79c03486459c6c8","name":"Excluir Rastreio","style":{"label":true},"nodes":["e009644eca2c0bbe","85d7fbe8076d8971","07f03b0b1517a9dc","9eed622a5b173721","bbb5b85ef360ead6","9189ac6b2959bf4d","55315b25d3bd2bc7","0f1466ceac244b09","956317a64a3970f7"],"x":74,"y":1339,"w":792,"h":162},{"id":"c6f0e1c2d91567a6","type":"group","z":"a79c03486459c6c8","name":"","style":{"label":true},"nodes":["21c696455939a9c4","0143491d19454720","e4541e788d014c8b"],"x":54,"y":19,"w":342,"h":122},{"id":"3f1acc5cba86dbe3","type":"group","z":"a79c03486459c6c8","name":"Verificar status","style":{"label":true},"nodes":["bab36cc485f6623c","6450dc296ad6236b","58b4466a9de89c83","6f756044e04c990d","175c8e789e776ecb","9d83a3897eaffce3","df23a8c3996c1117","da3f645f1b8d26d0","f131902ccbd0fe9e","027b2e30872861f3","5df9ea2b2e73395f"],"x":74,"y":1159,"w":1052,"h":142},{"id":"d5a56adb75958012","type":"group","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Telegram","style":{"label":true},"nodes":["e2400ff4e6403679","779e5eb7b4da8c63","de3eaa1736d4fced"],"x":94,"y":899,"w":552,"h":82},{"id":"e009644eca2c0bbe","type":"ha-button","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Correios Excluir","version":0,"debugenabled":false,"outputs":1,"entityConfig":"34df51b33a4efd6f","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":180,"y":1380,"wires":[["07f03b0b1517a9dc"]]},{"id":"20103fce5a92a1d4","type":"ha-button","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Correios Salvar","version":0,"debugenabled":false,"outputs":1,"entityConfig":"06032357ce6a46e1","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":180,"y":1020,"wires":[["5bd760b668a3ba07"]]},{"id":"c7a5408f8cc5dbdf","type":"ha-text","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Correios Rastreio","version":1,"debugenabled":false,"inputs":1,"outputs":1,"entityConfig":"6b6144652fd3f35e","mode":"get","value":"payload","valueType":"msg","outputProperties":[{"property":"rastreio","propertyType":"msg","value":"","valueType":"value"}],"x":460,"y":1080,"wires":[["cf9439e6e43cd887"]]},{"id":"cf9439e6e43cd887","type":"ha-select","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Correios Notificação","version":1,"debugenabled":false,"inputs":1,"outputs":1,"entityConfig":"affcb1b3ab97b12c","mode":"get","value":"payload","valueType":"msg","outputProperties":[{"property":"notificacao","propertyType":"msg","value":"","valueType":"value"}],"x":670,"y":1080,"wires":[["acf2ac1079f62b18"]]},{"id":"acf2ac1079f62b18","type":"ha-text","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Correios Nome Objeto","version":1,"debugenabled":false,"inputs":1,"outputs":1,"entityConfig":"f960d0b45b5a3d96","mode":"get","value":"payload","valueType":"msg","outputProperties":[{"property":"nome_objeto","propertyType":"msg","value":"","valueType":"value"}],"x":900,"y":1080,"wires":[["d3c47e986ae2c3ec"]]},{"id":"bab36cc485f6623c","type":"function","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Headers","func":"msg.url = \"https://www.linkcorreios.com.br/?id=\" + msg.rastreio\nmsg.headers = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/50.0.2661.102 Safari/537.36\",\n}\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":1200,"wires":[["6450dc296ad6236b"]]},{"id":"6450dc296ad6236b","type":"http request","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Site","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":370,"y":1200,"wires":[["58b4466a9de89c83"]]},{"id":"58b4466a9de89c83","type":"html","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Status","property":"payload","outproperty":"status","tag":"#page > main > div.container.margin_30_5 > div > div > div.singlepost > ul:nth-child(3) > li:nth-child(1) > b","ret":"text","as":"single","x":490,"y":1200,"wires":[["6f756044e04c990d"]]},{"id":"6f756044e04c990d","type":"html","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Data","property":"payload","outproperty":"data","tag":"#page > main > div.container.margin_30_5 > div > div > div.singlepost > ul:nth-child(3) > li:nth-child(2)","ret":"text","as":"single","x":610,"y":1200,"wires":[["175c8e789e776ecb"]]},{"id":"175c8e789e776ecb","type":"html","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Local","property":"payload","outproperty":"local","tag":"#page > main > div.container.margin_30_5 > div > div > div.singlepost > ul:nth-child(3) > li:nth-child(3)","ret":"text","as":"single","x":730,"y":1200,"wires":[["9d83a3897eaffce3"]]},{"id":"9d83a3897eaffce3","type":"html","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Destino","property":"payload","outproperty":"destino","tag":"#page > main > div.container.margin_30_5 > div > div > div.singlepost > ul:nth-child(3) > li:nth-child(4)","ret":"text","as":"single","x":860,"y":1200,"wires":[["df23a8c3996c1117"]]},{"id":"df23a8c3996c1117","type":"function","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"dados sensor","func":"let arrayRastreio = flow.get(\"rastreio\") || [];\narrayRastreio.push(msg.rastreio);\nflow.set(\"rastreio\", arrayRastreio);\n\n\nlet arrayObjeto = flow.get(\"nome_objeto\") || [];\narrayObjeto.push(msg.nome_objeto);\nflow.set(\"nome_objeto\", arrayObjeto);\n\nlet arrayNotificacao = flow.get(\"notificacao\") || [];\narrayNotificacao.push(msg.notificacao);\nflow.set(\"notificacao\", arrayNotificacao);\n\nmsg.entity_id = 'sensor.correios_' + msg.rastreio.toUpperCase()\nmsg.state =  msg.status\nmsg.attributes = {\n    rastreio: msg.rastreio,\n    status: msg.status,\n    notificacao: msg.notificacao,\n    data: msg.data,\n    local: msg.local,\n    destino: msg.destino,\n    friendly_name: msg.nome_objeto.toUpperCase() + ' - ' + msg.rastreio.toUpperCase(),\n}\nreturn msg\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1020,"y":1200,"wires":[["f131902ccbd0fe9e"]]},{"id":"97743002073c0dda","type":"debug","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Atualização","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1070,"y":420,"wires":[]},{"id":"d3c47e986ae2c3ec","type":"api-call-service","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"Limpar texto","server":"33803899.487d48","version":5,"debugenabled":false,"domain":"text","service":"set_value","areaId":[],"deviceId":[],"entityId":["text.correios_nome_objeto","text.correios_rastreio"],"data":"{\"value\":\"\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1110,"y":1020,"wires":[["bab36cc485f6623c","b8519a4afdd3a317"]]},{"id":"bb7ad635364d8f85","type":"debug","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"Select Rastreio","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":980,"y":720,"wires":[]},{"id":"fc7e36ea7d95d35d","type":"file","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"Criar/Atualizar rastreios.txt","filename":"/config/node-red/correios/rastreios.txt","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":620,"y":780,"wires":[["ae3248fb88ebafb3"]]},{"id":"85d7fbe8076d8971","type":"debug","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Correios Excluir","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":600,"y":1460,"wires":[]},{"id":"ae3248fb88ebafb3","type":"debug","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"Criar/Atualizar rastreios.txt","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":900,"y":780,"wires":[]},{"id":"da3f645f1b8d26d0","type":"debug","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Verificar status","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":540,"y":1260,"wires":[]},{"id":"683da37594845817","type":"ha-update-config","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"Select Rastreio","server":"33803899.487d48","entityConfig":"7b253b9f418ac1dc","version":0,"outputProperties":[],"x":780,"y":720,"wires":[["bb7ad635364d8f85","04fbd1ea0757f708"]]},{"id":"9ebb54c67629f053","type":"function","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"Atualizar Select","func":"if (msg.rastreio_count == 0){\n\nmsg.payload = {\"options\": [\" \"]}\n\n} else {\n// msg.payload = JSON.parse(msg.payload);\n// Função para ler msg.payload e juntar nome_objeto e rastreio separados por \" - \"\nfunction juntarNomeERastreio(msg) {\n    // Verificar se msg.payload é um array\n    if (Array.isArray(msg.payload)) {\n        const objetosConcatenados = msg.payload.map(objeto => `${objeto.nome_objeto} - ${objeto.rastreio}`);\n        return { options: objetosConcatenados };\n    } else {\n        return { options: [] }; // Retorna um array vazio se msg.payload não for um array\n    }\n}\n\n// Exemplo de utilização da função\nconst resultadoConcatenado = juntarNomeERastreio(msg);\n// console.log(resultadoConcatenado); // Saída do resultado concatenado\n\nmsg.rastreio_count = msg.payload.length;\nmsg.payload = resultadoConcatenado;\n    }\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":720,"wires":[["683da37594845817"]]},{"id":"f131902ccbd0fe9e","type":"function","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Criar sensor ","func":"function removerAcentosECedilhas(texto) {\n    var mapaAcentosHex = {\n        a: /[\\xE0-\\xE6]/g,\n        e: /[\\xE8-\\xEB]/g,\n        i: /[\\xEC-\\xEF]/g,\n        o: /[\\xF2-\\xF6]/g,\n        u: /[\\xF9-\\xFC]/g,\n        c: /\\xE7/g,\n        n: /\\xF1/g,\n    };\n\n    for (var letra in mapaAcentosHex) {\n        var expressaoRegular = mapaAcentosHex[letra];\n        texto = texto.replace(expressaoRegular, letra);\n    }\n\n    // Remover \"-\" e substituir por \"_\"\n    texto = texto.replace(/-/g, 'e');\n\n    texto = texto.replace(/\\|/g, 'e');\n\n    return texto;\n}\n\nvar textoComAcentosECedilhas = msg.entity_id;\nvar textoSemAcentosECedilhas = removerAcentosECedilhas(textoComAcentosECedilhas.toLowerCase());\n\nmsg.entity_id = textoSemAcentosECedilhas;\nmsg.payload = {\n    data: {\n        state: msg.state,\n        attributes: msg.attributes\n    }\n};\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":250,"y":1260,"wires":[["027b2e30872861f3"]]},{"id":"027b2e30872861f3","type":"ha-api","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"","server":"33803899.487d48","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":390,"y":1260,"wires":[["da3f645f1b8d26d0"]]},{"id":"07f03b0b1517a9dc","type":"ha-select","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Rastreio","version":1,"debugenabled":false,"inputs":1,"outputs":1,"entityConfig":"7b253b9f418ac1dc","mode":"get","value":"payload","valueType":"msg","outputProperties":[{"property":"rastreio","propertyType":"msg","value":"","valueType":"value"}],"x":340,"y":1380,"wires":[["bbb5b85ef360ead6"]]},{"id":"9eed622a5b173721","type":"function","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Correios Excluir","func":"// Função para procurar e apagar o valor de msg.rastreio no array msg.payload\nfunction procurarEApagarRastreio(msg) {\n    // Verificar se msg.rastreio está definido\n    if (msg.rastreio) {\n        // Extrair o código de rastreio de msg.rastreio\n        const codigoRastreioPartes = msg.rastreio.split('-');\n        const codigoRastreio = codigoRastreioPartes.pop().trim(); // Pegando o último elemento após o \"-\"\n        msg.entity_id = codigoRastreio;\n\n        // // Adicionar variáveis de depuração\n        // msg.codigoRastreioPartes = codigoRastreioPartes;\n        // msg.codigoRastreio = codigoRastreio;\n\n        // Converter msg.payload para JSON, se for uma string\n        if (typeof msg.payload === 'string') {\n            msg.payload = JSON.parse(msg.payload);\n        }\n\n        // Se msg.payload não for um array ou não existir, inicializar como um espaço em branco\n        if (!Array.isArray(msg.payload)) {\n            msg.payload = \" \";\n            msg.rastreio.count = 0; // Definir count como 0 se não houver objetos\n        } else {\n            // Verificar se msg.payload é um array com mais de um objeto\n            const indiceDoObjeto = msg.payload.findIndex(objeto => objeto.rastreio === codigoRastreio);\n            if (indiceDoObjeto !== -1) {\n                // Remove o objeto do array\n                msg.payload.splice(indiceDoObjeto, 1);\n\n                // Atualizar count com a quantidade restante de objetos\n                msg.rastreio_count = msg.payload.length;\n            }\n        }\n    } else {\n        console.error(\"Erro: msg.rastreio não está definido.\");\n    }\n\n    return msg; // Retorna a mensagem modificada\n}\n\n// Exemplo de utilização da função\nconst mensagemModificada = procurarEApagarRastreio(msg);\nreturn mensagemModificada;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":1380,"wires":[["9189ac6b2959bf4d","0f1466ceac244b09"]]},{"id":"bbb5b85ef360ead6","type":"file in","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Ler rastreios.txt","filename":"/config/node-red/correios/rastreios.txt","filenameType":"str","format":"utf8","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":500,"y":1380,"wires":[["9eed622a5b173721"]]},{"id":"9189ac6b2959bf4d","type":"link out","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"link in Atualizar Select e TXT","mode":"link","links":["7e18bb798c58efe3"],"x":825,"y":1380,"wires":[]},{"id":"7e18bb798c58efe3","type":"link in","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"link in Atualizar Select e TXT","links":["9189ac6b2959bf4d"],"x":355,"y":720,"wires":[["9ebb54c67629f053","fc7e36ea7d95d35d"]]},{"id":"55315b25d3bd2bc7","type":"http request","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Deleta sensor","method":"DELETE","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":420,"y":1460,"wires":[["85d7fbe8076d8971"]]},{"id":"0f1466ceac244b09","type":"function","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Filtro","func":"msg.headers = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/50.0.2661.102 Safari/537.36\",\n    \"Authorization\": \"Bearer \" + global.get(\"token\"),\n}\n\nmsg.url = 'http://' + global.get(\"ip\") + '/api/states/sensor.correios_' + msg.entity_id.toLowerCase();\n\n\nreturn msg\n","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":1460,"wires":[["55315b25d3bd2bc7"]]},{"id":"21c696455939a9c4","type":"inject","z":"a79c03486459c6c8","g":"c6f0e1c2d91567a6","name":"Digitar Chave token e IP","props":[],"repeat":"1800","crontab":"","once":true,"onceDelay":"2","topic":"","x":125,"y":100,"wires":[["0143491d19454720"]],"l":false},{"id":"0143491d19454720","type":"change","z":"a79c03486459c6c8","g":"c6f0e1c2d91567a6","name":"Digitar Chave token e IP","rules":[{"t":"set","p":"token","pt":"global","to":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3ZGM5YWFjZjBmMTI0NDExOGIxZDE2ZmIyNWQ2NDQ1MSIsImlhdCI6MTcyMDQ2MjI3NywiZXhwIjoyMDM1ODIyMjc3fQ.V3MO5RZN4VT8BlLzXIhkQ4hJVp4WoDV2ne8w3O31kAM","tot":"str"},{"t":"set","p":"ip","pt":"global","to":"192.168.0.186:8123","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":260,"y":100,"wires":[[]]},{"id":"e4541e788d014c8b","type":"comment","z":"a79c03486459c6c8","g":"c6f0e1c2d91567a6","name":"IP + Token","info":"","x":140,"y":60,"wires":[]},{"id":"7fd965e17382d880","type":"inject","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Atualizar de X em X min","props":[{"p":"payload"}],"repeat":"180","crontab":"","once":false,"onceDelay":"6","topic":"","payload":"Inject","payloadType":"str","x":210,"y":420,"wires":[["b9921cc413f1ede8","587f5b97bcedaed5"]]},{"id":"cf5331c8c6002452","type":"function","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Atualizar Sensores","func":"if (msg.rc.code == 0){\n// Converter msg.payload para JSON, se for uma string\nif (typeof msg.payload === 'string') {\n    msg.payload = JSON.parse(msg.payload);\n}\n// Verificar se msg.payload é um array\nif (Array.isArray(msg.payload)) {\n    // Percorrer os objetos em msg.payload\n    for (let i = 0; i < msg.payload.length; i++) {\n        // Criar uma nova mensagem com os valores do objeto atual\n        const novaMsg = {\n            rastreio: msg.payload[i].rastreio,\n            notificacao: msg.payload[i].notificacao,\n            nome_objeto: msg.payload[i].nome_objeto,\n            rastreio_count: msg.payload.length\n        };\n        \n        // msg.rastreio_count = msg.payload.length;\n\n        // Enviar a nova mensagem\n        node.send(novaMsg);\n    }\n} else {\n    // console.error(\"Erro: msg.payload não é um array.\");\n}\nreturn [null, msg]\n}","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":688.5713882446289,"y":480.00002098083496,"wires":[["51b72149e9653038"],[]]},{"id":"51b72149e9653038","type":"delay","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"","pauseType":"rate","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"3","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":898.5713882446289,"y":480.00002098083496,"wires":[["97743002073c0dda","6494e811268c1a12","a8690319ecb8b892"]]},{"id":"5df9ea2b2e73395f","type":"link in","z":"a79c03486459c6c8","g":"3f1acc5cba86dbe3","name":"Verificar status","links":["6494e811268c1a12"],"x":115,"y":1200,"wires":[["bab36cc485f6623c"]]},{"id":"6494e811268c1a12","type":"link out","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Verificar status","mode":"link","links":["5df9ea2b2e73395f"],"x":1053.571388244629,"y":480.00002098083496,"wires":[]},{"id":"8f100ae5af1baa9e","type":"server-events","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"HA Restart","server":"33803899.487d48","version":3,"exposeAsEntityConfig":"","eventType":"home_assistant_client","eventData":"","waitForRunning":true,"outputProperties":[{"property":"entity_id","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":140,"y":540,"wires":[["b67c28f2692bec5f"]]},{"id":"b67c28f2692bec5f","type":"switch","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"ready","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":270,"y":540,"wires":[["60850bf887b2bc0e"]]},{"id":"0c3ac19265a3db18","type":"server-state-changed","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Aviso mudança de status","server":"33803899.487d48","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.correios_","entityIdType":"regex","outputInitially":false,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":190,"y":260,"wires":[["a1def123038ad0e0"]]},{"id":"346d8557fdba1a04","type":"switch","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Notificacao = Sim / Saiu para entrega","property":"data.new_state.attributes.notificacao","propertyType":"msg","rules":[{"t":"eq","v":"Sim","vt":"str"},{"t":"eq","v":"Saiu para entrega","vt":"str"},{"t":"eq","v":"Objeto entregue","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":590,"y":260,"wires":[["0405a73dfc16925c"],["ab6cc7c258ac5e1e"],["eba6f26651d44ffb"]]},{"id":"cc3513557d3e7dbc","type":"link out","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Todas notificações","mode":"link","links":[],"x":995,"y":220,"wires":[]},{"id":"0405a73dfc16925c","type":"template","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Todas notificações","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"📦 {{{data.new_state.attributes.friendly_name}}} \n__\n\n{{{data.new_state.attributes.status}}}\n\n{{{data.new_state.attributes.data}}}\n\n{{{data.new_state.attributes.destino}}}\n\n{{{data.new_state.attributes.local}}}\n\n\n","output":"str","x":870,"y":220,"wires":[["cc3513557d3e7dbc"]]},{"id":"ab6cc7c258ac5e1e","type":"switch","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"= Objeto saiu para entrega ao destinatário","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"['Objeto saiu para entrega ao destinatário']","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":940,"y":260,"wires":[["99b9c74f5e97ef4b"]]},{"id":"99b9c74f5e97ef4b","type":"template","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Saiu para entrega","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"📦 {{{data.new_state.attributes.friendly_name}}} \n__\n\n{{{data.new_state.attributes.status}}}\n\n{{{data.new_state.attributes.data}}}\n\n{{{data.new_state.attributes.destino}}}\n\n{{{data.new_state.attributes.local}}}\n\n\n","output":"str","x":1230,"y":260,"wires":[["622eb83b073642f7"]]},{"id":"a1def123038ad0e0","type":"function","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"!= Null","func":"if (msg.data.new_state.attributes.data.length === 0) {\n    msg.data.new_state.attributes.data[0] = null;\n    return [msg, null];\n}\nelse {\n    return [null, msg];\n}\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":260,"wires":[[],["346d8557fdba1a04"]]},{"id":"eba6f26651d44ffb","type":"switch","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"= Objeto entregue ao destinatário","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"['Objeto entregue ao destinatário']","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":920,"y":300,"wires":[["847d72c30481827f"]]},{"id":"847d72c30481827f","type":"template","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Objeto entregue","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"📦 {{{data.new_state.attributes.friendly_name}}} \n__\n\n{{{data.new_state.attributes.status}}}\n\n{{{data.new_state.attributes.data}}}\n\n{{{data.new_state.attributes.destino}}}\n\n{{{data.new_state.attributes.local}}}\n\n\n","output":"str","x":1220,"y":300,"wires":[["e74ed48ae4640a18"]]},{"id":"622eb83b073642f7","type":"link out","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Saiu para entrega","mode":"link","links":[],"x":1355,"y":260,"wires":[]},{"id":"e74ed48ae4640a18","type":"link out","z":"a79c03486459c6c8","g":"214d29bdd74385e1","name":"Objeto entregue","mode":"link","links":[],"x":1355,"y":300,"wires":[]},{"id":"04fbd1ea0757f708","type":"ha-get-entities","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"","server":"33803899.487d48","version":1,"rules":[{"property":"entity_id","logic":"starts_with","value":"sensor.correios_","valueType":"str"}],"outputType":"array","outputEmptyResults":true,"outputLocationType":"msg","outputLocation":"payload","outputResultsCount":1,"x":1068.571388244629,"y":540.000020980835,"wires":[["96abe99b2cf42cbf","64dce67d84eb7967","e61a0c7c2f0ea6af","7ec9f299b1ad8ff5"]]},{"id":"96abe99b2cf42cbf","type":"function","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Saiu para entrega","func":"function verificarEntrega(array) {\n    // const targetPhrase = \"Objeto em transferência\";\n    const targetPhrase = \"Objeto saiu para entrega\";\n\n    // Array para armazenar as informações de friendly_name dos objetos que contêm a frase desejada\n    const nomesEntrega = [];\n\n    // Iterar sobre cada objeto no array\n    array.forEach(objeto => {\n        // Verificar se o estado do objeto contém a frase desejada\n        if (objeto.state.includes(targetPhrase)) {\n            // Se contiver, adicionar o nome friendly_name do objeto ao array de nomesEntrega\n            nomesEntrega.push(objeto.attributes.friendly_name);\n        }\n    });\n\n    return nomesEntrega.join(', '); // Convertendo o array para texto separando com \",\"\n}\n\n// Seu array de objetos\nconst arrayObjetos = msg.payload;\n\n// Chamada da função para verificar os objetos de entrega e atribuir o resultado ao msg.payload\nmsg.payload = verificarEntrega(arrayObjetos);\n\n// Verificar se o array de nomesEntrega está vazio e atribuir uma mensagem indicando isso ao msg.payload, se for o caso\nif (msg.payload.length === 0) {\n    msg.payload = \"Nenhuma entrega\";\n    msg.objetos = 0;\n} else {\n    // Adicionar o número de objetos de entrega a msg.objetos\n    msg.objetos = msg.payload.split(', ').length;\n}\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1291.428611755371,"y":479.99997901916504,"wires":[["fee2a02a9187719b"]]},{"id":"fee2a02a9187719b","type":"ha-sensor","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Saiu para entrega","entityConfig":"a6b65574343e4d1e","version":0,"state":"payload","stateType":"msg","attributes":[{"property":"objetos","value":"objetos","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1510,"y":480,"wires":[["e4c9dce3eb69949a"]]},{"id":"64dce67d84eb7967","type":"function","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Distribuição Contagem","func":"function verificarEntrega(array) {\n    // const targetPhrase = \"Objeto em transferência\";\n    // const targetPhrase = \"Objeto saiu para entrega\";\n    // const targetPhrase = \"para Unidade de Distribuição, CONTAGEM\";\n    const targetPhrase = \"Destino: Unidade de Distribuição - Contagem / MG\";\n    // const targetPhrase = \"Objeto em transferência - por favor aguarde\";\n\n    // Array para armazenar as informações de friendly_name dos objetos que contêm a frase desejada\n    const nomesEntrega = [];\n\n    // Iterar sobre cada objeto no array\n    array.forEach(objeto => {\n        // Verificar se o estado do objeto contém a frase desejada\n        if (objeto.attributes.destino.includes(targetPhrase)) {\n        // if (objeto.state.includes(targetPhrase)) {\n            // Se contiver, adicionar o nome friendly_name do objeto ao array de nomesEntrega\n            nomesEntrega.push(objeto.attributes.friendly_name);\n        }\n    });\n\n    return nomesEntrega.join(', '); // Convertendo o array para texto separando com \",\"\n}\n\n// Seu array de objetos\nconst arrayObjetos = msg.payload;\n\n// Chamada da função para verificar os objetos de entrega e atribuir o resultado ao msg.payload\nmsg.payload = verificarEntrega(arrayObjetos);\n\n// Verificar se o array de nomesEntrega está vazio e atribuir uma mensagem indicando isso ao msg.payload, se for o caso\nif (msg.payload.length === 0) {\n    msg.payload = \"Nenhum objeto em Contagem\";\n    msg.objetos = 0;\n} else {\n    // Adicionar o número de objetos de entrega a msg.objetos\n    msg.objetos = msg.payload.split(', ').length;\n}\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1301.428611755371,"y":539.999979019165,"wires":[["4fccdd304eb40de2"]]},{"id":"e4c9dce3eb69949a","type":"debug","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Saiu entrega / Chegou na cidade","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1800,"y":540,"wires":[]},{"id":"4fccdd304eb40de2","type":"ha-sensor","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Distribuição Contagem","entityConfig":"af434e71709104d6","version":0,"state":"payload","stateType":"msg","attributes":[{"property":"objetos","value":"objetos","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1520,"y":540,"wires":[["e4c9dce3eb69949a"]]},{"id":"a8690319ecb8b892","type":"trigger","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Watchdog 4s","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"4","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":2,"x":888.5713882446289,"y":540.000020980835,"wires":[[],["04fbd1ea0757f708"]]},{"id":"f213d423e8295017","type":"function","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Atualizar Select","func":"if (msg.rc.code == 0){\n// Converter msg.payload para JSON, se for uma string\nif (typeof msg.payload === 'string') {\n    msg.payload = JSON.parse(msg.payload);\n}\n\n// Verificar se msg.payload é um array\nif (Array.isArray(msg.payload)) {\n    // Mapear o array original para criar o novo array com as concatenações\n    const novoArray = msg.payload.map(objeto => `${objeto.nome_objeto} - ${objeto.rastreio}`);\n\n    // Atribuir o novo array a msg.payload\n    msg.payload = { options: novoArray };\n} else {\n    console.error(\"Erro: msg.payload não é um array.\");\n}\n\nreturn msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":678.5713882446289,"y":540.000020980835,"wires":[["683da37594845817"]]},{"id":"24830b2b312f08b1","type":"ha-update-config","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Select Notificações","server":"33803899.487d48","entityConfig":"affcb1b3ab97b12c","version":0,"outputProperties":[],"x":650,"y":420,"wires":[["4c0f5ecf0a06e111","04fbd1ea0757f708"]]},{"id":"587f5b97bcedaed5","type":"change","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"options\": [\"Sim\",\"Não\"]}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":420,"wires":[["24830b2b312f08b1"]]},{"id":"4c0f5ecf0a06e111","type":"debug","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Select Notificações","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":870,"y":420,"wires":[]},{"id":"b9921cc413f1ede8","type":"exec","z":"a79c03486459c6c8","g":"94fa28ae0e629086","command":"cat /config/node-red/correios/rastreios.txt","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"rastreios.txt existe?","x":470,"y":480,"wires":[["cf5331c8c6002452","f213d423e8295017"],[],[]]},{"id":"b8519a4afdd3a317","type":"exec","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","command":"cat /config/node-red/correios/rastreios.txt","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"rastreios.txt existe?","x":190,"y":780,"wires":[["0f92785d5aa6274a"],[],[]]},{"id":"0f92785d5aa6274a","type":"function","z":"a79c03486459c6c8","g":"f2c90c6b2db09388","name":"function 2","func":"if (msg.rc.code == 0){\n\n    // Converter msg.payload para um array, se for uma string\n    if (typeof msg.payload === 'string') {\n        msg.payload = JSON.parse(msg.payload);\n    }\n\n// Função para verificar se o valor de msg.rastreio está presente no array\nfunction verificarEAtualizarOuAdicionar(msg) {\n    let rastreioPresente = false;\n\n    // Inicializa msg.payload como um array, se ainda não for\n    if (!Array.isArray(msg.payload)) {\n        msg.payload = [];\n    }\n\n    // Verificar se msg.payload é um array e se contém o valor de msg.rastreio\n    if (Array.isArray(msg.payload)) {\n        for (let i = 0; i < msg.payload.length; i++) {\n            if (msg.payload[i].rastreio === msg.rastreio) {\n                // Se o valor de msg.rastreio estiver presente, atualize o nome_objeto\n                msg.payload[i].nome_objeto = msg.nome_objeto.toUpperCase();\n                rastreioPresente = true;\n                break; // Interrompe o loop se o valor for encontrado\n            }\n        }\n    }\n\n    // Se o valor de msg.rastreio não estiver presente, adicione um novo objeto ao array\n    if (!rastreioPresente) {\n        const novoObjeto = {\n            rastreio: msg.rastreio,\n            notificacao: msg.notificacao,\n            nome_objeto: msg.nome_objeto.toUpperCase() // Convertendo para letras maiúsculas\n        };\n        msg.payload.push(novoObjeto);\n    }\n\n    return msg;\n}\n\n// Exemplo de utilização da função\nconst mensagemModificada = verificarEAtualizarOuAdicionar(msg);\nreturn mensagemModificada;\n\n\n\n\n    // return [msg, null];\n\n\n    } else {\n\n// Função para adicionar um novo objeto ao array\nfunction adicionarObjeto(msg) {\n    const objeto = {\n        rastreio: msg.rastreio,\n        notificacao: msg.notificacao,\n        nome_objeto: msg.nome_objeto.toUpperCase() // Convertendo para letras maiúsculas\n    };\n    msg.rastreio_count = msg.payload.length;\n    return objeto;\n}\n\n// Exemplo de adição de objetos ao array\nconst novoObjeto = adicionarObjeto(msg);\nmsg.payload = [novoObjeto]; // Coloca o objeto em um array, caso seja necessário mais de um objeto\nmsg.rastreio_count = 1;\n\n    return msg;\n\n    // return [null, msg]; \n\n\n    }\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":780,"wires":[["9ebb54c67629f053","fc7e36ea7d95d35d"]]},{"id":"e2035d886fc674b7","type":"inject","z":"a79c03486459c6c8","d":true,"g":"f2c90c6b2db09388","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":150,"y":720,"wires":[["b8519a4afdd3a317"]]},{"id":"60850bf887b2bc0e","type":"delay","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":140,"y":480,"wires":[["587f5b97bcedaed5","b9921cc413f1ede8"]]},{"id":"c30428f6f697958a","type":"function","z":"a79c03486459c6c8","d":true,"g":"94fa28ae0e629086","name":"Sensor orfão","func":"// Verifica se msg.payload e msg.rastreio_count estão definidos\nif (typeof msg.payload !== 'undefined' && typeof msg.rastreio_count !== 'undefined') {\n    msg.lenght = msg.payload.length;\n    if (msg.lenght == msg.rastreio_count) {\n        msg.teste = \"iguais\"\n        // return msg;\n\n    } else {\n        msg.teste = \"diferentes\"\n        if (typeof msg.payload !== 'undefined') {\n            msg.payload.forEach(function (item) {\n                if (item.entity_id) {\n                    var entityId = item.entity_id.replace('sensor.correios_', '');\n                    var newMsg = {\n                        entity_id: entityId\n                    };\n                    node.send(newMsg);\n                }\n            });\n        }\n    }\n} //else {\n    // msg.teste = \"Não definidas\"\n\n    // return msg; // Ou outra ação desejada se uma das propriedades não estiver definida\n    // return null; // Ou outra ação desejada se uma das propriedades não estiver definida\n//}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1450,"y":420,"wires":[["32636e87678747f6"]]},{"id":"32636e87678747f6","type":"delay","z":"a79c03486459c6c8","d":true,"g":"94fa28ae0e629086","name":"","pauseType":"rate","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1610,"y":420,"wires":[["b153f5e9eaef8ecb","ddeb7971ea9d1c0d"]]},{"id":"b153f5e9eaef8ecb","type":"trigger","z":"a79c03486459c6c8","d":true,"g":"94fa28ae0e629086","name":"Watchdog 2s","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"2","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":2,"x":1830,"y":420,"wires":[[],["b9921cc413f1ede8"]]},{"id":"ddeb7971ea9d1c0d","type":"link out","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Excluir sensores orfãos","mode":"link","links":["956317a64a3970f7"],"x":1715,"y":420,"wires":[]},{"id":"956317a64a3970f7","type":"link in","z":"a79c03486459c6c8","g":"1b3fae49edc700db","name":"Excluir sensores orfãos","links":["ddeb7971ea9d1c0d"],"x":115,"y":1460,"wires":[["0f1466ceac244b09"]]},{"id":"e61a0c7c2f0ea6af","type":"trigger","z":"a79c03486459c6c8","d":true,"g":"94fa28ae0e629086","name":"Watchdog 30s","op1":"","op2":"","op1type":"nul","op2type":"pay","duration":"30","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":2,"x":1280,"y":420,"wires":[[],["c30428f6f697958a"]]},{"id":"5bd760b668a3ba07","type":"api-current-state","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"text.correios_rastreio","server":"33803899.487d48","version":3,"outputs":1,"halt_if":"","halt_if_type":"re","halt_if_compare":"is","entity_id":"text.correios_rastreio","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"rastreio","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":380,"y":1020,"wires":[["6566bdf22e4ef401"]]},{"id":"6566bdf22e4ef401","type":"api-current-state","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"text.correios_nome_objeto","server":"33803899.487d48","version":3,"outputs":1,"halt_if":"","halt_if_type":"re","halt_if_compare":"is","entity_id":"text.correios_nome_objeto","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"nome_objeto","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":620,"y":1020,"wires":[["9a8cac12b789e0d4"]]},{"id":"9a8cac12b789e0d4","type":"api-current-state","z":"a79c03486459c6c8","g":"0a05b3e2b2f5d771","name":"select.correios_notificacao","server":"33803899.487d48","version":3,"outputs":1,"halt_if":"","halt_if_type":"re","halt_if_compare":"is","entity_id":"select.correios_notificacao","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"notificacao","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":880,"y":1020,"wires":[["d3c47e986ae2c3ec"]]},{"id":"e2400ff4e6403679","type":"telegram receiver","z":"a79c03486459c6c8","d":true,"g":"d5a56adb75958012","name":"Correios","bot":"58b3f415bf711c2f","saveDataDir":"","filterCommands":false,"x":180,"y":940,"wires":[["de3eaa1736d4fced"],[]]},{"id":"779e5eb7b4da8c63","type":"debug","z":"a79c03486459c6c8","d":true,"g":"d5a56adb75958012","name":"debug 261","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":940,"wires":[]},{"id":"de3eaa1736d4fced","type":"function","z":"a79c03486459c6c8","d":true,"g":"d5a56adb75958012","name":"Telegram","func":"// Expressão regular para o padrão em qualquer lugar do texto\nconst regex = /\\b[A-Za-z]{2}\\d{9}[A-Za-z]{2}\\b/;\n\n// Função para capitalizar a primeira letra de uma string\nfunction capitalizeFirstLetter(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n// Verificação se msg.payload.content contém o padrão\nif (msg.payload && msg.payload.content && regex.test(msg.payload.content)) {\n  // msg.teste = \"ok\";\n\n  // Dividindo o texto pelas barras (\"/\")\n  const partes = msg.payload.content.split(\"/\");\n\n  // Salvar as partes nas propriedades específicas\n  if (partes.length >= 3) {\n    msg.nome_objeto = partes[0].trim();\n    msg.rastreio = partes[1].trim();\n    msg.notificacao = capitalizeFirstLetter(partes[2].trim());\n    return msg;\n\n  } \n} else {\n  // msg.teste = \"não ok\";\n}\n\n// return msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":940,"wires":[["779e5eb7b4da8c63","d3c47e986ae2c3ec"]]},{"id":"7ec9f299b1ad8ff5","type":"function","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Tributado","func":"function verificarEntrega(array) {\n    // const targetPhrase = \"Objeto em transferência\";\n    // const targetPhrase = \"Objeto saiu para entrega\";\n    // const targetPhrase = \"para Unidade de Distribuição, CONTAGEM\";\n    // const targetPhrase = \"Objeto em transferência - por favor aguarde\";\n    const targetPhrase = \"Fiscalização aduaneira concluída - aguardando pagamento\";\n\n    // Array para armazenar as informações de friendly_name dos objetos que contêm a frase desejada\n    const nomesEntrega = [];\n\n    // Iterar sobre cada objeto no array\n    array.forEach(objeto => {\n        // Verificar se o estado do objeto contém a frase desejada\n        if (objeto.state.includes(targetPhrase)) {\n            // Se contiver, adicionar o nome friendly_name do objeto ao array de nomesEntrega\n            nomesEntrega.push(objeto.attributes.friendly_name);\n        }\n    });\n\n    return nomesEntrega.join(', '); // Convertendo o array para texto separando com \",\"\n}\n\n// Seu array de objetos\nconst arrayObjetos = msg.payload;\n\n// Chamada da função para verificar os objetos de entrega e atribuir o resultado ao msg.payload\nmsg.payload = verificarEntrega(arrayObjetos);\n\n// Verificar se o array de nomesEntrega está vazio e atribuir uma mensagem indicando isso ao msg.payload, se for o caso\nif (msg.payload.length === 0) {\n    msg.payload = \"Nenhum objeto tributado\";\n    msg.objetos = 0;\n} else {\n    // Adicionar o número de objetos de entrega a msg.objetos\n    msg.objetos = msg.payload.split(', ').length;\n}\n\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1260,"y":600,"wires":[["64a675dc6850b375"]]},{"id":"64a675dc6850b375","type":"ha-sensor","z":"a79c03486459c6c8","g":"94fa28ae0e629086","name":"Compras Tributadas","entityConfig":"e1a646cb6ccb8cec","version":0,"state":"payload","stateType":"msg","attributes":[{"property":"objetos","value":"objetos","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":1520,"y":600,"wires":[["e4c9dce3eb69949a"]]},{"id":"34df51b33a4efd6f","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Correios Excluir","version":"6","entityType":"button","haConfig":[{"property":"name","value":"Correios Excluir"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"06032357ce6a46e1","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Correios Salvar","version":"6","entityType":"button","haConfig":[{"property":"name","value":"Correios Salvar"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""}],"resend":false,"debugEnabled":false},{"id":"6b6144652fd3f35e","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Correios Rastreio","version":"6","entityType":"text","haConfig":[{"property":"name","value":"Correios Rastreio"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"mode","value":"text"},{"property":"min_length","value":""},{"property":"max_length","value":""},{"property":"pattern","value":""}],"resend":false,"debugEnabled":false},{"id":"affcb1b3ab97b12c","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Correios Notificação","version":"6","entityType":"select","haConfig":[{"property":"name","value":"Correios Notificação"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"options","value":["option1"]}],"resend":false,"debugEnabled":false},{"id":"f960d0b45b5a3d96","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Correios Nome Objeto","version":"6","entityType":"text","haConfig":[{"property":"name","value":"Correios Nome Objeto"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"mode","value":"text"},{"property":"min_length","value":""},{"property":"max_length","value":""},{"property":"pattern","value":""}],"resend":false,"debugEnabled":false},{"id":"33803899.487d48","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"7b253b9f418ac1dc","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Rastreio","version":"6","entityType":"select","haConfig":[{"property":"name","value":"Rastreio"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"options","value":[" "]}],"resend":false,"debugEnabled":false},{"id":"a6b65574343e4d1e","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Saiu para entrega","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Saiu para entrega"},{"property":"icon","value":"mdi:truck-outline"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"af434e71709104d6","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Distribuição Contagem","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Distribuição Contagem"},{"property":"icon","value":"mdi:warehouse"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"58b3f415bf711c2f","type":"telegram bot","z":"a79c03486459c6c8","botname":"Correios","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksprotocol":"socks5","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"e1a646cb6ccb8cec","type":"ha-entity-config","z":"a79c03486459c6c8","server":"33803899.487d48","deviceConfig":"9fb062e6a3925fda","name":"Compras Tributadas","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Compras Tributadas"},{"property":"icon","value":"mdi:currency-usd"},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"9fb062e6a3925fda","type":"ha-device-config","name":"Correios","hwVersion":"","manufacturer":"Node-RED","model":"","swVersion":""}]

Card 1:

type: vertical-stack
cards:
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        primary: Novo
        badge_icon: mdi:plus
        secondary: Rastreamento
        icon: mdi:package-variant-closed-plus
        fill_container: true
        layout: horizontal
        icon_color: green
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Adicionar Rastreio
              right_button: Salvar
              right_button_action:
                service: button.press
                data:
                  entity_id: button.correios_salvar
              content:
                type: entities
                entities:
                  - entity: select.correios_notificacao
                    name: Deseja receber notificações?
                    icon: mdi:bell-ring
                  - entity: text.correios_rastreio
                    name: Qual o Código de Rastreamento?
                    icon: mdi:package-variant-closed
                  - entity: text.correios_nome_objeto
                    name: Qual nome do Objeto?
                    icon: mdi:form-textbox
        entity: text.correios_rastreio
        card_mod:
          style: |
            ha-card { 
              --ha-card-background: black;
              --card-primary-color: green
            }
      - type: custom:mushroom-template-card
        primary: Excluir
        secondary: Rastreamento
        icon: mdi:package-variant-closed-remove
        icon_color: red
        text_color: red
        badge_icon: mdi:delete
        layout: horizontal
        multiline_secondary: false
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Excluir Rastreio
              right_button: Excluir
              right_button_action:
                service: button.press
                data:
                  entity_id: button.correios_excluir
              content:
                type: entities
                entities:
                  - entity: select.rastreio
                    name: Qual o Código de Rastreamento?
                    icon: mdi:package-variant-closed
                card_mod:
                  style: |
                    ha-card { 
                      height: 200px !important;
                    } 
        card_mod:
          style: |
            ha-card { 
              --ha-card-background: black;
              --card-primary-color: red
            }  
  - type: custom:button-card
    layout: icon_name
    name: Objetos Cadastrados
    icon: mdi:package-variant-closed
    styles:
      grid:
        - grid-template-areas: '"n i"'
        - grid-template-columns: 1fr 20%
      icon:
        - align-self: end
        - color: var(--text-primary-color)
        - height: 35px
      card:
        - padding: 4px
        - height: 40px
        - background: var(--primary-color)
      name:
        - color: var(--text-primary-color)
        - justify-self: start
        - padding-left: 10%
        - font-weight: 400
        - font-size: 18px
  - type: custom:auto-entities
    card:
      type: grid
      columns: 1
      square: false
    card_param: cards
    show_empty: false
    filter:
      include:
        - entity_id: sensor.correios_*
          options:
            type: custom:mushroom-template-card
            card_mod:
              style: |
                ha-card { 
                  --ha-card-background: black;
                  color: white;
                }
            entity: this.entity_id
            primary: '{{ state_attr(''this.entity_id'', ''friendly_name'') }}'
            secondary: >-
              {% if states['this.entity_id'].state == '[]' %} Objeto aguardando
              postagem nos Correios.   {% elif states['this.entity_id'].state ==
              "[{}]" %}Sincronizando com sistema dos correios  {% else
              %}              {{ state_attr('this.entity_id', 'status')|join()
              }}

              {{ state_attr('this.entity_id', 'data')|join() }}

              {{ state_attr('this.entity_id', 'local')|join() }}

              {{ state_attr('this.entity_id', 'destino')|join() }}

              {% endif %}
            icon: >-
              {% if states['this.entity_id'].state == "['Objeto entregue ao
              destinatário']" %}
                mdi:package-variant-closed-check
              {% elif states['this.entity_id'].state == "['Objeto entregue ao
              remetente']" %}
                mdi:package-variant-closed-check
              {% elif states['this.entity_id'].state == "['Objeto postado']" %}
                mdi:store-plus
              {% elif states['this.entity_id'].state == "[]" %}
                mdi:package-variant-closed-remove
              {% elif states['this.entity_id'].state == "[{}]" %}
                mdi:refresh
              {% elif states['this.entity_id'].state == "['Objeto saiu para
              entrega ao destinatário']" %}
                mdi:human-dolly
              {% elif states['this.entity_id'].state == "['Objeto está em rota
              de entrega']" %}
                mdi:human-dolly
              {% elif states['this.entity_id'].state == "['Objeto recebido pelos
              Correios do Brasil']" %}
                mdi:flag-variant
              {% elif states['this.entity_id'].state == "['Objeto em trânsito -
              por favor aguarde']" %}
                mdi:truck
              {% elif states['this.entity_id'].state == "['Objeto em
              transferência - por favor aguarde']" %}
                mdi:truck
              {% elif states['this.entity_id'].state == "['Informações
              eletrônicas enviadas para análise da autoridade aduaneira']" %}
                mdi:file-document-outline
              {% elif states['this.entity_id'].state == "['Análise concluída -
              importação autorizada']" %}
                mdi:file-document-outline
              {% elif states['this.entity_id'].state == "['Fiscalização
              aduaneira concluída - aguardando pagamento']" %}
                mdi:currency-usd
              {% else %}
                mdi:package-variant-closed
              {% endif %}
            icon_color: >-
              {% if states['this.entity_id'].state == "['Objeto entregue ao
              destinatário']" %}
                green
              {% elif states['this.entity_id'].state == "[]" %}
                red
              {% elif states['this.entity_id'].state == "[{}]" %}
                red
              {% elif states['this.entity_id'].state == "['Objeto saiu para
              entrega ao destinatário']" %}
                orange
              {% elif states['this.entity_id'].state == "['Objeto está em rota
              de entrega']" %}
                orange
              {% elif states['this.entity_id'].state == "['Objeto entregue ao
              remetente']" %}
                red
              {% elif states['this.entity_id'].state == "['Informações
              eletrônicas enviadas para análise da autoridade aduaneira']" %}
                blue
              {% elif states['this.entity_id'].state == "['Análise concluída -
              importação autorizada']" %}
                blue
              {% elif states['this.entity_id'].state == "['Fiscalização
              aduaneira concluída - aguardando pagamento']" %}
                red
              {% else %}
                yellow
              {% endif %}
            multiline_secondary: true
            badge_icon: >-
              {% if states['this.entity_id'].state == "['Objeto entregue ao
              destinatário']" %}
                mdi:check-bold
              {% elif states['this.entity_id'].state == "['Objeto postado']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Objeto entregue ao
              remetente']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "[]" %}
                mdi:alert-box
              {% elif states['this.entity_id'].state == "['Objeto saiu para
              entrega ao destinatário']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Objeto está em rota
              de entrega']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Objeto recebido pelos
              Correios do Brasil']" %}
                mdi:map-marker
              {% elif states['this.entity_id'].state == "['Objeto em trânsito -
              por favor aguarde']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Objeto em
              transferência - por favor aguarde']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Informações
              eletrônicas enviadas para análise da autoridade aduaneira']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Análise concluída -
              importação autorizada']" %}
                mdi:share
              {% elif states['this.entity_id'].state == "['Fiscalização
              aduaneira concluída - aguardando pagamento']" %}
                mdi:currency-usd
              {% else %}
                mdi:map-marker
              {% endif %}
            badge_color: >-
              {% if states['this.entity_id'].state == "['Objeto entregue ao
              destinatário']" %}
                green
              {% elif states['this.entity_id'].state == "['Objeto entregue ao
              remetente']" %}
                red
              {% elif states['this.entity_id'].state != "['Objeto entregue ao
              destinatário']" %}
                grey
              {% endif %}
            tap_action:
              action: more-info
            order_by:
              last_changed: asc
    sort:
      method: last_changed
      count: 10
      reverse: true`Texto pré-formatado`

Card 2:

type: entities
entities:
  - entity: sensor.saiu_para_entrega
  - entity: sensor.distribuicao_contagem
  - entity: sensor.compras_tributadas