we are just developing our own little "LBS" Translator (already working but still in debug/stability phase).
It receives the data from the hardware we use (little device with battery inside, gps inside, active RFID tag inside, movement sensor inside, light sensor inside), if no gps available it sends up to 10 celltower ids together with TA, if it can not connect to server it starts sending via RFID its ID and you can use a special antenna to find the unit (even inhouse) It uses two Goldcaps to use 100% of battery energy and has a (tested) stand by time of 3 years (or 15 years) at 2 messages per day.
(my testdevices sending every 15 minutes and already sended 980 messages in 4 weeks and battery is 90%)
our little server is installed at a windows virtual server and has the opencellid.org cell-list on a mysql database (4 Million cellids with location).
If a new message by UDP is received from server, it scans the message and does a lookup of celltowers in the local database. than it calculates the different distances and tries to do some kind of weighting. than it uses Wialon IPS protocol and sends the calculated "position" to Wialon (together with some infos we receive from device). Additional the little server logs into sdk.wialon and sets a geofence with the calculated radius (so if gps=valid, radius is a few meters, if GSM it uses the TA (timing advance value) of the served cell to create the radius) to the middle of the served cell and you can see it in Wialon.
In a future version we want also to show the served cellid with location as POI and dynamicaly change / update / delete them
Usage for this HW is always anti theft where there is no regular power suply and parcel tracking
Politeness dictates it to write his name on a post