Hardware and software to build a web service for receiving sms (and recycling old and travel simcards).

Giulio bfeb1f67b1 Frontend init 1 year ago
agent 3b88286b6b Modem communication working 1 year ago
frontend bfeb1f67b1 Frontend init 1 year ago
.gitignore 83213dbc46 gitignore 1 year ago
README.md 6651b254d5 Agent draft 1 year ago




Many websites allow you to freely receive sms and most of them are ad supported. They are mostly used for registration to services which do require phone number confirmation. Some of this services can be tricked by using a Voip numbers as the ones provided for example by Nexmo while others try to detect Voip numbers and discard them so a physicial SIM may be required.

This is a simple build of a cheap device that can receive SMS from multiple physical numbers and publish their contents on a web server in real time. It also integrates the use of Voip numbers.

It is an open source clone of something like this 16 MTK GSM Modem Bulk


# Part Cost
4 AI-Thinker A6 GSM Module ~23
4 USB TTL Adapter ~3
1 NanoPI Neo 2 ~20
1 16GB MicroSD ~3
1 4 Port USB Hub ~1
1 5V 10A Power Supply ~9
n Spare cables ~3
Total ~70eur




The NanoPI Neo2 is used for controlling the GSM modules. Any other device which can be powered via USB or via 5V DC and has a usb port which suppport a USB Hub is fine. Adding more modules should be trivial by just using a bigger USB hub. The code is written in python and simply opens a serial connection with any modem to check for incoming messages. When messages are found, the agent will send a put request with the message's sender and text to the web fronted which can be either hosted on the same machine or elsewhere


Numbers needs to be specified because most of the times they aren't written on the sim card. Sim cards may be hotswapped, but if this config isn't updated the wrong receiving number will be displayed on the frontend. imei is optional and if specified it will cause the agent to run AT+EMGR=1,7,"imei" on the target modem.



Hostname and secret key used for updating the frontend. May as well be