Ajuda Geolocalização pelo telegram

Olá pessoal,
Preciso de ajuda com a seguinte questão:
Tentando enviar a geolocalização de um device pelo telegram/Node red. Separei o fluxo em duas partes com o nó switch: quando está numa zona especifica ( envia a mensagem que está no local, tudo certinho) e aa outra saída pra quando não for a zona, me evniar a localização, endereço mesmo!
encontro a informação no nó de current state e tal, mas quando mando injetar (payload) na mensagem do telegram dá erro!
Seguem as imagens… Alguém pode me ajudar com isso? como inserir esse endereço na mensagem?
image


1 curtida

são aquelas setas ao longo do payload que estão fazendo dá erro na mensagem… significa que a mensagem possui um enter no meio…
o nodemerd não as reconhece… também tive o mesmo problema aqui com um scrape, mano, mas não consegui resolver

1 curtida

Enquanto não descubro uma solução mais simples, o que consegui foi pegar cada parte do endereço nos atributos (com um nó Change) e juntar (com um nó Join) novamente e gerar o endereço para enviar. Tá dando certo… mas gostaria que fosse uma mensagem com geolocalização, ou até com o mapa já. Segue como estou fazendo…
Separo os atributos:
image
Configuração:
image
Junto novamente as informações:


Resultado:
image

Caro @LeandroIssa, você tem alguma solução pra me indicar? De como enviar a geolocalização pelo telegram. A lógica é: quando a localização não for uma zona cadastrada, vai retornar com a geolocalização. Pra acionar o fluxo vou usar um comando no telegram mesmo, tipo: Onde está fulano? se a locaização não for nem Home e nem School, me devolve a localização, sacou?
Agradeço muito…

Oi Nelson, não tenho ideia de como te ajudar pq nunca fiz algo assim

2 curtidas

Pessoal,
Consegui fazer! @fab_hass e @LeandroIssa.
Já havia postado acima a solução para envio do endereço como string. ( Não sei se existe outra forma mais fácil, mas fazendo assim tá funcionando.)
Para envio da localização, segue a lógica da “gambiarra” abaixo:

Busco a localização do dispositivo… Se a localização for uma zona cadastrada, notifica com o nome da zona. Caso não seja uma localização conhecida aí faço o seguinte:

  1. Busco novamente a localização;

  2. Com um node change, pego a latitude e longitude:
    image
    image

  3. com node join, monto uma array com a duas informações:
    image

  4. com um node function, monto a payload da forma que o node paylod do telegram pede na documentação…
    image

  5. node payload do telegram com as configurações abaixo. (Method = sendLocation)
    image

Aqui tá funcionando perfeitamente! Pode, e deve, haver uma maneira mais limpa e técnica de fazer, mas com meu limitado conhecimento da ferramenta foi isso que deu pra fazer!
Aceito sugestões de melhorias!!!

2 curtidas

Massa demais, man… nada te para agora hah tmj :call_me_hand:

1 curtida

segue fluxo pra que tiver interesse:

[
    {
        "id": "b63906f5c47c4edb",
        "type": "subflow",
        "name": "Busca Localização",
        "info": "",
        "category": "",
        "in": [
            {
                "x": 100,
                "y": 180,
                "wires": [
                    {
                        "id": "8f30428a44569739"
                    },
                    {
                        "id": "2048d5fde2bbf7af"
                    }
                ]
            }
        ],
        "out": [
            {
                "x": 860,
                "y": 180,
                "wires": [
                    {
                        "id": "55a7868beb798714",
                        "port": 0
                    }
                ]
            }
        ],
        "env": [],
        "meta": {},
        "color": "#DDAA99"
    },
    {
        "id": "8f30428a44569739",
        "type": "change",
        "z": "b63906f5c47c4edb",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes.Location[0]",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 280,
        "y": 140,
        "wires": [
            [
                "abb75db585b84867"
            ]
        ]
    },
    {
        "id": "2048d5fde2bbf7af",
        "type": "change",
        "z": "b63906f5c47c4edb",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes.Location[1]",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 280,
        "y": 220,
        "wires": [
            [
                "abb75db585b84867"
            ]
        ]
    },
    {
        "id": "abb75db585b84867",
        "type": "join",
        "z": "b63906f5c47c4edb",
        "name": "Monta mensagem",
        "mode": "custom",
        "build": "array",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 510,
        "y": 180,
        "wires": [
            [
                "55a7868beb798714"
            ]
        ]
    },
    {
        "id": "55a7868beb798714",
        "type": "function",
        "z": "b63906f5c47c4edb",
        "name": "",
        "func": "var lat = msg.payload[0];\nvar long = msg.payload[1];\n\nmsg.payload = {\n\"chatId\": 122222222222,\n\"latitude\": lat,\n\"longitude\": long,\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 720,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "41467cf2a79e6fdb",
        "type": "subflow",
        "name": "Buscar endereço",
        "info": "",
        "category": "",
        "in": [
            {
                "x": 60,
                "y": 280,
                "wires": [
                    {
                        "id": "4d8e1087e0c9783e"
                    },
                    {
                        "id": "cdd5021e906454b4"
                    },
                    {
                        "id": "cd3409065423cafd"
                    },
                    {
                        "id": "a80449500bd9fae2"
                    },
                    {
                        "id": "bac337edb9f478d5"
                    }
                ]
            }
        ],
        "out": [
            {
                "x": 780,
                "y": 260,
                "wires": [
                    {
                        "id": "0dcbd22e48fea83b",
                        "port": 0
                    }
                ]
            }
        ],
        "env": [],
        "meta": {},
        "color": "#DDAA99"
    },
    {
        "id": "4d8e1087e0c9783e",
        "type": "change",
        "z": "41467cf2a79e6fdb",
        "name": "rua",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes.Name",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 230,
        "y": 180,
        "wires": [
            [
                "76c4645796e5d7da"
            ]
        ]
    },
    {
        "id": "cdd5021e906454b4",
        "type": "change",
        "z": "41467cf2a79e6fdb",
        "name": "Bairro",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes[\"Sub Locality\"]",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 230,
        "y": 220,
        "wires": [
            [
                "76c4645796e5d7da"
            ]
        ]
    },
    {
        "id": "cd3409065423cafd",
        "type": "change",
        "z": "41467cf2a79e6fdb",
        "name": "Cidade",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes.Locality",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 240,
        "y": 260,
        "wires": [
            [
                "76c4645796e5d7da"
            ]
        ]
    },
    {
        "id": "a80449500bd9fae2",
        "type": "change",
        "z": "41467cf2a79e6fdb",
        "name": "Estado",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes[\"Administrative Area\"]",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 240,
        "y": 300,
        "wires": [
            [
                "76c4645796e5d7da"
            ]
        ]
    },
    {
        "id": "bac337edb9f478d5",
        "type": "change",
        "z": "41467cf2a79e6fdb",
        "name": "país",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "data.attributes.Country",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 230,
        "y": 340,
        "wires": [
            [
                "76c4645796e5d7da"
            ]
        ]
    },
    {
        "id": "76c4645796e5d7da",
        "type": "join",
        "z": "41467cf2a79e6fdb",
        "name": "endereço",
        "mode": "custom",
        "build": "string",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": ", ",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "5",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "num",
        "reduceFixup": "",
        "x": 500,
        "y": 260,
        "wires": [
            [
                "0dcbd22e48fea83b"
            ]
        ]
    },
    {
        "id": "0dcbd22e48fea83b",
        "type": "template",
        "z": "41467cf2a79e6fdb",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "O endereço é: {{payload}}",
        "output": "str",
        "x": 660,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "e01782992e11d420",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "db7ce1053b74faba",
        "type": "api-current-state",
        "z": "e01782992e11d420",
        "name": "Localização",
        "server": "3522fa29.862936",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.iphone_geocoded_location",
        "state_type": "str",
        "blockInputOverrides": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": 0,
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 490,
        "y": 740,
        "wires": [
            [
                "969b43a4a396cf1e",
                "3fb0b8c7c5dcc01f"
            ]
        ]
    },
    {
        "id": "969b43a4a396cf1e",
        "type": "subflow:41467cf2a79e6fdb",
        "z": "e01782992e11d420",
        "name": "",
        "x": 730,
        "y": 760,
        "wires": [
            [
                "72257cfd8890eda1"
            ]
        ]
    },
    {
        "id": "3fb0b8c7c5dcc01f",
        "type": "subflow:b63906f5c47c4edb",
        "z": "e01782992e11d420",
        "name": "",
        "x": 710,
        "y": 700,
        "wires": [
            [
                "b4376d61936aeb2c"
            ]
        ]
    },
    {
        "id": "cb82ed9bb62b565e",
        "type": "telegrambot-payload",
        "z": "e01782992e11d420",
        "name": "",
        "bot": "b0d97f6e1bdb18f5",
        "chatId": "000113113131",
        "sendMethod": "sendLocation",
        "payload": "",
        "x": 1090,
        "y": 700,
        "wires": [
            []
        ]
    },
    {
        "id": "b4376d61936aeb2c",
        "type": "delay",
        "z": "e01782992e11d420",
        "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": 900,
        "y": 700,
        "wires": [
            [
                "cb82ed9bb62b565e"
            ]
        ]
    },
    {
        "id": "f002f70a4eedf341",
        "type": "inject",
        "z": "e01782992e11d420",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 260,
        "y": 740,
        "wires": [
            [
                "db7ce1053b74faba"
            ]
        ]
    },
    {
        "id": "72257cfd8890eda1",
        "type": "api-call-service",
        "z": "e01782992e11d420",
        "name": "Telegram Teste",
        "server": "3522fa29.862936",
        "version": 5,
        "debugenabled": false,
        "domain": "notify",
        "service": "teste_telegram",
        "areaId": [],
        "deviceId": [],
        "entityId": [],
        "data": "{\"message\":\"{{payload}}\"}",
        "dataType": "json",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 970,
        "y": 760,
        "wires": [
            []
        ]
    },
    {
        "id": "3522fa29.862936",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": 30
    },
    {
        "id": "b0d97f6e1bdb18f5",
        "type": "telegrambot-config",
        "botname": "telegram_bot",
        "usernames": "",
        "chatIds": "03033323",
        "pollInterval": "300"
    }
]
1 curtida

@maciel_nm por favor, pode reenviar o fluxo, está com erro de sintase. Obrigado

Alterei na original. Veja se agora vai

1 curtida

@maciel_nm …mesmo erro :slight_smile:

image

valeu @LeandroIssa !
Tenta agora @ercb200

1 curtida

@maciel_nm deu certo !!! Muito obrigado !

@maciel_nm , alterei o sensor “geo” de meu celular, o endereço aparece certinho no “nó”, mas quando chega no telegram, aparece apenas a imagem sem o mapa…há alguma integração ou parametrização complementar a ser feita ? “google maps, etc etc”
Obrigado !

1 curtida

Vai mostrar a imagem pelo aplicativo nativo do seu celular… Vc conferiu no payload as coordenadas se estão corretas? Pega elas e joga no MAPS pra testar…

1 curtida

Você clicou na imagem? Dependendo da localização, sem muitos detalhes, aparece assim, mas quando clica mostra o mapa…

1 curtida

@maciel_nm , agora sim, apareceu o mapa. O problema estava nos atributos, os dados extraídos do meu celular “geolocalização” é diferente do seu, eu não havia percebido.
(data.attributes.latitude e data.attributes.longitude)
Alterado e funcionando !
Obrigado pelas ajudas !!!

Nesse mesmo tema, será possível ao invés o playload sair no telegram, ele setar as informações de latitude e longitude em uma “entidade” afim de apresentarmos isso em um card no Lovelace ?

3 curtidas

basta colocar um card no seu dashboard com a entidade de geocode do app. Não precisa dessa rotina…
Tem o card padrão de MAPAS já…

1 curtida

Boa noite amigo, poderia me dar uma ajuda se possível? Na parte da localização eu coloquei o geo do meu celular. Eu até recebo as informações no bot. Mas a localização vai no meio do mar. Tem noção do que deve ser?

Bom dia.
2 sugestões:
Verificar se latitude e longitude não estão invertidos;
Pegar a latitude e longitude gerados no payload e jogar no Google pra ver se trás a localização correta.
Por favor posta o resultado se deu certo ou continuamos analisando.

1 curtida