init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
Revision 53:c6942af186d7, committed 2019-05-29
- Comitter:
- pathfindr
- Date:
- Wed May 29 23:59:56 2019 +0000
- Parent:
- 52:bd7678eade77
- Child:
- 54:2840f2d50734
- Commit message:
- added humidity sensor support
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed May 29 22:59:12 2019 +0000
+++ b/main.cpp Wed May 29 23:59:56 2019 +0000
@@ -84,6 +84,7 @@
time_t RET_debug_offat = 0;
float RET_voltage = 0.0;
float RET_temperature = 0.0;
+float RET_humidity = 0.0;
float RET_temperature_max = -999.0; //Within broadcast frame. Set inital value to low
float RET_temperature_min = 999.0; //Within broadcase frame. Set inital value to high
uint32_t RET_modemBrownOutCountInSession = 0;
@@ -116,6 +117,7 @@
uint8_t RET_bleAdv_flags = 0;
char RET_closestLocationTag_id[17];
int RET_closestLocationTag_rssi = 999;
+ int RET_closestBT04Tag_rssi = 999;
bool RET_locationTag_present = false;
bool RET_detector_present = false;
const uint8_t bleAdv_motionTriggeredinFrame_flag = 0b01000000;
@@ -387,6 +389,7 @@
GLOBAL_accel_healthy = false;
RET_motionTriggeredinFrame = false;
RET_modemBrownOutCountInSession = 0;
+ RET_humidity = 99.0f;
memset(GLOBAL_exceptionString,0x00,sizeof(GLOBAL_exceptionString));
}
void healthCheck() {
@@ -590,14 +593,47 @@
RET_closestLocationTag_rssi = tag_rssi;
memcpy(RET_closestLocationTag_id, beacon_identifier, sizeof(RET_closestLocationTag_id));
RET_locationTag_present = true;
- //if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "Location Tag Present: %s, rssi: %d",closestLocationTag_id, closestLocationTag_rssi);debug_exe();}
+ if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "Location Tag Present: %s, rssi: %d",RET_closestLocationTag_id, RET_closestLocationTag_rssi);debug_exe();}
}
}
break;
}
case BLE_SERVICEID_BT04 :
{
- //nothing yet
+ //get serial
+ //char serial[9];
+ //snprintf(serial, sizeof(serial), "%02x%02x%02x%02x", params->advertisingData[11], params->advertisingData[12], params->advertisingData[13], params->advertisingData[14]);
+ //if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer),"Serial: %s", serial);debug_exe();}
+
+ //get battery
+ //int battery = params->advertisingData[15];
+ //if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer),"Battery: %i", battery);debug_exe();}
+
+ //get temperature positive
+ /*
+ bool temppositive = !(params->advertisingData[17] & 0b01000000);
+ float temperature =
+ (
+ ((params->advertisingData[17] & 0b00111111) << 8) |
+ ((params->advertisingData[18] & 0b11111111))
+ ) / 100.0;
+ if (!temppositive) temperature = -temperature;
+ //if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer),"Temp: %f", temperature);debug_exe();}
+ */
+
+ //get humidity
+ int tag_rssi = params->rssi * -1; //to convert to positive number
+ if (tag_rssi < RET_closestBT04Tag_rssi) {
+ RET_humidity =
+ (
+ ((params->advertisingData[19] & 0b01111111) << 8) |
+ ((params->advertisingData[20] & 0b11111111))
+ ) / 100.0;
+ if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "Humidity Tag Present: %f",RET_humidity);debug_exe();}
+ }
+ //rssi
+ //if(DEBUG_ON){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer),"Rssi: %i", params->rssi);debug_exe();}
+
break;
}
case BLE_SERVICEID_PFDETECTOR1 :
@@ -626,7 +662,7 @@
params->advertisingData[19],
params->advertisingData[20]);
//if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), " Mac: [%02x%02x%02x%02x%02x%02x], rssi: %d, AType: %u, Id: %s",params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],params->rssi, pAdvData->dataType, ble_advdata);debug_exe();}
- //if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "Detector @rssi: %d",params->rssi);debug_exe();}
+ if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "Detector @rssi: %d",params->rssi);debug_exe();}
if (params->rssi >= -75) {
RET_detector_present = true;
}
@@ -638,8 +674,8 @@
void bleConfigureScan(void)
{
//configure scan
- //myble.gap().setScanParams(60,30); //scan interval //scan window
- myble.gap().setScanParams(100,100); //scan interval //scan window
+ myble.gap().setScanParams(60,30); //scan interval //scan window
+ //myble.gap().setScanParams(100,100); //scan interval //scan window
myble.gap().startScan(bleAdvertisementCallback);
}
void bleStopScan(void)
@@ -1030,11 +1066,11 @@
char bytesToSend[160];
//Check for Nearby Location Beacons
+ memset(RET_closestLocationTag_id, 0x00, sizeof(RET_closestLocationTag_id));
+ RET_closestLocationTag_rssi = 999;
+ RET_locationTag_present = false;
+ RET_detector_present = false;
#if BLE_ENABLED
- memset(RET_closestLocationTag_id, 0x00, sizeof(RET_closestLocationTag_id));
- RET_closestLocationTag_rssi = 999;
- RET_locationTag_present = false;
- RET_detector_present = false;
if (RET_setting_beacon_scan == 1 && RET_setting_location_mode != LOCATION_MODE_REALTIME) {
LowPowerTimer bleScan_t;
bleScan_t.start();
@@ -1053,7 +1089,7 @@
bleScan_runtime = (bleScan_t.read_ms() - bleScan_startmillis);
myble.waitForEvent(); // low power wait for event
}
- //if (LocationTag_preset) if(RET_debug){debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "LocationTag: %s, rssi: %d",closestLocationTag_id, closestLocationTag_rssi);debug_exe();}
+ if (RET_locationTag_present && RET_debug) {debug_prep();snprintf(GLOBAL_debug_buffer, sizeof(GLOBAL_debug_buffer), "LocationTag: %s, rssi: %d",RET_closestLocationTag_id, RET_closestLocationTag_rssi);debug_exe();}
}
bleScan_t.stop();
myble.gap().stopScan();
@@ -1076,12 +1112,17 @@
char locString[70];
int gpsStartTime = RET_RTCunixtime;
- //check if we have moved since last post, if not use same valid gps fix if exists
- if (RET_motionStateOnInLocTXInterval == false && GLOBAL_have_GPSlocString_prev == true) {
- memcpy(locString, GLOBAL_GPSlocString_prev, sizeof(locString));
- addToExceptionString("P");
+ if (RET_locationTag_present) {
+ snprintf(locString, sizeof(locString), ",l:%s.%d\0",RET_closestLocationTag_id,RET_closestLocationTag_rssi);
+ addToExceptionString("BL");
} else {
- memcpy(locString, modem.getLocation(RET_setting_location_accuracy, RET_setting_location_timeout, RET_GPSFailCount, RET_NetworkFailCount), sizeof(locString));
+ //check if we have moved since last post, if not use same valid gps fix if exists
+ if (RET_motionStateOnInLocTXInterval == false && GLOBAL_have_GPSlocString_prev == true) {
+ memcpy(locString, GLOBAL_GPSlocString_prev, sizeof(locString));
+ addToExceptionString("P");
+ } else {
+ memcpy(locString, modem.getLocation(RET_setting_location_accuracy, RET_setting_location_timeout, RET_GPSFailCount, RET_NetworkFailCount), sizeof(locString));
+ }
}
int timetaken_gps = (RET_RTCunixtime - gpsStartTime);
@@ -1095,7 +1136,7 @@
bool getSettings = true;
//work out if we need to get settings back
if ( ((RET_RTCunixtime - RET_SettingsGotAt)/3600) < RET_setting_minimumupdate_hrs ) { getSettings = false; timetaken_total -= 10;} //remove the extra 10 seconds from times
- snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.0f,n:%.0f,q:%.0f,v:%.1f,z:L%s,e:%d,y:%d,x:%d,j:%d,s:%d%s)\0",GLOBAL_defaultApi,FW_VERSION,RET_temperature,RET_temperature_min,RET_temperature_max,RET_voltage,GLOBAL_exceptionString,timetaken_total,timetaken_connection,timetaken_gps,RET_motionStateOnInLocTXInterval,getSettings,locString);
+ snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.0f,n:%.0f,q:%.0f,w:%.0f,v:%.1f,z:L%s,e:%d,y:%d,x:%d,j:%d,s:%d%s)\0",GLOBAL_defaultApi,FW_VERSION,RET_temperature,RET_temperature_min,RET_temperature_max,RET_humidity,RET_voltage,GLOBAL_exceptionString,timetaken_total,timetaken_connection,timetaken_gps,RET_motionStateOnInLocTXInterval,getSettings,locString);
//snprintf(bytesToSend,sizeof(bytesToSend),"(%s,a:loc,f:%d,t:%.0f,v:%.1f,z:L-%s,e:%d,y:%d,x:%d,j:%d,s:%d%s)\0",GLOBAL_defaultApi,FW_VERSION,RET_temperature,RET_voltage,GLOBAL_exceptionString,timetaken_total,timetaken_connection,timetaken_gps,RET_motionStateOnInLocTXInterval,getSettings,locString);
char result[180];
snprintf(result,sizeof(result),"%s",modem.USSDmessage(bytesToSend, getSettings, GLOBAL_defaultApi));