Assurance for sendpacket: variable sendpacket_was_called_twice:
avoid making duplicates (if sendpacket() is called
more than one time in the loop).
prepareAPRSFrame() and sendpacket() (who calls it) now with argument
force_fixed:
if fixed position should be sent, or position from gps.
Beauty: reduced code
create_lat_aprs(const char *delimiter, RawDegrees lat)
create_lon_aprs(const char *delimiter, RawDegrees lng)
instead of
create_lat_aprs_s(RawDegrees lat)
create_long_aprs(RawDegrees lng)
create_lat_aprs_s(RawDegrees lat)
create_long_aprs_s(RawDegrees lng)
which did almost the same (difference in string only one char)
~
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
nextTX = sb_min_interval * sb_max_speed / average_speed_final;
-> nextTX could become sb_max_interval, but shouldn't.
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
Bugffix
- apris-is filter argument was ignored
New features
- We make use of hardware watchdog for esp32.
-> Measurement against bugs or mis-behaviour
- automatic reboot affter n hours (i.e. if the wifi client does not reconnect)
- In Wen handle_Cfg we now show System Uptime (in resolution of a minute)
Documentation:
- improved description for apris-filter
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
You can now specify, if aprs-is third-party traffic goes
to main freq, secondary freq, both frequencies, or blocked-
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
Bugfixes
- Path short elements (len < 3) like Q or QQ are configured, they were omittied due to a bug
- fixed location: did function only if gps was disabled. -> bug fixed.
- if (millis() >= next_fixed_beacon && !gps_state) {
+ if (millis() >= next_fixed_beacon && (!gps_state || !gps.location.isValid())) {
- maidenhead grid locator setting: JO30AA did work, JO33AA11 did not, JO33AA11BB did. -> fixed
Web:
- added recommendation for path 'Q' when fyling in higher altitude, like i.e. a balloon
- added example for an APRS-IS filter
- deleted word "Preset" at Lat/Lon
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
- plaformio:
- removed Lock to BusIO version 1.9.7.
The fixed their library.
- old espressif32 library 3.0.0 is not compatible to current BusIO.
Version 3.1.1 is.
Moved all platforms to current stable 3.5.0.
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
TTGO LoRa32 V2.1 (aka T3 V1.6.1) has a bug if you use wifi and bt at the
same time. Then web-server will not function anymore.
My hack waits up to 60s during boot if a BT client connects. Else
the web server is started-
Another fix is: compiles again without KISS feature enabled (but not
tested).
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
New MY_APRS_DEST_IDENTIFYER variable did not appear in outstring -> defect packet.
=> beacons prepared by prepareAPRSFrame() were affcted:
- outString + MY_APRS_DEST_IDENTIFYER;
+ outString += MY_APRS_DEST_IDENTIFYER;
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
You can now configure an ntp server.
If left empty: Auto-choice between pool.ntp.org and ntp.hc.r1.ampr.org according your IP address.
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
Fix:
if lora tx is disabled, and you are connected to aprs-is, you like to see your beacons there (useful if you are a rx-only igate)
New feature:
- option "TX our beacon to APRS-IS":
TX our beacon from this device or from-kiss to APRS-IS. You may like to disable this i.e. if you are a portable hotspot togehther your mobile, but like others
than you yourself gate your own packets to APRS-IS -> you'll see at APRS-IS who heard you.
- option "TX our beacon from this device or from-kiss to frequencies":
Don't send our beacon on RF (but only to kiss and to APRS-IS)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
- bugfix
- config rx on secondary freq did not work anymore (lost this functionality
one or two versions before and did not recognize)
- cross-digi: Now only on receiption on main freq. Had overseen this demand
in designing phase
- web-interface: new documentation section. currently used for
- how hardware buttons work
- about SNR/RSSI path encoding concept
And I revert the hack for github compiled version download: I tried to rename
firmware.bin to fimware.raw, but filename.bin is not the cause of githubs
web 404 error message.
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
Major upgrade
- SNR/RSSI encoding (Q...) feature:
- changed default preference for SNR/RSSI encoding (Q...) to
lora_add_snr_rssi_to_path = (FLAG_ADD_SNR_RSSI_FOR_KISS |
_FLAG_ADD_SNR_RSSI_FOR_APRSIS__ONLY_IF_HEARD_DIRECT)
..HEARD_DIRECT is a new feature
- user may request SNR/RSSI trace by adding to path 'Q' (digis who hear
him direct add SNR/RSSI), or 'QQ' (every digi adds - useful for
local RF network trace)
- more config options in Web-Interface
- Relay-Path: check for invalid input. More tips how to configure.
Auto-suggest "WIDE1-1" if unexperienced user enters "WIDE1"
- Fixed location setting of Latitude / Longitude:
Previously, a user had to know the correct notation of APRS spec.
Now, we are pretty smart and can handle different notations,
inclusive MAIDENHEAD GRID ;)
- blacklist filter for src-calls and calls in digi path
- if you have a digipeater or user which behaves bad
- against mis-use of our infrastructure
- config option for switching of lora RX
- MY_APRS_DEST_IDENTIFYER = ... as one global string instead of multible
occourences in the code
- improved packet validation
- web-interface input validation (trim() to strip leading/trailing spaces),
i.e. att callsign, relay path, aprs-is-server-name, -call and -password, ..
- third-partytraffic: changed dstcall from "APRS" to MY_APRS_DEST_IDENTIFYER
..and a test to circumvent github firmware download bug that came in end 2021
Signed-off-by: Thomas Osterried <dl9sau@github>
aprs-is servers answers on login with i.e.
# logresp DL9SAU-T1 unverified, server T2EISBERG
This answer was not intuitive and I checked the word " verified" for successful login.
In other aprs-is client software, I read they parsed "logresp" as answer from aprs-is servers.
=> My change
+ if (s.indexOf(" logresp") == -1) { aprsis_status = "Error: Login denied: " + s; aprsis_status.trim(); goto on_err; }
+ if (s.indexOf(" verified") == -1) { aprsis_status = "Notice: server responsed not verified: " + s; aprsis_status.trim();
An other response of a server is:
user DL9SAU-TEST pass -1 scripttest 0.1
# Invalid username format
We'll send Login denied here, with that message-
[Reason for deny is: len(SSID) is max 2 by definition of the aprs-is-authors.]
If password is wrong, we stay connected.
Notice message in aprsis_staus shows in the web-interface what went wrong.
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
Web index.html:
- Input field "APRS-IS status" and "Current RX Frequency" are now "readonly".
- These fields are not intended for input. They show status. User now sees that he cannot enter anything.
- Upon request, frequency resolution is now 100 Hz. This was the only point for implementing this feature.
But have in mind that this equpment is not such frequency stable at all.
Web index.html and taskWebserver.cpp:
- New function jsonLineFromDouble now displays lora_freq_rx_curr with decimal point (instead of my previous hack int(*= 1000))
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
This fixes a bug that listen qrg is not set to the configured lora_freq from preferences, but to the qrg from compile time (-D..).
Signed-off-by: Thomas Osterried <dl9sau@github>
- own packets we receive
- packets we have have repeated
in the code part rf->tracker and in the part inet->tracker
Signed-off-by: Thomas Osterried <dl9sau@github>
New features:
- rx on main qrg, secondary qrg or both. (If we are not configured as WIDE1 or WIDE2 digi). QSY time depends on amount of other users heard, in 10min qindow.
- tx_qrg for beacon (if we ae configured as WIDE1 or WIDE2 digi)
- tx_power configurable on second frequency
- long waited aprs-is igtate feature. We provide a bid-direcional gateway.
- snr-in-path-encoding compatible for aprs-is (optional)
- added new parameter lora_SPEED to function loraSend()
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
New features:
- txpower configurable (previously only compile time option in platform.ini)
If not configured in platform.ini (previously necessary), it now defaults to 23.0
- New Enable LoRa TX variable. If disabled, it's assured that TX will never happen
(i.e. in order to protect rx amplifier)
This option is also definable in platformio.ini, if you comment out:
;-D 'TXDISABLE'
If set, it also enforces txpower 0.
=>
#ifdef TXDISABLE // define TXDISABLE if you like to ensure that we never
TX (i.e. if we are behind an rx-amplifier)
boolean lora_tx_enabled = false;
uint8_t txPower = 0;
#else
boolean lora_tx_enabled = true;
#ifdef TXdbmW
uint8_t txPower = TXdbmW;
#else
uint8_t txPower = 23;
#endif
endif
;))
- Web-Interface: Link to /cfg (-> make it easier for users to show the json and
store the current configuration). This is better than making screenshots of
the website ;)
If could be done better (download link, ..). And possibility to upload
the configuration from backup. Who likes to implement this?
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
We use an old BG_RF95 library from 2001. RadioHead/RH_RF95.cpp implements _lastSNR and _lastRssi correctly accordingg to the specs
- SNR computation according to spec
- RSSI computation revised
Work on design of Q...-encoding scheme for encoding SNR and RSSI in path.
In TTGO_T-Beam_LoRa_APRS.ino I removed unused variable
lora_old_speed
which was still there after removing my debug code which showed previous / current value ;)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
In TTGO_T-Beam_LoRa_APRS.ino I removed unused variable
lora_old_speed
which was still there after removing my debug code which showed previous / current value ;)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
(c) 2021 Thomas Osterried dl9sau, License GPL
CAVE:
webconfig does not work properly. This needs to be fixed before the changes could go upstream!
Until then, you can hardcode values in TTGO_T-Beam_LoRa_APRS.ino after the
"// enforce valid transmissions even on wrong configurations"
section.
For examples, see appendix 1.
New features
Changes
- improved automatic CodeRate adaption
- Concept for adding SNR+RSSI in packet path. Q23073* means, 23 dB SNR, -73 dB RSSI.
- full smart-beaconing implementation, with default parameters from kenwood / yaesu devices
Changed files:
1. data_embed/index.html
------------------------
- cosmetic changes
- added configuration options for new features described above
- description how to configure DST-call-path-addressing
- make configurable
- automatic coderate adaption
- rate limiting comment text
- My recent "Accept own positions via KISS" feature
- My recent "Allow GPS sleep while own positions received via KISS" feature
- LoRa Digipeating
- LoRa cross-digipeating (Mode, frequency, speed)
2. preference_storage.h
-----------------------
definitions for the new configuration variables
3. platformio.ini
------------------k
Variable MAX_TIME_TO_NEXT_TXT commented out. Was not implemented, and needs not be configured anymore.
Default enabling of
ENABLE_TNC_SELF_TELEMETRY
switched off because most people do not need this
DIGI_PATH="1": suggestion to make this default
"FIXED_BEACON_EN": switched off, because if you have a tracker with GPS, you do smart-beaconing.
Or if you have no GPS, you need to configure LAT/LONG before enabling fixed beaconing.
"SHOW_BATT": if you really need this, enable it.
"SPEED_1200": most regions use 300.
Typo:
LATIDUDE_PRESET -> changed to LATITUDE_PRESET (also in TTGO_T-Beam_LoRa_APRS.ino)
4. TTGO_T-Beam_LoRa_APRS.ino
----------------------------
global variables:
- -D SPEED_1200 had not effekt. Added appropriete #ifdef.
Perhaps, "LORA_SPEED_LOW" or "LORA_SPEED_FAST" (like mentioned in the web interface) would be a better approach
- gps state: set default on only at devices with GPS-RX
- New smartbeaconing:
- values like sb_turn_slope and sb_turn_time
- if -D SB_ALGO_KENWOOD, use those defaults. Scales better at low speed.
- my new featerus:
- lora_speed_cross_digi
- lora_freq_cross_digi
- lora_automatic_cr_adaption
- lora_digipeating_mode
- lora_add_snr_rssi_to_path
- lora_cross_digipeating_mode
- acceptOwnLocationReportsViaKiss
- allow_gps_sleep_while_kiss
- acceptOwnPositionReportsViaKiss
- gps_allow_sleep_while_kiss
- added code for new preferences values
- in prepareAPRSFrame()
- beautified DST-path addition on outString
- better comment-ratelimiting computation
- loraSend(): small change.
- If lora freq was changed for sending one packet on another frequency (cross digi mode):
+ // cross-digipeating may have altered our RX-frequency. Revert frequency change needed for this transmission.
+ if (lora_FREQ != lora_freq)
+ rf95.setFrequency(lora_freq);
- FEATURE request:
// Feauture request: add param lora_speed. Currently, we need a variable for storing the old speed, and affer loraSend(), we have to revert :(
I did not change the function parametes without asking
- new sanity check:
+// enforce valid transmissions even on wrong configurations
+if (aprsSymbolTable.length() != 1)
+ aprsSymbolTable = String("/");
+if (aprsSymbol.length() != 1)
+ aprsSymbol = String("[");
+if (aprsLatPreset.length() != 8 || !(aprsLatPreset.endsWith("N") || aprsLatPreset.endsWith("S")) || aprsLatPreset.c_str()[4] != '.')
+ aprsLatPreset = String("0000.00N");
+if (aprsLonPreset.length() != 9 || !(aprsLonPreset.endsWith("E") || aprsLonPreset.endsWith("W")) || aprsLonPreset.c_str()[5] != '.')
+ aprsLonPreset = String("00000.00E");
-> Without this, and if unconfigured, invalid packets without position in the position-part of the AX.25 packets could occur. Saw this happens, at findu.com ;)
- encode_snr_rssi_in_path():
My idea of coding SNR and RSSI in packet path. Instead of modifying user's comment text (which some digi software does, and is a really bad idea)
- add_element_to_path():
a quick, string based option to add a digi element to the AX.25 header
- tnc_format_to_ax25_frame(): header parser, needed for handle_lora_frame_for_lora_digipeating
- handle_lora_frame_for_lora_digipeating: does header rewrite for digipeating
- implemented digipeating and cross-digipeating
- redesignt automatic cr-adatpion
- improved smart-beaconing decisions
5. taskWebServer.cpp:
---------------------
- added code for new preferences values
Appendix 1
----------
I.e. my enforced test settings in TTGO_T-Beam_LoRa_APRS.ino behind
the block
"// enforce valid transmissions even on wrong configurations"
were:
lora_speed = 180;
lora_digipeating_mode = 2;
lora_cross_digipeating_mode = 0;
sb_min_interval = 90000L;
sb_max_interval = 1800000L;
lora_automatic_cr_adaption = true;
lora_speed_cross_digi = 1200;
lora_freq_cross_digi = 433.900;
sb_max_speed = 20;
sb_turn_slope = 11;
rate_limit_message_text = true;
acceptOwnPositionReportsViaKiss = true;
lora_add_snr_rssi_to_path = true;
And in platformio.ini:
-D 'KISS_PROTOCOL' ; leave enabled
-D 'CALLSIGN="DL9SAU-12"' ; can be set from www interface
-D 'DIGI_PATH="1"' ; can be set from www interface
; -D 'FIXED_BEACON_EN' ; can be set from www interface
-D 'SB_ALGO_KENWOOD' ; Kenwood skales better on lower speed.
-D 'LATITUDE_PRESET="0000.00N"' ; can be set from www interface
-D 'LONGITUDE_PRESET="00000.00E"' ; can be set from www interface
-D 'APRS_SYMBOL_TABLE="/"' ; can be set from www interface
-D 'APRS_SYMBOL="["' ; can be set from www interface
-D 'MY_COMMENT="/145.500MHz d023/Thomas D23. TTGO-T-Beam LoRa 70cm; KISS-Test"' ; can be set from www interface
-D 'SHOW_ALT' ; can be set from www interface
; -D 'SHOW_BATT' ; can be set from www interface
-D 'SHOW_RX_PACKET' ; can be set from www interface
-D 'SHOW_RX_TIME=10000' ; can be set from www interface
-D 'TXFREQ=433.775' ; set operating frequency
; -D 'LORA_SPEED_1200' ; comment out to set 300baud
-D 'TXdbmW=23' ; set power
; -D 'ENABLE_OLED' ; can be set from www interface
-D 'ENABLE_LED_SIGNALING' ; can be set from www interface
-D 'NETWORK_TNC_PORT=8001' ; default KISS TCP port
; -D 'MAX_TIME_TO_NEXT_TX=120000L' ; can be set from www interface -- not implemented
-D 'FIX_BEACON_INTERVAL=1800000L' ; can be set from www interface
-D 'NETWORK_GPS_PORT=10110' ; GPS NMEA Port
; -D 'ENABLE_TNC_SELF_TELEMETRY' ; can be set from www interface
-D 'TNC_SELF_TELEMETRY_INTERVAL=3600L' ; can be set from www interface (seconds)
-D 'SHOW_OLED_TIME=15000' ; an be set from www interface (OLED Timeout)
Signed-off-by: Thomas Osterried <dl9sau@github>