1
0
mirror of https://github.com/Rhinemann/IoT-Systems.git synced 2026-03-14 20:50:39 +02:00

Compare commits

..

No commits in common. "1eddfd966b827b68d2032f315997206c8bee97fc" and "17738d07fefa05adf076772c096b39b9e381c9f1" have entirely different histories.

3 changed files with 18 additions and 41 deletions

View File

@ -75,7 +75,6 @@ class Datasource:
processed_agent_data.latitude, processed_agent_data.latitude,
processed_agent_data.longitude, processed_agent_data.longitude,
processed_agent_data.road_state, processed_agent_data.road_state,
processed_agent_data.user_id
) )
for processed_agent_data in processed_agent_data_list for processed_agent_data in processed_agent_data_list
] ]

View File

@ -5,14 +5,6 @@ from kivy.clock import Clock
from lineMapLayer import LineMapLayer from lineMapLayer import LineMapLayer
from datasource import Datasource from datasource import Datasource
line_layer_colors = [
[1, 0, 0, 1],
[1, 0.5, 0, 1],
[0, 1, 0, 1],
[0, 1, 1, 1],
[0, 0, 1, 1],
[1, 0, 1, 1],
]
class MapViewApp(App): class MapViewApp(App):
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -20,8 +12,8 @@ class MapViewApp(App):
self.mapview = None self.mapview = None
self.datasource = Datasource(user_id=1) self.datasource = Datasource(user_id=1)
self.line_layers = dict() self.line_layer = None
self.car_markers = dict() self.car_marker = None
# додати необхідні змінні # додати необхідні змінні
self.bump_markers = [] self.bump_markers = []
@ -31,8 +23,7 @@ class MapViewApp(App):
""" """
Встановлює необхідні маркери, викликає функцію для оновлення мапи Встановлює необхідні маркери, викликає функцію для оновлення мапи
""" """
self.update() Clock.schedule_once(lambda dt: self.set_bump_marker((50.4501, 30.5234)), 0)
Clock.schedule_interval(self.update, 5)
def update(self, *args): def update(self, *args):
""" """
@ -45,17 +36,13 @@ class MapViewApp(App):
for point in new_points: for point in new_points:
lat, lon, road_state, user_id = point lat, lon, road_state = point
# Оновлює лінію маршрута # Оновлює лінію маршрута
if user_id not in self.line_layers: self.line_layer.add_point((lat, lon))
self.line_layers[user_id] = LineMapLayer(color = line_layer_colors[user_id % len(line_layer_colors)])
self.mapview.add_layer(self.line_layers[user_id])
self.line_layers[user_id].add_point((lat, lon))
# Оновлює маркер маниши # Оновлює маркер маниши
self.update_car_marker(lat, lon, user_id) self.update_car_marker((lat, lon))
# Перевіряємо стан дороги # Перевіряємо стан дороги
self.check_road_quality(point) self.check_road_quality(point)
@ -68,24 +55,26 @@ class MapViewApp(App):
if len(point) < 3: if len(point) < 3:
return return
lat, lon, road_state, user_id = point lat, lon, road_state = point
if road_state == "pothole": if road_state == "pothole":
self.set_pothole_marker((lat, lon)) self.set_pothole_marker((lat, lon))
elif road_state == "bump": elif road_state == "bump":
self.set_bump_marker((lat, lon)) self.set_bump_marker((lat, lon))
def update_car_marker(self, lat, lon, user_id): def update_car_marker(self, point):
""" """
Оновлює відображення маркера машини на мапі Оновлює відображення маркера машини на мапі
:param point: GPS координати :param point: GPS координати
""" """
if user_id not in self.car_markers: lat, lon = point[0], point[1]
self.car_markers[user_id] = MapMarker(lat=lat, lon=lon, source='./images/car.png')
self.mapview.add_marker(self.car_markers[user_id]) if not hasattr(self, 'car_marker'):
self.car_marker = MapMarker(lat=lat, lon=lon, source='./images/car')
self.mapview.add_marker(self.car_marker)
else: else:
self.car_markers[user_id].lat = lat self.car_marker.lat = lat
self.car_markers[user_id].lon = lon self.car_marker.lon = lon
self.mapview.center_on(lat, lon) self.mapview.center_on(lat, lon)
@ -139,6 +128,9 @@ class MapViewApp(App):
lon=30.5234 lon=30.5234
) )
self.line_layer = LineMapLayer()
self.mapview.add_layer(self.line_layer)
return self.mapview return self.mapview

View File

@ -40,24 +40,10 @@ subscriptions: Dict[int, Set[WebSocket]] = {}
@app.websocket("/ws/{user_id}") @app.websocket("/ws/{user_id}")
async def websocket_endpoint(websocket: WebSocket, user_id: int): async def websocket_endpoint(websocket: WebSocket, user_id: int):
await websocket.accept() await websocket.accept()
if user_id not in subscriptions: if user_id not in subscriptions:
subscriptions[user_id] = set() subscriptions[user_id] = set()
subscriptions[user_id].add(websocket) subscriptions[user_id].add(websocket)
try: try:
# send already available data
r = processed_agent_data.select()
stored_data = SessionLocal().execute(r).fetchall()
jsonable_data = [{c.name: getattr(i, c.name) for c in processed_agent_data.columns} for i in stored_data]
for i in jsonable_data:
i['timestamp'] = i['timestamp'].strftime("%Y-%m-%dT%H:%M:%SZ")
await websocket.send_json(json.dumps(jsonable_data))
# receive forever
while True: while True:
await websocket.receive_text() await websocket.receive_text()
except WebSocketDisconnect: except WebSocketDisconnect: