cayenne payload encoding modified
This commit is contained in:
parent
96a42434fd
commit
18c0c06598
@ -16,8 +16,8 @@
|
|||||||
;env_default = heltec
|
;env_default = heltec
|
||||||
;env_default = ttgov1
|
;env_default = ttgov1
|
||||||
;env_default = ttgov2
|
;env_default = ttgov2
|
||||||
;env_default = ttgov21
|
env_default = ttgov21
|
||||||
env_default = ttgobeam
|
;env_default = ttgobeam
|
||||||
;env_default = lopy
|
;env_default = lopy
|
||||||
;env_default = lopy4
|
;env_default = lopy4
|
||||||
;env_default = fipy
|
;env_default = fipy
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
// Verbose enables serial output
|
// Verbose enables serial output
|
||||||
#define VERBOSE 1 // comment out to silence the device, for mute use build option
|
#define VERBOSE 1 // comment out to silence the device, for mute use build option
|
||||||
|
|
||||||
// set this to include BLE counting and vendor filter functions
|
// Payload send cycle and encoding
|
||||||
|
#define SEND_SECS 30 // payload send cycle [seconds/2] -> 240 sec.
|
||||||
|
#define PAYLOAD_ENCODER 3 // 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
|
#define VENDORFILTER 1 // comment out if you want to count things, not people
|
||||||
#define BLECOUNTER 1 // comment out if you don't want BLE count, saves power & memory
|
#define BLECOUNTER 1 // comment out if you don't want BLE count, saves power & memory
|
||||||
|
|
||||||
@ -35,9 +39,7 @@
|
|||||||
#define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings
|
#define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings
|
||||||
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
||||||
|
|
||||||
// LoRa payload default parameters
|
// LoRa parameters
|
||||||
#define PAYLOAD_ENCODER 3 // select payload encoder: 1=Plain, 2=Packed, 3=CayenneLPP
|
|
||||||
#define SEND_SECS 120 // payload send cycle [seconds/2] -> 240 sec.
|
|
||||||
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle
|
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle
|
||||||
#define RETRANSMIT_RCMD 5 // [seconds] wait time before retransmitting rcommand results
|
#define RETRANSMIT_RCMD 5 // [seconds] wait time before retransmitting rcommand results
|
||||||
#define PAYLOAD_BUFFER_SIZE 51 // maximum size of payload block per transmit
|
#define PAYLOAD_BUFFER_SIZE 51 // maximum size of payload block per transmit
|
||||||
@ -50,7 +52,7 @@
|
|||||||
#define STATUSPORT 2 // Port on which device sends remote command results
|
#define STATUSPORT 2 // Port on which device sends remote command results
|
||||||
#define CONFIGPORT 3 // Port on which device sends gps query results
|
#define CONFIGPORT 3 // Port on which device sends gps query results
|
||||||
#define GPSPORT 4 // Port on which device sends gps query results
|
#define GPSPORT 4 // Port on which device sends gps query results
|
||||||
#define CAYENNEPORT 1 // Port used for Cayenne encoding
|
#define CAYENNEPORT 2 // Port for Cayenne LPP 2.0 packet sensor encoding
|
||||||
|
|
||||||
// Default RGB LED luminosity (in %)
|
// Default RGB LED luminosity (in %)
|
||||||
#define RGBLUMINOSITY 30 // 30%
|
#define RGBLUMINOSITY 30 // 30%
|
||||||
|
@ -65,7 +65,8 @@ void PayloadConvert::addConfig(configData_t value) {
|
|||||||
cursor += 10;
|
cursor += 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float cputemp) {
|
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime,
|
||||||
|
float cputemp) {
|
||||||
buffer[cursor++] = voltage >> 8;
|
buffer[cursor++] = voltage >> 8;
|
||||||
buffer[cursor++] = voltage;
|
buffer[cursor++] = voltage;
|
||||||
buffer[cursor++] = uptime >> 56;
|
buffer[cursor++] = uptime >> 56;
|
||||||
@ -82,7 +83,6 @@ void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float cputemp)
|
|||||||
buffer[cursor++] = (uint32_t)cputemp;
|
buffer[cursor++] = (uint32_t)cputemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------- packed format with LoRa serialization Encoder ---------- */
|
/* ---------------- packed format with LoRa serialization Encoder ---------- */
|
||||||
// derived from
|
// derived from
|
||||||
// https://github.com/thesolarnomad/lora-serialization/blob/master/src/LoraEncoder.cpp
|
// https://github.com/thesolarnomad/lora-serialization/blob/master/src/LoraEncoder.cpp
|
||||||
@ -117,7 +117,8 @@ void PayloadConvert::addConfig(configData_t value) {
|
|||||||
value.vendorfilter ? true : false, value.gpsmode ? true : false);
|
value.vendorfilter ? true : false, value.gpsmode ? true : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float cputemp) {
|
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime,
|
||||||
|
float cputemp) {
|
||||||
writeUint16(voltage);
|
writeUint16(voltage);
|
||||||
writeUptime(uptime);
|
writeUptime(uptime);
|
||||||
writeTemperature(cputemp);
|
writeTemperature(cputemp);
|
||||||
@ -163,7 +164,7 @@ void PayloadConvert::writeTemperature(float temperature) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f,
|
void PayloadConvert::writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f,
|
||||||
bool g, bool h) {
|
bool g, bool h) {
|
||||||
uint8_t bitmap = 0;
|
uint8_t bitmap = 0;
|
||||||
// LSB first
|
// LSB first
|
||||||
bitmap |= (a & 1) << 7;
|
bitmap |= (a & 1) << 7;
|
||||||
@ -178,18 +179,22 @@ void PayloadConvert::writeBitmap(bool a, bool b, bool c, bool d, bool e, bool f,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------- Cayenne LPP format ---------- */
|
/* ---------------- Cayenne LPP format ---------- */
|
||||||
//http://community.mydevices.com/t/cayenne-lpp-2-0/7510
|
// http://community.mydevices.com/t/cayenne-lpp-2-0/7510
|
||||||
|
|
||||||
#elif PAYLOAD_ENCODER == 3
|
#elif (PAYLOAD_ENCODER == 3 || PAYLOAD_ENCODER == 4)
|
||||||
|
|
||||||
void PayloadConvert::addCount(uint16_t value1, uint16_t value2) {
|
void PayloadConvert::addCount(uint16_t value1, uint16_t value2) {
|
||||||
uint16_t val1 = value1 * 100;
|
uint16_t val1 = value1 * 100;
|
||||||
uint16_t val2 = value2 * 100;
|
uint16_t val2 = value2 * 100;
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_COUNT_WIFI_CHANNEL;
|
buffer[cursor++] = LPP_COUNT_WIFI_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_ANALOG_INPUT; // workaround, type meter not found?
|
buffer[cursor++] = LPP_ANALOG_INPUT; // workaround, type meter not found?
|
||||||
buffer[cursor++] = val1 >> 8;
|
buffer[cursor++] = val1 >> 8;
|
||||||
buffer[cursor++] = val1;
|
buffer[cursor++] = val1;
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_COUNT_BLE_CHANNEL;
|
buffer[cursor++] = LPP_COUNT_BLE_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_ANALOG_INPUT; // workaround, type meter not found?
|
buffer[cursor++] = LPP_ANALOG_INPUT; // workaround, type meter not found?
|
||||||
buffer[cursor++] = val2 >> 8;
|
buffer[cursor++] = val2 >> 8;
|
||||||
buffer[cursor++] = val2;
|
buffer[cursor++] = val2;
|
||||||
@ -200,7 +205,9 @@ void PayloadConvert::addGPS(gpsStatus_t value) {
|
|||||||
int32_t lat = value.latitude / 100;
|
int32_t lat = value.latitude / 100;
|
||||||
int32_t lon = value.longitude / 100;
|
int32_t lon = value.longitude / 100;
|
||||||
int32_t alt = value.altitude * 100;
|
int32_t alt = value.altitude * 100;
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_GPS_CHANNEL;
|
buffer[cursor++] = LPP_GPS_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_GPS;
|
buffer[cursor++] = LPP_GPS;
|
||||||
buffer[cursor++] = lat >> 16;
|
buffer[cursor++] = lat >> 16;
|
||||||
buffer[cursor++] = lat >> 8;
|
buffer[cursor++] = lat >> 8;
|
||||||
@ -215,18 +222,25 @@ void PayloadConvert::addGPS(gpsStatus_t value) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void PayloadConvert::addConfig(configData_t value) {
|
void PayloadConvert::addConfig(configData_t value) {
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_ADR_CHANNEL;
|
buffer[cursor++] = LPP_ADR_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_DIGITAL_INPUT;
|
buffer[cursor++] = LPP_DIGITAL_INPUT;
|
||||||
buffer[cursor++] = value.adrmode;
|
buffer[cursor++] = value.adrmode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float celsius) {
|
void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime,
|
||||||
|
float celsius) {
|
||||||
int16_t val = celsius * 10;
|
int16_t val = celsius * 10;
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_BATT_CHANNEL;
|
buffer[cursor++] = LPP_BATT_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_ANALOG_INPUT;
|
buffer[cursor++] = LPP_ANALOG_INPUT;
|
||||||
buffer[cursor++] = voltage >> 8;
|
buffer[cursor++] = voltage >> 8;
|
||||||
buffer[cursor++] = voltage;
|
buffer[cursor++] = voltage;
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
buffer[cursor++] = LPP_TEMP_CHANNEL;
|
buffer[cursor++] = LPP_TEMP_CHANNEL;
|
||||||
|
#endif
|
||||||
buffer[cursor++] = LPP_TEMPERATURE;
|
buffer[cursor++] = LPP_TEMPERATURE;
|
||||||
buffer[cursor++] = (uint16_t)val >> 8;
|
buffer[cursor++] = (uint16_t)val >> 8;
|
||||||
buffer[cursor++] = (uint16_t)val;
|
buffer[cursor++] = (uint16_t)val;
|
||||||
@ -234,4 +248,4 @@ void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float celsius)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
#error "No valid payload converter defined"
|
#error "No valid payload converter defined"
|
||||||
#endif
|
#endif
|
@ -1,13 +1,15 @@
|
|||||||
#ifndef _PAYLOAD_H_
|
#ifndef _PAYLOAD_H_
|
||||||
#define _PAYLOAD_H_
|
#define _PAYLOAD_H_
|
||||||
|
|
||||||
// MyDevices CayenneLPP channels
|
// MyDevices CayenneLPP channels for dynamic sensor payload format
|
||||||
|
#if (PAYLOAD_ENCODER == 3)
|
||||||
#define LPP_GPS_CHANNEL 20
|
#define LPP_GPS_CHANNEL 20
|
||||||
#define LPP_COUNT_WIFI_CHANNEL 21
|
#define LPP_COUNT_WIFI_CHANNEL 21
|
||||||
#define LPP_COUNT_BLE_CHANNEL 22
|
#define LPP_COUNT_BLE_CHANNEL 22
|
||||||
#define LPP_BATT_CHANNEL 23
|
#define LPP_BATT_CHANNEL 23
|
||||||
#define LPP_ADR_CHANNEL 25
|
#define LPP_ADR_CHANNEL 25
|
||||||
#define LPP_TEMP_CHANNEL 26
|
#define LPP_TEMP_CHANNEL 26
|
||||||
|
#endif
|
||||||
|
|
||||||
// MyDevices CayenneLPP types
|
// MyDevices CayenneLPP types
|
||||||
#define LPP_GPS 136 // 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01m
|
#define LPP_GPS 136 // 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01m
|
||||||
@ -56,7 +58,7 @@ private:
|
|||||||
bool h);
|
bool h);
|
||||||
};
|
};
|
||||||
|
|
||||||
#elif PAYLOAD_ENCODER == 3 // format cayenne lpp
|
#elif (PAYLOAD_ENCODER == 3 || PAYLOAD_ENCODER == 4) // format cayenne lpp
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
@ -66,7 +68,7 @@ private:
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
#error "No valid payload converter defined"
|
#error "No valid payload converter defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern PayloadConvert payload;
|
extern PayloadConvert payload;
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ void senddata(uint8_t port) {
|
|||||||
ESP_LOGI(TAG, "LoRa busy, data not sent");
|
ESP_LOGI(TAG, "LoRa busy, data not sent");
|
||||||
sprintf(display_line7, "LORA BUSY");
|
sprintf(display_line7, "LORA BUSY");
|
||||||
} else {
|
} else {
|
||||||
LMIC_setTxData2(PAYLOAD_ENCODER == 3 ? CAYENNEPORT : port,
|
LMIC_setTxData2(PAYLOAD_ENCODER == 4 ? CAYENNEPORT : port,
|
||||||
payload.getBuffer(), payload.getSize(),
|
payload.getBuffer(), payload.getSize(),
|
||||||
(cfg.countermode & 0x02));
|
(cfg.countermode & 0x02));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user