kopia lustrzana https://github.com/projecthorus/chasemapper
Add log inhibit, add speedometer.
rodzic
a3e241c772
commit
4c83c58d69
|
@ -41,6 +41,9 @@ default_config = {
|
||||||
'range_ring_color': 'red',
|
'range_ring_color': 'red',
|
||||||
'range_ring_custom_color': '#FF0000',
|
'range_ring_custom_color': '#FF0000',
|
||||||
|
|
||||||
|
# Chase Car Speedometer
|
||||||
|
'chase_car_speed': True,
|
||||||
|
|
||||||
# Bearing processing
|
# Bearing processing
|
||||||
'max_bearings': 300,
|
'max_bearings': 300,
|
||||||
'max_bearing_age': 30*60,
|
'max_bearing_age': 30*60,
|
||||||
|
@ -121,6 +124,12 @@ def parse_config_file(filename):
|
||||||
chase_config['offline_tile_layers'].append(_dir)
|
chase_config['offline_tile_layers'].append(_dir)
|
||||||
logging.info("Found Map Layers: %s" % str(chase_config['offline_tile_layers']))
|
logging.info("Found Map Layers: %s" % str(chase_config['offline_tile_layers']))
|
||||||
|
|
||||||
|
try:
|
||||||
|
chase_config['chase_car_speed'] = config.getboolean('speedo', 'chase_car_speed')
|
||||||
|
except:
|
||||||
|
logging.info("Missing Chase Car Speedo Setting, using default (disabled)")
|
||||||
|
chase_config['chase_car_speed'] = False
|
||||||
|
|
||||||
# Telemetry Source Profiles
|
# Telemetry Source Profiles
|
||||||
|
|
||||||
_profile_count = config.getint('profile_selection', 'profile_count')
|
_profile_count = config.getint('profile_selection', 'profile_count')
|
||||||
|
|
|
@ -165,6 +165,11 @@ range_ring_color = red
|
||||||
# Custom range ring color, in hexadecimal #RRGGBB
|
# Custom range ring color, in hexadecimal #RRGGBB
|
||||||
range_ring_custom_color = #FF0000
|
range_ring_custom_color = #FF0000
|
||||||
|
|
||||||
|
#
|
||||||
|
# Chase Car Speedometer
|
||||||
|
#
|
||||||
|
[speedo]
|
||||||
|
chase_car_speed = True
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bearing Processing
|
# Bearing Processing
|
||||||
|
|
|
@ -269,7 +269,8 @@ def handle_new_payload_position(data):
|
||||||
flask_emit_event('telemetry_event', current_payloads[_callsign]['telem'])
|
flask_emit_event('telemetry_event', current_payloads[_callsign]['telem'])
|
||||||
|
|
||||||
# Add the position into the logger
|
# Add the position into the logger
|
||||||
chase_logger.add_balloon_telemetry(data)
|
if chase_logger:
|
||||||
|
chase_logger.add_balloon_telemetry(data)
|
||||||
|
|
||||||
|
|
||||||
def handle_modem_stats(data):
|
def handle_modem_stats(data):
|
||||||
|
@ -429,7 +430,8 @@ def run_prediction():
|
||||||
flask_emit_event('predictor_update', _client_data)
|
flask_emit_event('predictor_update', _client_data)
|
||||||
|
|
||||||
# Add the prediction run to the logger.
|
# Add the prediction run to the logger.
|
||||||
chase_logger.add_balloon_prediction(_client_data)
|
if chase_logger:
|
||||||
|
chase_logger.add_balloon_prediction(_client_data)
|
||||||
|
|
||||||
# Clear the predictor-running semaphore
|
# Clear the predictor-running semaphore
|
||||||
predictor_semaphore = False
|
predictor_semaphore = False
|
||||||
|
@ -684,7 +686,7 @@ def udp_listener_car_callback(data):
|
||||||
bearing_store.update_car_position(_state)
|
bearing_store.update_car_position(_state)
|
||||||
|
|
||||||
# Add the car position to the logger, but only if we are moving (>10kph = ~3m/s)
|
# Add the car position to the logger, but only if we are moving (>10kph = ~3m/s)
|
||||||
if _speed > 3.0:
|
if (_speed > 3.0) and chase_logger:
|
||||||
_car_position_update['speed'] = _speed
|
_car_position_update['speed'] = _speed
|
||||||
_car_position_update['heading'] = _heading
|
_car_position_update['heading'] = _heading
|
||||||
chase_logger.add_car_position(_car_position_update)
|
chase_logger.add_car_position(_car_position_update)
|
||||||
|
@ -695,7 +697,8 @@ def udp_listener_bearing_callback(data):
|
||||||
|
|
||||||
if bearing_store != None:
|
if bearing_store != None:
|
||||||
bearing_store.add_bearing(data)
|
bearing_store.add_bearing(data)
|
||||||
chase_logger.add_bearing(data)
|
if chase_logger:
|
||||||
|
chase_logger.add_bearing(data)
|
||||||
|
|
||||||
|
|
||||||
# Data Age Monitoring Thread
|
# Data Age Monitoring Thread
|
||||||
|
@ -849,6 +852,7 @@ if __name__ == "__main__":
|
||||||
parser.add_argument("-c", "--config", type=str, default="horusmapper.cfg", help="Configuration file.")
|
parser.add_argument("-c", "--config", type=str, default="horusmapper.cfg", help="Configuration file.")
|
||||||
parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Verbose output.")
|
parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Verbose output.")
|
||||||
parser.add_argument("-l", "--log", type=str, default=None, help="Custom log file name. (Default: ./log_files/<timestamp>.log")
|
parser.add_argument("-l", "--log", type=str, default=None, help="Custom log file name. (Default: ./log_files/<timestamp>.log")
|
||||||
|
parser.add_argument("--nolog", action="store_true", default=False, help="Inhibit all logging.")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Configure logging
|
# Configure logging
|
||||||
|
@ -868,8 +872,11 @@ if __name__ == "__main__":
|
||||||
web_handler = WebHandler()
|
web_handler = WebHandler()
|
||||||
logging.getLogger().addHandler(web_handler)
|
logging.getLogger().addHandler(web_handler)
|
||||||
|
|
||||||
# Start the Chase Logger
|
# Start the Chase Logger (if logging not inhibited.)
|
||||||
chase_logger = ChaseLogger(filename=args.log)
|
if not args.nolog:
|
||||||
|
chase_logger = ChaseLogger(filename=args.log)
|
||||||
|
else:
|
||||||
|
logging.info("Chase Logging has been inhibited, not starting logger.")
|
||||||
|
|
||||||
# Attempt to read in config file.
|
# Attempt to read in config file.
|
||||||
chasemapper_config = read_config(args.config)
|
chasemapper_config = read_config(args.config)
|
||||||
|
@ -925,7 +932,8 @@ if __name__ == "__main__":
|
||||||
data_monitor_thread_running = False
|
data_monitor_thread_running = False
|
||||||
|
|
||||||
# Close the chase logger
|
# Close the chase logger
|
||||||
chase_logger.close()
|
if chase_logger:
|
||||||
|
chase_logger.close()
|
||||||
|
|
||||||
if habitat_uploader != None:
|
if habitat_uploader != None:
|
||||||
habitat_uploader.close()
|
habitat_uploader.close()
|
||||||
|
|
|
@ -59,9 +59,9 @@ def send_bearing(json_data, udp_port=55672):
|
||||||
pass
|
pass
|
||||||
s.bind(('',udp_port))
|
s.bind(('',udp_port))
|
||||||
try:
|
try:
|
||||||
s.sendto(json.dumps(packet), ('<broadcast>', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('<broadcast>', udp_port))
|
||||||
except socket.error:
|
except socket.error:
|
||||||
s.sendto(json.dumps(packet), ('127.0.0.1', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
|
||||||
|
|
||||||
|
|
||||||
def send_car_position(json_data, udp_port=55672):
|
def send_car_position(json_data, udp_port=55672):
|
||||||
|
@ -100,9 +100,9 @@ def send_car_position(json_data, udp_port=55672):
|
||||||
pass
|
pass
|
||||||
s.bind(('',udp_port))
|
s.bind(('',udp_port))
|
||||||
try:
|
try:
|
||||||
s.sendto(json.dumps(packet), ('<broadcast>', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('<broadcast>', udp_port))
|
||||||
except socket.error:
|
except socket.error:
|
||||||
s.sendto(json.dumps(packet), ('127.0.0.1', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
|
||||||
|
|
||||||
|
|
||||||
def send_balloon_telemetry(json_data, udp_port=55672):
|
def send_balloon_telemetry(json_data, udp_port=55672):
|
||||||
|
@ -142,9 +142,9 @@ def send_balloon_telemetry(json_data, udp_port=55672):
|
||||||
pass
|
pass
|
||||||
s.bind(('',udp_port))
|
s.bind(('',udp_port))
|
||||||
try:
|
try:
|
||||||
s.sendto(json.dumps(packet), ('<broadcast>', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('<broadcast>', udp_port))
|
||||||
except socket.error:
|
except socket.error:
|
||||||
s.sendto(json.dumps(packet), ('127.0.0.1', udp_port))
|
s.sendto(json.dumps(packet).encode('ascii'), ('127.0.0.1', udp_port))
|
||||||
|
|
||||||
|
|
||||||
def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0):
|
def playback_json(filename, udp_port=55672, speed=1.0, start_time = 0):
|
||||||
|
@ -223,6 +223,8 @@ if __name__ == '__main__':
|
||||||
filename = sys.argv[1]
|
filename = sys.argv[1]
|
||||||
speed = float(sys.argv[2])
|
speed = float(sys.argv[2])
|
||||||
start_time = float(sys.argv[3])*60
|
start_time = float(sys.argv[3])*60
|
||||||
|
else:
|
||||||
|
print("USAGE: python log_playback.py filename.log <speed_multiplier> <start_time>")
|
||||||
|
|
||||||
playback_json(filename, udp_port, speed, start_time)
|
playback_json(filename, udp_port, speed, start_time)
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,12 @@ html, body, #map {
|
||||||
font-size:5em;
|
font-size:5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chaseCarSpeed {
|
||||||
|
color:black;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size:3em;
|
||||||
|
}
|
||||||
|
|
||||||
.dataAgeHeader {
|
.dataAgeHeader {
|
||||||
color:black;
|
color:black;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
|
@ -176,6 +176,15 @@ function handleTelemetry(data){
|
||||||
// Update range rings, if they are enabled.
|
// Update range rings, if they are enabled.
|
||||||
recenterRangeRings(data.position);
|
recenterRangeRings(data.position);
|
||||||
|
|
||||||
|
// Update Chase Car Speed
|
||||||
|
if (document.getElementById("showCarSpeed").checked){
|
||||||
|
$("#chase_car_speed").text( (chase_car_position.speed*3.6).toFixed(0) + " kph");
|
||||||
|
$("#chase_car_speed_header").text("Chase Car Speed");
|
||||||
|
} else {
|
||||||
|
$("#chase_car_speed").text("");
|
||||||
|
$("#chase_car_speed_header").text("");
|
||||||
|
}
|
||||||
|
|
||||||
if (chase_car_position.marker == 'NONE'){
|
if (chase_car_position.marker == 'NONE'){
|
||||||
// Create marker!
|
// Create marker!
|
||||||
chase_car_position.marker = L.marker(chase_car_position.latest_data,{title:"Chase Car", icon: carIcon, rotationOrigin: "center center"})
|
chase_car_position.marker = L.marker(chase_car_position.latest_data,{title:"Chase Car", icon: carIcon, rotationOrigin: "center center"})
|
||||||
|
|
|
@ -55,6 +55,9 @@ function serverSettingsUpdate(data){
|
||||||
$('#ringColorSelect').val(chase_config.range_ring_color);
|
$('#ringColorSelect').val(chase_config.range_ring_color);
|
||||||
$('#ringCustomColor').val(chase_config.range_ring_custom_color);
|
$('#ringCustomColor').val(chase_config.range_ring_custom_color);
|
||||||
$('#rangeRingsEnabled').prop('checked', chase_config.range_rings_enabled);
|
$('#rangeRingsEnabled').prop('checked', chase_config.range_rings_enabled);
|
||||||
|
|
||||||
|
// Chase Car Speedometer
|
||||||
|
$('#showCarSpeed').prop('checked', chase_config.chase_car_speed);
|
||||||
|
|
||||||
// Bearing settings
|
// Bearing settings
|
||||||
$('#bearingLength').val(chase_config.bearing_length.toFixed(0));
|
$('#bearingLength').val(chase_config.bearing_length.toFixed(0));
|
||||||
|
|
|
@ -315,6 +315,21 @@
|
||||||
})
|
})
|
||||||
.addTo(map);
|
.addTo(map);
|
||||||
|
|
||||||
|
// Chase Car Speed Display
|
||||||
|
L.control.custom({
|
||||||
|
position: 'bottomleft',
|
||||||
|
content : "<div class='dataAgeHeader' id='chase_car_speed_header'></div><div id='chase_car_speed' class='chaseCarSpeed'></div>",
|
||||||
|
classes : 'btn-group-vertical btn-group-sm',
|
||||||
|
id: 'speed_display',
|
||||||
|
style :
|
||||||
|
{
|
||||||
|
margin: '5px',
|
||||||
|
padding: '0px 0 0 0',
|
||||||
|
cursor: 'pointer',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.addTo(map);
|
||||||
|
|
||||||
// Time-to-landing display - shows the time until landing for the currently tracked payload.
|
// Time-to-landing display - shows the time until landing for the currently tracked payload.
|
||||||
L.control.custom({
|
L.control.custom({
|
||||||
position: 'bottomleft',
|
position: 'bottomleft',
|
||||||
|
@ -741,6 +756,11 @@
|
||||||
<b>Custom Color</b><input type="text" class="paramEntry" id="ringCustomColor" value="#FF0000"><br/>
|
<b>Custom Color</b><input type="text" class="paramEntry" id="ringCustomColor" value="#FF0000"><br/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h3>Speed Display</h3>
|
||||||
|
<div class="paramRow">
|
||||||
|
<b>Show Chase Car Speed:</b> <input type="checkbox" class="paramSelector" id="showCarSpeed">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue