PlatSim_Genova/TestEnvironment/env/brainbox_interface.py
2026-01-30 16:38:33 +01:00

60 lines
2.2 KiB
Python

# (c) Copyright Leonardo S.p.A. and Leonardo MW Ltd. All rights reserved.
# Any right of industrial and intellectual property on this document,
# and of technical Know-how herein contained, belongs to
# Leonardo S.p.a. and Leonardo MW Ltd.and/or third parties.
# According to the law, it is forbidden to disclose, reproduce or however
# use this document and any data herein contained for any use without
# previous written authorization by Leonardo S.p.a. and Leonardo MW Ltd.
import socket
from typing import Any, AnyStr, List, Tuple
class BrainboxInterface:
def __init__(self, address, port, _timeout):
self.address = address
self.port = port
self.__client_socket = None
self.timeout = _timeout
def __connect(self) -> None:
if self.__client_socket is not None:
return
self.__client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__client_socket.connect((self.address, self.port))
def __disconnect(self) -> None:
if self.__client_socket is not None:
self.__client_socket.close()
self.__client_socket = None
def send_data(self, message: str) -> (bool, AnyStr):
try:
if self.__client_socket is None:
self.__connect()
self.__client_socket.sendall(message.encode())
except Exception as e:
return False, None, f'BrainboxInterface EXCEPTION: {e}'
self.__client_socket.settimeout(self.timeout)
data_raw = self.__client_socket.recv(1024)
data = data_raw.decode()
error = None
if data[0] == '>':
return True, data, error
elif data[0] == '?':
error = f"BrainboxInterface response {data}: Invalid Command"
return False, data, error
elif data[0] == '!':
error = f"BrainboxInterface response {data}: Ignored Command"
return False, data, error
error = f"BrainboxInterface response {data}: Unknown Command"
return False, data, error
if __name__ == "__main__":
brainbox_interface = BrainboxInterface('192.168.127.254', 9500, 1)
#Query only for relay #01
print(brainbox_interface.send_data('@01\r\n'))