mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-04-29 18:25:58 +00:00
Compare commits
5 Commits
936e675d56
...
a44b4f5eb6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a44b4f5eb6 | ||
|
|
edbbb13087 | ||
|
|
c58c22d9a9 | ||
|
|
11cec58f75 | ||
|
|
9814b656b2 |
@@ -69,6 +69,8 @@ Various approaches exist to writing your own client, but in general:
|
|||||||
|
|
||||||
If you want to run a copy of Spothole with different configuration settings than the main instance, you can download it and run it on your own local machine or server.
|
If you want to run a copy of Spothole with different configuration settings than the main instance, you can download it and run it on your own local machine or server.
|
||||||
|
|
||||||
|
You will require Python version 3.8 or later. If you encounter an error about `gdal-config` during the following process, you will also need `libgdal-dev` installed.
|
||||||
|
|
||||||
To download and set up Spothole on a Debian server, run the following commands. Other operating systems will likely be similar.
|
To download and set up Spothole on a Debian server, run the following commands. Other operating systems will likely be similar.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -337,6 +337,12 @@ class Spot:
|
|||||||
self.dx_grid = lookup_helper.infer_grid_from_callsign_dxcc(self.dx_call)
|
self.dx_grid = lookup_helper.infer_grid_from_callsign_dxcc(self.dx_call)
|
||||||
self.dx_location_source = "DXCC"
|
self.dx_location_source = "DXCC"
|
||||||
|
|
||||||
|
# It looks like we can sometimes get a string into lat/lon, so reject that before we try looking anything up
|
||||||
|
if type(self.dx_latitude) == "str" or type(self.dx_longitude) == "str":
|
||||||
|
logging.warning("Received strings in lat/lon (" + str(self.dx_latitude) + ", " + str(self.dx_longitude) + "), rejecting it")
|
||||||
|
self.dx_latitude = None
|
||||||
|
self.dx_longitude = None
|
||||||
|
|
||||||
# CQ and ITU zone lookup, preferably from location but failing that, from callsign
|
# CQ and ITU zone lookup, preferably from location but failing that, from callsign
|
||||||
if not self.dx_cq_zone:
|
if not self.dx_cq_zone:
|
||||||
if self.dx_latitude:
|
if self.dx_latitude:
|
||||||
|
|||||||
@@ -94,7 +94,13 @@ class HamQSL(HTTPSolarConditionsProvider):
|
|||||||
"aurora_latitude": float_val("latdegree"),
|
"aurora_latitude": float_val("latdegree"),
|
||||||
"solar_wind": float_val("solarwind"),
|
"solar_wind": float_val("solarwind"),
|
||||||
"magnetic_field": float_val("magneticfield"),
|
"magnetic_field": float_val("magneticfield"),
|
||||||
"geomag_field": (lambda v: "Unsettled" if v == "Unsettld" else v)(text("geomagfield").title()),
|
"geomag_field": text("geomagfield").title()
|
||||||
|
.replace("Vr Quiet", "Very Quiet")
|
||||||
|
.replace("Unsettld", "Unsettled")
|
||||||
|
.replace("Min Strm", "Minor Storm")
|
||||||
|
.replace("Maj Strm", "Major Storm")
|
||||||
|
.replace("Sev Strm", "Severe Storm")
|
||||||
|
.replace("Ext Strm", "Extreme Storm"),
|
||||||
"geomag_noise": text("signalnoise"),
|
"geomag_noise": text("signalnoise"),
|
||||||
"hf_conditions": hf_conditions,
|
"hf_conditions": hf_conditions,
|
||||||
"vhf_conditions": {
|
"vhf_conditions": {
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
<p>This software is dedicated to the memory of Tom G1PJB, SK, a friend and colleague who sadly passed away around the time I started writing it in Autumn 2025. I was looking forward to showing it to you when it was done.</p>
|
<p>This software is dedicated to the memory of Tom G1PJB, SK, a friend and colleague who sadly passed away around the time I started writing it in Autumn 2025. I was looking forward to showing it to you when it was done.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-about").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-about").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -69,8 +69,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/add-spot.js?v=1774987999"></script>
|
<script src="/js/add-spot.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-add-spot").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-add-spot").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -56,8 +56,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/alerts.js?v=1774987999"></script>
|
<script src="/js/alerts.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-alerts").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-alerts").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -62,9 +62,9 @@
|
|||||||
<script>
|
<script>
|
||||||
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/spotsbandsandmap.js?v=1774987999"></script>
|
<script src="/js/spotsbandsandmap.js?v=1775156064"></script>
|
||||||
<script src="/js/bands.js?v=1774987999"></script>
|
<script src="/js/bands.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-bands").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-bands").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -46,10 +46,10 @@
|
|||||||
crossorigin="anonymous"></script>
|
crossorigin="anonymous"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/tinycolor2@1.6.0/cjs/tinycolor.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/tinycolor2@1.6.0/cjs/tinycolor.min.js"></script>
|
||||||
|
|
||||||
<script src="https://misc.ianrenton.com/jsutils/utils.js?v=1774987999"></script>
|
<script src="https://misc.ianrenton.com/jsutils/utils.js?v=1775156064"></script>
|
||||||
<script src="https://misc.ianrenton.com/jsutils/storage.js?v=1774987999"></script>
|
<script src="https://misc.ianrenton.com/jsutils/storage.js?v=1775156064"></script>
|
||||||
<script src="https://misc.ianrenton.com/jsutils/ui-ham.js?v=1774987999"></script>
|
<script src="https://misc.ianrenton.com/jsutils/ui-ham.js?v=1775156064"></script>
|
||||||
<script src="https://misc.ianrenton.com/jsutils/geo.js?v=1774987999"></script>
|
<script src="https://misc.ianrenton.com/jsutils/geo.js?v=1775156064"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -189,8 +189,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/conditions.js?v=1774987999"></script>
|
<script src="/js/conditions.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-conditions").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-conditions").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -70,9 +70,9 @@
|
|||||||
<script>
|
<script>
|
||||||
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/spotsbandsandmap.js?v=1774987999"></script>
|
<script src="/js/spotsbandsandmap.js?v=1775156064"></script>
|
||||||
<script src="/js/map.js?v=1774987999"></script>
|
<script src="/js/map.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-map").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-map").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -87,9 +87,9 @@
|
|||||||
<script>
|
<script>
|
||||||
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/spotsbandsandmap.js?v=1774987999"></script>
|
<script src="/js/spotsbandsandmap.js?v=1775156064"></script>
|
||||||
<script src="/js/spots.js?v=1774987999"></script>
|
<script src="/js/spots.js?v=1775156064"></script>
|
||||||
<script>$(document).ready(function() { $("#nav-link-spots").addClass("active"); }); <!-- highlight active page in nav --></script>
|
<script>$(document).ready(function() { $("#nav-link-spots").addClass("active"); }); <!-- highlight active page in nav --></script>
|
||||||
|
|
||||||
{% end %}
|
{% end %}
|
||||||
@@ -59,8 +59,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/js/common.js?v=1774987999"></script>
|
<script src="/js/common.js?v=1775156064"></script>
|
||||||
<script src="/js/status.js?v=1774987999"></script>
|
<script src="/js/status.js?v=1775156064"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() { $("#nav-link-status").addClass("active"); }); <!-- highlight active page in nav -->
|
$(document).ready(function() { $("#nav-link-status").addClass("active"); }); <!-- highlight active page in nav -->
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ function loadSolarConditions() {
|
|||||||
const sfi = jsonData.sfi;
|
const sfi = jsonData.sfi;
|
||||||
if (sfi !== null && sfi !== undefined) {
|
if (sfi !== null && sfi !== undefined) {
|
||||||
applySwClass('sw-solar-flux-vals', 'sw-solar-flux-desc',
|
applySwClass('sw-solar-flux-vals', 'sw-solar-flux-desc',
|
||||||
sfi > 150 ? 'bg-success-subtle' : sfi > 90 ? 'bg-warning-subtle' : 'bg-danger-subtle');
|
sfi > 120 ? 'bg-success-subtle' : sfi > 90 ? 'bg-warning-subtle' : 'bg-danger-subtle');
|
||||||
}
|
}
|
||||||
|
|
||||||
const kIndex = jsonData.k_index;
|
const kIndex = jsonData.k_index;
|
||||||
|
|||||||
Reference in New Issue
Block a user