Abeeway micro tracker

Cayenne seems to be not decoding the positioning information of the Abeeway micro tracker. Abeeway sent me a payload decoder for the tracker, but they claim the problem is on Cayenne.

This is the decoder code from Abeeway, maybe Cayenne can check the outcome ?

function Decoder(bytes, port) {

  • Example decoder for some Netvox sensors with The Things Network
  • Paul Hayes - paul@alliot.co.uk

var decoded = {};

// decode common header
decoded.battery_voltage = bytes[2]*0.0055+2.8;
decoded.battery_percentage = parseInt((bytes[2]/255)*100);
decoded.temperature = (bytes[3]*0.5)-44;
decoded.ack_token = bytes[4] >> 4;
// decode status
if (bytes[1] & 0x10) decoded.sos_mode = true;
if (bytes[1] & 0x08) decoded.tracking_state = true;
if (bytes[1] & 0x04) decoded.moving = true;
if (bytes[1] & 0x02) decoded.periodic_pos = true;
if (bytes[1] & 0x01) decoded.pos_on_demand = true;
decoded.operating_mode = bytes[1] >> 5;

// decode rest of message
if ((bytes[0] === 0x03) && ((bytes[4] & 0x0F) === 0x00)) { // position message & GPS type
var lat_raw = ((bytes[6] << 16) | (bytes[7] << 8) | bytes[8]);
lat_raw = lat_raw << 8;
if (lat_raw > 0x7FFFFFFF) {
lat_raw = lat_raw - 0x100000000;
decoded.latitude = lat_raw/10000000;
var lng_raw = ((bytes[9] << 16) | (bytes[10] << 8) | bytes[11]);
lng_raw = lng_raw << 8;
if (lng_raw > 0x7FFFFFFF) {
lng_raw = lng_raw - 0x100000000;
decoded.longitude = lng_raw/10000000;
decoded.accuracy = bytes[12]*3.9;
decoded.age = bytes[5]*8;
} else if ((bytes[0] === 0x03) && ((bytes[4] & 0x0F) === 0x09)) { // position message & wifi bssid type
decoded.bssid0 = bytes.slice(6, 12).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.bssid1 = bytes.slice(13, 19).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.bssid2 = bytes.slice(20, 26).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.bssid3 = bytes.slice(27, 33).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");

decoded.rssi0 = (bytes[12] > 127 ? bytes[12] -256 : bytes[12]);
decoded.rssi1 = (bytes[19] > 127 ? bytes[19] -256 : bytes[19]);
decoded.rssi2 = (bytes[26] > 127 ? bytes[26] -256 : bytes[26]);
decoded.rssi3 = (bytes[33] > 127 ? bytes[33] -256 : bytes[33]);

} else if ((bytes[0] === 0x03) && ((bytes[4] & 0x0F) === 0x07)) { // position message & BLE macaddr type
decoded.macadr0 = bytes.slice(6, 12).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.macadr1 = bytes.slice(13, 19).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.macadr2 = bytes.slice(20, 26).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.macadr3 = bytes.slice(27, 33).map(function(b) { return (“0” + b.toString(16)).substr(-2); }).join(":");
decoded.rssi0 = (bytes[12] > 127 ? bytes[12] -256 : bytes[12]);
decoded.rssi1 = (bytes[19] > 127 ? bytes[19] -256 : bytes[19]);
decoded.rssi2 = (bytes[26] > 127 ? bytes[26] -256 : bytes[26]);
decoded.rssi3 = (bytes[33] > 127 ? bytes[33] -256 : bytes[33]);
} else if ((bytes[0] === 0x03) && ((bytes[4] & 0x0F) === 0x01)) { // position message & GPS timeout (failure)
decoded.gpstimeout = true;
} else if (bytes[0] === 0x09) { // shutdown message
decoded.shutdown = true;
} else if (bytes[0] === 0x0A) {
decoded.geoloc_start = true;
} else if (bytes[0] === 0x05) {
decoded.heartbeat = true;
decoded.reset_cause = bytes[5];
decoded.firmware_ver = bytes.slice(6, 9);
return decoded;

will check out the issue.

Can you generate a valid GPS message and provide us the payload from TTN, or the time it was generated so I can check for it in the logs?

Hello Shramik,

sorry, I am a beginner. But what I can do, is giving you access to my TTN account to take a look for yourself. As I am carrying the device along, there should be some payloads now

I’ll change the password on Friday, so you have some time.

It would also be nice, if you could integrate the Zenner smoke detector. I found a payload decoder in the net and added it to my TTN account, but there’s no single Zenner product on Cayenne and Zenner doesn’t care.

Thank you and best regards, Joerg

dont share your personal details in the public forum. On your TTN console, open your device and go in the data tab. When your device will publish data, it will show the payload. copy and share it here.

the Zenner team has to submit their device to be integrated with cayenne.

Oh, sorry, I thought that would be PM, as I replied to the mail I got.

I pressed the button twice and got that payload:

0A50CB9B0000 at 21:29:00. I guess that is the keep alive message.

Second payload was at 21:31:08 :


And third at 21:31:12:


It sent another at 21:33:09




1 Like

The messages you sent is beacon messages, we’d need at least one valid GPS message to be able to verify. A GPS message sends GPS coordinates. It usually only works outside where there is GPS coverage. Are you testing it inside or outside?

Hi Shramik,

this payload was received while waiving it at an open window:


It sent some more:




Some later, I got this:


Walking outside I got this:


Back indoor I got this indoors at 23:16:29 :


The tracker should be able to do tracking indoors by using Bluetooth and WiFi. According to the manufacturer it is also possible to send data to the tracker, but I have no idea how to do that.

It sends every uplink twice with a 5 seconds delay.

Later indoors I got this:

032CB298000B1E78DF04490C05 abn TTN decodes here Latitude and Longitude data in “fields”.

So if the data is correct, the position should be Tente (Wermelskirchen) Germany.

Hopefully this is helpful now.

I’ll send one more, as it looks different and also contains Latitude and Longitude data:


we have made changes, you can check if GPS widget is shown in the cayenne dashboard. If not try removing the device and re-add it.

Yes, GPS widget is visible, nut up to now no GPS location is shown on the map. The tracker was active all day and I drove from Tente to Cologne.

Correction, later in the evening I got data points. One every hour. I wonder why it didn’t sent WiFi or Bluetooth datapoints during daytime, but this maybe a matter of configuration. I’ll take a look into the device.


do you receive the GPS payload in the TTN console when inside?

I think it’s a WiFi payload and not a GPS payload ( especially as at my working place a GPS signal can’t be received). According to the handbook the tracker sends a WiFi position after wakeup and than a position every 5 minutes.
On the TTN I get a upload every 5min, as stated, but it is not a GPS position. If I understand the handbook correctly, WiFi and Bluetooth have priority over GPS.

So here are some payloads from indoors GPS free tracking, that should contain a wifi position:


10:49h 0A24B19A0000

10:54h 032CB2980926E0286DB1EBB5DD6201941F88CADC64A5C36F5EE4C6021599E47745C01

10:55h 032CB2980926E0286DB1EBB5DD6201941F88CADC64A5C36F5EE4C6021599E47745C0

11:15h 032CB2950925989BCBF9FDC3C2021599E47745BE989BCB5F607CB364A5C36F5EE4B1

11:20h 032CB1950925989BCBF9FDC3BF989BCBFA03CEBE021599E47745BB000CE6021F10B7

11:25h 0328B1950925021599E47745CF6201941F88CAC1E0286DB1EBB5BF64A5C36F5EE4BC

that is what i mentioned here.

Yes I see, but what about indoor tracking ? The device is able to get positions when no GPS is available, e.g. if a thief put it into the basement. this should be done by using WiFi or Bluetooth:
The handbook states:
Whatever the chosen geolocation policy, the first position is always a WIFI one, sent immediately after the beginning of the motion. The FW v1.7-3 enables the deactivation of this WIFI payload and replace it by a geoloc_start. This capability is configurable via config_flag parameter.

On “features” the handbook says:
Used geolocation technologies
✓ GPS: Precise outdoor position.
✓ Low power GPS: Get quick position outdoors and daylight indoor conditions.
✓ WIFI: Position indoors and urban area.
✓ BLE: Position indoors

So, I would expect positioning indoors. But what I got during a hiking day was coordinates twice with 5min deviation and nothing else. Not a single position during an afternoon in the garden and today absolutely no position on a whole working day indoors.

I think, something must be wrong. During hiking I carried a LGT-92 with me, that sent a position every 5min, as expected, meaning that LoRa was available. At least it is availabe in the garden, only 10 meters away from the access point, but Abeeway sent no positioning at all.

Where is the error ? Just a wrong configuration or somehow lost data ?

can you check this with the device manufacturer.

What Wiktor of Alliot wrote is:
"One thing to note is that by default the device will only send location data when it detects motion. So if it is just sat on a desk it will only send the heartbeat messages you see. Also by default, it will attempt to sniff wifi networks and send those if it finds enough of them nearby, if that fails then it will try GPS location. "

So I think, that GPS positioning works with Cayenne, but WiFi payloads don’t, making the tracker useless with Cayenne every time a WiFi is present and that is most of the time. WiFi has priority over GPS positioning.

We only decode the payload sent to cayenne. If the payload sent does not match we don’t take it into consideration.

Yes, I understand. There is an onlinedecoder availabe at Abeeway:
I see, that in WiFi mode currently no position data is sent. That’s what you call a beacon message. So it needs configuration and I have to find out, how to do that.
Does Cayenne support adowling from TTN to the tracker somehow ?