Skip to content

Commit

Permalink
New stats added in 1.0.321 fw
Browse files Browse the repository at this point in the history
  • Loading branch information
EinEinfach committed May 13, 2024
1 parent ae60394 commit 4a36c62
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 10 deletions.
2 changes: 1 addition & 1 deletion CaSSAndRA/app.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3

#Version:0.110.1 Fix issue in encrypted http mode
#Version:0.111.0 New stats added in 1.0.321 fw
# package imports
import os
import sys
Expand Down
2 changes: 1 addition & 1 deletion CaSSAndRA/src/backend/data/appdata.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import logging
logger = logging.getLogger(__name__)

version = '0.110.1'
version = '0.111.0'
15 changes: 15 additions & 0 deletions CaSSAndRA/src/backend/data/datatodf.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@ def add_stats_to_df_from_mqtt(data: dict) -> None:
'temp_min':data['temp_min'],
'temp_min':data['temp_min'],
'duration_mow_motor_recovery': 0,
'counter_lift_triggered': 0,
'counter_gps_no_speed_triggered': 0,
'counter_tof_triggered': 0,
'counter_diff_imu_wheel_yaw_speed_triggered': 0,
'counter_imu_no_rotation_triggered': 0,
'counter_rotation_timeout_triggered': 0,
'timestamp': str(datetime.now())}
stats_to_df = pd.DataFrame(data=stats_to_df, index=[0])
roverdata.stats = pd.concat([roverdata.stats, stats_to_df], ignore_index=True)
Expand Down Expand Up @@ -179,6 +185,9 @@ def add_stats_to_df(data: str) -> None:
#handle old AT+T strings (older then 1.0.3XX)
if len(data_list) < 25:
data_list.append('0')
#handle old AT+T strings (older then 1.0.321)
if len(data_list) < 31:
data_list.extend(['0', '0', '0', '0', '0', '0'])
data_list = [float(x) if '.' in x else int(x) for x in data_list]
data_list.append(str(datetime.now()))
stats_to_df = pd.DataFrame([data_list])
Expand Down Expand Up @@ -208,6 +217,12 @@ def add_stats_to_df(data: str) -> None:
'counter_bumper_triggered',
'counter_gps_motion_timeout',
'duration_mow_motor_recovery',
'counter_lift_triggered',
'counter_gps_no_speed_triggered',
'counter_tof_triggered',
'counter_diff_imu_wheel_yaw_speed_triggered',
'counter_imu_no_rotation_triggered',
'counter_rotation_timeout_triggered',
'timestamp'
]
roverdata.stats = pd.concat([roverdata.stats, stats_to_df], ignore_index=True)
Expand Down
53 changes: 53 additions & 0 deletions CaSSAndRA/src/backend/data/saveddata.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@ def read(measure_file_paths) -> None:
roverdata.stats = pd.read_pickle(measure_file_paths.stats)
if not 'duration_mow_motor_recovery' in roverdata.stats:
roverdata.stats['duration_mow_motor_recovery'] = 0
if not 'counter_lift_triggered' in roverdata.stats.columns:
roverdata.stats['counter_lift_triggered'] = 0
if not 'counter_gps_no_speed_triggered' in roverdata.stats.columns:
roverdata.stats['counter_gps_no_speed_triggered'] = 0
if not 'counter_tof_triggered' in roverdata.stats.columns:
roverdata.stats['counter_tof_triggered'] = 0
if not 'counter_diff_imu_wheel_yaw_speed_triggered' in roverdata.stats.columns:
roverdata.stats['counter_diff_imu_wheel_yaw_speed_triggered'] = 0
if not 'counter_imu_no_rotation_triggered' in roverdata.stats.columns:
roverdata.stats['counter_imu_no_rotation_triggered'] = 0
if not 'counter_rotation_timeout_triggered' in roverdata.stats.columns:
roverdata.stats['counter_rotation_timeout_triggered'] = 0
logger.info('Backend: Statistics data are loaded successfully')
if roverdata.stats.empty:
logger.warning('stats.pickle is empty, create a default data frame')
Expand Down Expand Up @@ -102,8 +114,15 @@ def read(measure_file_paths) -> None:
"temp_min":{"0":0},
"temp_max":{"0":0},
"duration_mow_motor_recovery":{"0":0},
"counter_lift_triggered":{"0":0},
"counter_gps_no_speed_triggered":{"0":0},
"counter_tof_triggered":{"0":0},
"counter_diff_imu_wheel_yaw_speed_triggered":{"0":0},
"counter_imu_no_rotation_triggered":{"0":0},
"counter_rotation_timeout_triggered":{"0":0},
"timestamp":{"0":str(datetime.now())}}
roverdata.stats = pd.DataFrame(data=stats)
logger.info('Backend: Statistics data are loaded successfully')
except:
logger.warning('Backend: Failed to load statistics data, create a default data frame')
stats = {"duration_idle":{"0":0},
Expand Down Expand Up @@ -131,6 +150,12 @@ def read(measure_file_paths) -> None:
"temp_min":{"0":0},
"temp_max":{"0":0},
"duration_mow_motor_recovery":{"0":0},
"counter_lift_triggered":{"0":0},
"counter_gps_no_speed_triggered":{"0":0},
"counter_tof_triggered":{"0":0},
"counter_diff_imu_wheel_yaw_speed_triggered":{"0":0},
"counter_imu_no_rotation_triggered":{"0":0},
"counter_rotation_timeout_triggered":{"0":0},
"timestamp":{"0":str(datetime.now())}}
roverdata.stats = pd.DataFrame(data=stats)

Expand Down Expand Up @@ -158,6 +183,20 @@ def read(measure_file_paths) -> None:
#Try to read Calced from Stats Data from file
try:
roverdata.calced_from_stats = pd.read_pickle(measure_file_paths.calcedstats)
if not 'duration_mow_motor_recovery' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['duration_mow_motor_recovery'] = 0
if not 'counter_lift_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_lift_triggered'] = 0
if not 'counter_gps_no_speed_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_gps_no_speed_triggered'] = 0
if not 'counter_tof_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_tof_triggered'] = 0
if not 'counter_diff_imu_wheel_yaw_speed_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_diff_imu_wheel_yaw_speed_triggered'] = 0
if not 'counter_imu_no_rotation_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_imu_no_rotation_triggered'] = 0
if not 'counter_rotation_timeout_triggered' in roverdata.calced_from_stats.columns:
roverdata.calced_from_stats['counter_rotation_timeout_triggered'] = 0
logger.info('Backend: Calced data from stats are loaded successfully')
if roverdata.calced_from_stats.empty:
logger.warning('calcedstats.pickle is empty, create a default data frame')
Expand Down Expand Up @@ -185,6 +224,13 @@ def read(measure_file_paths) -> None:
"reset_cause":{"0":0},
"temp_min":{"0":0},
"temp_max":{"0":0},
"duration_mow_motor_recovery":{"0":0},
"counter_lift_triggered":{"0":0},
"counter_gps_no_speed_triggered":{"0":0},
"counter_tof_triggered":{"0":0},
"counter_diff_imu_wheel_yaw_speed_triggered":{"0":0},
"counter_imu_no_rotation_triggered":{"0":0},
"counter_rotation_timeout_triggered":{"0":0},
"timestamp":{"0":str(datetime.now())}}
roverdata.calced_from_stats = pd.DataFrame(data=calced_from_stats)
except:
Expand Down Expand Up @@ -213,6 +259,13 @@ def read(measure_file_paths) -> None:
"reset_cause":{"0":0},
"temp_min":{"0":0},
"temp_max":{"0":0},
"duration_mow_motor_recovery":{"0":0},
"counter_lift_triggered":{"0":0},
"counter_gps_no_speed_triggered":{"0":0},
"counter_tof_triggered":{"0":0},
"counter_diff_imu_wheel_yaw_speed_triggered":{"0":0},
"counter_imu_no_rotation_triggered":{"0":0},
"counter_rotation_timeout_triggered":{"0":0},
"timestamp":{"0":str(datetime.now())}}
roverdata.calced_from_stats = pd.DataFrame(data=calced_from_stats)

Expand Down
71 changes: 63 additions & 8 deletions CaSSAndRA/src/components/state/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,62 @@
html.P('bumper', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_bumper_triggered_range")
]),
dbc.ListGroupItem([
html.P('lift', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_lift_triggered_range")
]),
dbc.ListGroupItem([
html.P('sonar', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_sonar_triggered_range")
]),
dbc.ListGroupItem([
html.P('tof', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_tof_triggered_range")
]),
dbc.ListGroupItem([
html.P('timeout', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_rotation_timeout_triggered_range")
]),
],
horizontal=True,
className="mb-2",
style={"justify-content":"", "margin-left":"1rem", "margin-right":"1rem", "flex-shrink":"1"},
),
dbc.ListGroup(
[
dbc.ListGroupItem([
html.P('imu', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_imu_triggered_range")
]),
dbc.ListGroupItem([
html.P('imu yaw speed', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_diff_imu_wheel_yaw_speed_triggered_range")
]),
dbc.ListGroupItem([
html.P('imu rotation', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_imu_no_rotation_triggered_range")
]),
],
horizontal=True,
className="mb-2",
style={"justify-content":"", "margin-left":"1rem", "margin-right":"1rem", "flex-shrink":"1"},
),
dbc.ListGroup(
[
dbc.ListGroupItem([
html.P('gps', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_gps_motion_timeout_range")
]),
dbc.ListGroupItem([
html.P('sonar', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_sonar_triggered_range")
html.P('gps no speed', style={"margin-bottom":"0.25rem"}),
html.Small(id="counter_gps_no_speed_triggered_range")
]),
],
horizontal=True,
className="mb-2",
style={"justify-content":"", "margin-left":"1rem", "margin-right":"1rem", "flex-shrink":"1"},
),

dbc.Label('Recoveries', style={"margin-top":"0.5rem", "padding":"0", "margin-left":"1.5rem", "margin-bottom":"0.25rem"}),
dbc.ListGroup(
[
Expand Down Expand Up @@ -120,6 +159,12 @@
Output("counter_gps_jumps_range", 'children'),
Output("counter_gps_chk", 'children'),
Output("time_max_dgps_age_range", 'children'),
Output("counter_lift_triggered_range", 'children'),
Output("counter_tof_triggered_range", 'children'),
Output("counter_rotation_timeout_triggered_range", 'children'),
Output("counter_diff_imu_wheel_yaw_speed_triggered_range", 'children'),
Output("counter_imu_no_rotation_triggered_range", 'children'),
Output("counter_gps_no_speed_triggered_range", 'children'),
],
[
#Input(ids.INTERVAL, 'n_intervals'),
Expand Down Expand Up @@ -170,16 +215,26 @@ def update_stats(#n_intervals: int,
counter_float_recoveries_range = int(calced_stats_filtered['counter_float_recoveries'].sum())
mow_traveled_range = round(calced_stats_filtered['distance_mow_traveled'].sum()/1000, 2)
time_max_dgps_age_range = round(stats_filtered['time_max_dpgs_age'].max(), 2)
counter_imu_triggered_range = int(calced_stats_filtered['counter_imu_triggered'].sum())
counter_gps_chk_sum_errors_range = int(calced_stats_filtered['counter_gps_chk_sum_errors'].sum())
counter_dgps_chk_sum_errors_range = int(calced_stats_filtered['counter_dgps_chk_sum_errors'].sum())
time_max_cycle_range = round(stats_filtered['time_max_cycle'].max(), 2)
counter_invalid_recoveries_range = int(calced_stats_filtered['counter_invalid_recoveries'].sum())
counter_obstacles_range = int(calced_stats_filtered['counter_obstacles'].sum())
counter_gps_jumps_range = int(calced_stats_filtered['counter_gps_jumps'].sum())
counter_sonar_triggered_range = int(calced_stats_filtered['counter_sonar_triggered'].sum())

#Obstacles
counter_obstacles_range = int(calced_stats_filtered['counter_obstacles'].sum())
counter_bumper_triggered_range = int(calced_stats_filtered['counter_bumper_triggered'].sum())
counter_gps_motion_timeout_range = int(calced_stats_filtered['counter_gps_motion_timeout'].sum())

counter_lift_triggered_range = int(calced_stats_filtered['counter_lift_triggered'].sum())
counter_sonar_triggered_range = int(calced_stats_filtered['counter_sonar_triggered'].sum())
counter_tof_triggered_range = int(calced_stats_filtered['counter_tof_triggered'].sum())
counter_rotation_timeout_triggered_range= int(calced_stats_filtered['counter_rotation_timeout_triggered'].sum())
counter_imu_triggered_range = int(calced_stats_filtered['counter_imu_triggered'].sum())
counter_diff_imu_wheel_yaw_speed_triggered_range = int(calced_stats_filtered['counter_diff_imu_wheel_yaw_speed_triggered'].sum())
counter_imu_no_rotation_triggered_range = int(calced_stats_filtered['counter_imu_no_rotation_triggered'].sum())
counter_gps_motion_timeout_range = int(calced_stats_filtered['counter_gps_motion_timeout'].sum())
counter_gps_no_speed_triggered_range = int(calced_stats_filtered['counter_gps_no_speed_triggered'].sum())


return f'{mow_traveled_range} km', counter_obstacles_range, f'{time_max_cycle_range} s', counter_bumper_triggered_range, counter_imu_triggered_range, counter_gps_motion_timeout_range, counter_sonar_triggered_range, \
counter_invalid_recoveries_range, counter_float_recoveries_range, counter_gps_jumps_range, f'{counter_gps_chk_sum_errors_range} gps / {counter_dgps_chk_sum_errors_range} dgps',f'{time_max_dgps_age_range} s'
counter_invalid_recoveries_range, counter_float_recoveries_range, counter_gps_jumps_range, f'{counter_gps_chk_sum_errors_range} gps / {counter_dgps_chk_sum_errors_range} dgps',f'{time_max_dgps_age_range} s', \
counter_lift_triggered_range, counter_tof_triggered_range, counter_rotation_timeout_triggered_range, counter_diff_imu_wheel_yaw_speed_triggered_range, counter_imu_no_rotation_triggered_range, counter_gps_no_speed_triggered_range

0 comments on commit 4a36c62

Please sign in to comment.