This is certainly possible. Received LoRaWAN packets are de-duplicated by the TTN backend and processed into messages that you can receive over MQTT or over HTTP. They contain a list of gateways that received the message, and each gateway has some metadata about it (like position) and you also get an signal strength indicator and signal/noise number for each gateway. Signal strength gives an indication but is probably not directly usable to interpolate a position because signal strength is influence by many more things than just distance.
I am interested in bird/bat tracking too. I wrote to some companies/projects making bird/bat trackers, seeing that most of them still use age-old low-frequency technology requiring their own dedicated network of receivers, also relatively big antennas on the transmitters. I could offer help in investigating LoRaWAN for their use case, but never got a reply unfortunately, and left it at that. I’d be happy to help.
A typical message as seen in the TTN console looks like the example below.
The rx_metadata field contains the gateway metadata.
{
"name": "as.up.data.forward",
"time": "2022-04-06T14:45:04.075900778Z",
"identifiers": [
{
"device_ids": {
"device_id": "heltec-proto-1",
"application_ids": {
"application_id": "particulatematter"
}
}
},
{
"device_ids": {
"device_id": "heltec-proto-1",
"application_ids": {
"application_id": "particulatematter"
},
"dev_eui": "0000AC855C1C5210",
"join_eui": "70B3D57ED001A09B",
"dev_addr": "260B43CA"
}
}
],
"data": {
"@type": "type.googleapis.com/ttn.lorawan.v3.ApplicationUp",
"end_device_ids": {
"device_id": "heltec-proto-1",
"application_ids": {
"application_id": "particulatematter"
},
"dev_eui": "0000AC855C1C5210",
"join_eui": "70B3D57ED001A09B",
"dev_addr": "260B43CA"
},
"correlation_ids": [
"as:up:01FZZNC3E7KADQ7GJT2KXQWP87",
"gs:conn:01FZ7SBHA1HCCDNCR5N200MJZT",
"gs:up:host:01FZ7SBJ0G734KCTDYS6QAPGWT",
"gs:uplink:01FZZNC37P526P89Y8VYMKN5YM",
"ns:uplink:01FZZNC37QPFA6EFCTM29794MK",
"rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01FZZNC37QS8GAC4WPDZ8JY735",
"rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01FZZNC3E78AGP7DZ1VZ5ZPDQ9"
],
"received_at": "2022-04-06T14:45:04.071781276Z",
"uplink_message": {
"session_key_id": "AX+NMmBTme0l7/Oo7d6tbg==",
"f_port": 1,
"f_cnt": 6585,
"frm_payload": "AQIBMQICAPsKaIsLZwCCDHMm+w==",
"decoded_payload": {
"analog_in_1": 3.05,
"analog_in_2": 2.51,
"barometric_pressure_12": 997.9,
"relative_humidity_10": 69.5,
"temperature_11": 13
},
"rx_metadata": [
{
"gateway_ids": {
"gateway_id": "dego-rak7258",
"eui": "60C5A8FFFE76621A"
},
"timestamp": 651478700,
"rssi": -69,
"channel_rssi": -69,
"snr": 12.3,
"location": {
"latitude": 51.65939477,
"longitude": 5.82390838,
"source": "SOURCE_REGISTRY"
},
"uplink_token": "ChoKGAoMZGVnby1yYWs3MjU4Eghgxaj//nZiGhCsjdO2AhoMCO/OtpIGEMr1q5sDIOCfoPn64bYB"
}
],
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 8
}
},
"coding_rate": "4/5",
"frequency": "867100000",
"timestamp": 651478700
},
"received_at": "2022-04-06T14:45:03.863712750Z",
"consumed_airtime": "0.133632s",
"locations": {
"user": {
"latitude": 51.659607,
"longitude": 5.823676,
"source": "SOURCE_REGISTRY"
}
},
"network_ids": {
"net_id": "000013",
"tenant_id": "ttn",
"cluster_id": "ttn-eu1"
}
}
},
"correlation_ids": [
"as:up:01FZZNC3E7KADQ7GJT2KXQWP87",
"gs:conn:01FZ7SBHA1HCCDNCR5N200MJZT",
"gs:up:host:01FZ7SBJ0G734KCTDYS6QAPGWT",
"gs:uplink:01FZZNC37P526P89Y8VYMKN5YM",
"ns:uplink:01FZZNC37QPFA6EFCTM29794MK",
"rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01FZZNC37QS8GAC4WPDZ8JY735",
"rpc:/ttn.lorawan.v3.NsAs/HandleUplink:01FZZNC3E78AGP7DZ1VZ5ZPDQ9"
],
"origin": "ip-10-100-4-73.eu-west-1.compute.internal",
"context": {
"tenant-id": "CgN0dG4="
},
"visibility": {
"rights": [
"RIGHT_APPLICATION_TRAFFIC_READ",
"RIGHT_APPLICATION_TRAFFIC_READ"
]
},
"unique_id": "01FZZNC3EB6EJF509GMD9G2Z55"
}