Feature Request - Ability to queue cloud-to-device msgs

Hello, I am guessing the way that LTE-M and AI Beacon device-to-cloud communications works today is that device-to-cloud messages are sent via https to a cloud-hosted message queue such as Amazon Simple Queue Service, and a separate ‘function’ is employed to pull these queued messages from the devices for processing by our supplied Cloud Code javascript, thus decoupling (in terms of time) the handling of incoming device messages across several processing stages.

It would be great if our Cloud Code in the future had the capability to enqueue a response message to an LTE-M / AI Beacon such that each time the LTE-M / AI Beacon enqueued a message, Estimote Cloud would use the device identifier to determine if an ‘incoming’ (to the device) message has been queued previously , and would deliver this previously queued incoming message to the device, perhaps through the OnReceive() function I see in the Micro App documentation.

Such a feature could be used to send configuration changes, etc. to the device, for example to change its GPS reporting interval, go into a ‘sleep mode’ for a certain amount of time, and so on.

The Iridium Short Burst Data (SBD) service works this way, as an example.

Is such a feature on Estimote’s “Road Map” ?

Thanks!

Thanks for your thoughtful post (: Have you seen/played with our “user messages” yet?

https://cloud.estimote.com/docs/#api-LTE-Create_new_user_message
https://developer.estimote.com/lte-beacon/micro-app-api-reference/#onreceive

We want to add a paragraph about that to https://developer.estimote.com/lte-beacon/syncing-with-cloud/, but in the meantime, if you’ve got any questions or run into any issues, we can help here.

(User messages are transmitted from Estimote Cloud to the LTE Beacon during the sync.)

Thank you - I was not yet aware of the create user message API, and will definitely try this out today - now I understand how the OnReceive() Micro App function can be used.

As Piotr promised, we added a new section to our Developer Portal that describes how to work with user-messages, hopefully, it will help :slight_smile:

https://developer.estimote.com/lte-beacon/syncing-with-cloud/#sending-messages-from-estimote-cloud-to-beacon

1 Like

This is great. I was just about to ask on this topic and saw this Topic popping up :smiley:
So this is my code on the mini app:

// alarm mode activated from distance 
cloud.onReceive( msg => {
 if(msg.type === 'stolen') {
  sync.setSyncPeriod(msg.payload.sync_period);}
  
}
);

The curl I send:

curl -X POST ‘https://cloud.estimote.com/v3/lte/user_messages
-u ‘xxx’:‘xxx’
-H “Content-Type: application/json”
-d ’
{
“device_identifier”: “f5ea3f85ed562fcde4e2110d14c5ff1f”,
“type”: “stolen”,
“payload”: {
“sync_period”: “2m”
}
}’

I get:

{“data”:{“uuid”:“db7970d9-e728-4abc-bc5b-8adbf1e6dd59”,“device_identifier”:“f5ea3f85ed562fcde4e2110d14c5ff1f”,“type”:“stolen”,“payload”:{“sync_period”:120},“delivered”:false,“delivered_at”:null,“valid_until”:null,“created_at”:“2019-08-14T14:48:52.850Z”,“volatile”:false},“meta”:{}}

I build a server to monitor and send alarms. When I send alarm from the server I get:
[14/Aug/2019 15:22:32] “POST /set_alarm/ HTTP/1.1” 302 0

The server syncs every 6 hours and on botton push syncs on 5 min. I send message changing the sync but the sync time does not change to 2 minutes.

It could be the local 4g.The local towers are very overloaded and the internet was bad.The sync skiped for some times.

Thanks - One question - I am unclear from the documentation how to generate my SDK_APP_ID and SDK_TOKEN - do these come from creating a mobile app? I am not seeing where to generate these credentials.

Thanks!

You need to create a new mobile app in Estimote Cloud to get APP_ID and APP_TOKEN.

You can find details about the process in this article, note that we recently renamed Apps to Mobile Apps:

Thanks - So I created a mobile app and got the credentials , and constructed a POST request, getting a 200 OK status back , however the response appears to indicate my message content wasn’t accepted - the response content is:

{
“data”: [],
“meta”: {
“page”: 1,
“total”: 0
}
}

Would you have some ideas on what the problem may be? I am using Postman to construct and send the POST message, and putting the message content in the HTTP body, which I suspect may be what I’m doing wrong - Thanks!

The response you are getting looks like a response to GET https://cloud.estimote.com/v3/lte/user_messages.

Make sure that you have selected a POST method; it can be changed in the field next to the URL in Postman.

Thanks! That was the issue , I am now getting a ‘good’ reponse indicating my user message has been queued.

I have been facing this issue since last week…Hopefully solution will be posted here.

So this is my code on the mini app:

// alarm mode activated from distance 

cloud.onReceive( msg => {
if(msg.type === ‘stolen’) {
sync.setSyncPeriod(msg.payload.sync_period);}

}
);

The curl I send:

curl -X POST ‘https://cloud.estimote.com/v3/lte/user_messages’
-u ‘xxx’:‘xxx’
-H “Content-Type: application/json”
-d ’
{
“device_identifier”: “f5ea3f85ed562fcde4e2110d14c5ff1f”,
“type”: “stolen”,
“payload”: {
“sync_period”: “2m”
}
}’

I get:

{“data”:{“uuid”:“db7970d9-e728-4abc-bc5b-8adbf1e6dd59”,“device_identifier”:“f5ea3f85ed562fcde4e2110d14c5ff1f”,“type”:“stolen”,“payload”:{“sync_period”:120},“delivered”:false,“delivered_at”:null,“valid_until”:null,“created_at”:“2019-08-14T14:48:52.850Z”,“volatile”:false},“meta”:{}}

I build a server to monitor and send alarms. When I send alarm from the server I get:
[14/Aug/2019 15:22:32] “POST /set_alarm/ HTTP/1.1” 302 0