Add comms simulation and config screen
This commit is contained in:
+69
-7
@@ -1,5 +1,6 @@
|
||||
import time
|
||||
|
||||
from protocol import (
|
||||
MessageType,
|
||||
status_request,
|
||||
set_relay_request,
|
||||
enable_wifi_request,
|
||||
@@ -13,20 +14,65 @@ class PicoSimulator:
|
||||
self.controller = controller
|
||||
self.last_status = None
|
||||
self.primary_link = "rs485"
|
||||
self.rs485_connected = True
|
||||
self.backup_link_available = True
|
||||
self.messages_sent = 0
|
||||
self.messages_received = 0
|
||||
self.last_message_time = None
|
||||
|
||||
def send_message(self, message):
|
||||
"""
|
||||
This simulates the Pico sending a protocol message to the ESP32.
|
||||
self.messages_sent += 1
|
||||
|
||||
Later, this is where RS-485 serial communication will replace
|
||||
the direct Python method call.
|
||||
"""
|
||||
return self.controller.handle_message(message)
|
||||
if not self.rs485_connected:
|
||||
return {
|
||||
"type": "error",
|
||||
"success": False,
|
||||
"error": "RS-485 disconnected"
|
||||
}
|
||||
|
||||
response = self.controller.handle_message(message)
|
||||
self.messages_received += 1
|
||||
self.last_message_time = int(time.time())
|
||||
return response
|
||||
|
||||
def get_status(self):
|
||||
response = self.send_message(status_request())
|
||||
|
||||
if response.get("type") == "error":
|
||||
if self.last_status:
|
||||
self.last_status["network"]["rs485_connected"] = False
|
||||
self.last_status["network"]["communication_lost"] = True
|
||||
self.last_status["network"]["messages_sent"] = self.messages_sent
|
||||
self.last_status["network"]["messages_received"] = self.messages_received
|
||||
self.last_status["network"]["last_message_time"] = self.last_message_time
|
||||
return self.last_status
|
||||
|
||||
return {
|
||||
"timestamp": int(time.time()),
|
||||
"vehicle": {"ignition_on": True},
|
||||
"battery": {},
|
||||
"temps": {},
|
||||
"sensor_health": {},
|
||||
"relays": {},
|
||||
"network": {
|
||||
"rs485_connected": False,
|
||||
"communication_lost": True,
|
||||
"wifi_enabled": False,
|
||||
"wifi_override_active": False,
|
||||
"starlink_enabled": False,
|
||||
"messages_sent": self.messages_sent,
|
||||
"messages_received": self.messages_received,
|
||||
"last_message_time": self.last_message_time
|
||||
},
|
||||
"config": {}
|
||||
}
|
||||
|
||||
self.last_status = response["data"]
|
||||
self.last_status["network"]["rs485_connected"] = self.rs485_connected
|
||||
self.last_status["network"]["communication_lost"] = False
|
||||
self.last_status["network"]["messages_sent"] = self.messages_sent
|
||||
self.last_status["network"]["messages_received"] = self.messages_received
|
||||
self.last_status["network"]["last_message_time"] = self.last_message_time
|
||||
return self.last_status
|
||||
|
||||
def set_relay(self, relay, state):
|
||||
@@ -40,3 +86,19 @@ class PicoSimulator:
|
||||
|
||||
def toggle_sensor_fault(self, sensor):
|
||||
return self.send_message(toggle_sensor_fault_request(sensor))
|
||||
|
||||
def disconnect_rs485(self):
|
||||
self.rs485_connected = False
|
||||
|
||||
def restore_rs485(self):
|
||||
self.rs485_connected = True
|
||||
|
||||
def get_comms(self):
|
||||
return {
|
||||
"primary": self.primary_link,
|
||||
"backup_available": self.backup_link_available,
|
||||
"rs485_connected": self.rs485_connected,
|
||||
"messages_sent": self.messages_sent,
|
||||
"messages_received": self.messages_received,
|
||||
"last_message_time": self.last_message_time
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user