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?
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
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:
Configuração:
Junto novamente as informações:
Resultado:
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
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:
-
Busco novamente a localização;
-
Com um node change, pego a latitude e longitude:
-
com node join, monto uma array com a duas informações:
-
com um node function, monto a payload da forma que o node paylod do telegram pede na documentação…
-
node payload do telegram com as configurações abaixo. (Method = sendLocation)
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!!!
Massa demais, man… nada te para agora hah tmj
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"
}
]
Alterei na original. Veja se agora vai
@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 !
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…
Você clicou na imagem? Dependendo da localização, sem muitos detalhes, aparece assim, mas quando clica mostra o mapa…
@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 ?
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á…
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.