mirror of
https://github.com/richonguzman/LoRa_APRS_iGate.git
synced 2026-07-13 21:31:14 +02:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ba7ff2a2d9 | |||
| b44eb1028d | |||
| d7602268f2 | |||
| 2f6f9be28e | |||
| 92572245cd | |||
| 152217e71c |
+11
-7
@@ -39,14 +39,17 @@
|
|||||||
"beaconOnRxFreq": false
|
"beaconOnRxFreq": false
|
||||||
},
|
},
|
||||||
"lora": {
|
"lora": {
|
||||||
"txFreq": 433775000,
|
"rxActive": true,
|
||||||
"rxFreq": 433775000,
|
"rxFreq": 433775000,
|
||||||
"spreadingFactor": 12,
|
"rxSpreadingFactor": 12,
|
||||||
"signalBandwidth": 125000,
|
"rxCodingRate4": 5,
|
||||||
"codingRate4": 5,
|
"rxSignalBandwidth": 125000,
|
||||||
"power": 20,
|
|
||||||
"txActive": false,
|
"txActive": false,
|
||||||
"rxActive": true
|
"txFreq": 433775000,
|
||||||
|
"txSpreadingFactor": 12,
|
||||||
|
"txCodingRate4": 5,
|
||||||
|
"txSignalBandwidth": 125000,
|
||||||
|
"power": 20
|
||||||
},
|
},
|
||||||
"display": {
|
"display": {
|
||||||
"alwaysOn": true,
|
"alwaysOn": true,
|
||||||
@@ -110,6 +113,7 @@
|
|||||||
"rememberStationTime": 30,
|
"rememberStationTime": 30,
|
||||||
"backupDigiMode": false,
|
"backupDigiMode": false,
|
||||||
"rebootMode": false,
|
"rebootMode": false,
|
||||||
"rebootModeTime": 6
|
"rebootModeTime": 6,
|
||||||
|
"startupDelay": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+401
-355
@@ -344,6 +344,28 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-6 mt-3">
|
||||||
|
<label
|
||||||
|
for="startupDelay"
|
||||||
|
class="form-label"
|
||||||
|
>Startup Delay<small>(To Allow Router/Modem to start WiFiAP before connection)</small></label
|
||||||
|
>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
name="startupDelay"
|
||||||
|
id="startupDelay"
|
||||||
|
placeholder="0"
|
||||||
|
class="form-control"
|
||||||
|
step="1"
|
||||||
|
min="0"
|
||||||
|
max="5"
|
||||||
|
/>
|
||||||
|
<span class="input-group-text"
|
||||||
|
>minutes</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
@@ -550,7 +572,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-4">
|
<div class="row mt-4">
|
||||||
<div class="col-12">
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="beacon.interval"
|
for="beacon.interval"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
@@ -626,7 +648,7 @@
|
|||||||
</h5>
|
</h5>
|
||||||
<small>Add Callsigns with space between them to Blacklist them (* wild card allowed)</small>
|
<small>Add Callsigns with space between them to Blacklist them (* wild card allowed)</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-9 mt-2">
|
<div class="col-9">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<label
|
<label
|
||||||
@@ -667,7 +689,7 @@
|
|||||||
</h5>
|
</h5>
|
||||||
<small>Define the Digipeater mode</small>
|
<small>Define the Digipeater mode</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-9 mt-2">
|
<div class="col-9">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<label
|
<label
|
||||||
@@ -706,30 +728,37 @@
|
|||||||
id="digi.ecoMode"
|
id="digi.ecoMode"
|
||||||
>
|
>
|
||||||
<option value="0">
|
<option value="0">
|
||||||
OFF (Normal Mode - WiFiAP enabled)
|
OFF (Normal Mode - WiFiAP and Serial Output enabled)
|
||||||
</option>
|
</option>
|
||||||
<option value="1">
|
<option value="1">
|
||||||
Ultra Eco Mode (Sleep till Packet Rx (WiFiAP/WebUI & Display disabled))
|
Ultra Eco Mode (Sleep till Packet Rx (WiFiAP/WebUI & Display disabled))
|
||||||
</option>
|
</option>
|
||||||
<option value="2">
|
<option value="2">
|
||||||
OFF (Normal Mode - WiFiAP disabled)
|
OFF (Normal Mode - WiFiAP disabled but Serial Output still enabled)
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 mt-3">
|
<div class="col-12 mt-3">
|
||||||
<div class="form-check form-switch">
|
<label
|
||||||
<input
|
for="digi.beaconOnRxFreq"
|
||||||
type="checkbox"
|
class="form-label"
|
||||||
name="digi.beaconOnRxFreq"
|
>Digipeater Beacon Frequency
|
||||||
id="digi.beaconOnRxFreq"
|
<small
|
||||||
class="form-check-input"
|
>(If Rx Freq different from Tx Freq).</small
|
||||||
/>
|
></label
|
||||||
<label
|
>
|
||||||
for="digi.beaconOnRxFreq"
|
<select
|
||||||
class="form-label"
|
class="form-select form-select"
|
||||||
>Which Frequency to send Beacon: <small>(Disable: Tx Freq / Enable: Rx Freq)</small>
|
name="digi.beaconOnRxFreq"
|
||||||
</label>
|
id="digi.beaconOnRxFreq"
|
||||||
</div>
|
>
|
||||||
|
<option value="false">
|
||||||
|
Beacon on Tx Freq
|
||||||
|
</option>
|
||||||
|
<option value="true">
|
||||||
|
Beacon on Rx Freq
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -759,21 +788,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6">
|
|
||||||
<div class="form-check form-switch">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
name="lora.txActive"
|
|
||||||
id="lora.txActive"
|
|
||||||
class="form-check-input"
|
|
||||||
/>
|
|
||||||
<label
|
|
||||||
for="lora.txActive"
|
|
||||||
class="form-label"
|
|
||||||
>Enable LoRa TX</label
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input
|
<input
|
||||||
@@ -790,6 +804,40 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="lora.txActive"
|
||||||
|
id="lora.txActive"
|
||||||
|
class="form-check-input"
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
for="lora.txActive"
|
||||||
|
class="form-label"
|
||||||
|
>Enable LoRa TX</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-1">
|
||||||
|
<label
|
||||||
|
for="lora.rxFreq"
|
||||||
|
class="form-label">
|
||||||
|
Rx Frequency
|
||||||
|
</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="lora.rxFreq"
|
||||||
|
id="lora.rxFreq"
|
||||||
|
placeholder="433775000"
|
||||||
|
class="form-control"
|
||||||
|
/>
|
||||||
|
<span class="input-group-text"
|
||||||
|
>Hz
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-1">
|
||||||
<label
|
<label
|
||||||
for="lora.txFreq"
|
for="lora.txFreq"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
@@ -817,136 +865,123 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6 mt-3">
|
||||||
<label
|
<label
|
||||||
for="lora.rxFreq"
|
for="lora.rxSpreadingFactor"
|
||||||
class="form-label">
|
|
||||||
Rx Frequency
|
|
||||||
</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
name="lora.rxFreq"
|
|
||||||
id="lora.rxFreq"
|
|
||||||
placeholder="433775000"
|
|
||||||
class="form-control"
|
|
||||||
/>
|
|
||||||
<span class="input-group-text"
|
|
||||||
>Hz
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-4">
|
|
||||||
<div class="col-12 mb-4">
|
|
||||||
<label
|
|
||||||
for="action.speed"
|
|
||||||
class="form-label"
|
class="form-label"
|
||||||
>Predefined speeds
|
>Rx Spreading Factor
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
class="form-select form-select"
|
class="form-select form-select"
|
||||||
name="action.speed"
|
name="lora.rxSpreadingFactor"
|
||||||
id="action.speed"
|
id="lora.rxSpreadingFactor"
|
||||||
>
|
|
||||||
<option value="300">
|
|
||||||
BW 125khz CR 4:5 SF 12 (Slow
|
|
||||||
Standard, 300bps)
|
|
||||||
</option>
|
|
||||||
<option value="244">
|
|
||||||
BW 125khz CR 4:6 SF 12 (244bps)
|
|
||||||
</option>
|
|
||||||
<option value="209">
|
|
||||||
BW 125khz CR 4:7 SF 12 (209bps)
|
|
||||||
</option>
|
|
||||||
<option value="183">
|
|
||||||
BW 125khz CR 4:8 SF 12 (183bps)
|
|
||||||
</option>
|
|
||||||
<option value="610">
|
|
||||||
BW 125khz CR 4:8 SF 10 (610bps)
|
|
||||||
</option>
|
|
||||||
<option value="1200">
|
|
||||||
BW 125khz CR 4:7 SF 9 (Fast
|
|
||||||
Standard, 1200bps)
|
|
||||||
</option>
|
|
||||||
<option value="">
|
|
||||||
User defined
|
|
||||||
</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="col-5">
|
|
||||||
<label
|
|
||||||
for="lora.signalBandwidth"
|
|
||||||
class="form-label"
|
|
||||||
>Bandwidth
|
|
||||||
</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<select
|
|
||||||
class="form-select form-select"
|
|
||||||
name="lora.signalBandwidth"
|
|
||||||
id="lora.signalBandwidth"
|
|
||||||
required=""
|
|
||||||
>
|
|
||||||
<option value="62500" selected>
|
|
||||||
62.5 kHz
|
|
||||||
</option>
|
|
||||||
<option value="125000" selected>
|
|
||||||
125 kHz
|
|
||||||
</option>
|
|
||||||
<option value="250000">
|
|
||||||
250 kHz
|
|
||||||
</option>
|
|
||||||
<option value="500000">
|
|
||||||
500 kHz
|
|
||||||
</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-7">
|
|
||||||
<label
|
|
||||||
for="lora.spreadingFactor"
|
|
||||||
class="form-label"
|
|
||||||
>Spreading Factor
|
|
||||||
</label>
|
|
||||||
<select
|
|
||||||
class="form-select form-select"
|
|
||||||
name="lora.spreadingFactor"
|
|
||||||
id="lora.spreadingFactor"
|
|
||||||
required=""
|
required=""
|
||||||
>
|
>
|
||||||
<option value="7">
|
<option value="7">SF7 - Lowest battery usage</option>
|
||||||
SF7 - Lowest battery usage
|
|
||||||
</option>
|
|
||||||
<option value="8">SF8</option>
|
<option value="8">SF8</option>
|
||||||
<option value="9">SF9</option>
|
<option value="9">SF9</option>
|
||||||
<option value="10">SF10</option>
|
<option value="10">SF10</option>
|
||||||
<option value="11">SF11</option>
|
<option value="11">SF11</option>
|
||||||
<option value="12" selected>
|
<option value="12" selected>SF12 - Highest sensitivity</option>
|
||||||
SF12 - Highest sensitivity
|
|
||||||
</option>
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-6 mt-3">
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-6">
|
|
||||||
<label
|
<label
|
||||||
for="lora.codingRate4"
|
for="lora.txSpreadingFactor"
|
||||||
class="form-label">
|
class="form-label"
|
||||||
Coding Rate
|
>Tx Spreading Factor
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
class="form-select form-select"
|
class="form-select form-select"
|
||||||
name="lora.codingRate4"
|
name="lora.txSpreadingFactor"
|
||||||
id="lora.codingRate4"
|
id="lora.txSpreadingFactor"
|
||||||
required=""
|
required=""
|
||||||
>
|
>
|
||||||
<option value="5">5</option>
|
<option value="7">SF7 - Lowest battery usage</option>
|
||||||
|
<option value="8">SF8</option>
|
||||||
|
<option value="9">SF9</option>
|
||||||
|
<option value="10">SF10</option>
|
||||||
|
<option value="11">SF11</option>
|
||||||
|
<option value="12" selected>SF12 - Highest sensitivity</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-3">
|
||||||
|
<label
|
||||||
|
for="lora.rxCodingRate4"
|
||||||
|
class="form-label">
|
||||||
|
Rx Coding Rate
|
||||||
|
</label>
|
||||||
|
<select
|
||||||
|
class="form-select form-select"
|
||||||
|
name="lora.rxCodingRate4"
|
||||||
|
id="lora.rxCodingRate4"
|
||||||
|
required=""
|
||||||
|
>
|
||||||
|
<option value="5" selected>5</option>
|
||||||
<option value="6">6</option>
|
<option value="6">6</option>
|
||||||
<option value="7">7</option>
|
<option value="7">7</option>
|
||||||
<option value="8">8</option>
|
<option value="8">8</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6 mt-3">
|
||||||
|
<label
|
||||||
|
for="lora.txCodingRate4"
|
||||||
|
class="form-label">
|
||||||
|
Tx Coding Rate
|
||||||
|
</label>
|
||||||
|
<select
|
||||||
|
class="form-select form-select"
|
||||||
|
name="lora.txCodingRate4"
|
||||||
|
id="lora.txCodingRate4"
|
||||||
|
required=""
|
||||||
|
>
|
||||||
|
<option value="5" selected>5</option>
|
||||||
|
<option value="6">6</option>
|
||||||
|
<option value="7">7</option>
|
||||||
|
<option value="8">8</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-3">
|
||||||
|
<label
|
||||||
|
for="lora.rxSignalBandwidth"
|
||||||
|
class="form-label"
|
||||||
|
>Rx Signal Bandwidth
|
||||||
|
</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<select
|
||||||
|
class="form-select form-select"
|
||||||
|
name="lora.rxSignalBandwidth"
|
||||||
|
id="lora.rxSignalBandwidth"
|
||||||
|
required=""
|
||||||
|
>
|
||||||
|
<option value="62500">62.5 kHz</option>
|
||||||
|
<option value="125000" selected>125 kHz</option>
|
||||||
|
<option value="250000">250 kHz</option>
|
||||||
|
<option value="500000">500 kHz</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-3">
|
||||||
|
<label
|
||||||
|
for="lora.txSignalBandwidth"
|
||||||
|
class="form-label"
|
||||||
|
>Tx Signal Bandwidth
|
||||||
|
</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<select
|
||||||
|
class="form-select form-select"
|
||||||
|
name="lora.txSignalBandwidth"
|
||||||
|
id="lora.txSignalBandwidth"
|
||||||
|
required=""
|
||||||
|
>
|
||||||
|
<option value="62500">62.5 kHz</option>
|
||||||
|
<option value="125000" selected>125 kHz</option>
|
||||||
|
<option value="250000">250 kHz</option>
|
||||||
|
<option value="500000">500 kHz</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-3">
|
||||||
<label
|
<label
|
||||||
for="lora.power"
|
for="lora.power"
|
||||||
class="form-label">
|
class="form-label">
|
||||||
@@ -968,7 +1003,7 @@
|
|||||||
>dBm</span
|
>dBm</span
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1028,7 +1063,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-2">
|
<div class="row mt-1">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="display.timeout"
|
for="display.timeout"
|
||||||
@@ -1107,8 +1142,8 @@
|
|||||||
Calculate voltage divider accordingly.
|
Calculate voltage divider accordingly.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-9 mt-2">
|
<div class="col-9">
|
||||||
<div class="row mt-2">
|
<div class="row">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input
|
<input
|
||||||
@@ -1137,7 +1172,7 @@
|
|||||||
>(Send Voltage As Telemetry)</label
|
>(Send Voltage As Telemetry)</label
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch mt-3">
|
<div class="form-check form-switch">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="battery.monitorInternalVoltage"
|
name="battery.monitorInternalVoltage"
|
||||||
@@ -1289,7 +1324,7 @@
|
|||||||
</h5>
|
</h5>
|
||||||
<small>Define Wx telemetry</small>
|
<small>Define Wx telemetry</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-9 mt-2">
|
<div class="col-9">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
@@ -1310,7 +1345,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-3">
|
<div class="row mt-2">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<label for="wxsensor.heightCorrection" class="form-label"
|
<label for="wxsensor.heightCorrection" class="form-label"
|
||||||
>Height Correction (Above Sea-Level)</label
|
>Height Correction (Above Sea-Level)</label
|
||||||
@@ -1378,18 +1413,37 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="form-check form-switch">
|
<div class="row">
|
||||||
<input
|
<div class="col-6">
|
||||||
type="checkbox"
|
<div class="form-check form-switch">
|
||||||
name="syslog.active"
|
<input
|
||||||
id="syslog.active"
|
type="checkbox"
|
||||||
class="form-check-input"
|
name="syslog.active"
|
||||||
/>
|
id="syslog.active"
|
||||||
<label
|
class="form-check-input"
|
||||||
for="syslog.active"
|
/>
|
||||||
class="form-label"
|
<label
|
||||||
>Enable syslog</label
|
for="syslog.active"
|
||||||
>
|
class="form-label"
|
||||||
|
>Enable syslog</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="syslog.logBeaconOverTCPIP"
|
||||||
|
id="syslog.logBeaconOverTCPIP"
|
||||||
|
class="form-check-input"
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
for="syslog.logBeaconOverTCPIP"
|
||||||
|
class="form-label"
|
||||||
|
>Log Beacon over TCP/IP</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
@@ -1420,21 +1474,7 @@
|
|||||||
class="form-control"
|
class="form-control"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
|
||||||
<div class="form-check form-switch">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
name="syslog.logBeaconOverTCPIP"
|
|
||||||
id="syslog.logBeaconOverTCPIP"
|
|
||||||
class="form-check-input"
|
|
||||||
/>
|
|
||||||
<label
|
|
||||||
for="syslog.logBeaconOverTCPIP"
|
|
||||||
class="form-label"
|
|
||||||
>Log Beacon over TCP/IP</label
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1555,7 +1595,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-6">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
@@ -1570,7 +1610,24 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="col-6">
|
||||||
|
<div class="form-check form-switch">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
name="mqtt.beaconOverMqtt"
|
||||||
|
id="mqtt.beaconOverMqtt"
|
||||||
|
class="form-check-input"
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
for="mqtt.beaconOverMqtt"
|
||||||
|
class="form-label"
|
||||||
|
>Send (also) iGate Beacon</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="mqtt.server"
|
for="mqtt.server"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
@@ -1585,11 +1642,11 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="mqtt.topic"
|
for="mqtt.topic"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
>Topic</label
|
>Topic <small>(Default is <strong>aprs-igate</strong>)</small></label
|
||||||
>
|
>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input
|
<input
|
||||||
@@ -1600,11 +1657,10 @@
|
|||||||
placeholder="aprs-igate"
|
placeholder="aprs-igate"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-text">
|
|
||||||
Default is <strong>aprs-igate</strong>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
</div>
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="mqtt.username"
|
for="mqtt.username"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
@@ -1619,7 +1675,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 mt-3">
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="mqtt.password"
|
for="mqtt.password"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
@@ -1634,11 +1690,13 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 mt-3">
|
</div>
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="mqtt.port"
|
for="mqtt.port"
|
||||||
class="form-label"
|
class="form-label"
|
||||||
>Port</label
|
>Port <small>(Default is <strong>1883</strong>)</small></label
|
||||||
>
|
>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input
|
<input
|
||||||
@@ -1652,24 +1710,6 @@
|
|||||||
min="0"
|
min="0"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-text">
|
|
||||||
Default is <strong>1883</strong>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 mt-3">
|
|
||||||
<div class="form-check form-switch">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
name="mqtt.beaconOverMqtt"
|
|
||||||
id="mqtt.beaconOverMqtt"
|
|
||||||
class="form-check-input"
|
|
||||||
/>
|
|
||||||
<label
|
|
||||||
for="mqtt.beaconOverMqtt"
|
|
||||||
class="form-label"
|
|
||||||
>Send iGate Beacon to MQTT</label
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1697,9 +1737,9 @@
|
|||||||
Reboot Time
|
Reboot Time
|
||||||
</h5>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-9 mt-2">
|
<div class="col-9">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-6">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
@@ -1714,8 +1754,6 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<label
|
<label
|
||||||
for="other.rebootModeTime"
|
for="other.rebootModeTime"
|
||||||
@@ -1770,49 +1808,55 @@
|
|||||||
WiFi Auto AP
|
WiFi Auto AP
|
||||||
</h5>
|
</h5>
|
||||||
<small
|
<small
|
||||||
>Add your password and WiFi AP timeout to
|
>WiFi AP will start if there is no WiFi
|
||||||
auto access point. Auto AP will start if
|
connection available. Timeout will count from
|
||||||
there is no WiFi connection. Timeout will
|
startup or last client disconnected.</small
|
||||||
count from startup or last client
|
|
||||||
disconnected.</small
|
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-9">
|
||||||
<div class="col-12">
|
<div class="row">
|
||||||
<label
|
<div class="col-6">
|
||||||
for="wifi.autoAP.password"
|
<label
|
||||||
class="form-label"
|
for="wifi.autoAP.password"
|
||||||
>Password</label
|
class="form-label"
|
||||||
>
|
>Password</label
|
||||||
<input
|
>
|
||||||
type="password"
|
<div class="input-group">
|
||||||
name="wifi.autoAP.password"
|
<input
|
||||||
id="wifi.autoAP.password"
|
type="password"
|
||||||
class="form-control"
|
name="wifi.autoAP.password"
|
||||||
placeholder="1234567890"
|
id="wifi.autoAP.password"
|
||||||
required=""
|
class="form-control"
|
||||||
/>
|
placeholder="1234567890"
|
||||||
</div>
|
required=""
|
||||||
<div class="col-12 mt-3">
|
/>
|
||||||
<label
|
</div>
|
||||||
for="wifi.autoAP.timeout"
|
</div>
|
||||||
class="form-label"
|
<div class="col-6">
|
||||||
>WiFi AP timeout to search again for available WiFi's
|
<label
|
||||||
<small>(in minutes)</small></label
|
for="wifi.autoAP.timeout"
|
||||||
>
|
class="form-label"
|
||||||
<input
|
>WiFiAP timeout (to search again)</label
|
||||||
type="number"
|
>
|
||||||
name="wifi.autoAP.timeout"
|
<div class="input-group">
|
||||||
id="wifi.autoAP.timeout"
|
<input
|
||||||
class="form-control"
|
type="number"
|
||||||
placeholder="10"
|
name="wifi.autoAP.timeout"
|
||||||
required=""
|
id="wifi.autoAP.timeout"
|
||||||
step="1"
|
class="form-control"
|
||||||
min="0"
|
placeholder="10"
|
||||||
/>
|
required=""
|
||||||
<div class="form-text">
|
step="1"
|
||||||
Set to <strong>0</strong> if you don't
|
min="0"
|
||||||
want WiFi AP to stop.
|
/>
|
||||||
|
<span class="input-group-text"
|
||||||
|
>minutes</span
|
||||||
|
>
|
||||||
|
<div class="form-text">
|
||||||
|
Set to <strong>0</strong> if you don't
|
||||||
|
want WiFi AP to stop.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1843,27 +1887,29 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="col-12">
|
<div class="row">
|
||||||
<label for="ota.username" class="form-label"
|
<div class="col-6">
|
||||||
>Username</label
|
<label for="ota.username" class="form-label"
|
||||||
>
|
>Username</label
|
||||||
<input
|
>
|
||||||
type="text"
|
<input
|
||||||
name="ota.username"
|
type="text"
|
||||||
id="ota.username"
|
name="ota.username"
|
||||||
class="form-control"
|
id="ota.username"
|
||||||
/>
|
class="form-control"
|
||||||
</div>
|
/>
|
||||||
<div class="col-12 mt-3">
|
</div>
|
||||||
<label for="ota.password" class="form-label"
|
<div class="col-6">
|
||||||
>Password</label
|
<label for="ota.password" class="form-label"
|
||||||
>
|
>Password</label
|
||||||
<input
|
>
|
||||||
type="password"
|
<input
|
||||||
name="ota.password"
|
type="password"
|
||||||
id="ota.password"
|
name="ota.password"
|
||||||
class="form-control"
|
id="ota.password"
|
||||||
/>
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1893,46 +1939,46 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="row">
|
<div class="col-6">
|
||||||
<div class="col-12">
|
<div class="form-check form-switch">
|
||||||
<div class="form-check form-switch">
|
<input
|
||||||
<input
|
type="checkbox"
|
||||||
type="checkbox"
|
name="webadmin.active"
|
||||||
name="webadmin.active"
|
id="webadmin.active"
|
||||||
id="webadmin.active"
|
class="form-check-input"
|
||||||
class="form-check-input"
|
/>
|
||||||
/>
|
<label
|
||||||
<label
|
for="webadmin.active"
|
||||||
for="webadmin.active"
|
class="form-label"
|
||||||
class="form-label"
|
>Web interface authentication</label
|
||||||
>Web interface authentication</label
|
>
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="row">
|
||||||
<label for="webadmin.username" class="form-label"
|
<div class="col-6">
|
||||||
>Username</label
|
<label for="webadmin.username" class="form-label"
|
||||||
>
|
>Username</label
|
||||||
<input
|
>
|
||||||
type="text"
|
<input
|
||||||
name="webadmin.username"
|
type="text"
|
||||||
id="webadmin.username"
|
name="webadmin.username"
|
||||||
class="form-control"
|
id="webadmin.username"
|
||||||
value="admin"
|
class="form-control"
|
||||||
required=""
|
value="admin"
|
||||||
/>
|
required=""
|
||||||
</div>
|
/>
|
||||||
<div class="col-12 mt-3">
|
</div>
|
||||||
<label for="webadmin.password" class="form-label"
|
<div class="col-6">
|
||||||
>Password</label
|
<label for="webadmin.password" class="form-label"
|
||||||
>
|
>Password</label
|
||||||
<input
|
>
|
||||||
type="password"
|
<input
|
||||||
name="webadmin.password"
|
type="password"
|
||||||
id="webadmin.password"
|
name="webadmin.password"
|
||||||
class="form-control"
|
id="webadmin.password"
|
||||||
/>
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1976,21 +2022,19 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="col-12 mt-3">
|
||||||
<div class="col-12">
|
<div class="form-check form-switch">
|
||||||
<div class="form-check form-switch">
|
<input
|
||||||
<input
|
type="checkbox"
|
||||||
type="checkbox"
|
name="remoteManagement.rfOnly"
|
||||||
name="remoteManagement.rfOnly"
|
id="remoteManagement.rfOnly"
|
||||||
id="remoteManagement.rfOnly"
|
class="form-check-input"
|
||||||
class="form-check-input"
|
/>
|
||||||
/>
|
<label
|
||||||
<label
|
for="remoteManagement.rfOnly"
|
||||||
for="remoteManagement.rfOnly"
|
class="form-label"
|
||||||
class="form-label"
|
>Managers commands only via RF (not APRS-IS)</label
|
||||||
>Managers commands only via RF (not APRS-IS)</label
|
>
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -2020,41 +2064,43 @@
|
|||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-9 col-sm-12">
|
<div class="col-lg-9 col-sm-12">
|
||||||
<div class="col-12">
|
<div class="row">
|
||||||
<label
|
<div class="col-6">
|
||||||
for="ntp.server"
|
<label
|
||||||
class="form-label"
|
for="ntp.server"
|
||||||
>NTP Server hostname</label
|
class="form-label"
|
||||||
>
|
>NTP Server hostname</label
|
||||||
<div class="input-group">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
name="ntp.server"
|
|
||||||
id="ntp.server"
|
|
||||||
class="form-control"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<label
|
|
||||||
for="ntp.gmtCorrection"
|
|
||||||
class="form-label"
|
|
||||||
>GMT Time Correction for accurate Local Time</label
|
|
||||||
>
|
|
||||||
<div class="input-group">
|
|
||||||
<input
|
|
||||||
type="number"
|
|
||||||
name="ntp.gmtCorrection"
|
|
||||||
id="ntp.gmtCorrection"
|
|
||||||
placeholder="0"
|
|
||||||
class="form-control"
|
|
||||||
step="0.25"
|
|
||||||
min="-23.75"
|
|
||||||
max="23.75"
|
|
||||||
/>
|
|
||||||
<span class="input-group-text"
|
|
||||||
>hours</span
|
|
||||||
>
|
>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="ntp.server"
|
||||||
|
id="ntp.server"
|
||||||
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<label
|
||||||
|
for="ntp.gmtCorrection"
|
||||||
|
class="form-label"
|
||||||
|
>GMT Time Correction Offset</label
|
||||||
|
>
|
||||||
|
<div class="input-group">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
name="ntp.gmtCorrection"
|
||||||
|
id="ntp.gmtCorrection"
|
||||||
|
placeholder="0"
|
||||||
|
class="form-control"
|
||||||
|
step="0.25"
|
||||||
|
min="-23.75"
|
||||||
|
max="23.75"
|
||||||
|
/>
|
||||||
|
<span class="input-group-text"
|
||||||
|
>hours</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+10
-66
@@ -95,6 +95,7 @@ function loadSettings(settings) {
|
|||||||
networksContainer.appendChild(networkElement);
|
networksContainer.appendChild(networkElement);
|
||||||
networkCount++;
|
networkCount++;
|
||||||
});
|
});
|
||||||
|
document.getElementById("startupDelay").value = settings.startupDelay;
|
||||||
|
|
||||||
// APRS-IS
|
// APRS-IS
|
||||||
document.getElementById("aprs_is.active").checked = settings.aprs_is.active;
|
document.getElementById("aprs_is.active").checked = settings.aprs_is.active;
|
||||||
@@ -137,13 +138,16 @@ function loadSettings(settings) {
|
|||||||
document.getElementById("digi.beaconOnRxFreq").value = settings.digi.beaconOnRxFreq;
|
document.getElementById("digi.beaconOnRxFreq").value = settings.digi.beaconOnRxFreq;
|
||||||
|
|
||||||
// LoRa
|
// LoRa
|
||||||
document.getElementById("lora.txFreq").value = settings.lora.txFreq;
|
|
||||||
document.getElementById("lora.rxFreq").value = settings.lora.rxFreq;
|
|
||||||
document.getElementById("lora.txActive").checked = settings.lora.txActive;
|
|
||||||
document.getElementById("lora.rxActive").checked = settings.lora.rxActive;
|
document.getElementById("lora.rxActive").checked = settings.lora.rxActive;
|
||||||
document.getElementById("lora.spreadingFactor").value = settings.lora.spreadingFactor;
|
document.getElementById("lora.rxFreq").value = settings.lora.rxFreq;
|
||||||
document.getElementById("lora.signalBandwidth").value = settings.lora.signalBandwidth;
|
document.getElementById("lora.rxSpreadingFactor").value = settings.lora.rxSpreadingFactor;
|
||||||
document.getElementById("lora.codingRate4").value = settings.lora.codingRate4;
|
document.getElementById("lora.rxCodingRate4").value = settings.lora.rxCodingRate4;
|
||||||
|
document.getElementById("lora.rxSignalBandwidth").value = settings.lora.rxSignalBandwidth;
|
||||||
|
document.getElementById("lora.txActive").checked = settings.lora.txActive;
|
||||||
|
document.getElementById("lora.txFreq").value = settings.lora.txFreq;
|
||||||
|
document.getElementById("lora.txSpreadingFactor").value = settings.lora.txSpreadingFactor;
|
||||||
|
document.getElementById("lora.txCodingRate4").value = settings.lora.txCodingRate4;
|
||||||
|
document.getElementById("lora.txSignalBandwidth").value = settings.lora.txSignalBandwidth;
|
||||||
document.getElementById("lora.power").value = settings.lora.power;
|
document.getElementById("lora.power").value = settings.lora.power;
|
||||||
|
|
||||||
// Display
|
// Display
|
||||||
@@ -251,7 +255,6 @@ function loadSettings(settings) {
|
|||||||
document.getElementById("other.backupDigiMode").checked = settings.other.backupDigiMode;
|
document.getElementById("other.backupDigiMode").checked = settings.other.backupDigiMode;
|
||||||
|
|
||||||
updateImage();
|
updateImage();
|
||||||
refreshSpeedStandard();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function showToast(message) {
|
function showToast(message) {
|
||||||
@@ -457,65 +460,6 @@ document
|
|||||||
updateImage();
|
updateImage();
|
||||||
});
|
});
|
||||||
|
|
||||||
const speedStandards = {
|
|
||||||
300: [125, 5, 12],
|
|
||||||
244: [125, 6, 12],
|
|
||||||
209: [125, 7, 12],
|
|
||||||
183: [125, 8, 12],
|
|
||||||
610: [125, 8, 10],
|
|
||||||
1200: [125, 7, 9],
|
|
||||||
};
|
|
||||||
|
|
||||||
function refreshSpeedStandard() {
|
|
||||||
const bw = Number(document.getElementById("lora.signalBandwidth").value);
|
|
||||||
const cr4 = Number(document.getElementById("lora.codingRate4").value);
|
|
||||||
const sf = Number(document.getElementById("lora.spreadingFactor").value);
|
|
||||||
|
|
||||||
let found = false;
|
|
||||||
|
|
||||||
for (const speed in speedStandards) {
|
|
||||||
const standard = speedStandards[speed];
|
|
||||||
|
|
||||||
if (standard[0] !== bw / 1000) continue;
|
|
||||||
if (standard[1] !== cr4) continue;
|
|
||||||
if (standard[2] !== sf) continue;
|
|
||||||
|
|
||||||
document.getElementById("action.speed").value = speed;
|
|
||||||
found = true;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
document.getElementById("action.speed").value = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document
|
|
||||||
.getElementById("lora.signalBandwidth")
|
|
||||||
.addEventListener("focusout", refreshSpeedStandard);
|
|
||||||
document
|
|
||||||
.getElementById("lora.codingRate4")
|
|
||||||
.addEventListener("focusout", refreshSpeedStandard);
|
|
||||||
document
|
|
||||||
.getElementById("lora.spreadingFactor")
|
|
||||||
.addEventListener("focusout", refreshSpeedStandard);
|
|
||||||
|
|
||||||
document.getElementById("action.speed").addEventListener("change", function () {
|
|
||||||
const speed = document.getElementById("action.speed").value;
|
|
||||||
|
|
||||||
if (speed !== "") {
|
|
||||||
const value = speedStandards[Number(speed)];
|
|
||||||
|
|
||||||
const bw = value[0];
|
|
||||||
const cr4 = value[1];
|
|
||||||
const sf = value[2];
|
|
||||||
|
|
||||||
document.getElementById("lora.signalBandwidth").value = bw * 1000;
|
|
||||||
document.getElementById("lora.codingRate4").value = cr4;
|
|
||||||
document.getElementById("lora.spreadingFactor").value = sf;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const form = document.querySelector("form");
|
const form = document.querySelector("form");
|
||||||
|
|
||||||
|
|||||||
+10
-6
@@ -73,13 +73,16 @@ public:
|
|||||||
|
|
||||||
class LoraModule {
|
class LoraModule {
|
||||||
public:
|
public:
|
||||||
long txFreq;
|
|
||||||
long rxFreq;
|
|
||||||
bool txActive;
|
|
||||||
bool rxActive;
|
bool rxActive;
|
||||||
int spreadingFactor;
|
long rxFreq;
|
||||||
long signalBandwidth;
|
int rxSpreadingFactor;
|
||||||
int codingRate4;
|
int rxCodingRate4;
|
||||||
|
long rxSignalBandwidth;
|
||||||
|
bool txActive;
|
||||||
|
long txFreq;
|
||||||
|
int txSpreadingFactor;
|
||||||
|
int txCodingRate4;
|
||||||
|
long txSignalBandwidth;
|
||||||
int power;
|
int power;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -169,6 +172,7 @@ public:
|
|||||||
bool backupDigiMode;
|
bool backupDigiMode;
|
||||||
bool rebootMode;
|
bool rebootMode;
|
||||||
int rebootModeTime;
|
int rebootModeTime;
|
||||||
|
int startupDelay;
|
||||||
String personalNote;
|
String personalNote;
|
||||||
String blacklist;
|
String blacklist;
|
||||||
std::vector<WiFi_AP> wifiAPs;
|
std::vector<WiFi_AP> wifiAPs;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ namespace Utils {
|
|||||||
void checkRebootTime();
|
void checkRebootTime();
|
||||||
void checkSleepByLowBatteryVoltage(uint8_t mode);
|
void checkSleepByLowBatteryVoltage(uint8_t mode);
|
||||||
bool checkValidCallsign(const String& callsign);
|
bool checkValidCallsign(const String& callsign);
|
||||||
|
void startupDelay();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
|
╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
|
||||||
|
|
||||||
|
|
||||||
Ricardo Guzman - CA2RXU
|
Ricardo Guzman - CA2RXU
|
||||||
https://github.com/richonguzman/LoRa_APRS_iGate
|
https://github.com/richonguzman/LoRa_APRS_iGate
|
||||||
(donations : http://paypal.me/richonguzman)
|
(donations : http://paypal.me/richonguzman)
|
||||||
___________________________________________________________________*/
|
___________________________________________________________________*/
|
||||||
@@ -67,7 +67,7 @@ ___________________________________________________________________*/
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
String versionDate = "2025-10-11";
|
String versionDate = "2025-10-13";
|
||||||
String versionNumber = "3.1.3";
|
String versionNumber = "3.1.3";
|
||||||
Configuration Config;
|
Configuration Config;
|
||||||
WiFiClient aprsIsClient;
|
WiFiClient aprsIsClient;
|
||||||
@@ -97,7 +97,6 @@ bool modemLoggedToAPRSIS = false;
|
|||||||
std::vector<ReceivedPacket> receivedPackets;
|
std::vector<ReceivedPacket> receivedPackets;
|
||||||
|
|
||||||
String firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, seventhLine;
|
String firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, seventhLine;
|
||||||
//#define STARTUP_DELAY 5 //min
|
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
@@ -108,12 +107,7 @@ void setup() {
|
|||||||
Utils::validateFreqs();
|
Utils::validateFreqs();
|
||||||
GPS_Utils::setup();
|
GPS_Utils::setup();
|
||||||
STATION_Utils::loadBlacklistAndManagers();
|
STATION_Utils::loadBlacklistAndManagers();
|
||||||
|
Utils::startupDelay();
|
||||||
#ifdef STARTUP_DELAY // (TEST) just to wait for WiFi init of Routers
|
|
||||||
displayShow("", " STARTUP DELAY ...", "", "", 0);
|
|
||||||
delay(STARTUP_DELAY * 60 * 1000);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SLEEP_Utils::setup();
|
SLEEP_Utils::setup();
|
||||||
WIFI_Utils::setup();
|
WIFI_Utils::setup();
|
||||||
NTP_Utils::setup();
|
NTP_Utils::setup();
|
||||||
|
|||||||
+46
-27
@@ -45,6 +45,8 @@ bool Configuration::writeFile() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data["other"]["startupDelay"] = startupDelay;
|
||||||
|
|
||||||
data["wifi"]["autoAP"]["password"] = wifiAutoAP.password;
|
data["wifi"]["autoAP"]["password"] = wifiAutoAP.password;
|
||||||
data["wifi"]["autoAP"]["timeout"] = wifiAutoAP.timeout;
|
data["wifi"]["autoAP"]["timeout"] = wifiAutoAP.timeout;
|
||||||
|
|
||||||
@@ -87,14 +89,17 @@ bool Configuration::writeFile() {
|
|||||||
#endif
|
#endif
|
||||||
data["digi"]["beaconOnRxFreq"] = digi.beaconOnRxFreq;
|
data["digi"]["beaconOnRxFreq"] = digi.beaconOnRxFreq;
|
||||||
|
|
||||||
data["lora"]["rxFreq"] = loramodule.rxFreq;
|
|
||||||
data["lora"]["txFreq"] = loramodule.txFreq;
|
|
||||||
data["lora"]["spreadingFactor"] = loramodule.spreadingFactor;
|
|
||||||
data["lora"]["signalBandwidth"] = loramodule.signalBandwidth;
|
|
||||||
data["lora"]["codingRate4"] = loramodule.codingRate4;
|
|
||||||
data["lora"]["power"] = loramodule.power;
|
|
||||||
data["lora"]["txActive"] = loramodule.txActive;
|
|
||||||
data["lora"]["rxActive"] = loramodule.rxActive;
|
data["lora"]["rxActive"] = loramodule.rxActive;
|
||||||
|
data["lora"]["rxFreq"] = loramodule.rxFreq;
|
||||||
|
data["lora"]["rxSpreadingFactor"] = loramodule.rxSpreadingFactor;
|
||||||
|
data["lora"]["rxCodingRate4"] = loramodule.rxCodingRate4;
|
||||||
|
data["lora"]["rxSignalBandwidth"] = loramodule.rxSignalBandwidth;
|
||||||
|
data["lora"]["txActive"] = loramodule.txActive;
|
||||||
|
data["lora"]["txFreq"] = loramodule.txFreq;
|
||||||
|
data["lora"]["txSpreadingFactor"] = loramodule.txSpreadingFactor;
|
||||||
|
data["lora"]["txCodingRate4"] = loramodule.txCodingRate4;
|
||||||
|
data["lora"]["txSignalBandwidth"] = loramodule.txSignalBandwidth;
|
||||||
|
data["lora"]["power"] = loramodule.power;
|
||||||
|
|
||||||
data["display"]["alwaysOn"] = display.alwaysOn;
|
data["display"]["alwaysOn"] = display.alwaysOn;
|
||||||
data["display"]["timeout"] = display.timeout;
|
data["display"]["timeout"] = display.timeout;
|
||||||
@@ -186,6 +191,9 @@ bool Configuration::readFile() {
|
|||||||
wifiAPs.push_back(wifiap);
|
wifiAPs.push_back(wifiap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!data["other"].containsKey("startupDelay")) needsRewrite = true;
|
||||||
|
startupDelay = data["other"]["startupDelay"] | 0;
|
||||||
|
|
||||||
if (!data["wifi"]["autoAP"].containsKey("password") ||
|
if (!data["wifi"]["autoAP"].containsKey("password") ||
|
||||||
!data["wifi"]["autoAP"].containsKey("timeout")) needsRewrite = true;
|
!data["wifi"]["autoAP"].containsKey("timeout")) needsRewrite = true;
|
||||||
wifiAutoAP.password = data["wifi"]["autoAP"]["password"] | "1234567890";
|
wifiAutoAP.password = data["wifi"]["autoAP"]["password"] | "1234567890";
|
||||||
@@ -254,23 +262,29 @@ bool Configuration::readFile() {
|
|||||||
if (digi.ecoMode == 1) digi.ecoMode = 2;
|
if (digi.ecoMode == 1) digi.ecoMode = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!data["lora"].containsKey("txFreq") ||
|
if (!data["lora"].containsKey("rxActive") ||
|
||||||
!data["lora"].containsKey("rxFreq") ||
|
!data["lora"].containsKey("rxFreq") ||
|
||||||
!data["lora"].containsKey("spreadingFactor") ||
|
!data["lora"].containsKey("rxSpreadingFactor") ||
|
||||||
!data["lora"].containsKey("signalBandwidth") ||
|
!data["lora"].containsKey("rxCodingRate4") ||
|
||||||
!data["lora"].containsKey("codingRate4") ||
|
!data["lora"].containsKey("rxSignalBandwidth") ||
|
||||||
!data["lora"].containsKey("power") ||
|
|
||||||
!data["lora"].containsKey("txActive") ||
|
!data["lora"].containsKey("txActive") ||
|
||||||
!data["lora"].containsKey("rxActive")) needsRewrite = true;
|
!data["lora"].containsKey("txFreq") ||
|
||||||
loramodule.txFreq = data["lora"]["txFreq"] | 433775000;
|
!data["lora"].containsKey("txSpreadingFactor") ||
|
||||||
|
!data["lora"].containsKey("txCodingRate4") ||
|
||||||
|
!data["lora"].containsKey("txSignalBandwidth") ||
|
||||||
|
!data["lora"].containsKey("power")) needsRewrite = true;
|
||||||
|
loramodule.rxActive = data["lora"]["rxActive"] | true;
|
||||||
loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000;
|
loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000;
|
||||||
loramodule.spreadingFactor = data["lora"]["spreadingFactor"] | 12;
|
loramodule.rxSpreadingFactor = data["lora"]["rxSpreadingFactor"] | 12;
|
||||||
loramodule.signalBandwidth = data["lora"]["signalBandwidth"] | 125000;
|
loramodule.rxCodingRate4 = data["lora"]["rxCodingRate4"] | 5;
|
||||||
loramodule.codingRate4 = data["lora"]["codingRate4"] | 5;
|
loramodule.rxSignalBandwidth = data["lora"]["rxSignalBandwidth"] | 125000;
|
||||||
loramodule.power = data["lora"]["power"] | 20;
|
|
||||||
loramodule.txActive = data["lora"]["txActive"] | false;
|
loramodule.txActive = data["lora"]["txActive"] | false;
|
||||||
loramodule.rxActive = data["lora"]["rxActive"] | false;
|
loramodule.txFreq = data["lora"]["txFreq"] | 433775000;
|
||||||
|
loramodule.txSpreadingFactor = data["lora"]["txSpreadingFactor"] | 12;
|
||||||
|
loramodule.txCodingRate4 = data["lora"]["txCodingRate4"] | 5;
|
||||||
|
loramodule.txSignalBandwidth = data["lora"]["txSignalBandwidth"] | 125000;
|
||||||
|
loramodule.power = data["lora"]["power"] | 20;
|
||||||
|
|
||||||
if (!data["display"].containsKey("alwaysOn") ||
|
if (!data["display"].containsKey("alwaysOn") ||
|
||||||
!data["display"].containsKey("timeout") ||
|
!data["display"].containsKey("timeout") ||
|
||||||
!data["display"].containsKey("turn180")) needsRewrite = true;
|
!data["display"].containsKey("turn180")) needsRewrite = true;
|
||||||
@@ -401,6 +415,8 @@ void Configuration::setDefaultValues() {
|
|||||||
|
|
||||||
wifiAPs.push_back(wifiap);
|
wifiAPs.push_back(wifiap);
|
||||||
|
|
||||||
|
startupDelay = 0;
|
||||||
|
|
||||||
wifiAutoAP.password = "1234567890";
|
wifiAutoAP.password = "1234567890";
|
||||||
wifiAutoAP.timeout = 10;
|
wifiAutoAP.timeout = 10;
|
||||||
|
|
||||||
@@ -438,14 +454,17 @@ void Configuration::setDefaultValues() {
|
|||||||
digi.ecoMode = 0;
|
digi.ecoMode = 0;
|
||||||
digi.beaconOnRxFreq = false;
|
digi.beaconOnRxFreq = false;
|
||||||
|
|
||||||
loramodule.txFreq = 433775000;
|
|
||||||
loramodule.rxFreq = 433775000;
|
|
||||||
loramodule.spreadingFactor = 12;
|
|
||||||
loramodule.signalBandwidth = 125000;
|
|
||||||
loramodule.codingRate4 = 5;
|
|
||||||
loramodule.power = 20;
|
|
||||||
loramodule.txActive = false;
|
|
||||||
loramodule.rxActive = true;
|
loramodule.rxActive = true;
|
||||||
|
loramodule.rxFreq = 433775000;
|
||||||
|
loramodule.rxSpreadingFactor = 12;
|
||||||
|
loramodule.rxCodingRate4 = 5;
|
||||||
|
loramodule.rxSignalBandwidth = 125000;
|
||||||
|
loramodule.txActive = false;
|
||||||
|
loramodule.txFreq = 433775000;
|
||||||
|
loramodule.txSpreadingFactor = 12;
|
||||||
|
loramodule.txCodingRate4 = 5;
|
||||||
|
loramodule.txSignalBandwidth = 125000;
|
||||||
|
loramodule.power = 20;
|
||||||
|
|
||||||
display.alwaysOn = true;
|
display.alwaysOn = true;
|
||||||
display.timeout = 4;
|
display.timeout = 4;
|
||||||
|
|||||||
+10
-4
@@ -93,10 +93,10 @@ namespace LoRa_Utils {
|
|||||||
#if defined(HAS_SX1278) || defined(HAS_SX1276)
|
#if defined(HAS_SX1278) || defined(HAS_SX1276)
|
||||||
radio.setDio0Action(setFlag, RISING);
|
radio.setDio0Action(setFlag, RISING);
|
||||||
#endif
|
#endif
|
||||||
radio.setSpreadingFactor(Config.loramodule.spreadingFactor);
|
radio.setSpreadingFactor(Config.loramodule.rxSpreadingFactor);
|
||||||
float signalBandwidth = Config.loramodule.signalBandwidth/1000;
|
radio.setCodingRate(Config.loramodule.rxCodingRate4);
|
||||||
radio.setBandwidth(signalBandwidth);
|
float signalBandwidth = Config.loramodule.rxSignalBandwidth/1000;
|
||||||
radio.setCodingRate(Config.loramodule.codingRate4);
|
radio.setBandwidth(signalBandwidth);
|
||||||
radio.setCRC(true);
|
radio.setCRC(true);
|
||||||
|
|
||||||
#if (defined(RADIO_RXEN) && defined(RADIO_TXEN)) // QRP Labs LightGateway has 400M22S (SX1268)
|
#if (defined(RADIO_RXEN) && defined(RADIO_TXEN)) // QRP Labs LightGateway has 400M22S (SX1268)
|
||||||
@@ -132,12 +132,18 @@ namespace LoRa_Utils {
|
|||||||
delay(500);
|
delay(500);
|
||||||
float freq = (float)Config.loramodule.txFreq / 1000000;
|
float freq = (float)Config.loramodule.txFreq / 1000000;
|
||||||
radio.setFrequency(freq);
|
radio.setFrequency(freq);
|
||||||
|
radio.setSpreadingFactor(Config.loramodule.txSpreadingFactor);
|
||||||
|
radio.setCodingRate(Config.loramodule.txCodingRate4);
|
||||||
|
radio.setBandwidth(Config.loramodule.txSignalBandwidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeFreqRx() {
|
void changeFreqRx() {
|
||||||
delay(500);
|
delay(500);
|
||||||
float freq = (float)Config.loramodule.rxFreq / 1000000;
|
float freq = (float)Config.loramodule.rxFreq / 1000000;
|
||||||
radio.setFrequency(freq);
|
radio.setFrequency(freq);
|
||||||
|
radio.setSpreadingFactor(Config.loramodule.rxSpreadingFactor);
|
||||||
|
radio.setCodingRate(Config.loramodule.rxCodingRate4);
|
||||||
|
radio.setBandwidth(Config.loramodule.rxSignalBandwidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendNewPacket(const String& newPacket) {
|
void sendNewPacket(const String& newPacket) {
|
||||||
|
|||||||
+8
-1
@@ -88,7 +88,7 @@ namespace Utils {
|
|||||||
if (statusAfterBoot && !Config.beacon.sendViaAPRSIS && Config.beacon.sendViaRF) {
|
if (statusAfterBoot && !Config.beacon.sendViaAPRSIS && Config.beacon.sendViaRF) {
|
||||||
status.concat(":>");
|
status.concat(":>");
|
||||||
status.concat(Config.beacon.statusPacket);
|
status.concat(Config.beacon.statusPacket);
|
||||||
STATION_Utils::addToOutputPacketBuffer(status);
|
STATION_Utils::addToOutputPacketBuffer(status, true); // treated also as beacon on Tx Freq
|
||||||
statusAfterBoot = false;
|
statusAfterBoot = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -436,4 +436,11 @@ namespace Utils {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startupDelay() {
|
||||||
|
if (Config.startupDelay > 0) {
|
||||||
|
displayShow("", " STARTUP DELAY ...", "", "", 0);
|
||||||
|
delay(Config.startupDelay * 60 * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+13
-7
@@ -157,6 +157,8 @@ namespace WEB_Utils {
|
|||||||
Config.wifiAPs.push_back(wifiap);
|
Config.wifiAPs.push_back(wifiap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Config.startupDelay = getParamIntSafe("startupDelay", Config.startupDelay);
|
||||||
|
|
||||||
Config.callsign = getParamStringSafe("callsign", Config.callsign);
|
Config.callsign = getParamStringSafe("callsign", Config.callsign);
|
||||||
|
|
||||||
Config.wifiAutoAP.password = getParamStringSafe("wifi.autoAP.password", Config.wifiAutoAP.password);
|
Config.wifiAutoAP.password = getParamStringSafe("wifi.autoAP.password", Config.wifiAutoAP.password);
|
||||||
@@ -198,14 +200,18 @@ namespace WEB_Utils {
|
|||||||
Config.digi.ecoMode = getParamIntSafe("digi.ecoMode", Config.digi.ecoMode);
|
Config.digi.ecoMode = getParamIntSafe("digi.ecoMode", Config.digi.ecoMode);
|
||||||
Config.digi.beaconOnRxFreq = request->hasParam("digi.beaconOnRxFreq", true);
|
Config.digi.beaconOnRxFreq = request->hasParam("digi.beaconOnRxFreq", true);
|
||||||
|
|
||||||
Config.loramodule.txFreq = getParamIntSafe("lora.txFreq", Config.loramodule.txFreq);
|
|
||||||
Config.loramodule.rxFreq = getParamIntSafe("lora.rxFreq", Config.loramodule.rxFreq);
|
|
||||||
Config.loramodule.spreadingFactor = getParamIntSafe("lora.spreadingFactor", Config.loramodule.spreadingFactor);
|
|
||||||
Config.loramodule.signalBandwidth = getParamIntSafe("lora.signalBandwidth", Config.loramodule.signalBandwidth);
|
|
||||||
Config.loramodule.codingRate4 = getParamIntSafe("lora.codingRate4", Config.loramodule.codingRate4);
|
|
||||||
Config.loramodule.power = getParamIntSafe("lora.power", Config.loramodule.power);
|
|
||||||
Config.loramodule.txActive = request->hasParam("lora.txActive", true);
|
|
||||||
Config.loramodule.rxActive = request->hasParam("lora.rxActive", true);
|
Config.loramodule.rxActive = request->hasParam("lora.rxActive", true);
|
||||||
|
Config.loramodule.rxFreq = getParamIntSafe("lora.rxFreq", Config.loramodule.rxFreq);
|
||||||
|
Config.loramodule.rxSpreadingFactor = getParamIntSafe("lora.rxSpreadingFactor", Config.loramodule.rxSpreadingFactor);
|
||||||
|
Config.loramodule.rxCodingRate4 = getParamIntSafe("lora.rxCodingRate4", Config.loramodule.rxCodingRate4);
|
||||||
|
Config.loramodule.rxSignalBandwidth = getParamIntSafe("lora.rxSignalBandwidth", Config.loramodule.rxSignalBandwidth);
|
||||||
|
Config.loramodule.txActive = request->hasParam("lora.txActive", true);
|
||||||
|
Config.loramodule.txFreq = getParamIntSafe("lora.txFreq", Config.loramodule.txFreq);
|
||||||
|
Config.loramodule.txSpreadingFactor = getParamIntSafe("lora.txSpreadingFactor", Config.loramodule.txSpreadingFactor);
|
||||||
|
Config.loramodule.txCodingRate4 = getParamIntSafe("lora.txCodingRate4", Config.loramodule.txCodingRate4);
|
||||||
|
Config.loramodule.txSignalBandwidth = getParamIntSafe("lora.txSignalBandwidth", Config.loramodule.txSignalBandwidth);
|
||||||
|
Config.loramodule.power = getParamIntSafe("lora.power", Config.loramodule.power);
|
||||||
|
|
||||||
|
|
||||||
Config.display.alwaysOn = request->hasParam("display.alwaysOn", true);
|
Config.display.alwaysOn = request->hasParam("display.alwaysOn", true);
|
||||||
|
|||||||
Reference in New Issue
Block a user