We need to make a full stack load testing. And the data journey is starting from mqtt client. Are there any good services to make a load testing for such case?
Depending on the number of virtual users you would like to simulate and your budget the options are in:
CloudMQTT service which is free for 5 connections and 10 Kbit/s bandwidth
Apache JMeter is a free and open source multi-protocol load testing tool. Out of the box JMeter does not support MQTT protocol however there are plugins like:
mqtt-jmeter
MQTT plugin
Check out Testing the MQTT Messaging Broker for IoT - A Guide
MQTT-Stresser
MQTT Toolbox
So feel free to choose one of the above (or other solution), the final choice mostly depends on your project infrastructure and possibility of i of test tool ntegration into your product delivery lifecycle
Related
I am tring to create a vehicle tracking system based on GPS & GMS using Teltonika FMB920 tracking device. I am a bit confused on following things:
How to setup the server for communicating with the device.
How to save the data sent from the device on the server.
Can I use any cloud platform like Azure or AWS IoT features for this purpose.
Any guidance in this regard will be really helpful for me.
How to setup the server for communicating with the device.
Teltonika fmbxxx typically send data using websockets TCP or UDP protocol. To setup the server correctly, the port that will be listening for data needs to be opened in the server and the server address and port need to be configured on the device with the teltonika configurator tool
how to update server settings in configurator tool
How to save the data sent from the device on the server.
This depends on your use case but a good idea could be to use nosql database to save the data from device received by the server since its easier to scale when data size grows and easy to query and read the data
Can I use any cloud platform like Azure or AWS IoT features for this purpose.
AFAIK yes you can. essentially what is need is server instance with a websocket client application that can receive data from tcp/udp protocol
I have server A which runs under Windows (C#), I have server B which runs under Linux (Java). I need to setup a fast and reliable way of interaction between these two servers.
Requirements:
The size of data is small (many small messages of kbyte or something)
The rate is 1 message per second at least; good to have 1 per ms
The order should be preserved
Persistency not required
Delivery confirmation - yes
Some options out of my head:
Kafka / other messaging systems. The downsize is that I have to use a
middleware in a form of server.
Use Cloud queues from AWS or other cloud service. Can be costly?
Own messaging via TCP messages (very time consuming, I guess there
are open-source alternatives). No middleware.
Somehow via shared filesystem?
Setup Linux Server on Windows and.. what? Any special options if
applications are sharing same host?
Are there plans to build a Bluemix service for BACnet devices, if so, when will it be available.
This would be a great service for industrial device automation, to gather information from devices into a corporate Oracle database for analysis.
Thanks
BACnet defines a multitude of transport protocols besides TCP/IP. So you will most likely (since it is a mature protocol) find the bulk of devices communicating via something else than TCP/IP.
The specification mentions a BACnet Broadcast Management Device, which would be most likely the communications endpoint talking to Bluemix.
Using the IoT Foundation Service in Bluemix, you can reach Bluemix trough: TCP, UDP, MQ, MQTT, HTTP - basically anything that sends IP.
Have a look at the Bluemix service NodeRED that gives you head start.
What I would do:
NodeRed runs on PC or Raspberry PI too - use Thingbox for the PI
The PI has been shown to run BACNet
You even can buy BacNET for PI
Now the tricky part (we could collaborate on that): build some Nodes for NodeRED to do the BacNET interaction
With this approach you decouple the local BacNET network from the cloud. I would then use MQ(TT) to talk to the cloud, so you don't loose data when there is a connection challenge (e.g. you use 3G).
Does that help?
Take a look at the BACnet to IBM Watson IoT Gateway at
http://go-iot.io/try-bacnetws/
There is a link there to the Watson recipe and also a quite interesting link to a live BlueMix demo programmed in Node-REED using the BACnet to Watson IoT Gateway.
Notice that this gateway can also be used to tunnel BACnet/WS requests via MQTT to Watson, that is quite interesting.
BACnet/WS is the new RES Web Service standard from BACnet.
We have acquired a 4 channel GSM Gateway, model GoIPx4-G610 (the manual is titled "GoIP Series SIM Card for GSM Voice Gateway - GSM VOIP Gateway").
We are looking to develop a custom application to control the GOIP gateway. We have developed in the past custom applications that controlled simple GSM modems through AT commands for sending/receiving SMS messages in particular.
Although the gateway can be controlled through SIP we would like to control the GSM modems embedded in the gateway through AT commands if possible. This is because of the fine grained control AT commands offer and because we do not need VoIP features since we need only to send/receive SMS messages.
The gateway runs an unknown Linux instance to which we can connect through telnet. Unfortunately we do not have the credentials to authenticate to it. The gateway also has a web http administration interface to which we can authenticate but we can't find there settings/information related to channels that we can use for AT commands.
The documentation is very poor and the provider could not offer us any helpful information regarding this.
If anyone knows how we can send AT commands to the modems inside the gateway it is highly appreciated.
Up to now we have tried a brute force attack on the telnet interface to find the credentials with no success. We hope that once we can connect to the Linux instance driving the gateway we can connect from there to the modems through serial connections (to send AT commands) and we can reconfigure it to redirect the connections outside of the modem or to make an interface for sending commands to the modems.
The device has an update firmware option (through the web interface) which always gives the error "download failed". Downloaded the firmware (.pkg file) manually from their update pages and extracted the files from the embedded Linux distribution that should correspond to the ones placed on the gateway. The files were kept in the pkg file as an ROMFS compressed image which we mounted on a test station to see the files (probably the running OS on the gateway is an uClinux distribution).
Did this hoping that we can find there the /etc/passwd file which could be cracked with classic attack. However didn't found it and probably that file is placed on the gateway flash memory (contrary to the Linux files which are stored on the ROM memory). So if there is a way to erase / reset this flash memory that could be a solution (in case the gateway doesn't refuse to boot without those files). Another solution would be to be able to access the flash memory with the passwd file if there is such thing.
You might take the lid off and see what parts are inside.
If it's a general purpose processor with a published data sheet and without a lot of code security features, you might be in luck. For example, you might find:
By guessing headers or tracing from known pins, a console serial port, either logic level or RS232, hopefully with a shell listening
A boot mode pin for the micro connected to a resistor, which you could jumper to cause the micro to boot to a uart bootloader where you could download a new system image, or patch the existing one. If you are lucky the bootloader would be something known, like u-boot.
A JTAG port for the processor
A removable storage device which you could remove and alter
an SPI flash which you could carefully tap into and alter
A flash chip which you could desolder and transplant to a programmer
You could also make a GPL sources request for the kernel and whatever else from the vendor. Or even just trying to identify versions of things like a web server could help you look up any known exploits. Since it seems you have a similar system image to that which is installed, looking through it could be helpful - look for additional daemons running, listening on ports you weren't previously aware of, left over debug support, etc.
I am the developer of the GoIP you've purchased. Instead of trying to hack the GoIP, did you contact us to support your development of custom applications? Here are the updates of GoIP for you.
GoIP now supports SMPP. This could be an alternative to using AT commands to send and receive SMS.
API (Application Programming Interface) for GoIP is now available to support your custom application development.
If AT commands are still the preferred method, please contact us and I would be happy to discuss with you further.
What is the best way to make a standalone java server built using J2SE Socket API high available? Using an HTTP server would have been a good choice specially for the built-in features e.g. security, clustering, transactions, etc. but the server should be capable of accepting TCP/IP socket connection from java & non-java clients (mainly legacy). Tomcat does not accept non-http TCP/IP requests? Moreover this post points out servlet for implementing socket connection it's not a good practice. What would be good approach?
After exploring online, this is what I have compe up with. A standalone java application can be made high available by using a combination of the following:
2 VM deployed with HAproxy and keepalived to form the highly available load balancing layer.
Keepalived will keep the load balancers in active-passive mode and the HAproxy will forward the requests to a cluster of backend socket based java server apps
At least 2 VM deployed with the custom socket based java server apps. The HAproxy servers will distribute the requests over these 2 VMs
Use at least 2 terracotta server to share the java server apps. Terracotta will provide the sharing of the memory and help the custom java servers to scale.
Use MySQL NDB Cluster for the database.
Any suggestions?