MQTT communication for IOT devices with cloud Server - http

I'm designing a system where there will be 100,000 appliances and user will be able to send/receive data to his appliance over MQTT.
Device to App communication:
There will be a mac address based unique topic and device ID of each appliance . Each appliance will publish its data to topic of the server . The server will send the data to corresponding App over HTTP.
App to Device communication
The App will send data to server over HTTP and server will forward the data to corresponding appliance over MQTT.
Now can you please guide me is this a correct way to do that ? or a better way is server should subscribe to unique topics of all appliances ?
Following is the flow diagram for the above mentioned procedure

IBM Bluemix offers an IoT for electronics service which may be of interest to you. It uses the Watson IoT Platform to connect your smart electronic appliances with the applications that you develop. It also helps you analyze and understand the data from your appliances.

You can send and receive messages with Azure IoT hub that supports MQTT and HTTP protocols, with device-to-cloud and cloud-to-device capabilites.
Azure IoT device SDKs can be used with a broad range of OS platforms and devices. You can build your "device" and "App" with Microsoft.Azure.Devices.Client .
You can deploy MQTT broker in Azure, this and this you can reference.
The throughput varies with the service tier, up to 208,333 messages per minute.

Related

How can I use mqtt to connect hono to ditto?

Is it possible to use mqtt to send data from a device (arduino in my case) to hono and then send these data to ditto via mqtt?
in my case I have arduino that send a value via mqtt to hono, but now i need the data to be received by ditto.
For the moment i have only arduino that sends data to hono via mqtt.
Eclipse Ditto can either consume messages directly from an MQTT broker using MQTT 3.1.1 or MQTT 5:
https://www.eclipse.org/ditto/connectivity-protocol-bindings-mqtt.html
https://www.eclipse.org/ditto/connectivity-protocol-bindings-mqtt5.html
Or, utilising Eclipse Hono as device connectivity layer, consume messages via Apache Kafka or AMQP 1.0 (which Hono uses for "northbound" applications ingesting telemetry data).
If you need Eclipse Hono, I suggest to have a look at the "Cloud 2 Edge" package in the Eclipse IoT Packages project which already automatically sets up and configures both Eclipse Hono and Eclipse Ditto to work with each other:
https://www.eclipse.org/packages/packages/cloud2edge/
If you only need to send data via MQTT, I would suggest to use an MQTT broker (like Eclipse Mosquitto) as this simplifies the setup a lot.
If you have requirements towards supporting multiple IoT protocols or massive scalability requirements, Eclipse Hono is a good choice.

Why use mqtt server for BLE gateway?

I have a BLE temperature sensor, which should send measurements to an ESP32 via a BLE connection and my plan was that the ESP32 could send the measurements via WiFi to my database (Firebase Realtime Database). However, I have seen from a few tutorials that a mqtt server would be neccesary (see the screenshot below - link to the video: https://www.youtube.com/watch?v=PBYCG-ypvRY). Could someone please explain to me why the mqtt component is neccesary? Currently I am measuring temperatures using my ESP32 (without the BLE temperautre sensors) and sending them directly to the database, so I am confused as to why with BLE I would need a mqtt server.
Thanks for your help in advance!
You don't need MQTT. It's just one of the IoT-friendly protocol alternatives (like HTTPS, AMQP, CoAP, homebrew, etc) available to you for device-to-server communication. There are pros and cons to each one. It's up to you to choose whatever solution is relevant to your system.
If you've already implemented the Firebase HTTPS interface and it does the job, you're done.
If you are having problems, note that the Google IoT Core also prescribes MQTT (or, alternatively HTTPS) as an underlying messaging protocol - used together with the Device SDK for Embedded C. But this is for people who want to have a large-scale authentication and management solution for their devices. By all means, stick to your existing solution if it works.

Service Solicitation Advertising Data in Bluetooth Low Energy

My question is about Service Solicitation.
In BLE, there is an option of Service Solicitation in Advertising Data Packet.
What is the meaning of Service Solicitation??
In which situation, we include Service Solicitation Data in Advertising Packet?
The idea is that when a device scans an advertising device, having a particular solicited service uuid in its advertising data, and the scanner itself has that service in its own gatt db, the scanner should connect to that device.
So basically it means that it advertises "anyone having this service, please connect to me".
But I don't think anyone actually uses this feature...

update device with settings from cloud

I have a device which has a settings on it.
The device is uploading data to the cloud.
In the cloud I have settings of the device that I want to do a smart way to update the device settings, but still leave the device the master and stateless. I mean that every request shall come from the device towards the cloud and NACK/ACK will come back to the device.
Currently what we do is to put a command in the database to send to the device according to its serial number. when the device pings to the server, it gets the message with the update. But I do not want to wait for the ping of the BSS. How can I notify the device that a message is waiting for it ?
How do Apple does it with icloud settings to the devices ?
Thanks
Look at the MQTT protocol. This is being promoted by Amazon for IOT devices, and a broker (message router) is available from Amazon. The protocol uses a publish and subscriber model. The devices subscribe to their "topic" something like yourcompany/todevice/serialnumber, and when the server publishes to the same topic, the MQTT broker delivers the message. the messages normally use JSON protocol.

GPS data to a website

There is a GPS device which can send data to IP:Port. I have a website hosted on IP 1.2.3.4
Can I send GPS data from the device to that website? 1.2.3.4:8080? How I will retrieve the data?
This is the device
http://cgi.ebay.com/GSM-GPRS-GPS-Vehicle-Car-Tracking-System-Tracker-Device-/270683202099?pt=AU_Car_Parts_Accessories&hash=item3f05f9e233
Maybe this should be a comment...
To be honest we can't answer that question the device will most likely use its own data format(s) so the service that receives from it will have to implement those. Additionally the device might not support web protocols, it could use raw TCP sockets for example, so you may have to implement a listener service that adheres to those protocols. In fact it looks like the device uses GSM (a mobile telephony standard), so using a web site to receive the data is definately off the cards unless you have a GSM proxy service sitting between the device and the web server.
Assuming that you are allowed to implement your own service it follows that the documentation will include the necessary details and if you are lucky a full SDK that you can use.

Resources