salesforce HeartRate monitor sample application. This application sends periodic heart rate values into salesforce.com via the mbed SalesforceInterface API.
Dependencies: BufferedSerial C12832 EthernetInterface GroveEarbudSensor Logger SalesforceInterface mbed-rtos mbed
Fork of df-2014-salesforce-hrm-k64f by
Revision 3:3a5fdfdabca3, committed 2014-09-25
- Comitter:
- ansond
- Date:
- Thu Sep 25 03:38:14 2014 +0000
- Parent:
- 2:ce4056f10202
- Child:
- 4:73f9d7560e93
- Commit message:
- updates
Changed in this revision
--- a/Definitions.h Wed Sep 24 21:55:13 2014 +0000 +++ b/Definitions.h Thu Sep 25 03:38:14 2014 +0000 @@ -38,7 +38,7 @@ #define BLINK_TIME 250 // Max number of retries - #define MAX_TRIES 3 + #define MAX_TRIES 4 // Wait Time for iterations (ms) #define WAIT_TIME_MS 10000
--- a/SalesforceInterface.lib Wed Sep 24 21:55:13 2014 +0000 +++ b/SalesforceInterface.lib Thu Sep 25 03:38:14 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/ansond/code/SalesforceInterface/#7dc9b949bbc3 +http://mbed.org/users/ansond/code/SalesforceInterface/#6a791e5449b3
--- a/main.cpp Wed Sep 24 21:55:13 2014 +0000 +++ b/main.cpp Thu Sep 25 03:38:14 2014 +0000 @@ -72,7 +72,7 @@ int num_retries = MAX_TRIES; // heartrate values and iteration counter - volatile int iteration_counter = 0; + volatile int iteration_counter = 1; volatile int oldhrmCounter = HRM_MAX+1; volatile int hrmCounter = HRM_OFF; @@ -98,7 +98,7 @@ if(data_effect) { int tmp = 60 * (NUM_SLOTS-1) * 1000; hrmCounter = tmp/(temp[NUM_SLOTS-1]-temp[0]); - LOG_CONSOLE("Heart_rate_is: %d bpm\r\n",hrmCounter); + LOG_CONSOLE("New heartrate: %d bpm\r\n",hrmCounter); } data_effect=1; //sign bit } @@ -137,7 +137,6 @@ // Get the heartrate from the sensor int get_heartrate() { - ++iteration_counter; return hrmCounter; } @@ -145,7 +144,8 @@ void create_heartrate_record(ErrorHandler *logger,SalesforceInterface *sf) { // create a new record MbedJSONValue bpm_record; - bpm_record[hrm_bpm_field_name] = (int)get_heartrate(); + int heartrate = (int)get_heartrate(); + bpm_record[hrm_bpm_field_name] = heartrate; bpm_record[hrm_user_field_name] = hrm_user; bpm_record[hrm_counter_field_name] = (int)iteration_counter; bpm_record[hrm_latitude] = SENSOR_LATITUDE; @@ -166,6 +166,8 @@ RESET_SML_BUFFER(bpm_record_id); strcpy(bpm_record_id,(char *)response["id"].get<std::string>().c_str()); logger->turnLEDGreen(); + if (heartrate > 0) oldhrmCounter = heartrate; + ++iteration_counter; } else { // failure @@ -180,55 +182,66 @@ void update_heartrate_record(ErrorHandler *logger,SalesforceInterface *sf) { logger->turnLEDOrange(); - // update am existing record - assume "name" is the proper key for the record you wish to update... - MbedJSONValue bpm_record; - int bpm = get_heartrate(); - bpm_record[hrm_bpm_field_name] = bpm; - bpm_record[hrm_user_field_name] = hrm_user; - bpm_record[hrm_counter_field_name] = (int)iteration_counter; - bpm_record[hrm_latitude] = SENSOR_LATITUDE; - bpm_record[hrm_longitude] = SENSOR_LONGITUDE; - - // DEBUG - logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...",APP_VERSION,iteration_counter,bpm); - logger->logConsole("Update: updated record: %s",bpm_record.serialize().c_str()); + // get our latest heartrate + int heartrate = get_heartrate(); - // update the BPM record in salesforce.com - bool updated = sf->updateRecord(hrm_object_name,bpm_record_id,bpm_record); - - // display the result - if (updated) { - // SUCCESS - logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...SUCCESS",APP_VERSION,iteration_counter,bpm); - logger->logConsole("Update: successful! http_code=%d",sf->httpResponseCode()); - logger->turnLEDGreen(); + // only update SF if we have a valid change + if (heartrate > 0 && heartrate != oldhrmCounter) { + // update am existing record - assume "name" is the proper key for the record you wish to update... + MbedJSONValue bpm_record; + bpm_record[hrm_bpm_field_name] = heartrate; + bpm_record[hrm_user_field_name] = hrm_user; + bpm_record[hrm_counter_field_name] = (int)iteration_counter; + bpm_record[hrm_latitude] = SENSOR_LATITUDE; + bpm_record[hrm_longitude] = SENSOR_LONGITUDE; + + // DEBUG + logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...",APP_VERSION,iteration_counter,heartrate); + logger->logConsole("Update: updated record: %s",bpm_record.serialize().c_str()); + + // update the BPM record in salesforce.com + bool updated = sf->updateRecord(hrm_object_name,bpm_record_id,bpm_record); + + // display the result + if (updated) { + // SUCCESS + logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...SUCCESS",APP_VERSION,iteration_counter,heartrate); + logger->logConsole("Update: successful! http_code=%d",sf->httpResponseCode()); + logger->turnLEDGreen(); + if (heartrate > 0) { oldhrmCounter = heartrate; ++iteration_counter; } + } + else { + if (num_retries > 0) { + // retry state + logger->turnLEDPurple(); + + // OAUTH token may have expired - reset and retry + logger->logConsole("Retrying update (%d of %d)...",(MAX_TRIES - num_retries)+1, MAX_TRIES); + if (num_retries == MAX_TRIES) --iteration_counter; // one time only in retries... + --num_retries; + sf->resetSalesforceToken(); + update_heartrate_record(logger,sf); + } + else { + // failure + logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...FAILED",APP_VERSION,iteration_counter,heartrate); + logger->logConsole("Update: FAILED http_code=%d",sf->httpResponseCode()); + do_loop = false; + + // give-up state + logger->turnLEDRed(); + } + } } else { - if (num_retries > 0) { - // retry state - logger->turnLEDPurple(); - - // OAUTH token may have expired - reset and retry - if (num_retries == MAX_TRIES) --iteration_counter; // one time only in retries... - --num_retries; - sf->resetSalesforceToken(); - update_heartrate_record(logger,sf); - } - else { - // failure - logger->log("ARM Salesforce HRM v%s\r\nUpdate HR(%d): %d bpm\r\nSending...FAILED",APP_VERSION,iteration_counter,bpm); - logger->logConsole("Update: FAILED http_code=%d",sf->httpResponseCode()); - do_loop = false; - - // give-up state - logger->turnLEDRed(); - } + logger->logConsole("Heartrate unchanged..."); + logger->turnLEDGreen(); } } // Report heart rate to Salesforce.com void report_heartrate(ErrorHandler *logger,SalesforceInterface *sf) { - if (iteration_counter == 0) create_heartrate_record(logger,sf); + if (iteration_counter == 1) create_heartrate_record(logger,sf); else update_heartrate_record(logger,sf); }
--- a/sf_creds.h Wed Sep 24 21:55:13 2014 +0000 +++ b/sf_creds.h Thu Sep 25 03:38:14 2014 +0000 @@ -2,5 +2,4 @@ char *username = "xxx@yyy.zzz"; char *password = "password_goes_here"; // must be of the form: [password][security token] char *client_id = "customer key goes here"; - char *client_secret = "client secret goes here"; - \ No newline at end of file + char *client_secret = "client secret goes here"; \ No newline at end of file