====== APRS Telemetry ======
There are a few ways of sending telemetry via APRS.
===== Telemetry report format =====
The packet format is described on ''page 78'' in the ''APRS Protocol reference''
((APRS Protocol reference v1.0.1 — {{:guides:aprs:aprs101.pdf|}}, http://www.aprs.org/doc/APRS101.PDF))
.
It allows for 5 analogue channels and 8 digital bits.
Here are examples of typical telemetry messages:
|seq|ch1|ch2|ch3|ch4|ch5|-8bits--|
LZ1DEV-11>APRS,…:T#005,199,100,255,073,123,01101001
LZ1DEV-11>APRS,…:T#MIC199,100,255,073,123,01101001
The downside of this method is the lack of position or timestamp.
Plotting the data overtime could be impossible as time of arrival can be severely
affected by delays in the APRS network.
Furthermore, the resolution of each channel is limited to 8bits (e.g. 0-255) and
there are only 5 analogue channels.
==== Set up ====
You may have noticed that the above is limited in displaying negative numbers,
decimals and unit of measurement.
However, there are messages which can be send, that would indicate the unit of measurement,
constants to calculate a meaningful value and friendly name for the specific channel.
The details are described in the ''APRS Protocol reference [1]''.
|ADDRESSEE|TYPE| ch1 | ch2 | ch3 |ch4 |ch5| 1b | 2b | 3b|4b |5b |…
LZ1DEV>APRS,…::LZ1DEV-11:PARM.Battery,Btemp,ATemp,Pres,Alt,Camra,Chut,Sun,10m,ATV
|ADDRESSEE|TYPE| ch1 | ch2 | ch3 | ch4 | ch5 |…
LZ1DEV>APRS,…::LZ1DEV-11:EQNS.0,5.2,0,0,.53,-32,3,4.39,49,-32,3,18,1,2,3
|ADDRESSEE|TYPE| ch1 | ch2 | ch3 | ch4|ch5| b1 | b2 |b3|b4|b5|
LZ1DEV>APRS,…::LZ1DEV-11:UNIT.v/100,deg.F,deg.F,Mbar,Kft,Click,OPEN,on,on,hi
There are 3 types of messages that can be send that would allow to "configure" telemetry.
**PARM** and **UNIT** are straightforward and configure the channel name and unit.
**EQNS** is to configure the constants in the following quadratic equation ''a*x2 + b*x + c''
, which is used to calculate the final value.
Example of calculating the final value for channel #2:
x = 100 a = 0, b = 0.53, c = -32
0*100^2 + 100*0.53 + (-32)
0 + 53 + (-32)
----
Btemp: 21 def.F
==== Support ====
Both [[http://aprs.fi]] and [[http://tracker.habhub.org/]] recognize the format and will graph the telemetry accordingly.
===== Base91 comment telemetry =====
''Base91 comment telemetry''
((Base91 comment telemetry — {{:guides:aprs:aprs-base91-comment-telemetry.pdf|}}, http://he.fi/doc/aprs-base91-comment-telemetry.txt))
is an alternative to the telemetry report format.
The key advantages are:
* Short (4 to 16 characters)
* Can be added to the comment field of any format (position reports for example)
* Each channel has resolution of 0-8280
* Set up the same way
==== Example C program ====
#include
void base91_encode(char *buf, unsigned short value) {
// valid values are 0 - 8280
value = value % 8281;
// encode the value
buf[0] = 33 + (value / 91);
buf[1] = 33 + (value % 91);
}
int main(void) {
printf("APRS base91 telemetry extension example\n");
printf("---------------------------------------\n");
// One channel of telemetry
char telem1[] = "|ss11|";
base91_encode(&telem1[1], 1); // sequence number
base91_encode(&telem1[3], 0); // ch1
printf("Telemetry #1: %s\n", telem1);
// Five channels of telemetry
char telem2[] = "|ss1122334455|";
base91_encode(&telem2[1], 2); // sequence number
base91_encode(&telem2[3], 1111); // ch1
base91_encode(&telem2[5], 2222); // ch2
base91_encode(&telem2[7], 3333); // ch3
base91_encode(&telem2[9], 4444); // ch4
base91_encode(&telem2[11], 5555); // ch5
printf("Telemetry #2: %s\n", telem2);
}
===== Human readable format in the comment field =====
This method is straightforward, simply format and append telemetry to the comment field. Example:
LZ1DEV-11>APRS,…:=0001.00N/00001.00Wv266/024/A=000299 13.55Cint -30.51Cext 3.45V 7Sats
|----------- comment -------------|
Things too keep in mind:
* the packet will be longer than necessary
* the amount of characters in the comment section is limited, depending on the packet type (e.g. 0-28, 0-43)
* existing system won't recognize the telemetry and provide friendly plotting over time
====== References ======