From b411d37d01ed6774522f727638295e98c73872ef Mon Sep 17 00:00:00 2001 From: PaulVua Date: Mon, 13 Jan 2025 16:02:37 +0100 Subject: [PATCH] update --- SARA/SSL/ISRGRootX1.txt | 35 ++++++++++++++ SARA/SSL/isrgrootx1.der | Bin 0 -> 1391 bytes SARA/SSL/sara_add_certif.py | 83 +++++++++++++++++++++++++++++++++ SARA/SSL/sara_add_certif_v2.py | 75 +++++++++++++++++++++++++++++ SARA/SSL/sara_read_certif.py | 74 +++++++++++++++++++++++++++++ config.json.dist | 2 + 6 files changed, 269 insertions(+) create mode 100644 SARA/SSL/ISRGRootX1.txt create mode 100644 SARA/SSL/isrgrootx1.der create mode 100644 SARA/SSL/sara_add_certif.py create mode 100644 SARA/SSL/sara_add_certif_v2.py create mode 100644 SARA/SSL/sara_read_certif.py diff --git a/SARA/SSL/ISRGRootX1.txt b/SARA/SSL/ISRGRootX1.txt new file mode 100644 index 0000000..3fe9c0f --- /dev/null +++ b/SARA/SSL/ISRGRootX1.txt @@ -0,0 +1,35 @@ +00:ad:e8:24:73:f4:14:37:f3:9b:9e:2b:57:28:1c: +87:be:dc:b7:df:38:90:8c:6e:3c:e6:57:a0:78:f7: +75:c2:a2:fe:f5:6a:6e:f6:00:4f:28:db:de:68:86: +6c:44:93:b6:b1:63:fd:14:12:6b:bf:1f:d2:ea:31: +9b:21:7e:d1:33:3c:ba:48:f5:dd:79:df:b3:b8:ff: +12:f1:21:9a:4b:c1:8a:86:71:69:4a:66:66:6c:8f: +7e:3c:70:bf:ad:29:22:06:f3:e4:c0:e6:80:ae:e2: +4b:8f:b7:99:7e:94:03:9f:d3:47:97:7c:99:48:23: +53:e8:38:ae:4f:0a:6f:83:2e:d1:49:57:8c:80:74: +b6:da:2f:d0:38:8d:7b:03:70:21:1b:75:f2:30:3c: +fa:8f:ae:dd:da:63:ab:eb:16:4f:c2:8e:11:4b:7e: +cf:0b:e8:ff:b5:77:2e:f4:b2:7b:4a:e0:4c:12:25: +0c:70:8d:03:29:a0:e1:53:24:ec:13:d9:ee:19:bf: +10:b3:4a:8c:3f:89:a3:61:51:de:ac:87:07:94:f4: +63:71:ec:2e:e2:6f:5b:98:81:e1:89:5c:34:79:6c: +76:ef:3b:90:62:79:e6:db:a4:9a:2f:26:c5:d0:10: +e1:0e:de:d9:10:8e:16:fb:b7:f7:a8:f7:c7:e5:02: +07:98:8f:36:08:95:e7:e2:37:96:0d:36:75:9e:fb: +0e:72:b1:1d:9b:bc:03:f9:49:05:d8:81:dd:05:b4: +2a:d6:41:e9:ac:01:76:95:0a:0f:d8:df:d5:bd:12: +1f:35:2f:28:17:6c:d2:98:c1:a8:09:64:77:6e:47: +37:ba:ce:ac:59:5e:68:9d:7f:72:d6:89:c5:06:41: +29:3e:59:3e:dd:26:f5:24:c9:11:a7:5a:a3:4c:40: +1f:46:a1:99:b5:a7:3a:51:6e:86:3b:9e:7d:72:a7: +12:05:78:59:ed:3e:51:78:15:0b:03:8f:8d:d0:2f: +05:b2:3e:7b:4a:1c:4b:73:05:12:fc:c6:ea:e0:50: +13:7c:43:93:74:b3:ca:74:e7:8e:1f:01:08:d0:30: +d4:5b:71:36:b4:07:ba:c1:30:30:5c:48:b7:82:3b: +98:a6:7d:60:8a:a2:a3:29:82:cc:ba:bd:83:04:1b: +a2:83:03:41:a1:d6:05:f1:1b:c2:b6:f0:a8:7c:86: +3b:46:a8:48:2a:88:dc:76:9a:76:bf:1f:6a:a5:3d: +19:8f:eb:38:f3:64:de:c8:2b:0d:0a:28:ff:f7:db: +e2:15:42:d4:22:d0:27:5d:e1:79:fe:18:e7:70:88: +ad:4e:e6:d9:8b:3a:c6:dd:27:51:6e:ff:bc:64:f5: +33:43:4f \ No newline at end of file diff --git a/SARA/SSL/isrgrootx1.der b/SARA/SSL/isrgrootx1.der new file mode 100644 index 0000000000000000000000000000000000000000..9d2132e7f1e352fabac7eafb231488b5da91ffb2 GIT binary patch literal 1391 zcmXqLV$C*aVh&!w%*4pVB*@StaDKxjhsTjF$q#lXH+3@@@Un4gwRyCC=VfH%W@Rw& zH{>?pWMd9xVH0Kw4K~y?PzQ0igcUsVN>YpRQcDzqQMi96N{2F6x@sQ zOA8D|4TM2TnT2^ggM-`^g7WiA6e0`_)UeSUJ_S;M+V-u>HW)=goaf7yL{%}fvF;1?F_{JHX*^)7mb z_cWAjyQP1@qPLp4KvBB%lYz~z{&jb6C9i%h=6|S9(7WzD_ly5q%k{o&s`h%|Bc#ex z(95j3;9;=J8{wPpB=-w!_Uf_kT$~tqZ%sS8l;RAn=gy-c5l%vESRjulRoaDHHpQelw1#&mWmj<25Ut_nWV1qwMTG%s)L@ zZ#3Rz-J*5P@#PxEvZ-ABH|}5EDDklY(M=kbokat@+bL(=ez`Qo=d9_8$g;*;h-`WLMh;lRc_g>Iv-DFqo zCF5PpD)i^rs|NwXHO`YuHlHea-Y3t;=GdnK4#`;nE(6$dNYTB&bR(NQ2+$oz?wqHJLsjX!HYm3h*_fBZ@a%uek ze*2NA(-ox)>ah}I#svAgPldH?sMd^L9VXJTe#U|j5E;9$T9Os}&1 zjEw(TSb({M&43@o7Y6ZJ4VZzHfhFz=l^iUlGsD^9O_ z?o;@C)1`#9mMgeli7SS+ehlD?e0}ag-X~KPhVT7{&D4o6YKug*3J5*#Pa(8&H7gpwUsuC^Ywq~GKr43@rUtb$j%*V zXSzC!JAHIpY?|)Bn-;WsJ~s2)HigcR z-KW{sqcnToqipMNtEK|qJDkTmPjj*R=DdjQJNf?H>f^h&YWulf^SYpR=4sI>j;y6q zAB!&hzU1vmo%p4{|F6+t(%W~vdiUeP>Iq_(+2h=TYs}f5dM+QCHs|Whty&MJN;P<_ z^RZ+cWl3o${YKsGG(t*4WP8`@Gk9!gJ;MzXRq} z=D1zmBD#56Ufpb-X;wRebnUN2Km5&csO6u^ip8C`)?_`D(Av1dIWhXO{2lAwvQN4% zdQ0z%8|T;t|E@mm82|syq6>)@52x)|6WeWmz4WT_ftiBq<~klMDs9=v 0: + data = serial_connection.read(serial_connection.in_waiting) + response.extend(data) + end_time = time.time() + end_of_response_timeout # Reset timeout on new data + elif time.time() > end_time: + break + time.sleep(0.1) # Short sleep to prevent busy waiting + + return response.decode('utf-8') + +try: + certificate='00:ad:e8:24:73:f4:14:37:f3:9b:9e:2b:57:28:1c:87:be:dc:b7:df:38:90:8c:6e:3c:e6:57:a0:78:f7:75:c2:a2:fe:f5:6a:6e:f6:00:4f:28:db:de:68:86:6c:44:93:b6:b1:63:fd:14:12:6b:bf:1f:d2:ea:31:9b:21:7e:d1:33:3c:ba:48:f5:dd:79:df:b3:b8:ff:12:f1:21:9a:4b:c1:8a:86:71:69:4a:66:66:6c:8f:7e:3c:70:bf:ad:29:22:06:f3:e4:c0:e6:80:ae:e2:4b:8f:b7:99:7e:94:03:9f:d3:47:97:7c:99:48:23:53:e8:38:ae:4f:0a:6f:83:2e:d1:49:57:8c:80:74:b6:da:2f:d0:38:8d:7b:03:70:21:1b:75:f2:30:3c:fa:8f:ae:dd:da:63:ab:eb:16:4f:c2:8e:11:4b:7e:cf:0b:e8:ff:b5:77:2e:f4:b2:7b:4a:e0:4c:12:25:0c:70:8d:03:29:a0:e1:53:24:ec:13:d9:ee:19:bf:10:b3:4a:8c:3f:89:a3:61:51:de:ac:87:07:94:f4:63:71:ec:2e:e2:6f:5b:98:81:e1:89:5c:34:79:6c:76:ef:3b:90:62:79:e6:db:a4:9a:2f:26:c5:d0:10:e1:0e:de:d9:10:8e:16:fb:b7:f7:a8:f7:c7:e5:02:07:98:8f:36:08:95:e7:e2:37:96:0d:36:75:9e:fb:0e:72:b1:1d:9b:bc:03:f9:49:05:d8:81:dd:05:b4:2a:d6:41:e9:ac:01:76:95:0a:0f:d8:df:d5:bd:12:1f:35:2f:28:17:6c:d2:98:c1:a8:09:64:77:6e:47:37:ba:ce:ac:59:5e:68:9d:7f:72:d6:89:c5:06:41:29:3e:59:3e:dd:26:f5:24:c9:11:a7:5a:a3:4c:40:1f:46:a1:99:b5:a7:3a:51:6e:86:3b:9e:7d:72:a7:12:05:78:59:ed:3e:51:78:15:0b:03:8f:8d:d0:2f:05:b2:3e:7b:4a:1c:4b:73:05:12:fc:c6:ea:e0:50:13:7c:43:93:74:b3:ca:74:e7:8e:1f:01:08:d0:30:d4:5b:71:36:b4:07:ba:c1:30:30:5c:48:b7:82:3b:98:a6:7d:60:8a:a2:a3:29:82:cc:ba:bd:83:04:1b:a2:83:03:41:a1:d6:05:f1:1b:c2:b6:f0:a8:7c:86:3b:46:a8:48:2a:88:dc:76:9a:76:bf:1f:6a:a5:3d:19:8f:eb:38:f3:64:de:c8:2b:0d:0a:28:ff:f7:db:e2:15:42:d4:22:d0:27:5d:e1:79:fe:18:e7:70:88:ad:4e:e6:d9:8b:3a:c6:dd:27:51:6e:ff:bc:64:f5:33:43:4f' + size_of_string = len(certificate) + + command = f'AT+USECMNG=0,0,"myCertificate",{size_of_string}\r' + ser.write((command + '\r').encode('utf-8')) + response_SARA_1 = read_complete_response(ser) + print("Write certificate") + print(response_SARA_1) + + time.sleep(1) + + ser.write(certificate.encode()) + response_SARA_2 = read_complete_response(ser) + print("Write to memory:") + print(response_SARA_2) + +except serial.SerialException as e: + print(f"Error: {e}") + +finally: + if ser.is_open: + ser.close() + #print("Serial closed") + diff --git a/SARA/SSL/sara_add_certif_v2.py b/SARA/SSL/sara_add_certif_v2.py new file mode 100644 index 0000000..d0cde5b --- /dev/null +++ b/SARA/SSL/sara_add_certif_v2.py @@ -0,0 +1,75 @@ +''' +Script to add the SSL certificate +ex: +python3 /var/www/nebuleair_pro_4g/SARA/SSL/sara_add_certif_v2.py ttyAMA2 2 + +''' +import serial +import time +import sys +import json +import os + +parameter = sys.argv[1:] # Exclude the script name +port = '/dev/' + parameter[0] # e.g., ttyAMA2 +timeout = float(parameter[1]) # e.g., 2 seconds + +def load_config(config_file): + try: + with open(config_file, 'r') as file: + config_data = json.load(file) + return config_data + except Exception as e: + print(f"Error loading config file: {e}") + return {} + +# Define the config file path +config_file = '/var/www/nebuleair_pro_4g/config.json' +config = load_config(config_file) +baudrate = config.get('SaraR4_baudrate', 115200) + +def read_complete_response(serial_connection, timeout=2, end_of_response_timeout=2): + response = bytearray() + serial_connection.timeout = timeout + end_time = time.time() + end_of_response_timeout + + while True: + if serial_connection.in_waiting > 0: + data = serial_connection.read(serial_connection.in_waiting) + response.extend(data) + end_time = time.time() + end_of_response_timeout # Reset timeout on new data + elif time.time() > end_time: + break + time.sleep(0.1) + + return response.decode('utf-8', errors='replace') + +try: + with open("/var/www/nebuleair_pro_4g/SARA/SSL/isrgrootx1.der", "rb") as cert_file: + certificate = cert_file.read() + + size_of_string = len(certificate) + + ser = serial.Serial(port=port, baudrate=baudrate, timeout=timeout) + command = f'AT+USECMNG=0,0,"myCertificate2",{size_of_string}\r' + ser.write((command + '\r').encode('utf-8')) + response_SARA_1 = read_complete_response(ser) + print("Write certificate metadata") + print(response_SARA_1) + + time.sleep(1) + + ser.write(certificate) + response_SARA_2 = read_complete_response(ser) + print("Write certificate data") + print(response_SARA_2) + +except serial.SerialException as e: + print(f"Serial Error: {e}") +except FileNotFoundError as e: + print(f"File Error: {e}") +except Exception as e: + print(f"Unexpected Error: {e}") +finally: + if 'ser' in locals() and ser.is_open: + ser.close() diff --git a/SARA/SSL/sara_read_certif.py b/SARA/SSL/sara_read_certif.py new file mode 100644 index 0000000..d87c38e --- /dev/null +++ b/SARA/SSL/sara_read_certif.py @@ -0,0 +1,74 @@ +''' +Script to add the SSL certificate +ex: +python3 /var/www/nebuleair_pro_4g/SARA/SSL/sara_read_certif.py ttyAMA2 2 + +''' + +import serial +import time +import sys +import json + +parameter = sys.argv[1:] # Exclude the script name +#print("Parameters received:") +port='/dev/'+parameter[0] # ex: ttyAMA2 +timeout = float(parameter[1]) # ex:2 + +#get baudrate +def load_config(config_file): + try: + with open(config_file, 'r') as file: + config_data = json.load(file) + return config_data + except Exception as e: + print(f"Error loading config file: {e}") + return {} + +# Define the config file path +config_file = '/var/www/nebuleair_pro_4g/config.json' +# Load the configuration data +config = load_config(config_file) +# Access the shared variables +baudrate = config.get('SaraR4_baudrate', 115200) + +ser = serial.Serial( + port=port, #USB0 or ttyS0 + baudrate=baudrate, #115200 ou 9600 + parity=serial.PARITY_NONE, #PARITY_NONE, PARITY_EVEN or PARITY_ODD + stopbits=serial.STOPBITS_ONE, + bytesize=serial.EIGHTBITS, + timeout = timeout +) +def read_complete_response(serial_connection, timeout=2, end_of_response_timeout=2): + response = bytearray() + serial_connection.timeout = timeout + end_time = time.time() + end_of_response_timeout + + while True: + if serial_connection.in_waiting > 0: + data = serial_connection.read(serial_connection.in_waiting) + response.extend(data) + end_time = time.time() + end_of_response_timeout # Reset timeout on new data + elif time.time() > end_time: + break + time.sleep(0.1) # Short sleep to prevent busy waiting + + return response.decode('utf-8') + +ser.write(b'AT+USECMNG=3') + +try: + response2 = read_complete_response(ser) + print("Response:") + print(response2) + print("<----") + +except serial.SerialException as e: + print(f"Error: {e}") + +finally: + if ser.is_open: + ser.close() + #print("Serial closed") + diff --git a/config.json.dist b/config.json.dist index f90683f..656c5d7 100755 --- a/config.json.dist +++ b/config.json.dist @@ -16,6 +16,8 @@ "SARA_R4_neworkID": 0, "WIFI_status": "connected", "MQTT_GUI": false, + "send_aircarto": true, + "send_uSpot": true, "envea_sondes": [ { "connected": false,