Program to read Moisture and Alcohol sensor and uploads the data to Aeris Aercloud Platform.

Dependencies:   mbed

Committer:
geojins
Date:
Wed Jun 10 18:31:16 2015 +0000
Revision:
2:6eeb2ec5c808
Parent:
1:78c10a2e1029
removed conf data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
geojins 0:dc0d8730c20e 1 /*
geojins 0:dc0d8730c20e 2 Dragon Fly Sample Program for MultiTech Connected Cooler
geojins 0:dc0d8730c20e 3 */
geojins 0:dc0d8730c20e 4
geojins 0:dc0d8730c20e 5 // AerCloud sample code for Dragon Fly Sample Program for MultiTech Connected Cooler - created for following hardware:
geojins 0:dc0d8730c20e 6 // ST Nucleo F411RE http://developer.mbed.org/platforms/ST-Nucleo-F411RE/
geojins 0:dc0d8730c20e 7 // ST Sensor Board http://developer.mbed.org/teams/ST-Americas-mbed-Team/wiki/Getting-Started-with-Nucleo-Sensors
geojins 0:dc0d8730c20e 8 // MultiTech Socket Modem Shield: http://developer.mbed.org/components/Multi-Tech-SocketModem-Arduino-Shield-MT/
geojins 0:dc0d8730c20e 9 // MultiTech http://developer.mbed.org/teams/Multi-Hackers/code/MTSAS_Cellular_HTTP_Example/
geojins 0:dc0d8730c20e 10 // MultiTech MTSMC-EV3 CDMA Socket Modem http://www.multitech.com/models/92503350LF#gsc.tab=0
geojins 0:dc0d8730c20e 11 // Details on AerCloud: http://www.aeris.com/technology/aercloud/
geojins 0:dc0d8730c20e 12 // AerCloud Developer Forum: https://developer.aeris.com/
geojins 0:dc0d8730c20e 13 //
geojins 0:dc0d8730c20e 14 // Sample writes moistureValue & alcoholValue to an AerCloud container
geojins 0:dc0d8730c20e 15 //
geojins 0:dc0d8730c20e 16 // Dependencies:
geojins 0:dc0d8730c20e 17 // mbed HTTP Client Libary
geojins 0:dc0d8730c20e 18 // DragonFly Support Library
geojins 0:dc0d8730c20e 19 // mtsas Modem Library
geojins 0:dc0d8730c20e 20 // mbed Library
geojins 0:dc0d8730c20e 21 //
geojins 0:dc0d8730c20e 22 // To get the sample running, you'll need to fill in the following parameters below
geojins 0:dc0d8730c20e 23 // Your cellular provider's APN: APN
geojins 0:dc0d8730c20e 24 // AerCloud API Key: AC_APIKEY
geojins 0:dc0d8730c20e 25 // AerCloud Account ID: acId
geojins 0:dc0d8730c20e 26 // AerCloud Container: AC_CONTAINER
geojins 0:dc0d8730c20e 27 //
geojins 0:dc0d8730c20e 28 // and you'll also need to create an AerCloud contianer with the schema
geojins 0:dc0d8730c20e 29 // described below
geojins 0:dc0d8730c20e 30 //
geojins 0:dc0d8730c20e 31
geojins 0:dc0d8730c20e 32 #include "mbed.h"
geojins 0:dc0d8730c20e 33 #include "mtsas.h"
geojins 0:dc0d8730c20e 34 #include "HTTPClient.h"
geojins 0:dc0d8730c20e 35
geojins 0:dc0d8730c20e 36 //------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 37 // Connectivity Parameters
geojins 0:dc0d8730c20e 38 //------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 39
geojins 0:dc0d8730c20e 40 //! Aeris SIM does not use PIN
geojins 0:dc0d8730c20e 41 #define SIMPIN NULL
geojins 0:dc0d8730c20e 42
geojins 0:dc0d8730c20e 43 //! The APN of your Aeris SIM
geojins 0:dc0d8730c20e 44 // You can find the APN for your SIM at https://aerport.aeris.com
geojins 2:6eeb2ec5c808 45 char _APN[] = "APN_GOES_HERE";
geojins 0:dc0d8730c20e 46
geojins 0:dc0d8730c20e 47 //! User name and password are not required to use Aeris APN
geojins 0:dc0d8730c20e 48 #define USERNAME NULL
geojins 0:dc0d8730c20e 49
geojins 0:dc0d8730c20e 50 //! User name and password are not required to use Aeris APN
geojins 0:dc0d8730c20e 51 #define PASSWORD NULL
geojins 0:dc0d8730c20e 52
geojins 0:dc0d8730c20e 53 /*
geojins 0:dc0d8730c20e 54 char _AERCLOUD_API_KEY[] ="_Click_On_KEY_AerCloud_Tab";
geojins 0:dc0d8730c20e 55 char _AERCLOUD_ACCOUNT_ID[] = "_Company_Number_Top_of_Page";
geojins 0:dc0d8730c20e 56 char _AERCLOUD_CONTAINER[] = "_From_Container_Page";
geojins 0:dc0d8730c20e 57 char _AERCLOUD_DEVICE_ID[] = "_Random_Title";
geojins 0:dc0d8730c20e 58 */
geojins 0:dc0d8730c20e 59
geojins 0:dc0d8730c20e 60 // ------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 61 // AerCloud Paramers
geojins 0:dc0d8730c20e 62 // ------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 63
geojins 0:dc0d8730c20e 64 // AerCloud BASE URL
geojins 0:dc0d8730c20e 65 #define AC_BASE "http://api.aercloud.aeris.com/v1"
geojins 0:dc0d8730c20e 66
geojins 0:dc0d8730c20e 67 //! AerCloud API Key
geojins 0:dc0d8730c20e 68 // You can find your api key at https://aerport.aeris.com"
geojins 2:6eeb2ec5c808 69 #define AC_APIKEY "API_KEY_GOES_HERE"
geojins 0:dc0d8730c20e 70
geojins 0:dc0d8730c20e 71 //! Aercloud Account Id
geojins 0:dc0d8730c20e 72 // You can find your account id at https://aerport.aeris.com
geojins 2:6eeb2ec5c808 73 int acId = 0;// ACCOUNT_ID_GOES_HERE;
geojins 0:dc0d8730c20e 74
geojins 0:dc0d8730c20e 75 // AerCloud Container
geojins 0:dc0d8730c20e 76 // The name of the AerCloud Container to write data into
geojins 0:dc0d8730c20e 77 #define AC_CONTAINER "MLT_WORKSHOP_TS" // Contianer to write Time Series Data
geojins 0:dc0d8730c20e 78 #define AC_CONTAINER_ALARM "MLT_WORKSHOP_ALARM" // Container to write Alarm specific data
geojins 0:dc0d8730c20e 79
geojins 0:dc0d8730c20e 80 //------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 81 // AerCloud SCL (Device) Data Model
geojins 0:dc0d8730c20e 82 // ------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 83 //
geojins 0:dc0d8730c20e 84 // Code assumes an AerCloud Data Model (MLT_WORKSHOP_TS) with following fields
geojins 0:dc0d8730c20e 85 //
geojins 0:dc0d8730c20e 86 // moistureSensorValue FLOAT Value read frrom moisture sensor
geojins 0:dc0d8730c20e 87 // moistureProcessedValue FLOAT Processed value of moisture sensor (LOW / MEDIUM / HIGH)
geojins 0:dc0d8730c20e 88 // alcoholSensorValue FLOAT Value read frrom alcohol sensor
geojins 0:dc0d8730c20e 89 // alcoholProcessedValue FLOAT Processed value of alcohol sensor (LOW / MEDIUM / HIGH)
geojins 0:dc0d8730c20e 90 // sclid INT Device-id
geojins 0:dc0d8730c20e 91 // timeStamp LONG timestamp when event occurred
geojins 0:dc0d8730c20e 92 //
geojins 0:dc0d8730c20e 93 // Code assumes an AerCloud Data Model (MLT_WORKSHOP_ALARM) with following fields
geojins 0:dc0d8730c20e 94 //
geojins 0:dc0d8730c20e 95 // alarmText STRING alarm string
geojins 0:dc0d8730c20e 96 // timeStamp LONG time at which alarn has been generated
geojins 0:dc0d8730c20e 97 // sclid INT Device-id
geojins 0:dc0d8730c20e 98 //
geojins 0:dc0d8730c20e 99 //------------------------------------------------------------------------------------
geojins 0:dc0d8730c20e 100
geojins 0:dc0d8730c20e 101
geojins 0:dc0d8730c20e 102 // Define alcoholSensor and moisture input PIN
geojins 0:dc0d8730c20e 103 AnalogIn alcoholSensor(A3);
geojins 0:dc0d8730c20e 104 AnalogIn moisture(A2);
geojins 0:dc0d8730c20e 105
geojins 0:dc0d8730c20e 106 float moistureValue = 0.0f;
geojins 0:dc0d8730c20e 107 float alcoholValue = 0.0f;
geojins 0:dc0d8730c20e 108 float moistureProcessedValue = 0.0f;
geojins 0:dc0d8730c20e 109 float alcoholProcessedValue = 0.0f;
geojins 0:dc0d8730c20e 110
geojins 0:dc0d8730c20e 111 float moistureLastPeakValue = 0.0f;
geojins 0:dc0d8730c20e 112 float alcoholLastPeakValue = 0.0f;
geojins 0:dc0d8730c20e 113
geojins 0:dc0d8730c20e 114 // Enumeration for sensor
geojins 0:dc0d8730c20e 115 #define MOISTURE_SENSOR 1
geojins 0:dc0d8730c20e 116 #define ALCOHOL_SENSOR 2
geojins 0:dc0d8730c20e 117
geojins 0:dc0d8730c20e 118 // Enumeration for Range
geojins 0:dc0d8730c20e 119 #define LOW 1
geojins 0:dc0d8730c20e 120 #define MEDIUM 2
geojins 0:dc0d8730c20e 121 #define HIGH 3
geojins 0:dc0d8730c20e 122
geojins 0:dc0d8730c20e 123
geojins 0:dc0d8730c20e 124 char str[512];
geojins 0:dc0d8730c20e 125 char *simImei;
geojins 0:dc0d8730c20e 126
geojins 0:dc0d8730c20e 127 const char* HttpResultToString(HTTPResult r)
geojins 0:dc0d8730c20e 128 {
geojins 0:dc0d8730c20e 129 switch(r) {
geojins 0:dc0d8730c20e 130 case HTTP_PROCESSING:
geojins 0:dc0d8730c20e 131 return "HTTP_PROCESSING";
geojins 0:dc0d8730c20e 132 case HTTP_PARSE:
geojins 0:dc0d8730c20e 133 return "HTTP_PARSE";
geojins 0:dc0d8730c20e 134 case HTTP_DNS:
geojins 0:dc0d8730c20e 135 return "HTTP_DNS";
geojins 0:dc0d8730c20e 136 case HTTP_PRTCL:
geojins 0:dc0d8730c20e 137 return "HTTP_PRTCL";
geojins 0:dc0d8730c20e 138 case HTTP_NOTFOUND:
geojins 0:dc0d8730c20e 139 return "HTTP_NOTFOUND - 404";
geojins 0:dc0d8730c20e 140 case HTTP_REFUSED:
geojins 0:dc0d8730c20e 141 return "HTTP_REFUSED - 403";
geojins 0:dc0d8730c20e 142 case HTTP_ERROR:
geojins 0:dc0d8730c20e 143 return "HTTP_ERROR";
geojins 0:dc0d8730c20e 144 case HTTP_TIMEOUT:
geojins 0:dc0d8730c20e 145 return "HTTP_TIMEOUT";
geojins 0:dc0d8730c20e 146 case HTTP_CONN:
geojins 0:dc0d8730c20e 147 return "HTTP_CONN";
geojins 0:dc0d8730c20e 148 case HTTP_CLOSED:
geojins 0:dc0d8730c20e 149 return "HTTP_CLOSED";
geojins 0:dc0d8730c20e 150 case HTTP_OK:
geojins 0:dc0d8730c20e 151 return "HTTP_OK";
geojins 0:dc0d8730c20e 152 }
geojins 0:dc0d8730c20e 153
geojins 0:dc0d8730c20e 154 return "UNKNOWN ERROR CODE";
geojins 0:dc0d8730c20e 155 }
geojins 0:dc0d8730c20e 156
geojins 0:dc0d8730c20e 157 //Phone number to send to and receive from. Must be in the form "1xxxxxxxxxx"
geojins 0:dc0d8730c20e 158 string PHONE_NUMBER = "CHANGE ME PLEASE";
geojins 0:dc0d8730c20e 159
geojins 0:dc0d8730c20e 160 int main()
geojins 0:dc0d8730c20e 161 {
geojins 0:dc0d8730c20e 162 bool simProvisioned = false;
geojins 0:dc0d8730c20e 163 int ret;
geojins 0:dc0d8730c20e 164
geojins 0:dc0d8730c20e 165 printf("Dragon Fly Sample Program for MultiTech Connected Cooler ...\n\r");
geojins 0:dc0d8730c20e 166
geojins 0:dc0d8730c20e 167 //Sets the log level to INFO, higher log levels produce more log output.
geojins 0:dc0d8730c20e 168 //Possible levels: NONE, FATAL, ERROR, WARNING, INFO, DEBUG, TRACE
geojins 0:dc0d8730c20e 169 MTSLog::setLogLevel(MTSLog::TRACE_LEVEL);
geojins 0:dc0d8730c20e 170
geojins 0:dc0d8730c20e 171 /** STMicro Nucelo F411RE
geojins 0:dc0d8730c20e 172 * The supported jumper configurations of the MTSAS do not line up with
geojins 0:dc0d8730c20e 173 * the pin mapping of the Nucleo F411RE. Therefore, the MTSAS serial TX
geojins 0:dc0d8730c20e 174 * pin (JP8 Pin 2) must be manually jumped to Serial1 RX (Shield pin D2)
geojins 0:dc0d8730c20e 175 * and the MTSAS serial RX pin (JP9 Pin 2) pin must be manually jumped to
geojins 0:dc0d8730c20e 176 * Serial1 TX (Shield pin D8).
geojins 0:dc0d8730c20e 177 */
geojins 0:dc0d8730c20e 178 printf("Before initiating io");
geojins 0:dc0d8730c20e 179 MTSSerialFlowControl* io = new MTSSerialFlowControl(RADIO_TX, RADIO_RX, RADIO_RTS, RADIO_CTS);
geojins 0:dc0d8730c20e 180 printf("After initiating io");
geojins 0:dc0d8730c20e 181
geojins 0:dc0d8730c20e 182 //Sets the baud rate for communicating with the radio
geojins 0:dc0d8730c20e 183 io->baud(115200);
geojins 0:dc0d8730c20e 184 printf("*****1*********");
geojins 0:dc0d8730c20e 185
geojins 0:dc0d8730c20e 186 //Creates a radio object
geojins 0:dc0d8730c20e 187 Cellular* radio = CellularFactory::create(io);
geojins 0:dc0d8730c20e 188 printf("*****2*********");
geojins 0:dc0d8730c20e 189
geojins 0:dc0d8730c20e 190 if (! radio) {
geojins 0:dc0d8730c20e 191 logFatal("failed to create Cellular object - exiting");
geojins 0:dc0d8730c20e 192 printf("failed to create Cellular object - exiting.\n\r");
geojins 0:dc0d8730c20e 193 return 1;
geojins 0:dc0d8730c20e 194 }
geojins 0:dc0d8730c20e 195 printf("*****3*********");
geojins 0:dc0d8730c20e 196
geojins 0:dc0d8730c20e 197 radio->configureSignals(D11,D7,RESET); // Modified Flow Control for ST Sensor Board D11
geojins 0:dc0d8730c20e 198 printf("*****4*********");
geojins 0:dc0d8730c20e 199
geojins 0:dc0d8730c20e 200 Transport::setTransport(radio); // Required to control Cell Radio vs WiFi solution
geojins 0:dc0d8730c20e 201 printf("*****5*********");
geojins 0:dc0d8730c20e 202
geojins 0:dc0d8730c20e 203 while (radio->setApn(_APN) != MTS_SUCCESS) {
geojins 0:dc0d8730c20e 204 logError("failed to set APN [%s]", _APN);
geojins 0:dc0d8730c20e 205 printf("failed to set APN.\n\r");
geojins 0:dc0d8730c20e 206 wait(2);
geojins 0:dc0d8730c20e 207 }
geojins 0:dc0d8730c20e 208 printf("*****6*********");
geojins 0:dc0d8730c20e 209
geojins 0:dc0d8730c20e 210 while (! radio->connect()) {
geojins 0:dc0d8730c20e 211 logError("failed to bring up PPP link");
geojins 0:dc0d8730c20e 212 printf("failed to bring up PPP link.\n\r");
geojins 0:dc0d8730c20e 213 wait(2);
geojins 0:dc0d8730c20e 214 }
geojins 0:dc0d8730c20e 215 printf("*****7*********");
geojins 0:dc0d8730c20e 216
geojins 0:dc0d8730c20e 217 printf("Signal Strength: %d\n\r", radio->getSignalStrength()); //Check the signal strength should be above 8
geojins 0:dc0d8730c20e 218
geojins 0:dc0d8730c20e 219 // If you suspect a connectivity issue, uncomment the code below and if ping works. If you are not getting a
geojins 0:dc0d8730c20e 220 // valid ping, there's a connectivity problem. First step is to verify you've got the right APN set
geojins 0:dc0d8730c20e 221 //
geojins 0:dc0d8730c20e 222 // Try pinging default server "8.8.8.8" (Google's DNS)
geojins 0:dc0d8730c20e 223 int ping_valid = 0;
geojins 0:dc0d8730c20e 224 while (ping_valid == 0) {
geojins 0:dc0d8730c20e 225 ping_valid = radio->ping();
geojins 0:dc0d8730c20e 226 // or can use ping_valid = radio->ping("www.google.com");
geojins 0:dc0d8730c20e 227 printf("Ping Valid: %s\n\r", ping_valid ? "true" : "false");
geojins 0:dc0d8730c20e 228
geojins 0:dc0d8730c20e 229 if (ping_valid == 0) {
geojins 0:dc0d8730c20e 230 wait(3);
geojins 0:dc0d8730c20e 231 printf("wait 3");
geojins 0:dc0d8730c20e 232 // wait(33);
geojins 0:dc0d8730c20e 233 }
geojins 0:dc0d8730c20e 234 }
geojins 0:dc0d8730c20e 235
geojins 0:dc0d8730c20e 236 // Get the IMEI of the SIM, this will act as SCL-id on AerCloud
geojins 0:dc0d8730c20e 237 string sImei;
geojins 0:dc0d8730c20e 238 sImei = radio->getEquipmentIdentifier();
geojins 0:dc0d8730c20e 239 simImei = (char*) sImei.c_str();
geojins 0:dc0d8730c20e 240
geojins 0:dc0d8730c20e 241 // Create http client
geojins 0:dc0d8730c20e 242 HTTPClient http;
geojins 0:dc0d8730c20e 243
geojins 0:dc0d8730c20e 244 // Check if SIM is provisioned in AerCloud
geojins 0:dc0d8730c20e 245 printf("\r\nIs the SIM provisioned? ");
geojins 0:dc0d8730c20e 246 char url[512];
geojins 0:dc0d8730c20e 247 snprintf(url, sizeof(url), "%s/%d/scls/%s?apiKey=%s", AC_BASE, acId, simImei, AC_APIKEY);
geojins 0:dc0d8730c20e 248 ret = http.get(url, str, 128);
geojins 0:dc0d8730c20e 249 printf("URL : %s", url);
geojins 0:dc0d8730c20e 250 printf("STR : %s", str);
geojins 0:dc0d8730c20e 251
geojins 0:dc0d8730c20e 252 if (ret == HTTP_OK) {
geojins 0:dc0d8730c20e 253 // We're already provisioned
geojins 0:dc0d8730c20e 254 printf("Yes\r\n");
geojins 0:dc0d8730c20e 255 printf("Page fetched successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 256 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 257 simProvisioned = true;
geojins 0:dc0d8730c20e 258 } else {
geojins 0:dc0d8730c20e 259 printf("No\r\n");
geojins 0:dc0d8730c20e 260 printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 261
geojins 0:dc0d8730c20e 262 //SIM is not provisioned. trying to provision it...
geojins 0:dc0d8730c20e 263 char url[512];
geojins 0:dc0d8730c20e 264 snprintf(url, sizeof(url), "%s/%d/scls?apiKey=%s", AC_BASE, acId, AC_APIKEY);
geojins 0:dc0d8730c20e 265 snprintf(str, sizeof(str), "{\"sclId\":\"%s\"}\0",simImei);
geojins 1:78c10a2e1029 266 HTTPJson outText(str);
geojins 1:78c10a2e1029 267 HTTPJson inText(str, 512);
geojins 1:78c10a2e1029 268
geojins 0:dc0d8730c20e 269 ret = http.post(url, outText, &inText);
geojins 0:dc0d8730c20e 270
geojins 0:dc0d8730c20e 271 if (!ret) {
geojins 0:dc0d8730c20e 272 printf("Executed POST successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 273 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 274 simProvisioned = true;
geojins 0:dc0d8730c20e 275 } else {
geojins 0:dc0d8730c20e 276 if(http.getHTTPResponseCode() == 200)
geojins 0:dc0d8730c20e 277 simProvisioned = true;
geojins 0:dc0d8730c20e 278 printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 279 }
geojins 0:dc0d8730c20e 280 }
geojins 0:dc0d8730c20e 281
geojins 0:dc0d8730c20e 282 //POST data to containers if SIM has been successfully provisioned
geojins 0:dc0d8730c20e 283 if (simProvisioned) {
geojins 0:dc0d8730c20e 284 while(1) {
geojins 0:dc0d8730c20e 285
geojins 0:dc0d8730c20e 286 // Read data from sensor
geojins 0:dc0d8730c20e 287 char alarmStringM[512] = "";
geojins 0:dc0d8730c20e 288 bool generateAlertM = false;
geojins 0:dc0d8730c20e 289
geojins 0:dc0d8730c20e 290 moistureValue = moisture;
geojins 0:dc0d8730c20e 291 printf("Moisture value read : %f \n\n",moistureValue);
geojins 0:dc0d8730c20e 292 if (moistureValue > .5f) {
geojins 0:dc0d8730c20e 293 moistureProcessedValue = HIGH;
geojins 0:dc0d8730c20e 294 } else if (moistureValue > .25f) {
geojins 0:dc0d8730c20e 295 moistureProcessedValue = MEDIUM;
geojins 0:dc0d8730c20e 296 } else {
geojins 0:dc0d8730c20e 297 moistureProcessedValue = LOW;
geojins 0:dc0d8730c20e 298 }
geojins 0:dc0d8730c20e 299
geojins 0:dc0d8730c20e 300 if (moistureLastPeakValue != moistureProcessedValue) { //condition to trigger alarm
geojins 0:dc0d8730c20e 301 if (moistureLastPeakValue == 0) { // first time
geojins 0:dc0d8730c20e 302 moistureLastPeakValue = moistureProcessedValue;
geojins 0:dc0d8730c20e 303 generateAlertM = false;
geojins 0:dc0d8730c20e 304 } else {
geojins 0:dc0d8730c20e 305 if (moistureLastPeakValue == LOW) {
geojins 0:dc0d8730c20e 306 if (moistureProcessedValue == MEDIUM) {
geojins 0:dc0d8730c20e 307 strcpy (alarmStringM, "Moisture level going up from LOW to MEDIUM");
geojins 0:dc0d8730c20e 308 } else if (moistureProcessedValue == HIGH) {
geojins 0:dc0d8730c20e 309 strcpy (alarmStringM, "Moisture level going up from LOW to HIGH");
geojins 0:dc0d8730c20e 310 }
geojins 0:dc0d8730c20e 311 } else if (moistureLastPeakValue == MEDIUM) {
geojins 0:dc0d8730c20e 312 if (moistureProcessedValue == LOW) {
geojins 0:dc0d8730c20e 313 strcpy (alarmStringM, "Moisture level going down from MEDIUM to LOW");
geojins 0:dc0d8730c20e 314 } else if (moistureProcessedValue == HIGH) {
geojins 0:dc0d8730c20e 315 strcpy (alarmStringM, "Moisture level going up from MEDIUM to HIGH");
geojins 0:dc0d8730c20e 316 }
geojins 0:dc0d8730c20e 317 } else if (moistureLastPeakValue == HIGH) {
geojins 0:dc0d8730c20e 318 if (moistureProcessedValue == LOW) {
geojins 0:dc0d8730c20e 319 strcpy (alarmStringM, "Moisture level going down from HIGH to LOW");
geojins 0:dc0d8730c20e 320 } else if (moistureProcessedValue == MEDIUM) {
geojins 0:dc0d8730c20e 321 strcpy (alarmStringM, "Moisture level going down from HIGH to MEDIUM");
geojins 0:dc0d8730c20e 322 }
geojins 0:dc0d8730c20e 323 }
geojins 0:dc0d8730c20e 324 moistureLastPeakValue = moistureProcessedValue;
geojins 0:dc0d8730c20e 325 generateAlertM = true;
geojins 0:dc0d8730c20e 326 }
geojins 0:dc0d8730c20e 327 }
geojins 0:dc0d8730c20e 328
geojins 0:dc0d8730c20e 329 char alarmStringA[512] = "";
geojins 0:dc0d8730c20e 330 bool generateAlertA = false;
geojins 0:dc0d8730c20e 331
geojins 0:dc0d8730c20e 332 alcoholValue = 1 - alcoholSensor; // as per example logic value needs to be subtracted from 1 (inverse value)
geojins 0:dc0d8730c20e 333 printf("Alcohol value read : %f \n\n",alcoholValue);
geojins 0:dc0d8730c20e 334 if (alcoholValue > .5f) {
geojins 0:dc0d8730c20e 335 alcoholProcessedValue = HIGH;
geojins 0:dc0d8730c20e 336 } else if (alcoholValue > .25f) {
geojins 0:dc0d8730c20e 337 alcoholProcessedValue = MEDIUM;
geojins 0:dc0d8730c20e 338 } else {
geojins 0:dc0d8730c20e 339 alcoholProcessedValue = LOW;
geojins 0:dc0d8730c20e 340 }
geojins 0:dc0d8730c20e 341
geojins 0:dc0d8730c20e 342 if (alcoholLastPeakValue != alcoholProcessedValue) { //condition to trigger alarm
geojins 0:dc0d8730c20e 343 if (alcoholLastPeakValue == 0) { // first time
geojins 0:dc0d8730c20e 344 alcoholLastPeakValue = alcoholProcessedValue;
geojins 0:dc0d8730c20e 345 generateAlertA = false;
geojins 0:dc0d8730c20e 346 } else {
geojins 0:dc0d8730c20e 347 if (alcoholLastPeakValue == LOW) {
geojins 0:dc0d8730c20e 348 if (alcoholProcessedValue == MEDIUM) {
geojins 0:dc0d8730c20e 349 strcpy (alarmStringA, "Alcohol level going up from LOW to MEDIUM");
geojins 0:dc0d8730c20e 350 } else if (alcoholProcessedValue == HIGH) {
geojins 0:dc0d8730c20e 351 strcpy (alarmStringA, "Alcohol level going up from LOW to HIGH");
geojins 0:dc0d8730c20e 352 }
geojins 0:dc0d8730c20e 353 } else if (alcoholLastPeakValue == MEDIUM) {
geojins 0:dc0d8730c20e 354 if (alcoholProcessedValue == LOW) {
geojins 0:dc0d8730c20e 355 strcpy (alarmStringA, "Alcohol level going down from MEDIUM to LOW");
geojins 0:dc0d8730c20e 356 } else if (alcoholProcessedValue == HIGH) {
geojins 0:dc0d8730c20e 357 strcpy (alarmStringA, "Alcohol level going up from MEDIUM to HIGH");
geojins 0:dc0d8730c20e 358 }
geojins 0:dc0d8730c20e 359 } else if (alcoholLastPeakValue == HIGH) {
geojins 0:dc0d8730c20e 360 if (alcoholProcessedValue == LOW) {
geojins 0:dc0d8730c20e 361 strcpy (alarmStringA, "Alcohol level going down from HIGH to LOW");
geojins 0:dc0d8730c20e 362 } else if (alcoholProcessedValue == MEDIUM) {
geojins 0:dc0d8730c20e 363 strcpy (alarmStringA, "Alcohol level going down from HIGH to MEDIUM");
geojins 0:dc0d8730c20e 364 }
geojins 0:dc0d8730c20e 365 }
geojins 0:dc0d8730c20e 366 alcoholLastPeakValue = alcoholProcessedValue;
geojins 0:dc0d8730c20e 367 generateAlertA = true;
geojins 0:dc0d8730c20e 368 }
geojins 0:dc0d8730c20e 369 }
geojins 0:dc0d8730c20e 370
geojins 0:dc0d8730c20e 371 // POST data to AerCLoud
geojins 0:dc0d8730c20e 372 char url[512];
geojins 0:dc0d8730c20e 373 time_t seconds = time(NULL);
geojins 0:dc0d8730c20e 374 snprintf(url, sizeof(url), "%s/%d/scls/%s/containers/%s/contentInstances?apiKey=%s", AC_BASE, acId, simImei, AC_CONTAINER, AC_APIKEY);
geojins 0:dc0d8730c20e 375 sprintf(str,"{\"moistureSensorValue\": %.5f, \"moistureProcessedValue\": %.5f, \"alcoholSensorValue\": %.5f, \"alcoholProcessedValue\": %.5f, \"sclId\":\"%s\", \"timeStamp\": %u}", moistureValue, moistureProcessedValue, alcoholValue, alcoholProcessedValue, simImei, seconds);
geojins 0:dc0d8730c20e 376
geojins 0:dc0d8730c20e 377 // Evt Source M=1, A=2 -- post moisture
geojins 0:dc0d8730c20e 378 // sprintf(str,"{\"eventSource\": %d, \"eventRawValue\": %.5f, \"eventProcessedValue\": %.5f, \"sclId\":\"%s\", \"timeStamp\": %u}", MOISTURE_SENSOR, moistureValue, moistureProcessedValue, simImei, seconds);
geojins 0:dc0d8730c20e 379 printf("Url = %s \r\n",url);
geojins 0:dc0d8730c20e 380 printf("str = %s \r\n",str);
geojins 1:78c10a2e1029 381 HTTPJson outText(str);
geojins 1:78c10a2e1029 382 HTTPJson inText(str, 512);
geojins 0:dc0d8730c20e 383 printf("\r\nPost acquired data...\r\n");
geojins 0:dc0d8730c20e 384 ret = http.post(url, outText, &inText);
geojins 0:dc0d8730c20e 385 if (ret == HTTP_OK) {
geojins 0:dc0d8730c20e 386 printf("Executed POST successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 387 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 388 } else {
geojins 0:dc0d8730c20e 389 printf("Error - ret = %d (%s), - HTTP return code = %d\r\n", ret, HttpResultToString((HTTPResult)ret), http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 390 }
geojins 0:dc0d8730c20e 391
geojins 0:dc0d8730c20e 392 /*
geojins 0:dc0d8730c20e 393 // Evt Source M=1, A=2 -- Now post Alcohol
geojins 0:dc0d8730c20e 394 sprintf(str,"{\"eventSource\": %d, \"eventRawValue\": %.5f, \"eventProcessedValue\": %.5f, \"sclId\":\"%s\", \"timeStamp\": %u}", ALCOHOL_SENSOR, alcoholValue, alcoholProcessedValue, simImei, seconds);
geojins 0:dc0d8730c20e 395 printf("Url = %s \r\n",url);
geojins 0:dc0d8730c20e 396 printf("str = %s \r\n",str);
geojins 0:dc0d8730c20e 397
geojins 0:dc0d8730c20e 398 HTTPText outText2(str);
geojins 0:dc0d8730c20e 399 HTTPText inText2(str, 512);
geojins 0:dc0d8730c20e 400 printf("\r\nPost acquired data...\r\n");
geojins 0:dc0d8730c20e 401 ret = http.post(url, outText2, &inText2);
geojins 0:dc0d8730c20e 402 if (ret == HTTP_OK) {
geojins 0:dc0d8730c20e 403 printf("Executed POST successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 404 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 405 } else {
geojins 0:dc0d8730c20e 406 printf("Error - ret = %d (%s), - HTTP return code = %d\r\n", ret, HttpResultToString((HTTPResult)ret), http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 407 }
geojins 0:dc0d8730c20e 408 */
geojins 0:dc0d8730c20e 409 // post alert for Moisture
geojins 0:dc0d8730c20e 410 if (generateAlertM) {
geojins 0:dc0d8730c20e 411 snprintf(url, sizeof(url), "%s/%d/scls/%s/containers/%s/contentInstances?apiKey=%s", AC_BASE, acId, simImei, AC_CONTAINER_ALARM, AC_APIKEY);
geojins 0:dc0d8730c20e 412 sprintf(str,"{\"alarmText\": %s, \"sclId\":\"%s\", \"timeStamp\": %u}", alarmStringM, simImei, seconds);
geojins 0:dc0d8730c20e 413 printf("Url = %s \r\n",url);
geojins 0:dc0d8730c20e 414 printf("str = %s \r\n",str);
geojins 0:dc0d8730c20e 415
geojins 1:78c10a2e1029 416 HTTPJson outText(str);
geojins 1:78c10a2e1029 417 HTTPJson inText(str, 512);
geojins 0:dc0d8730c20e 418 printf("\r\nPost acquired data...\r\n");
geojins 0:dc0d8730c20e 419 ret = http.post(url, outText, &inText);
geojins 0:dc0d8730c20e 420 if (ret == HTTP_OK) {
geojins 0:dc0d8730c20e 421 printf("Executed POST successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 422 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 423 } else {
geojins 0:dc0d8730c20e 424 printf("Error - ret = %d (%s), - HTTP return code = %d\r\n", ret, HttpResultToString((HTTPResult)ret), http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 425 }
geojins 0:dc0d8730c20e 426 }
geojins 0:dc0d8730c20e 427
geojins 0:dc0d8730c20e 428 // post alert for Alcohol
geojins 0:dc0d8730c20e 429 if (generateAlertA) {
geojins 0:dc0d8730c20e 430 snprintf(url, sizeof(url), "%s/%d/scls/%s/containers/%s/contentInstances?apiKey=%s", AC_BASE, acId, simImei, AC_CONTAINER_ALARM, AC_APIKEY);
geojins 0:dc0d8730c20e 431 sprintf(str,"{\"alarmText\": %s, \"sclId\":\"%s\", \"timeStamp\": %u}", alarmStringA, simImei, seconds);
geojins 0:dc0d8730c20e 432 printf("Url = %s \r\n",url);
geojins 0:dc0d8730c20e 433 printf("str = %s \r\n",str);
geojins 0:dc0d8730c20e 434
geojins 1:78c10a2e1029 435 HTTPJson outText(str);
geojins 1:78c10a2e1029 436 HTTPJson inText(str, 512);
geojins 0:dc0d8730c20e 437 printf("\r\nPost acquired data...\r\n");
geojins 0:dc0d8730c20e 438 ret = http.post(url, outText, &inText);
geojins 0:dc0d8730c20e 439 if (ret == HTTP_OK) {
geojins 0:dc0d8730c20e 440 printf("Executed POST successfully - read %d characters\r\n", strlen(str));
geojins 0:dc0d8730c20e 441 printf("Result: %s\r\n", str);
geojins 0:dc0d8730c20e 442 } else {
geojins 0:dc0d8730c20e 443 printf("Error - ret = %d (%s), - HTTP return code = %d\r\n", ret, HttpResultToString((HTTPResult)ret), http.getHTTPResponseCode());
geojins 0:dc0d8730c20e 444 }
geojins 0:dc0d8730c20e 445 }
geojins 0:dc0d8730c20e 446
geojins 0:dc0d8730c20e 447 printf("Will be measuring again after 100 milli seconds !!!! \r\n\n");
geojins 0:dc0d8730c20e 448 wait_ms (100);
geojins 0:dc0d8730c20e 449 }
geojins 0:dc0d8730c20e 450 }
geojins 0:dc0d8730c20e 451
geojins 0:dc0d8730c20e 452 //Disconnect ppp link of radio
geojins 0:dc0d8730c20e 453 radio->disconnect();
geojins 0:dc0d8730c20e 454 }
geojins 0:dc0d8730c20e 455
geojins 0:dc0d8730c20e 456 /*
geojins 0:dc0d8730c20e 457 // Logic to read peak value from moisture sensor
geojins 0:dc0d8730c20e 458 moistureValue = 0;
geojins 0:dc0d8730c20e 459 int i=0;
geojins 0:dc0d8730c20e 460 do {
geojins 0:dc0d8730c20e 461 float readFromSensor = moisture;
geojins 0:dc0d8730c20e 462 if ( readFromSensor > moistureValue)
geojins 0:dc0d8730c20e 463 moistureValue = readFromSensor;
geojins 0:dc0d8730c20e 464 printf("Moisture - Current value read from sensor: %f \n\n",readFromSensor);
geojins 0:dc0d8730c20e 465 wait_ms (100); // wait for 100ms
geojins 0:dc0d8730c20e 466 i++;
geojins 0:dc0d8730c20e 467 } while (moistureValue < 0.1 && i<100);
geojins 0:dc0d8730c20e 468
geojins 0:dc0d8730c20e 469 printf("Moisture - Value get posted to AerCloud: %f \n\n",moistureValue);
geojins 0:dc0d8730c20e 470 */