add feature send battery voltage data

This commit is contained in:
Klaus K Wilting 2018-11-27 11:21:20 +01:00
parent 72063b88b1
commit 207eb6bb98
9 changed files with 36 additions and 25 deletions

View File

@ -181,7 +181,7 @@ Hereafter described is the default *plain* format, which uses MSB bit numbering.
bytes 18-28: Software version (ASCII format, terminating with zero)
**Port #4:** GPS query result (device answers only if has GPS and GPS has a fix)
**Port #4:** GPS data (only if device has fature GPS, and GPS data is enabled and GPS has a fix)
bytes 1-4: Latitude
bytes 5-8: Longitude
@ -198,7 +198,7 @@ Hereafter described is the default *plain* format, which uses MSB bit numbering.
byte 1: Beacon RSSI reception level
byte 2: Beacon identifier (0..255)
**Port #7:** Environmental sensor query result
**Port #7:** Environmental sensor data (only if device has feature BME)
bytes 1-2: Temperature [°C]
bytes 3-4: Pressure [hPa]
@ -213,6 +213,10 @@ Hereafter described is the default *plain* format, which uses MSB bit numbering.
201-300 worse
301-500 very bad
**Port #8:** Battery voltage data (only if device has feature BATT)
byte 1-2: Battery or USB Voltage [mV], 0 if no battery probe
# Remote control
The device listenes for remote control commands on LoRaWAN Port 2. Multiple commands per downlink are possible by concatenating them.

View File

@ -17,7 +17,7 @@
#define SENSOR1_DATA (0x10)
#define SENSOR2_DATA (0x20)
#define SENSOR3_DATA (0x40)
#define SENSOR4_DATA (0x80)
#define BATT_DATA (0x80)
// bits in configmask for device runmode control
#define GPS_MODE (0x01)

View File

@ -44,6 +44,7 @@ public:
void addStatus(uint16_t voltage, uint64_t uptime, float cputemp, uint32_t mem,
uint8_t reset1, uint8_t reset2);
void addAlarm(int8_t rssi, uint8_t message);
void addVoltage(uint16_t value);
void addGPS(gpsStatus_t value);
void addBME(bmeStatus_t value);
void addButton(uint8_t value);

View File

@ -29,7 +29,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng
[common]
; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
release_version = 1.6.95
release_version = 1.6.96
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
debug_level = 0

View File

@ -11,7 +11,7 @@
// Payload send cycle and encoding
#define SEND_SECS 30 // payload send cycle [seconds/2] -> 60 sec.
#define PAYLOAD_ENCODER 3 // payload encoder: 1=Plain, 2=Packed, 3=CayenneLPP dynamic, 4=CayenneLPP packed
#define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=CayenneLPP dynamic, 4=CayenneLPP packed
// Set this to include BLE counting and vendor filter functions
#define VENDORFILTER 1 // comment out if you want to count things, not people
@ -54,16 +54,16 @@
#define RCMDPORT 2 // Port on which device listenes for remote commands
#define STATUSPORT 2 // Port on which device sends remote command results
#define CONFIGPORT 3 // Port on which device sends config query results
#define GPSPORT 4 // Port on which device sends gps query results
#define GPSPORT 4 // Port on which device sends gps data
#define BUTTONPORT 5 // Port on which device sends button pressed signal
#define LPP1PORT 1 // Port for Cayenne LPP 1.0 dynamic sensor encoding
#define LPP2PORT 2 // Port for Cayenne LPP 2.0 packed sensor encoding
#define BEACONPORT 6 // Port on which device sends beacon alarms
#define BMEPORT 7 // Port on which device sends BME680 sensor data
#define BATTPORT 8 // Port on which device sends battery voltage data
#define SENSOR1PORT 10 // Port on which device sends User sensor #1 data
#define SENSOR2PORT 11 // Port on which device sends User sensor #2 data
#define SENSOR3PORT 12 // Port on which device sends User sensor #3 data
#define SENSOR4PORT 13 // Port on which device sends User sensor #4 data
// Some hardware settings
#define RGBLUMINOSITY 30 // RGB LED luminosity [default = 30%]

View File

@ -30,6 +30,11 @@ void PayloadConvert::addAlarm(int8_t rssi, uint8_t msg) {
buffer[cursor++] = msg;
}
void PayloadConvert::addVoltage(uint16_t value) {
buffer[cursor++] = highByte(value);
buffer[cursor++] = lowByte(value);
}
void PayloadConvert::addConfig(configData_t value) {
buffer[cursor++] = value.lorasf;
buffer[cursor++] = value.txpower;
@ -140,6 +145,8 @@ void PayloadConvert::addAlarm(int8_t rssi, uint8_t msg) {
writeUint8(msg);
}
void PayloadConvert::addVoltage(uint16_t value) { writeUint16(value); }
void PayloadConvert::addConfig(configData_t value) {
writeUint8(value.lorasf);
writeUint8(value.txpower);
@ -160,7 +167,7 @@ void PayloadConvert::addConfig(configData_t value) {
value.payloadmask && SENSOR1_DATA ? true : false,
value.payloadmask && SENSOR2_DATA ? true : false,
value.payloadmask && SENSOR3_DATA ? true : false,
value.payloadmask && SENSOR4_DATA ? true : false);
value.payloadmask && BATT_DATA ? true : false);
writeVersion(value.version);
}
@ -309,6 +316,16 @@ void PayloadConvert::addAlarm(int8_t rssi, uint8_t msg) {
buffer[cursor++] = rssi;
}
void PayloadConvert::addVoltage(uint16_t value) {
uint16_t volt = value / 10;
#if (PAYLOAD_ENCODER == 3)
buffer[cursor++] = LPP_BATT_CHANNEL;
#endif
buffer[cursor++] = LPP_ANALOG_INPUT;
buffer[cursor++] = highByte(volt);
buffer[cursor++] = lowByte(volt);
}
void PayloadConvert::addConfig(configData_t value) {
#if (PAYLOAD_ENCODER == 3)
buffer[cursor++] = LPP_ADR_CHANNEL;

View File

@ -138,7 +138,6 @@ void set_sensor(uint8_t val[]) {
case 1:
case 2:
case 3:
case 4:
break; // valid sensor number -> continue
default:
ESP_LOGW(

View File

@ -72,31 +72,29 @@ void sendCounter() {
#endif
#ifdef HAS_SENSORS
case SENSOR1_DATA:
payload.reset();
payload.addSensor(sensor_read(1));
SendPayload(SENSOR1PORT);
break;
case SENSOR2_DATA:
payload.reset();
payload.addSensor(sensor_read(2));
SendPayload(SENSOR2PORT);
break;
case SENSOR3_DATA:
payload.reset();
payload.addSensor(sensor_read(3));
SendPayload(SENSOR3PORT);
break;
#endif
case SENSOR4_DATA:
#ifdef HAS_BATTERY_PROBE
case BATT_DATA:
payload.reset();
payload.addSensor(sensor_read(4));
SendPayload(SENSOR4PORT);
payload.addVoltage(read_voltage());
SendPayload(BATTPORT);
break;
#endif
} // switch

View File

@ -24,7 +24,7 @@ uint8_t sensor_mask(uint8_t sensor_no) {
case 3:
return (uint8_t)SENSOR3_DATA;
case 4:
return (uint8_t)SENSOR4_DATA;
return (uint8_t)BATT_DATA;
case 5:
return (uint8_t)GPS_DATA;
case 6:
@ -64,14 +64,6 @@ uint8_t *sensor_read(uint8_t sensor) {
buf[2] = 0xa0;
buf[3] = 0x03;
break;
case 4:
buf[0] = length;
buf[1] = 0xff;
buf[2] = 0xa0;
buf[3] = 0x04;
break;
}
return buf;