Added details and Links
For my Esp8266 I wanted a easy way to send to my Cell Phone an SMS message.
For example: On a normal computers (Workstations and Raspberry PI) it is a simple mater of using "curl" to access an Open SMS Gateway (see previous post). I used this feature to report simple things like "reboot" and "backup finished" messages.
One such Open SMS Gateway is "textbelt.com", which is the one that I use. But, recently they were "black listed" by some of the Phone Carriers (my carrier) for abuse, apparently there was too much illegal traffic by the Gateway's users.
Textbelt has recently fixed the abuse and their Gateways is up and running again, or at least for my carrier.
For the Exp8266, I have created some functions that implements the "curl" protocol, (the heavy lifting), so now paging to my Cell Phone is a snap.
I am providing the functions here as just application snippets, hopefully you find them useful. I will put this in my ERB-EspWebServer GitHub (eventually).
The Setup:
// The Setup
#define OPT_MONITOR_DEBUG_OUTPUT 1
// ERB - Force format stings and string constants into FLASH Memory
// USE WITH CAUTION !
// I use E() as an Alias for F() so that DEBUG code can be inserted
#define E(x) F(x)
// Used as an F() when being used as the first Element of a Multi-Element Expression
#define sE(x) String( F(x) )
// Defaults for Pager
#define DEFAULT_PAGE_GATEWAY "textbelt.com"
#define DEFAULT_PAGE_PORT 80
#define DEFAULT_PAGE_NUMBER "202-555-1212"
#define DEFAULT_PAGE_MESSAGE "Test"
boolean gPageStnReady = false;
The Functions:
// Pager
// ###########################################################
//////////////////////////////////////////////////////////////
//
// Provides easy access to page via SMS Gateway
//
boolean
//ICACHE_FLASH_ATTR
page( String aMesgText = DEFAULT_PAGE_MESSAGE,
String aNumber = DEFAULT_PAGE_NUMBER,
String aHost = DEFAULT_PAGE_GATEWAY,
int aPort = DEFAULT_PAGE_PORT )
{
digitalWrite ( gBluLED, ON );
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
Serial.println ( );
Serial.println ( E("Starting Pager Client ...") );
#endif
String timeUTCBuf = "";
String mesgTextHeader = String(gDeviceName)
+ E(": ")
+ String(gRev)
+ E(", ")
+ timeUTC(timeUTCBuf, gTimeZONE)
+ E(" - ");
String mesg="number=" + aNumber
+ "&message=" + mesgTextHeader + aMesgText ;
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
Serial.println( sE(" Connecting to: ") + aHost );
#endif
// Use WiFiClient class to create TCP connections
WiFiClient client;
if (!client.connect(aHost.c_str(), aPort)) {
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
Serial.println(" Connection Failed");
#endif
return false;
}
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
Serial.println( sE(" MESG: ") + mesg );
#endif
// This will send the request to the server
client.print( sE("POST /text/ HTTP/1.1\r\n")
+ E("User-Agent: Esp8266/") + gRev + E("\r\n")
+ E("Host: ") + aHost + E("\r\n")
+ E("Accept: */*\r\n")
+ E("Content-Length: ")
+ String( mesg.length() ) + E("\r\n")
+ E("Content-Type: application/x-www-form-urlencoded\r\n")
+ E("\r\n") // The Required Blank Line
+ mesg + E("\r\n") );
delay(10);
// Wait for Client to Start Sending
int i = 0;
while( !client.available() ) {
delay(10);
if (i++ > 200) break;
}
// Read all the lines of the reply from server and print some to Serial
boolean myStatus = false;
while(client.available()){
String line = client.readStringUntil('\n');
if(line.indexOf("\"success\": true") >= 0) {
myStatus = true;
}
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
if(line.indexOf("\"success\": ") >= 0 ||
line.indexOf("\"message\": ") >= 0
) Serial.println(line);
#endif
}
client.flush();
client.stop();
#if (OPT_MONITOR_DEBUG_OUTPUT) > 0
Serial.println(" Connection Closed");
#endif
digitalWrite ( gBluLED, OFF );
return myStatus;
}
// ###########################################################
//////////////////////////////////////////////////////////////
//
// Provides easy access to Pager via SMS Gateway
//
unsigned long gPageHoldOff = millis();
void
//ICACHE_FLASH_ATTR
pageOnStnReady() {
if ( gPageHoldOff < millis() ) {
gPageHoldOff = millis() + 1 * MINs;
if ( gPageStnReady == false ) {
gPageStnReady = page("Stn Ready");
}
}
return;
}
// ###########################################################
// End
Let me know if you find this useful, leave a comment.
-- Home Page: https://WA0UWH.blogspot.com
No comments:
Post a Comment