remote sensing and remote control

I have several arduino based devices locate thousand miles away from my home so I don't have physical access to them.

I would like to know the data of their sensor, their location (~km accuracy is enough) from time to time and also sending them simple instructions from time to time. "From time to time" means not in real time. But it is ideal to have a mechanism which can buffer my instructions in case the target devices are not available temporarily (powered off, or lose network connection or occupied by other tasks).

Those devices are places in buildings so it is quite challenging to receive gps signal there.

After searching I found several options:

  1. For the communication, there are 1. NB IOT, 2. GPRS. I would like to use standard modules like GSM800L so that later when this module is replaced by other models, I can still maintain the sketches.

Question is, any other protocal needed? Like MQTT? And any cloud server to recommand?

  1. For the locating these devices, So far none of the the gps modules I have tested shows any signal. Is there any low cost (<$100) gps module can at least output initial location in buildings?

I fould one can use GSM modules to get position information, is it possible to also get position info with NB iot?

Thanks a lot!