[38;5;244m┌─[0m [38;5;40mroot@joaocosta:~#[0m [38;5;245mcat posts/19.md[0m [38;5;244m───────────────────────────────────────────[0m

[38;5;40m#[0m [1mCool dog tracker for traccar[0m
[38;5;245mpublished 2026-09-22 · 5 min read · https://joaocosta.dev/blog/19[0m

For a few years now, I've been self-hosting [38;5;40mTraccar[0m [38;5;244m(https://www.traccar.org/)[0m
to track my phone. There isn't a real reason for it: it's just fun to keep a
history of where I've been. It's one of those services that I kinda forget
about, but now I have a dog that I want to track.

[38;5;38m##[0m [1mThe dog[0m

I now have a dog. I often go hiking on trails with it, so I'm scared about it
escaping or getting lost. To get some peace of mind, I decided to put a GPS
tracker on its collar. Since I already run Traccar, whatever I bought would
ideally report to it. Absolutely no proprietary app/cloud dependency. I just
want things running on my servers with an open protocol.

[38;5;40m→[0m [38;5;245m[image][0m My dog, Billy
[38;5;244mhttps://joaocosta.dev/_resources/20f328eeb5651718dc0e9228d2d052d2.png[0m

[38;5;38m##[0m [1mThe device[0m

I ended up getting a [38;5;40mMictrack MT710[0m [38;5;244m(https://www.mictrack.com/products/mt710/)[0m.
It's tiny, light, has an IP68 rating, supports LTE Cat-M1/NB-IoT (with 2G GSM
fallback), and has an accelerometer. It does GPS, WiFi, and LBS positioning, and
charges over a magnetic USB cable. The best part is that their protocol (tlt2h)
is officially supported in Traccar. It's also easy to open (2 screws that don't
mess with the IP68 rating), and the battery is just a run-of-the-mill 3.7 V 650
mAh LiPo battery that's easy to replace (JST plug). They also sell a nice
silicone case to put on a dog collar.

[38;5;40m→[0m [38;5;245m[image][0m Mictrack MT710 [38;5;244mhttps://joaocosta.dev/_resources/mt710-photo.jpg[0m

Configuration is done through a set of plain text commands that you can send
over a USB config cable, SMS, or from the [38;5;40mweb config tool[0m
[38;5;244m(https://config.mictrack.com/)[0m. Setting it up for Traccar is basically:

[38;5;40m→[0m Insert a nano SIM card.
[38;5;40m→[0m Add the ID shown on your tracker's sticker as a new device in your Traccar
  instance.
[38;5;40m→[0m Configure the tracker:

[38;5;244m┄───────────────────────────────────────────────────────────────────────── txt [0m
[38;5;245m│[0m ETS
[38;5;245m│[0m 803,your.apn,,
[38;5;245m│[0m 804,your.traccar.server,5030
[38;5;245m│[0m QTS
[38;5;244m┄──────────────────────────────────────────────────────────────────────────────[0m

BTW, the SIM cards that Mictrac sells are cheap and have been working great for
me. If getting the tracker, I recommend getting the SIM card and silicone case
as well.

[38;5;38m##[0m [1mThe configuration problem[0m

So far so good, except for the part where you actually configure the thing. The
official tool for the USB route is [38;5;40mweb based[0m [38;5;244m(https://config.mictrack.com/)[0m: it
uses WebSerial, which means Chromium on a desktop, and it's served by the
vendor. It works, but it's not something I want to depend on.

The manuals didn't help much either. The command list PDF is internally
inconsistent in places (e.g. [38;5;38mMODE,1[0m's interval is 60–600 s in one table and
10–600 s everywhere else), some commands are missing from the USB command table,
and the web tool accepts at least one network mode ([38;5;38mNWM,0,0,2[0m) that isn't
documented at all.

[38;5;38m##[0m [1mRolling my own config tool[0m

Since the web tool is essentially client-side JavaScript talking to a serial
port, I grabbed its source, the command list PDF, and the user manual, and threw
all of it at an AI agent to build me a local alternative. The result is
[38;5;40mmt710-config[0m [38;5;244m(https://github.com/JoaoCostaIFG/mt710-config)[0m, a terminal UI for
configuring and monitoring the MT710 over the USB cable:

[38;5;40m→[0m No Chromium needed: it's a regular terminal app that talks to the serial port
  directly.
[38;5;40m→[0m Doesn't depend on vendor servers: everything runs locally.
[38;5;40m→[0m Improved usability: command explanations and validation, presets, setup forms
  populated from the device's current config, etc.
[38;5;40m→[0m It merges the manuals with the rules extracted from the official web tool, so
  inconsistencies between the two are detected, fixed, and documented in the
  tool's reference tab.

[38;5;40m→[0m [38;5;245m[image][0m Screenshot of the TUI
[38;5;244mhttps://joaocosta.dev/_resources/9818ca7bb67410ad6f2c12570f011da4.png[0m

[38;5;38m##[0m [1mHome Mode[0m

Unfortunately, the official web config tool does not expose the most interesting
working mode of this tracker: MODE 8 aka the "home mode". This is the pet
tracking mode: the device sleeps while it's indoors near its home zone, and
reports every 10–60 seconds once it's outdoors and moving. It also uses the
accelerometer to wake up (instead of always scanning for WiFis or GPS location).
We just have to configure the following:

[38;5;40m→[0m The MAC addresses of (up to 3) routers/WiFi access points at home.
[38;5;40m→[0m The GPS coordinates + a radius of home (a geofence around a coordinate).

My tool supports all the modes (the official tool just exposes 4 out of 11),
including this one, and makes setting up the home zone pretty painless.

[38;5;38m##[0m [1mConfiguring Home Mode[0m

The tracker has two ways to know it's home: being near a known WiFi or its
location being inside the geofence. With the tracker at home and connected over
USB, the whole thing looks like this:

[38;5;244m┄───────────────────────────────────────────────────────────────────────── txt [0m
[38;5;245m│[0m ETS                        # open the config session
[38;5;245m│[0m SCAN                       # the device lists the WiFi MACs around it
[38;5;245m│[0m AP,,,6877248FA31A,,        # home = up to 3 MACs (12 hex chars each)
[38;5;245m│[0m SEARCH                     # asks the device for its current position
[38;5;245m│[0m GEO,38.72232,-9.13934,50   # and a geofence around it: lat,lng,radius (radius 30-300 m)
[38;5;245m│[0m MODE,8,10                  # home mode: report every 10 s while outdoors
[38;5;244m┄──────────────────────────────────────────────────────────────────────────────[0m

Note that you can just use something like Google Maps to get your house's GPS
coordinates and the cli to get your router's MAC address; no need to use the
SCAN and SEARCH commands at home. Example one liner to get the MAC addresses
(needs NetworkManager):

[38;5;244m┄──────────────────────────────────────────────────────────────────────── bash [0m
[38;5;245m│[0m # list: signal, MAC (MT710 format), SSID — strongest first
[38;5;245m│[0m nmcli -f BSSID,SIGNAL,SSID,FREQ dev wifi list --rescan yes \
[38;5;245m│[0m   | awk 'NR>1 {b=$1; s=$2; $1=$2=""; sub(/^ +/,""); mac=toupper(b); gsub(/:/,"",mac); print s, mac, $0}' \
[38;5;245m│[0m   | sort -rn
[38;5;244m┄──────────────────────────────────────────────────────────────────────────────[0m

A few quirks worth knowing:

[38;5;40m→[0m [38;5;38mAP[0m and [38;5;38mGEO[0m only stage the change: nothing is stored until a save happens.
  Since [38;5;38mMODE[0m saves and reboots the device by itself, sending it last persists
  the whole batch. This is exactly the sequence my tool's setup form generates
  for you.
[38;5;40m→[0m Those two empty fields before the MACs in [38;5;38mAP,,,<mac>,<mac2>,<mac3>[0m are
  reserved placeholders that must stay empty. The manuals don't mention them:
  it's the kind of thing you only find out by reading the official web tool's
  source.
[38;5;40m→[0m The tracker can only see 2.4 GHz APs. Skip 5 GHz WiFi access points' MAC
  addresses.
[38;5;40m→[0m For some reason, my tracker can only see WiFi access points in channel 1, 6,
  and 11. No idea why, but I assume it's an hardware limitation.

After the reboot, [38;5;38mRCONF[0m confirms the stored home zone ([38;5;38mAP:[0m/[38;5;38mGEO:[0m lines), and the
tracker goes back to napping whenever the dog does 🐕️.

I have configured the tracker to post location every 10 seconds while outdoors.
This gives me a pretty detailed path of our walks/hiking trails. With at least 3
walks a day (>= 1 hour total), the tracker's battery lasts at least a week. I
set up Traccar to send me a notification when the battery is low, but I've been
charging it weekly just to make sure it's ok. I just lay down the collar on the
magnetic charger overnight, whenever I remember to do so.

[38;5;38m##[0m [1mConclusion[0m

The dog now has a tracker on its collar, Traccar has a new device to draw maps
with, and I don't have to trust anyone's cloud or browser support for any of it.
If you have an MT710 (or a dog), give [38;5;40mmt710-config[0m
[38;5;244m(https://github.com/JoaoCostaIFG/mt710-config)[0m a try.

[38;5;40m→[0m [38;5;245m[image][0m The tracker on the collar
[38;5;244mhttps://joaocosta.dev/_resources/00e357ac18bfe51da289567b8407a486.png[0m

Stay safe :P

[38;5;244m└─[0m [38;5;40m→[0m view online: [38;5;40mhttps://joaocosta.dev/blog/19[0m
