- feature: option to disable wifi. Saves abt 80mA current
3 options: 2 alaways on; 1 off if no bluetooth client is connected in between
60s after boot (watch red oled button; goes off as soon as a
bt client connects in the boot phase). 0 disable (re-enabl by pressing
beacon button)
- pseudo csma/cd. ppersist / slottime as we know it from standard
packet-radio / -APRS
In loaSend. TODO: better concept with a tx-queue. But this is rather complex,
because the queue must not grow too large, else we re-send old packts..
- feature to encode altitude in compressed position instead of /A=...
compressed position can encode course/speed, altitude (and others). Option to
send course/speed to 0%, 100% or something in between.
altitude check button is obsolete. Switch off by setting alt ratio to 0.
- cross-digipeating: just for sure, clear rx queue after going back to main
freq.
- if we are not a digipeater and we have no serial-bt-client, we may let the
loraChip sleep (axp.setPowerOutPut(AXP192_LDO2, AXP202_OFF)) -> saves current
(a bit)
- adjust_cpu_freq_to: change CPU frequency. May reduce cpu power consumption
up to 20 %. Suggesting (and tested with) 80 MHz. USE WITH CARE! I.e.
40 MHz or 20 MHz did not work with my device (boot phase never ended)
- options to start tncServer and gpsServer (if you don't need them, you
may not like to expose these tcp ports to your LAN or HAMNET)
- changed preferences.getString(PREFxxxxx) to
preferences.getString(PREFxxxxx, ""), because if variable is not set,
the preferences library returns "the variable name itself" - wtf!.
In the case of PREF_NTP_SERVER, we saw log messages that ntp server
with fqdn "ntp_server" could not be resolved; it had no impact, because
it did a failback to the compiled-in default. Changed call for
PREF_WIFI_PASSWORD, PREF_AP_PASSWORD, etc.. too.
- wifi-AP: is set to esp_wifi_set_max_tx_power(8) (for lesser power
consumption of the devie). 8 dBm are too less fore some cases.
-> New web config for setting max_tx_power in AP- and STA- modes.
- Fix: In mode wifi-client, it did not reconnect if association was lost.
- small improvement for comment-text ratelimiting
BG_RF95.cpp: BG_RF95::SignalDetected feature (needed for pseudo csma/cd)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
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>
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>
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>
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>
(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>
- automatic CR adption in regions running SF12
- Algorithm (n packets vs. last heard frame) is a first guess;
maybe it's a goood choice, maybe it has to be optimized.
- Rate-Limiting position packets: grace time now honoors CR-value (longer
wait time in SF12 CR4/8). Makes use of the "lora_speed" definition.
- Could be ported for other SF's, but there are no other CRs
(here: "speed rates") defined yet.
TODO: Make it web-configurable (variable: lora_automatic_cr_adaption = true)
- Text-Messaging
- if our KISS client (same call+ssid) uses TEXT messaging, beacon indicator
changes from '!' to '=' (-> signals text messaging capability)
- If kiss client came via bluetooth and disconnects, we can now instantly
go back to send own positon packets