finalizing v1.3.82
This commit is contained in:
parent
d2739426e5
commit
d6dc404083
10
README.md
10
README.md
@ -110,13 +110,13 @@ Legend for RGB LED (LoPy/LoPy4/FiPy/Lolin32 only):
|
|||||||
|
|
||||||
You can select between different payload formats in [paxcounter.conf](src/paxcounter.conf#L40):
|
You can select between different payload formats in [paxcounter.conf](src/paxcounter.conf#L40):
|
||||||
|
|
||||||
- *Plain* generates human readable json fields, e.g. useful for TTN console
|
- ***Plain*** uses big endian format and generates json fields, e.g. useful for TTN console
|
||||||
|
|
||||||
- *Packed* generates packed json fiels, e.g. useful for own backends
|
- ***Packed*** uses little endian format and generates json fields
|
||||||
|
|
||||||
- [*CayenneLPP*](https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload-reference-implementation) generates MyDevices Cayenne readable fields
|
- [***CayenneLPP***](https://mydevices.com/cayenne/docs/lora/#lora-cayenne-low-power-payload-reference-implementation) generates MyDevices Cayenne readable fields
|
||||||
|
|
||||||
Hereafter described is the *Plain* format. All data is represented in big-endian-format.
|
Hereafter described is the default *Plain* format.
|
||||||
|
|
||||||
**LoRaWAN Port #1:**
|
**LoRaWAN Port #1:**
|
||||||
|
|
||||||
@ -144,6 +144,8 @@ To map a GPS capable paxcounter device and at the same time contribute to TTN co
|
|||||||
**Decoder:**
|
**Decoder:**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
<object data="TTN/packed_decoder.js" type="text/plain" width="200" height="100">
|
||||||
|
</object>
|
||||||
function Decoder(bytes, port) {
|
function Decoder(bytes, port) {
|
||||||
var decoded = {};
|
var decoded = {};
|
||||||
|
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
; ---> SELECT TARGET PLATFORM HERE! <---
|
; ---> SELECT TARGET PLATFORM HERE! <---
|
||||||
[platformio]
|
[platformio]
|
||||||
;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,22 +7,22 @@ function Decoder(bytes, port) {
|
|||||||
|
|
||||||
if (port === 1) {
|
if (port === 1) {
|
||||||
// only counter data, no gps
|
// only counter data, no gps
|
||||||
if (bytes.length == 4) {
|
if (bytes.length === 4) {
|
||||||
return decode(bytes, [uint16, uint16], ['wifi', 'ble']);
|
return decode(bytes, [uint16, uint16], ['wifi', 'ble']);
|
||||||
}
|
}
|
||||||
// combined counter and gps data
|
// combined counter and gps data
|
||||||
if (bytes.length > 4) {
|
if (bytes.length === 17) {
|
||||||
return decode(bytes, [uint16, uint16, latlng, uint8, uint16, uint16], ['wifi', 'ble', 'coords', 'sats', 'hdop', 'altitude']);
|
return decode(bytes, [uint16, uint16, latLng, latLng, uint8, hdop, uint16], ['wifi', 'ble', 'latitude', 'longitude', 'sats', 'hdop', 'altitude']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port === 2) {
|
if (port === 2) {
|
||||||
// device status data
|
// device status data
|
||||||
if (bytes.length == 12) {
|
if (bytes.length === 12) {
|
||||||
return decode(bytes, [uint16, uptime, temperature], ['voltage', 'uptime', 'cputemp']);
|
return decode(bytes, [uint16, uptime, temperature], ['voltage', 'uptime', 'cputemp']);
|
||||||
}
|
}
|
||||||
// device config data
|
// device config data
|
||||||
if (bytes.length == 8) {
|
if (bytes.length === 8) {
|
||||||
return decode(bytes, [uint8, uint16, uint8, uint8, uint8, uint8, bitmap], ['lorasf', 'rssilimit', 'sendcycle', 'wifichancycle', 'blescantime', 'rgblum', 'flags']);
|
return decode(bytes, [uint8, uint16, uint8, uint8, uint8, uint8, bitmap], ['lorasf', 'rssilimit', 'sendcycle', 'wifichancycle', 'blescantime', 'rgblum', 'flags']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,15 +67,19 @@ uint16.BYTES = 2;
|
|||||||
|
|
||||||
var latLng = function (bytes) {
|
var latLng = function (bytes) {
|
||||||
if (bytes.length !== latLng.BYTES) {
|
if (bytes.length !== latLng.BYTES) {
|
||||||
throw new Error('Lat/Long must have exactly 8 bytes');
|
throw new Error('Lat/Long must have exactly 4 bytes');
|
||||||
}
|
}
|
||||||
|
return bytesToInt(bytes) / 1e6;
|
||||||
var lat = bytesToInt(bytes.slice(0, latLng.BYTES / 2));
|
|
||||||
var lng = bytesToInt(bytes.slice(latLng.BYTES / 2, latLng.BYTES));
|
|
||||||
|
|
||||||
return [lat / 1e6, lng / 1e6];
|
|
||||||
};
|
};
|
||||||
latLng.BYTES = 8;
|
latLng.BYTES = 4;
|
||||||
|
|
||||||
|
var hdop = function (bytes) {
|
||||||
|
if (bytes.length !== hdop.BYTES) {
|
||||||
|
throw new Error('hdop must have exactly 2 bytes');
|
||||||
|
}
|
||||||
|
return bytesToInt(bytes) / 100;
|
||||||
|
};
|
||||||
|
hdop.BYTES = 2;
|
||||||
|
|
||||||
var temperature = function (bytes) {
|
var temperature = function (bytes) {
|
||||||
if (bytes.length !== temperature.BYTES) {
|
if (bytes.length !== temperature.BYTES) {
|
||||||
@ -118,7 +122,7 @@ var bitmap = function (byte) {
|
|||||||
}
|
}
|
||||||
var i = bytesToInt(byte);
|
var i = bytesToInt(byte);
|
||||||
var bm = ('00000000' + Number(i).toString(2)).substr(-8).split('').map(Number).map(Boolean);
|
var bm = ('00000000' + Number(i).toString(2)).substr(-8).split('').map(Number).map(Boolean);
|
||||||
return ['adr', 'screensaver', 'display', 'countermode', 'blescan', 'antenna', 'filter', 'gpsmode']
|
return ['adr', 'screensaver', 'screen', 'countermode', 'blescan', 'antenna', 'filter', 'gpsmode']
|
||||||
.reduce(function (obj, pos, index) {
|
.reduce(function (obj, pos, index) {
|
||||||
obj[pos] = bm[index];
|
obj[pos] = bm[index];
|
||||||
return obj;
|
return obj;
|
||||||
@ -156,6 +160,7 @@ if (typeof module === 'object' && typeof module.exports !== 'undefined') {
|
|||||||
temperature: temperature,
|
temperature: temperature,
|
||||||
humidity: humidity,
|
humidity: humidity,
|
||||||
latLng: latLng,
|
latLng: latLng,
|
||||||
|
hdop: hdop,
|
||||||
bitmap: bitmap,
|
bitmap: bitmap,
|
||||||
decode: decode
|
decode: decode
|
||||||
};
|
};
|
||||||
|
@ -37,9 +37,8 @@
|
|||||||
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
||||||
|
|
||||||
// LoRa payload parameters
|
// LoRa payload parameters
|
||||||
#define PAYLOAD_ENCODER 2 // select payload encoder: 1=Plain [default], 2=Packed, 3=CayenneLPP
|
#define PAYLOAD_ENCODER 1 // select payload encoder: 1=Plain [default], 2=Packed, 3=CayenneLPP
|
||||||
//#define SEND_SECS 120 // payload send cycle [seconds/2] -> 240 sec.
|
#define SEND_SECS 120 // payload send cycle [seconds/2] -> 240 sec.
|
||||||
#define SEND_SECS 30 // payload send cycle [seconds/2] -> 60 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
|
||||||
|
Loading…
Reference in New Issue
Block a user