Hi,
Does anybody have a functional dashboard for this MOKO device?
I’m having a bad experience here with this device and all its variables.
Tks
Hi,
Does anybody have a functional dashboard for this MOKO device?
I’m having a bad experience here with this device and all its variables.
Tks
Hi Jpouza,
We have some dashboard template examples on our website, take a look here: https://tago.io/dashboard-templates/.
NOTE: You will need to update the widget variable to display the variables that your device sends to TagoIO.
Thanks, but I really do not know the location variable for this moko pro device. I tried a lot of variables with no success.
You can see what variables are coming in the bucket section.
NOTE: Pay attention that the location variable must contain LAT and LNG in the JSON, e.g:
{
"variable": "location",
"value": "sensor location",
"location": { "lat": 3404.7041778, "lng": 07044.3966270 }
}
In the bucket only “hotspot_0_location” gives me latitude and longitude values.
Do I need to insert a decoder before Helium flow integration to TagoIO?
This is what the device maker provides as decoder:
var packet_type = [“heart”,“fix_success”,“fix_false”,“sys_close_info”,“shake_info”,“idle_info”,“demolish_alarm”,“event”,“battery_consume”,“config”,“store_data”,“limit_gps_data”];
var dev_mode = [“standby”,“period”,“timing”,“motion”];
var dev_fix_type = [“work_mode_fix”,“down_request_fix”];
function substringBytes(bytes, start, len)
{
var char = ;
for(var i = 0; i < len; i++)
{
char.push(“0x”+ bytes[start+i].toString(16) < 0X10 ? (“0”+bytes[start+i].toString(16)) : bytes[start+i].toString(16) );
}
return char.join(“”);
}
function BytestoInt(bytes,start) {
var value = ((bytes[start] << 24) | (bytes[start+1] << 16) | (bytes[start+2] << 8) | (bytes[start+3]));
return value;
}
function Decoder(bytes, port)
{
var dev_info = {};
dev_info.pack_type = packet_type[port-1];
//common frame head
if(port<=10)
{
dev_info.work_mode = dev_mode[bytes[0]&0x03];
dev_info.low_power_state = (bytes[0]>>2)&0x01;
dev_info.demolish_state = (bytes[0]>>3)&0x01;
dev_info.idle_state = (bytes[0]>>4)&0x01;
dev_info.motion_state = (bytes[0]>>5)&0x01;
if(port==2 || port ==3)
{
dev_info.fix_type = dev_fix_type[(bytes[0]>>6)&0x01];
}
if(bytes\[1\]>0x80)
{
dev\_info.temperature = bytes\[1\] - 0x100 + "°C";
}
else
{
dev\_info.temperature = bytes\[1\] + "°C";
}
dev\_info.lorawan\_downlink\_count = bytes\[2\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
}
if(port == 1)
{
var restart\_reason = \["power\_restart","ble\_cmd\_restart","lorawan\_cmd\_restart","switch\_off\_mode\_restart"\];
dev\_info.pre\_restart\_reason = restart\_reason\[bytes\[3\]\];
ver\_major = (bytes\[4\]>>6)&0x03;
ver\_mijor = (bytes\[4\]>>4)&0x03;
ver\_patch = bytes\[4\]&0x0f;
dev\_info.ver = "V" + ver\_major+"."+ver\_mijor+"."+ver\_patch;
dev\_info.motion\_count = BytestoInt(bytes,5);
}
else if(port == 2)
{
var fix\_tech = \["wifi","ble","gps"\];
var parse\_len = 3; // common head is 3 byte
var datas = \[\];
tech = bytes\[parse\_len++\];
dev\_info.fix\_tech = fix\_tech\[tech\];
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
datalen = bytes\[parse\_len++\];
if(tech==0 || tech ==1)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
else
{
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
dev\_info.latitude = lat/10000000;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;
dev\_info.pdop = bytes\[parse\_len\] /10;
}
}
else if(port == 3)
{
var fix\_false\_reason = \["wifi\_fix\_time\_timeout","wifi\_fix\_tech\_timeout","wifi\_module\_nofind","ble\_fix\_time\_timeout","ble\_fix\_tech\_timeout","ble\_adv","gps\_no\_budget","gps\_coarse\_acc\_timeout","gps\_fine\_acc\_timeout","gps\_fix\_timeout","gps\_assistnow\_timeout","gps\_cold\_start\_timeout","down\_request\_fix\_interrupt","motion\_start\_fix\_false\_by\_motion\_end","motion\_end\_fix\_false\_by\_motion\_start"\];
var parse\_len = 3;
var datas = \[\];
reason = bytes\[parse\_len++\];
dev\_info.fix\_false\_reason = fix\_false\_reason\[reason\];
datalen = bytes\[parse\_len++\];
if(reason<=5) //wifi and ble reason
{
if(datalen)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
}
else if(reason<=11) //gps reason
{
pdop = bytes\[parse\_len++\];
if(pdop!=0xff)
dev\_info.pdop = pdop/10
else
dev\_info.pdop = "unknow";
dev\_info.gps\_satellite\_cn = bytes\[parse\_len\] +"-" + bytes\[parse\_len+1\] +"-" + bytes\[parse\_len+2\] +"-" + bytes\[parse\_len+3\] ;
}
}
else if(port == 4)
{
var sys\_close\_reason = \["ble\_cmd\_close","lorawan\_cmd\_close","reed\_switch\_close"\];
dev\_info.sys\_close\_reason = sys\_close\_reason\[bytes\[3\]\];
}
else if(port == 5)
{
dev\_info.shake\_num = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 6)
{
dev\_info.idle\_time = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 7)
{
var parse\_len = 3; // common head is 3 byte
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
}
else if(port == 8)
{
var event = \["motion start","moving fix start","motion end","lorawan downlink trigger uplink"\];
dev\_info.event\_info = event\[bytes\[3\]\];
}
else if(port == 9)
{
var parse\_len = 3;
dev\_info.gps\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.wifi\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_scan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_adv\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.lorawan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
}
else if(port == 10)
{
//
}
else if(port == 11)
{
//
}
else if(port == 12)
{
dev\_info.work\_mode = dev\_mode\[bytes\[0\]&0x03\];
dev\_info.low\_power\_state = bytes\[0\]&0x04;
dev\_info.demolish\_state = bytes\[0\]&0x08;
dev\_info.idle\_state = bytes\[0\]&0x10;
dev\_info.motion\_state = bytes\[0\]&0x20;
dev\_info.fix\_type = dev\_fix\_type\[(bytes\[0\]>>6)&0x01\];
dev\_info.lorawan\_downlink\_count = bytes\[1\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
var parse\_len = 2;
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
**dev\_info.latitude = lat/10000000 ;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;**
dev\_info.pdop = bytes\[parse\_len\]/10;
}
return dev\_info;
}
var packet_type = [“heart”,“fix_success”,“fix_false”,“sys_close_info”,“shake_info”,“idle_info”,“demolish_alarm”,“event”,“battery_consume”,“config”,“store_data”,“limit_gps_data”];
var dev_mode = [“standby”,“period”,“timing”,“motion”];
var dev_fix_type = [“work_mode_fix”,“down_request_fix”];
function substringBytes(bytes, start, len)
{
var char = ;
for(var i = 0; i < len; i++)
{
char.push(“0x”+ bytes[start+i].toString(16) < 0X10 ? (“0”+bytes[start+i].toString(16)) : bytes[start+i].toString(16) );
}
return char.join(“”);
}
function BytestoInt(bytes,start) {
var value = ((bytes[start] << 24) | (bytes[start+1] << 16) | (bytes[start+2] << 8) | (bytes[start+3]));
return value;
}
function Decoder(bytes, port)
{
var dev_info = {};
dev_info.pack_type = packet_type[port-1];
//common frame head
if(port<=10)
{
dev_info.work_mode = dev_mode[bytes[0]&0x03];
dev_info.low_power_state = (bytes[0]>>2)&0x01;
dev_info.demolish_state = (bytes[0]>>3)&0x01;
dev_info.idle_state = (bytes[0]>>4)&0x01;
dev_info.motion_state = (bytes[0]>>5)&0x01;
if(port==2 || port ==3)
{
dev_info.fix_type = dev_fix_type[(bytes[0]>>6)&0x01];
}
if(bytes\[1\]>0x80)
{
dev\_info.temperature = bytes\[1\] - 0x100 + "°C";
}
else
{
dev\_info.temperature = bytes\[1\] + "°C";
}
dev\_info.lorawan\_downlink\_count = bytes\[2\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
}
if(port == 1)
{
var restart\_reason = \["power\_restart","ble\_cmd\_restart","lorawan\_cmd\_restart","switch\_off\_mode\_restart"\];
dev\_info.pre\_restart\_reason = restart\_reason\[bytes\[3\]\];
ver\_major = (bytes\[4\]>>6)&0x03;
ver\_mijor = (bytes\[4\]>>4)&0x03;
ver\_patch = bytes\[4\]&0x0f;
dev\_info.ver = "V" + ver\_major+"."+ver\_mijor+"."+ver\_patch;
dev\_info.motion\_count = BytestoInt(bytes,5);
}
else if(port == 2)
{
var fix\_tech = \["wifi","ble","gps"\];
var parse\_len = 3; // common head is 3 byte
var datas = \[\];
tech = bytes\[parse\_len++\];
dev\_info.fix\_tech = fix\_tech\[tech\];
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
datalen = bytes\[parse\_len++\];
if(tech==0 || tech ==1)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
else
{
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
dev\_info.latitude = lat/10000000;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;
dev\_info.pdop = bytes\[parse\_len\] /10;
}
}
else if(port == 3)
{
var fix\_false\_reason = \["wifi\_fix\_time\_timeout","wifi\_fix\_tech\_timeout","wifi\_module\_nofind","ble\_fix\_time\_timeout","ble\_fix\_tech\_timeout","ble\_adv","gps\_no\_budget","gps\_coarse\_acc\_timeout","gps\_fine\_acc\_timeout","gps\_fix\_timeout","gps\_assistnow\_timeout","gps\_cold\_start\_timeout","down\_request\_fix\_interrupt","motion\_start\_fix\_false\_by\_motion\_end","motion\_end\_fix\_false\_by\_motion\_start"\];
var parse\_len = 3;
var datas = \[\];
reason = bytes\[parse\_len++\];
dev\_info.fix\_false\_reason = fix\_false\_reason\[reason\];
datalen = bytes\[parse\_len++\];
if(reason<=5) //wifi and ble reason
{
if(datalen)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
}
else if(reason<=11) //gps reason
{
pdop = bytes\[parse\_len++\];
if(pdop!=0xff)
dev\_info.pdop = pdop/10
else
dev\_info.pdop = "unknow";
dev\_info.gps\_satellite\_cn = bytes\[parse\_len\] +"-" + bytes\[parse\_len+1\] +"-" + bytes\[parse\_len+2\] +"-" + bytes\[parse\_len+3\] ;
}
}
else if(port == 4)
{
var sys\_close\_reason = \["ble\_cmd\_close","lorawan\_cmd\_close","reed\_switch\_close"\];
dev\_info.sys\_close\_reason = sys\_close\_reason\[bytes\[3\]\];
}
else if(port == 5)
{
dev\_info.shake\_num = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 6)
{
dev\_info.idle\_time = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 7)
{
var parse\_len = 3; // common head is 3 byte
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
}
else if(port == 8)
{
var event = \["motion start","moving fix start","motion end","lorawan downlink trigger uplink"\];
dev\_info.event\_info = event\[bytes\[3\]\];
}
else if(port == 9)
{
var parse\_len = 3;
dev\_info.gps\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.wifi\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_scan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_adv\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.lorawan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
}
else if(port == 10)
{
//
}
else if(port == 11)
{
//
}
else if(port == 12)
{
dev\_info.work\_mode = dev\_mode\[bytes\[0\]&0x03\];
dev\_info.low\_power\_state = bytes\[0\]&0x04;
dev\_info.demolish\_state = bytes\[0\]&0x08;
dev\_info.idle\_state = bytes\[0\]&0x10;
dev\_info.motion\_state = bytes\[0\]&0x20;
dev\_info.fix\_type = dev\_fix\_type\[(bytes\[0\]>>6)&0x01\];
dev\_info.lorawan\_downlink\_count = bytes\[1\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
var parse\_len = 2;
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
dev\_info.latitude = lat/10000000 ;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;
dev\_info.pdop = bytes\[parse\_len\]/10;
}
return dev\_info;
}
var packet_type = [“heart”,“fix_success”,“fix_false”,“sys_close_info”,“shake_info”,“idle_info”,“demolish_alarm”,“event”,“battery_consume”,“config”,“store_data”,“limit_gps_data”];
var dev_mode = [“standby”,“period”,“timing”,“motion”];
var dev_fix_type = [“work_mode_fix”,“down_request_fix”];
function substringBytes(bytes, start, len)
{
var char = ;
for(var i = 0; i < len; i++)
{
char.push(“0x”+ bytes[start+i].toString(16) < 0X10 ? (“0”+bytes[start+i].toString(16)) : bytes[start+i].toString(16) );
}
return char.join(“”);
}
function BytestoInt(bytes,start) {
var value = ((bytes[start] << 24) | (bytes[start+1] << 16) | (bytes[start+2] << 8) | (bytes[start+3]));
return value;
}
function Decoder(bytes, port)
{
var dev_info = {};
dev_info.pack_type = packet_type[port-1];
//common frame head
if(port<=10)
{
dev_info.work_mode = dev_mode[bytes[0]&0x03];
dev_info.low_power_state = (bytes[0]>>2)&0x01;
dev_info.demolish_state = (bytes[0]>>3)&0x01;
dev_info.idle_state = (bytes[0]>>4)&0x01;
dev_info.motion_state = (bytes[0]>>5)&0x01;
if(port==2 || port ==3)
{
dev_info.fix_type = dev_fix_type[(bytes[0]>>6)&0x01];
}
if(bytes\[1\]>0x80)
{
dev\_info.temperature = bytes\[1\] - 0x100 + "°C";
}
else
{
dev\_info.temperature = bytes\[1\] + "°C";
}
dev\_info.lorawan\_downlink\_count = bytes\[2\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
}
if(port == 1)
{
var restart\_reason = \["power\_restart","ble\_cmd\_restart","lorawan\_cmd\_restart","switch\_off\_mode\_restart"\];
dev\_info.pre\_restart\_reason = restart\_reason\[bytes\[3\]\];
ver\_major = (bytes\[4\]>>6)&0x03;
ver\_mijor = (bytes\[4\]>>4)&0x03;
ver\_patch = bytes\[4\]&0x0f;
dev\_info.ver = "V" + ver\_major+"."+ver\_mijor+"."+ver\_patch;
dev\_info.motion\_count = BytestoInt(bytes,5);
}
else if(port == 2)
{
var fix\_tech = \["wifi","ble","gps"\];
var parse\_len = 3; // common head is 3 byte
var datas = \[\];
tech = bytes\[parse\_len++\];
dev\_info.fix\_tech = fix\_tech\[tech\];
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.utc\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
datalen = bytes\[parse\_len++\];
if(tech==0 || tech ==1)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
else
{
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
dev\_info.latitude = lat/10000000;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;
dev\_info.pdop = bytes\[parse\_len\] /10;
}
}
else if(port == 3)
{
var fix\_false\_reason = \["wifi\_fix\_time\_timeout","wifi\_fix\_tech\_timeout","wifi\_module\_nofind","ble\_fix\_time\_timeout","ble\_fix\_tech\_timeout","ble\_adv","gps\_no\_budget","gps\_coarse\_acc\_timeout","gps\_fine\_acc\_timeout","gps\_fix\_timeout","gps\_assistnow\_timeout","gps\_cold\_start\_timeout","down\_request\_fix\_interrupt","motion\_start\_fix\_false\_by\_motion\_end","motion\_end\_fix\_false\_by\_motion\_start"\];
var parse\_len = 3;
var datas = \[\];
reason = bytes\[parse\_len++\];
dev\_info.fix\_false\_reason = fix\_false\_reason\[reason\];
datalen = bytes\[parse\_len++\];
if(reason<=5) //wifi and ble reason
{
if(datalen)
{
for(var i=0 ; i<(datalen/7) ; i++)
{
var data = {};
data.mac = substringBytes(bytes, parse\_len, 6);
parse\_len += 6;
data.rssi = bytes\[parse\_len++\]-256 +"dBm";
datas.push(data);
}
dev\_info.mac\_data = datas;
}
}
else if(reason<=11) //gps reason
{
pdop = bytes\[parse\_len++\];
if(pdop!=0xff)
dev\_info.pdop = pdop/10
else
dev\_info.pdop = "unknow";
dev\_info.gps\_satellite\_cn = bytes\[parse\_len\] +"-" + bytes\[parse\_len+1\] +"-" + bytes\[parse\_len+2\] +"-" + bytes\[parse\_len+3\] ;
}
}
else if(port == 4)
{
var sys\_close\_reason = \["ble\_cmd\_close","lorawan\_cmd\_close","reed\_switch\_close"\];
dev\_info.sys\_close\_reason = sys\_close\_reason\[bytes\[3\]\];
}
else if(port == 5)
{
dev\_info.shake\_num = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 6)
{
dev\_info.idle\_time = bytes\[3\]\*256+ bytes\[4\];
}
else if(port == 7)
{
var parse\_len = 3; // common head is 3 byte
year = bytes\[parse\_len\]\*256 + bytes\[parse\_len+1\];
parse\_len += 2;
mon = bytes\[parse\_len++\];
days = bytes\[parse\_len++\];
hour = bytes\[parse\_len++\];
minute = bytes\[parse\_len++\];
sec = bytes\[parse\_len++\];
timezone = bytes\[parse\_len++\];
if(timezone>0x80)
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + (timezone-0x100);
}
else
{
dev\_info.alarm\_time = year + "-" + mon + "-" + days + " " + hour + ":" + minute + ":" + sec + " TZ:" + timezone;
}
}
else if(port == 8)
{
var event = \["motion start","moving fix start","motion end","lorawan downlink trigger uplink"\];
dev\_info.event\_info = event\[bytes\[3\]\];
}
else if(port == 9)
{
var parse\_len = 3;
dev\_info.gps\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.wifi\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_scan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.ble\_adv\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
dev\_info.lorawan\_work\_time = BytestoInt(bytes,parse\_len);
parse\_len += 4;
}
else if(port == 10)
{
//
}
else if(port == 11)
{
//
}
else if(port == 12)
{
dev\_info.work\_mode = dev\_mode\[bytes\[0\]&0x03\];
dev\_info.low\_power\_state = bytes\[0\]&0x04;
dev\_info.demolish\_state = bytes\[0\]&0x08;
dev\_info.idle\_state = bytes\[0\]&0x10;
dev\_info.motion\_state = bytes\[0\]&0x20;
dev\_info.fix\_type = dev\_fix\_type\[(bytes\[0\]>>6)&0x01\];
dev\_info.lorawan\_downlink\_count = bytes\[1\]&0x0f;
dev\_info.battery = (22+((bytes\[2\]>>4)&0x0f))/10 + "V";
var parse\_len = 2;
lat =BytestoInt(bytes,parse\_len);
parse\_len += 4;
lon =BytestoInt(bytes,parse\_len);
parse\_len += 4;
if(lat>0x80000000)
lat = lat-0x100000000;
if(lon>0x80000000)
lon = lon-0x100000000;
dev\_info.latitude = lat/10000000 ;
dev\_info.longitude = lon/10000000;
dev\_info.altitude=0;
dev\_info.accuracy=3;
dev\_info.pdop = bytes\[parse\_len\]/10;
}
return dev\_info;
}
Try to edit your map and display the variable “hotspot_0_location”.
This shows the last hotspot which received the tracker signal, it is not the tracker location.
I think it is time to me gave up of lora and helium, a gps tracker device that does not do the job, it is a joke, I’m not a java developer, just a normal guy.
Hi, jpsouza,
Yes, hotspot_0_location probably is the position of the closest hotspot.
So, look for “location” in your bucket. It’s the tracker position that TagoIO receives from Helium, if there is not a location or the location is not being updated, it seems that your hardware/network is not sending it to TagoIO.
I didn´t find the solution, this MOKO device does not work at all, total piece of crap, decoder does not have a location variable, only locates the hotspots LOL… changed to a Dragino and it worked flawlessly.