diff --git a/release-notes.md b/release-notes.md index 75eb8961..86d7f590 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,4 +1,7 @@ Changes since v2.0.1 include: +- stage2: add additional aggregator links to the stage2 feeder home page +- stage2: add links to dump978 for micro feeders providing UAT978 data +- stage2: add links to live traffic and stats when showing the micro feeders connected to a stage2 - stage2: allow more systems to be used as micro feeder by allowing host,port,protocol triplets - this allows for example to use a planefiner device as micro feeder - stage2: fix bug that prevent user from updating the stage2 name - stage2: fix rbfeeder script to grab serial from the correct log diff --git a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/app.py b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/app.py index 75c2be89..dee28789 100644 --- a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/app.py +++ b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/app.py @@ -938,6 +938,14 @@ def agg_status(self, agg, idx=0): "adsbxfeederid": self._d.env_by_tags("adsbxfeederid").list_get(idx), } ) + elif agg == "adsblol": + return json.dumps( + { + "beast": status.beast, + "mlat": status.mlat, + "adsblollink": self._d.env_by_tags("adsblol_link").list_get(idx), + } + ) return json.dumps({"beast": status.beast, "mlat": status.mlat}) @check_restart_lock diff --git a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/templates/index.html b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/templates/index.html index 75c71ced..51b87f81 100644 --- a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/templates/index.html +++ b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/templates/index.html @@ -265,24 +265,32 @@
Additional aggregator links
  • ADSB.lol feeder introduction
  • + {% for idx in ns.site_indices %} + {% if list_is_enabled("adsblol", idx) %}
  • + {% if idx == 0 %} personal ADSB.lol URL with the planes you are sending + {% else %} + {{ list_value_by_tag('site_name', idx) }} personal ADSB.lol URL + {% endif %}
  • ADSB.lol - MLAT feeder map + href="https://mlat.adsb.lol/syncmap/#lat={{ list_value_by_tag('lat', idx) }}#lon={{ list_value_by_tag('lng', idx) }}#zoom=10">ADSB.lol + MLAT feeder map for the area around {{ list_value_by_tag('site_name', idx) }}
    - {% if is_enabled('stage2') %} - (only those of your feeders that have MLAT privacy disabled will be shown) - {% else %} - {% if list_is_enabled("mlat_privacy", 0) %} - (since you have MLAT privacy enabled, your feeder won't be shown) - {% else %} - (your feeder will be at an approximate location as {{ list_value_by_tag('site_name', 0) }}) - {% endif %} - {% endif %}
  • + {% endif %} + {% endfor %} + {% if is_enabled('stage2') %} + (on the MLAT maps only feeders that have MLAT privacy disabled will be shown) + {% else %} + {% if list_is_enabled("mlat_privacy", 0) %} + (since you have MLAT privacy enabled, your feeder won't be shown) + {% else %} + (your feeder will be at an approximate location as {{ list_value_by_tag('site_name', 0) }}) + {% endif %} + {% endif %}
    @@ -291,7 +299,11 @@
    Additional aggregator links
    {% for idx in ns.site_indices %} {% if list_is_enabled("flightradar", idx) %}
  • - FR24 status + {% if idx == 0 %} + FR24 status + {% else %} + {{ list_value_by_tag('site_name', idx) }} FR24 status + {% endif %}
  • {% endif %} {% endfor %} @@ -300,20 +312,39 @@
    Additional aggregator links
    PlaneFinder
    ADSBExchange
    @@ -391,9 +422,21 @@
    Additional aggregator links
    } else { $("#" + agg + "span" + idx).addClass('text-dark') } + if (agg == "adsblol") { + if (idx > 0) { + console.log("set adsblol-link" + idx + " to " + data["adsblollink"]) + $("#adsblol-link-" + idx).attr("href", data["adsblollink"]) + } + } if (agg == "adsbx") { - $("#adsbxstatlink").attr("href", "https://www.adsbexchange.com/api/feeders/?feed=" + data["adsbxfeederid"]) - $("#adsbxmaplink").attr("href", "https://globe.adsbexchange.com/?feed=" + data["adsbxfeederid"]) + if (idx == 0) { + $("#adsbxstatlink").attr("href", "https://www.adsbexchange.com/api/feeders/?feed=" + data["adsbxfeederid"]) + $("#adsbxmaplink").attr("href", "https://globe.adsbexchange.com/?feed=" + data["adsbxfeederid"]) + } else { + console.log("set adsbxstatlink" + idx) + $("#adsbxstatlink_" + idx).attr("href", "https://www.adsbexchange.com/api/feeders/?feed=" + data["adsbxfeederid"]) + $("#adsbxmaplink_" + idx).attr("href", "https://globe.adsbexchange.com/?feed=" + data["adsbxfeederid"]) + } } }); } diff --git a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/agg_status.py b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/agg_status.py index 3d31dab7..6b9f0c7a 100644 --- a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/agg_status.py +++ b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/agg_status.py @@ -89,15 +89,15 @@ def check(self): if lolclients: lolbeast = lolclients.get("beast") lolmlat = lolclients.get("mlat") - self._beast = ( - T.Yes - if isinstance(lolbeast, list) - and any( - b.get("uuid", "xxxxxxxx-xxxx-")[:14] == uuid[:14] - for b in lolbeast - ) - else T.No - ) + self._beast = T.No + if isinstance(lolbeast, list): + for entry in lolbeast: + if entry.get("uuid", "xxxxxxxx-xxxx-")[:14] == uuid[:14]: + self._beast = T.Yes + self._d.env_by_tags("adsblol_link").list_set( + self._idx, entry.get("adsblol_my_url") + ) + break self._mlat = ( T.Yes if isinstance(lolmlat, list) @@ -108,6 +108,7 @@ def check(self): else T.No ) self._last_check = datetime.now() + else: print_err(f"adsblol returned status {status}") if self._agg == "flyitaly": diff --git a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/data.py b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/data.py index a9f53e08..7ffff6af 100644 --- a/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/data.py +++ b/src/modules/adsb-feeder/filesystem/root/opt/adsb/adsb-setup/utils/data.py @@ -172,6 +172,7 @@ def proxy_routes(self): # Ultrafeeder config, used for all 4 types of Ultrafeeder instances Env("FEEDER_ULTRAFEEDER_CONFIG", tags=["ultrafeeder_config"]), Env("ADSBLOL_UUID", default=[""], tags=["adsblol_uuid"]), + Env("ADSBLOL_LINK", default=[""], tags=["adsblol_link"]), Env("ULTRAFEEDER_UUID", default=[""], tags=["ultrafeeder_uuid"]), Env("MLAT_PRIVACY", default=[False], tags=["mlat_privacy", "is_enabled"]), Env(