Skip to content

Commit

Permalink
- Better app response to user selection. New temporarly states:
Browse files Browse the repository at this point in the history
(resume, map upload, stop etc)
- New api values battery voltage and electric current
- Bug fix in geojson export
  • Loading branch information
EinEinfach committed May 14, 2024
1 parent 98c7f0c commit f5cf53f
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 6 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.111.0 New stats added in 1.0.321 fw
#Version:0.112.0 Better app response to user select. New api values. Buf fix in json export in mobile app
# package imports
import os
import sys
Expand Down
2 changes: 1 addition & 1 deletion CaSSAndRA/src/backend/comm/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def create_api_payload(self) -> None:
def create_robot_payload(self) -> None:
self.robotstate['status'] = robot.status
self.robotstate['dockReason'] = robot.dock_reason
self.robotstate['battery'] = robot.soc
self.robotstate['battery'] = dict(soc=robot.soc, voltage=robot.battery_voltage, electricCurrent=robot.amps)
self.robotstate['position'] = dict(x=robot.position_x, y=robot.position_y)
self.robotstate['target'] = dict(x=robot.target_x, y=robot.target_y)
self.robotstate_json = json.dumps(self.robotstate)
Expand Down
42 changes: 42 additions & 0 deletions CaSSAndRA/src/backend/comm/cmdtorover.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@

import numpy as np
import pandas as pd
from datetime import datetime

from .. data.mapdata import current_map
from .. data.roverdata import robot
from .. data.cfgdata import rovercfg
from . import cmdlist

def takemap(perimeter: pd.DataFrame, way: pd.DataFrame, dock: bool) -> pd.DataFrame:
robot.status_timestamp = datetime.now()
robot.status = 'map upload'
robot.status_tmp = 'map upload'
perimeter = perimeter[perimeter['type'] != 'search wire']
logger.info('Backend: Prepare map and way data for transmition')

Expand Down Expand Up @@ -63,6 +67,9 @@ def takemap(perimeter: pd.DataFrame, way: pd.DataFrame, dock: bool) -> pd.DataFr
return buffer

def move(movement: list) -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'move'
robot.status_tmp = 'move'
if movement[0] !=0 or movement[1] != 0:
msg = {'msg': 'AT+M,'+str(movement[0])+','+str(movement[1])}
buffer = pd.DataFrame([msg])
Expand All @@ -76,48 +83,77 @@ def move(movement: list) -> pd.DataFrame:
return buffer

def goto() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'transit'
robot.status_tmp = 'transit'
msg = {'msg': 'AT+C,0,1,'+str(rovercfg.gotospeed_setpoint)+','+str(rovercfg.fix_timeout)+',0,-1,-1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command goto is prepared')
cmdlist.cmd_goto = False
return buffer

def stop():
robot.status_tmp_timestamp = datetime.now()
robot.status = 'stop'
robot.status_tmp = 'stop'
msg = {'msg': 'AT+C,0,0,-1,-1,-1,-1,-1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command stop is prepared')
cmdlist.cmd_stop = False
return buffer

def dock() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'docking'
robot.status_tmp = 'docking'
msg = {'msg': 'AT+C,0,4,-1,-1,-1,-1,-1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command dock is prepared')
cmdlist.cmd_dock = False
return buffer

def mow() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'mow'
robot.status_tmp = 'mow'
msg = {'msg': 'AT+C,1,1,'+str(rovercfg.mowspeed_setpoint)+','+str(rovercfg.fix_timeout)+',-1,-1,-1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command start is prepared')
cmdlist.cmd_mow = False
return buffer

def resume() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status_tmp = 'resume'
buffer = robot.last_cmd
logger.debug('Backend: Command resume is prepared')
cmdlist.cmd_resume = False
return buffer

def shutdown() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'shutdown'
robot.status_tmp = 'shutdown'
msg = {'msg': 'AT+Y3'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command shutdown is preapred')
cmdlist.cmd_shutdown = False
return buffer

def reboot() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'reboot'
robot.status_tmp = 'reboot'
msg = {'msg': 'AT+Y'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command reboot is prepared')
cmdlist.cmd_reboot = False
return buffer

def gpsreboot() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'gps reboot'
robot.status_tmp = 'gps reboot'
msg = {'msg': 'AT+Y2'}
buffer = pd.DataFrame([msg])
logger.debug('Backend: Command GPS reboot is prepared')
Expand Down Expand Up @@ -156,6 +192,9 @@ def changespeed(new_speed: float) -> pd.DataFrame:
return buffer

def skipnextpoint() -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = 'skip point'
robot.status_tmp = 'skip point'
msg = {'msg': 'AT+C,-1,-1,-1,-1,-1,-1,1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Command skip next point is prepared')
Expand All @@ -171,6 +210,9 @@ def custom() -> pd.DataFrame:
return buffer

def skiptomowprogress(progress: float) -> pd.DataFrame:
robot.status_tmp_timestamp = datetime.now()
robot.status = f'skip to {round(progress*100)}%'
robot.status_tmp = f'skip to {round(progress*100)}%'
msg = {'msg': 'AT+C,-1,-1,-1,-1,-1,'+str(progress)+',-1,-1'}
buffer = pd.DataFrame([msg])
logger.debug('Command skip to progress is prepared')
Expand Down
2 changes: 1 addition & 1 deletion CaSSAndRA/src/backend/comm/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def check() -> pd.DataFrame:
return pd.DataFrame()

elif cmdlist.cmd_resume:
msg_pckg = robot.last_cmd
msg_pckg = cmdtorover.resume()
robot.last_mow_status = checkmowmotor(msg_pckg, robot.last_mow_status)
cmdlist.cmd_resume = False

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.111.0'
version = '0.112.0'
6 changes: 5 additions & 1 deletion CaSSAndRA/src/backend/data/roverdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ class Mower:
Image.open(os.path.dirname(__file__).replace('/backend/data', '/assets/icons/'+appcfg.rover_picture+'rover0grad.png')))
solution: str = 'invalid'
status: str = 'offline'
status_tmp: str = 'offline'
status_tmp_timestamp: datetime = datetime.now()
sensor_status: str = 'unknown'
position_age_hr = '99+d'
dock_reason_operator: bool = False
Expand Down Expand Up @@ -114,7 +116,9 @@ def calc_direction(self) -> float:
return direction_deg

def calc_status(self) -> str:
if (datetime.now()-self.timestamp).seconds > 60:
if (datetime.now() - self.status_tmp_timestamp).seconds < 10:
return self.status_tmp
elif (datetime.now()-self.timestamp).seconds > 60:
return 'offline'
elif self.job == 0:
return 'idle'
Expand Down
6 changes: 5 additions & 1 deletion CaSSAndRA/src/components/mapping/chooseperimeter.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,8 @@ def update_dropdown_chooseperimeter(boknp_nclicks: int,
)
def export_perimeter(bep_nclicks: int
) -> dict:
return dict(content=mapping_maps.export_geojson(), filename=f"{mapping_maps.map_old_name}.json")
context = ctx.triggered_id
if context == ids.BUTTONEXPORTPERIMETER and bep_nclicks != None:
return dict(content=mapping_maps.export_geojson(), filename=f"{mapping_maps.map_old_name}.json")
else:
return None
10 changes: 10 additions & 0 deletions CaSSAndRA/src/components/state/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,17 @@ def update(n_intervals: int) -> dbc.Row:
robot.status == "docking"
or robot.status == "mow"
or robot.status == "transit"
or robot.status == "resume"
or robot.status == "charging"
or robot.status == "map upload"
or robot.status == "move"
or robot.status == "stop"
or robot.status == "shutdown"
or robot.status == "reboot"
or robot.status == "gps reboot"
or robot.status == "skip point"
or robot.status == "skip point"
or "skip to" in robot.status
):
colorstate = "success"
inversestate = True
Expand Down

0 comments on commit f5cf53f

Please sign in to comment.