60 lines
2.2 KiB
Python
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'))
|
|
|