Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support APRS Telemetry Scaling and Naming #17

Open
kb1lqc opened this issue Oct 10, 2017 · 9 comments
Open

Support APRS Telemetry Scaling and Naming #17

kb1lqc opened this issue Oct 10, 2017 · 9 comments

Comments

@kb1lqc
Copy link
Member

kb1lqc commented Oct 10, 2017

Summary

aprslib provides parsing of scaling values and channel names. We should use these...

http://aprs-python.readthedocs.io/en/latest/parse_formats.html#telemetry-configuration

Problem Explanation

Provide a more in-depth explanation of the problem or feature if applicable

Supporting Information

This is a handy spot to post any screenshots or file outputs in order to better support this issue. We want to keep the top of the ticket clutter-free as possible.

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 23, 2017

This ticket is next up in importance for #LaunchWithFaraday buoy use. Will definitely help any station sending telemetry as well!

Heads-up @rossengeorgiev and @PhirePhly on our service using aprs2influxdb along with aprslib to parse APRS-IS for general use with influxdb. Finally pushing it out for use. Will be fun to see what works/breaks/etc!

https://faradayrf.com/faradayrf-telemetry/

@rossengeorgiev
Copy link

Nice work! It is looking great

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 25, 2017

OK Here are a few seconds of parsing to the screen a "telemetry-message":

{'via': u'T2TOKYO3', 'from': u'HS5FXK', 'to': u'APMI04', 'format': 'telemetry-message', 'raw': u'HS5FXK>APMI04,TCPIP*,qAC,T2TOKYO3::HS5FXK   :PARM.Vin,Rx1h,Dg1h,Eff1h,Eff,O1,O2,O3,O4,I1,I2,I3,I4', 'path': [u'TCPIP*', u'qAC', u'T2TOKYO3'], 'addresse': u'HS5FXK', u'tPARM': [u'Vin', u'Rx1h', u'Dg1h', u'Eff1h', u'Eff', u'O1', u'O2', u'O3', u'O4', u'I1', u'I2', u'I3', u'I4']}
{'via': u'T2TOKYO3', 'from': u'HS5FXK', 'to': u'APMI04', 'format': 'telemetry-message', 'raw': u'HS5FXK>APMI04,TCPIP*,qAC,T2TOKYO3::HS5FXK   :UNIT.Volt,Pkt,Pkt,Pcnt,Pcnt,On,On,On,On,Hi,Hi,Hi,Hi', u'tUNIT': [u'Volt', u'Pkt', u'Pkt', u'Pcnt', u'Pcnt', u'On', u'On', u'On', u'On', u'Hi', u'Hi', u'Hi', u'Hi'], 'path': [u'TCPIP*', u'qAC', u'T2TOKYO3'], 'addresse': u'HS5FXK'}
{'via': u'T2TOKYO3', 'from': u'HS5FXK', 'to': u'APMI04', 'format': 'telemetry-message', 'raw': u'HS5FXK>APMI04,TCPIP*,qAC,T2TOKYO3::HS5FXK   :EQNS.0,0.079,0,0,10,0,0,10,0,0,1,0,0,1,0', u'tEQNS': [[0, 0.079, 0], [0, 10, 0], [0, 10, 0], [0, 1, 0], [0, 1, 0]], 'path': [u'TCPIP*', u'qAC', u'T2TOKYO3'], 'addresse': u'HS5FXK'}
{'via': u'T2TOKYO3', 'from': u'HS5FXK', 'to': u'APMI04', u'tBITS': u'11111111', 'title': u'Telemetry test', 'format': 'telemetry-message', 'raw': u'HS5FXK>APMI04,TCPIP*,qAC,T2TOKYO3::HS5FXK   :BITS.11111111,Telemetry test', 'path': [u'TCPIP*', u'qAC', u'T2TOKYO3'], 'addresse': u'HS5FXK'}
{'via': u'SV6NOB', 'from': u'ER-SV6NOB', 'to': u'RXTLM-1', 'format': 'telemetry-message', 'raw': u'ER-SV6NOB>RXTLM-1,TCPIP,qAR,SV6NOB::ER-SV6NOB:UNIT.RX Erlang,TX Erlang,RXcount/10m,TXcount/10m,none1,STxxxxxx,logic', u'tUNIT': [u'RX Erlang', u'TX Erlang', u'RXcount/10m', u'TXcount/10m', u'none1', u'STxxxxxx', u'logic', '', '', '', '', '', ''], 'path': [u'TCPIP', u'qAR', u'SV6NOB'], 'addresse': u'ER-SV6NOB'}
{'via': u'EB7GYR', 'from': u'EB7GYR-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'EB7GYR-1>APMI06,TCPIP*,qAS,EB7GYR::EB7GYR-1 :PARM.Vin,Rx1h,Dg1h,Eff1h,EfTot,O1,O2,O3,O4,I1,I2,I3,I4', 'path': [u'TCPIP*', u'qAS', u'EB7GYR'], 'addresse': u'EB7GYR-1', u'tPARM': [u'Vin', u'Rx1h', u'Dg1h', u'Eff1h', u'EfTot', u'O1', u'O2', u'O3', u'O4', u'I1', u'I2', u'I3', u'I4']}
{'via': u'EB7GYR', 'from': u'EB7GYR-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'EB7GYR-1>APMI06,TCPIP*,qAS,EB7GYR::EB7GYR-1 :UNIT.Volt,Pkt,Pkt,Pcnt,Pcnt,On,On,On,On,Hi,Hi,Hi,Hi', u'tUNIT': [u'Volt', u'Pkt', u'Pkt', u'Pcnt', u'Pcnt', u'On', u'On', u'On', u'On', u'Hi', u'Hi', u'Hi', u'Hi'], 'path': [u'TCPIP*', u'qAS', u'EB7GYR'], 'addresse': u'EB7GYR-1'}
{'via': u'EB7GYR', 'from': u'EB7GYR-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'EB7GYR-1>APMI06,TCPIP*,qAS,EB7GYR::EB7GYR-1 :EQNS.0,0.075,0,0,10,0,0,10,0,0,1,0,0,1,0', u'tEQNS': [[0, 0.075, 0], [0, 10, 0], [0, 10, 0], [0, 1, 0], [0, 1, 0]], 'path': [u'TCPIP*', u'qAS', u'EB7GYR'], 'addresse': u'EB7GYR-1'}
{'via': u'EB7GYR', 'from': u'EB7GYR-1', 'to': u'APMI06', u'tBITS': u'11111111', 'title': u'EB7GYR Telemetry', 'format': 'telemetry-message', 'raw': u'EB7GYR-1>APMI06,TCPIP*,qAS,EB7GYR::EB7GYR-1 :BITS.11111111,EB7GYR Telemetry', 'path': [u'TCPIP*', u'qAS', u'EB7GYR'], 'addresse': u'EB7GYR-1'}
{'via': u'IS0AML-IS', 'from': u'IR0DA', 'to': u'APRX28', 'format': 'telemetry-message', 'raw': u'IR0DA>APRX28,TCPIP*,qAC,IS0AML-IS::IR0DA    :PARM.Avg 10m,Avg 10m,RxPkts,IGateDropRx,TxPkts', 'path': [u'TCPIP*', u'qAC', u'IS0AML-IS'], 'addresse': u'IR0DA', u'tPARM': [u'Avg 10m', u'Avg 10m', u'RxPkts', u'IGateDropRx', u'TxPkts', '', '', '', '', '', '', '', '']}
{'via': u'IR0DA', 'from': u'IR0DA-12', 'to': u'APRX28', 'format': 'telemetry-message', 'raw': u'IR0DA-12>APRX28,TCPIP*,qAS,IR0DA::IR0DA-12 :PARM.Avg 10m,Avg 10m,RxPkts,IGateDropRx,TxPkts', 'path': [u'TCPIP*', u'qAS', u'IR0DA'], 'addresse': u'IR0DA-12', u'tPARM': [u'Avg 10m', u'Avg 10m', u'RxPkts', u'IGateDropRx', u'TxPkts', '', '', '', '', '', '', '', '']}
{'via': u'UR4PWJ', 'from': u'UR4PWJ-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'UR4PWJ-1>APMI06,TCPIP*,qAS,UR4PWJ::UR4PWJ-1 :PARM.Temp,DecEff1,TotDec,Rx1Hou,DigHo,O1,O2,O3,O4,I1,I2,I3,I4', 'path': [u'TCPIP*', u'qAS', u'UR4PWJ'], 'addresse': u'UR4PWJ-1', u'tPARM': [u'Temp', u'DecEff1', u'TotDec', u'Rx1Hou', u'DigHo', u'O1', u'O2', u'O3', u'O4', u'I1', u'I2', u'I3', u'I4']}
{'via': u'UR4PWJ', 'from': u'UR4PWJ-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'UR4PWJ-1>APMI06,TCPIP*,qAS,UR4PWJ::UR4PWJ-1 :UNIT.C,Pcnt,Pcnt,Pcnt,Pcnt,On,On,On,On,Hi,Hi,Hi,Hi', u'tUNIT': [u'C', u'Pcnt', u'Pcnt', u'Pcnt', u'Pcnt', u'On', u'On', u'On', u'On', u'Hi', u'Hi', u'Hi', u'Hi'], 'path': [u'TCPIP*', u'qAS', u'UR4PWJ'], 'addresse': u'UR4PWJ-1'}
{'via': u'UR4PWJ', 'from': u'UR4PWJ-1', 'to': u'APMI06', 'format': 'telemetry-message', 'raw': u'UR4PWJ-1>APMI06,TCPIP*,qAS,UR4PWJ::UR4PWJ-1 :EQNS.0,1,-128,0,1,0,0,1,0,0,1,0,0,1,0', u'tEQNS': [[0, 1, -128], [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0]], 'path': [u'TCPIP*', u'qAS', u'UR4PWJ'], 'addresse': u'UR4PWJ-1'}
{'via': u'F4EYL', 'from': u'ER-F4EYL', 'to': u'RXTLM-1', 'format': 'telemetry-message', 'raw': u'ER-F4EYL>RXTLM-1,TCPIP,qAR,F4EYL::ER-F4EYL :UNIT.RX Erlang,TX Erlang,RXcount/10m,TXcount/10m,none1,STxxxxxx,logic', u'tUNIT': [u'RX Erlang', u'TX Erlang', u'RXcount/10m', u'TXcount/10m', u'none1', u'STxxxxxx', u'logic', '', '', '', '', '', ''], 'path': [u'TCPIP', u'qAR', u'F4EYL'], 'addresse': u'ER-F4EYL'}

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 25, 2017

image

image

image

image

@rossengeorgiev
Copy link

Those are just configuration for how to interpret the values in telemetry. They need to be remembered per callsign. One downside is, if you miss the configuration messages, you can't really interpret telemetry. In same cases, people will send them once manually and never again.

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 25, 2017

Thanks @rossengeorgiev . Yeah I was just documenting the packets for telemetry scaling/naming here. Agreed at the general approach needed to use them and will default to raw telemetry values if no recent scaling/naming is found.

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 25, 2017

Ahh I have some working code placing APRS parameters into influxdb as fields. However, it appears I may want to use tags instead:

grafana/grafana#5013

This stinks. influxDB Grafana templating is how I wanted to solve this problem. Being able to query for the values makes sense. Well there are far fewer fewer telemetry stations so this may work. I'll also have to figure out how to pack in the key value pairs for a SHOW style query such that I can regex correctly.

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 26, 2017

Alright, I'm stumped. There doesn't seem to be a good way around this with influxDB and Grafana only supporting SHOW queries for Grafana templates. I'm tempted to use mysql but that sorta defeats the purpose of aprs2influxdb or at least mixing databases seems dirty.

@kb1lqd what do you think and is scaling/telemetry names/units something we want for Hackaday Supercon? Seems kind of important to me but I'm open to considering not. Seeing raw data is only so useful.

@kb1lqc
Copy link
Member Author

kb1lqc commented Oct 29, 2017

Scaling seems to be working in the latest commit on issue17 branch in my repository. I'm at least scaling Faraday content and should apply scaling to any other station which sends out this data. By default I scale to bits. Data will only update to correct scaling when equations packet is sent out. Also I had to update the Faraday configuration for APRS to set the scaling values.

image

Currently, all Faraday radio's are scaled to the same equations when received on a base station. Overall the APRS application does need some TLC.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants