#
# Project Horus Chase-Mapper Configuration File
#
# Copy this file to horusmapper.cfg and modify as required. 
#
# This is the default config file for chasemapper 1.5.0, be aware there might be changes and it might not run on older/newer versions.
#

#
# Telemetry Source Profiles
# Multiple Telemetry source profiles can be defined, and can be selected from
# the web GUI.
#
[profile_selection]
# How many profiles have been defined
profile_count = 2
# Index of the default profile (indexing from 1)
default_profile = 1


[profile_1]
# An example configuration which displays telemetry from auto_rx, and obtains chase car positions from GPSD.
# Profile name - will be shown in the web client.
profile_name = auto-rx
# Telemetry source type:
#  ozimux - Read data in OziMux format (TELEMETRY,HH:MM:SS,lat,lon,alt\n)
#  horus_udp - Read Horus UDP Broadcast 'Payload Summary' messages, as emitted by auto_rx and the horus-gui software.
telemetry_source_type = horus_udp
# Telemetry source port (UDP)  (auto_rx defauts to 55673)
telemetry_source_port = 55673

# Car Position Source
# none - No Chase-Car GPS
# horus_udp - Read Horus UDP Broadcast 'Car GPS' messages
# serial - Read GPS positions from a serial-connected GPS receiver. RECOMMENDED
# gpsd - Poll a local GPSD instance for positions. (Known to have some reliability issues...)
# station - Stationary position (set in the [map] section below)
car_source_type = serial
# Car position source port (UDP) - only used if horus_udp is selected, but still needs to be provided.
car_source_port = 55672

# Online Tracker System
# Where to upload chase-car positions and balloon recovery notifications to.
# Note - you can only select one of these at a time.
#
# sondehub = Sondehub v2 Database, for viewing on the SondeHub tracker (https://tracker.sondehub.org)
# Use this for chasing meteorological radiosondes!
#
# sondehubamateur = SondeHub Amateur Database, for viewing on the SondeHub-Amateur Tracker (https://amateur.sondehub.org)
# Use this when chasing your own flights, and you want to show up on the sondehub-amateur tracker.
#
online_tracker = sondehub

# Other profiles can be defined in sections like the following:
[profile_2]
# Example profile to take telemetry data from an instance of horus-gui, which defaults to
# emitting hrous_udp messages on port 55672, and using a Serial-connected GPS, with settings defined further below.
# The horusdemodlib command-line utilites emit telemetry on the same port, so this profile will work with that too.
profile_name = horus-gui
telemetry_source_type = horus_udp
telemetry_source_port = 55672

# Car Position Source
car_source_type = serial
# Since we are using a serial GPS, the car_source_port argument isn't used, but still has to be defined.
# Make sure to update the gps_serial settings further down in the configuration file!
car_source_port = 55672

# Online Tracker System
# Where to upload chase-car positions and balloon recovery notifications to.
# sondehub = Sondehub v2 Database, for viewing on the SondeHub tracker (https://tracker.sondehub.org)
# sondehubamateur = SondeHub Amateur Database, for viewing on the SondeHub-Amateur Tracker (https://amateur.sondehub.org)
online_tracker = sondehubamateur

# If you want add more profiles, you can do so here, e.g.
# [profile_3]
# ... 
# [profile_4]
# ...


[gpsd]
# GPSD Host/Port - Only used if selected in a telemetry profile above.
# Note that GPSD support is somewhat buggy.
gpsd_host = localhost
gpsd_port = 2947


[gps_serial]
# Serial GPS Settings - Only used if selected in a telemetry profile above.
# GPS serial device (i.e. /dev/ttyUSB0, COM1, etc...)
gps_port = /dev/ttyUSB0
# GPS baud rate
gps_baud = 9600


# Map Settings
[map]
# Host/port to host webserver on
flask_host = 0.0.0.0
flask_port = 5001

# Default Map Centre & Stationary Position
# If the profile's car_source_type is set to station, the following position will be indicated on the map
# as a stationary receiver.
default_lat = -34.9
default_lon = 138.6
default_alt = 0.0

# How long to keep payload data (minutes)
payload_max_age = 180

# ThunderForest API Key
# NOTE: OpenTopoMaps is now available by default, and is a good alternative to ThunderForest's outdoors map.
# If you still want to use ThunderForest's Outdoors map (Topographic maps), you will need to
# register for an API key here: https://manage.thunderforest.com/users/sign_up?plan_id=5
# Once you have a key, enter it below:
thunderforest_api_key = none

# Stadia Maps API Key
# Stadia provides an excellent Dark map layer (Alidade Smooth Dark), which is looking promising for use in a 'dark mode' theme.
# Accessing this requires registering at https://client.stadiamaps.com/signup/ then creating a 'property'
# and obtaining an API key. Once you have a key, enter it below:
stadia_api_key = none

# Predictor Settings
# By default this will attempt to get predictions from the online Tawhiri Predictions API.
# Optionally, you can enable offline predictions below.
[predictor]
# Enable Predictor (True/False) - This can also be enabled from the web client.
predictor_enabled = True

# Predictor defaults - these can also be modified at runtime in the web interface.
default_burst = 30000
default_descent_rate = 5.0


# Offline Predictions
# Use of the offline predictor requires installing the CUSF Predictor Python Wrapper from here:
# https://github.com/darksidelemm/cusf_predictor_wrapper
# You also need to compile the predictor binary, and copy it into this directory.
#
# Note: This setting turns offline predictions *on* by default, which assumes there is a valid
# GFS dataset already present and available. 
# If you will be using the 'Download Model' button, then leave this at False, and Offline predictions
# will be enabled once a valid model is available.
offline_predictions = False

# Predictory Binary Location
# Where to find the built CUSF predictor binary. This will usually be ./pred or pred.exe (on Windows)
pred_binary = ./pred

# Directory containing GFS model data.
gfs_directory = ./gfs/

# Wind Model Download Command
# Optional command to enable downloading of wind data via a web client button.
# Example: (this will require copying the get_wind_data.py script to this dirctory)
# model_download = python3 -m cusfpredict.gfs --lat=-33 --lon=139 --latdelta=10 --londelta=10 -f 24 -m 0p50 -o gfs
# The gfs directory (above) will be cleared of all .dat files prior to the above command being run.
model_download = none


#
#	Offline Tile Server
#
#	Allows serving of map tiles from a directory.
#	Each subdirectory is assumed to be a separate layer of map tiles, i.e. 'OSM', 'opencyclemap',
#	and is added to the map interface as a separate layer.
#	This feature can be used to serve up FoxtrotGPS's tile cache as layers, usually located in ~/Maps/
#
[offline_maps]
# Enable serving up maps from a directory of map tiles.
tile_server_enabled = False

# Path to map tiles. For FoxtrotGPS, this is usually ~/Maps/
# NOTE: This must be an ABSOLUTE directory, i.e. /home/pi/Maps/ , using ~/Maps/ will not work.

tile_server_path = /home/pi/Maps/

# If running chasemapper within a docker container, comment out the above line, and uncomment the following:
#tile_server_path = /opt/chasemapper/Maps/

#
# SondeHub Chase-Car Position Upload
# If you want, this application can upload your chase-car position to the SondeHub/SondeHub-Amateur trackers,
# for those follwing along at home.
# The settings below can be modified from the web interface, but they will default to what is set below on startup.
# 
# Note - Variables in this section still refer to habitat to avoid breaking existing configurations.
[habitat]
# Enable uploading of chase-car position to SondeHub / SondeHub-Amateur (True / False)
# Which tracker positions are uploaded to depends on the online_tracker setting of the selected
# profile (further up in this config file).
habitat_upload_enabled = False

# Callsign to use when uploading. Note that _chase is automatically appended to this callsign
# when displayed on the tracker maps.
# i.e. N0CALL will show up as N0CALL_chase on sondehub.org
habitat_call = N0CALL

# Attempt to upload position to SondeHub every x seconds.
habitat_update_rate = 30


#
# Range Rings
#
[range_rings]
range_rings_enabled = False

# Number of range rings to display. The first ring starts at the spacing set below.
range_ring_quantity = 5

# Spacing between rings, in metres.
range_ring_spacing = 1000

# Weight of the ring, in pixels.
range_ring_weight = 1.5

# Color of the range rings.
# Valid options are: red, black, blue, green, custom
range_ring_color = red

# Custom range ring color, in hexadecimal #RRGGBB
range_ring_custom_color = #FF0000

#
#   Chase Car Speedometer 
#   If enabled display the chase car speed at the bottom left of the display.
#
[speedo]
chase_car_speed = True

#
# Bearing Processing
#
[bearings]

# Number of bearings to store
max_bearings = 300

# Maximum age of bearings, in *minutes*.
max_bearing_age = 10

# Car heading speed gate
# Only consider car headings to be valid if the car speed is greater than this value in *kph*
car_speed_gate = 10

# Turn rate threshold
# Only plot bearings if the turn rate of the vehicle is less than this value, in degrees/second
# This helps avoid plotting bearings when the heading and bearind data might be misaligned during
# a turn (e.g. around a roundabout)
# 4 degrees/second seems to work fairly well.
turn_rate_threshold = 4.0

# Visual Settings - these can be adjust in the Web GUI during runtime

# Bearing length in km
bearing_length = 10 

# Weight of the bearing lines, in pixels.
bearing_weight = 1.0

# Color of the bearings.
# Valid options are: red, black, blue, green, white, custom
bearing_color = red

# Custom bearing color, in hexadecimal #RRGGBB
bearing_custom_color = #FF0000



[units]

# unitselection allows choice of metric - the default or imperial - horizontal miles and feet for short distances, horizontal miles per hour,  vertical feet, vertical feet per minute
# this is applied only to the indications and to the range ring settings


unitselection = metric
#unitselection = imperial

# Sensible choice of unit selection (all thresholds set in metric)

# This is the threshold for switching from miles to feet, set in metres.
switch_miles_feet = 400


[history]

# Enable load of last position from log files (True/False)
reload_last_position = False


