3 Commits

Author SHA1 Message Date
PaulVua
96524bca20 update 2025-01-14 14:54:48 +01:00
PaulVua
82e2d4a909 Merge remote-tracking branch 'refs/remotes/origin/main' 2025-01-14 14:37:08 +01:00
PaulVua
44e6c6fa50 update 2025-01-14 14:36:20 +01:00
3 changed files with 40 additions and 20 deletions

View File

@@ -4,6 +4,8 @@ ex:
python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+CCID? 2 python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+CCID? 2
ex 2 (turn on blue light): ex 2 (turn on blue light):
python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+UGPIOC=16,2 2 python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+UGPIOC=16,2 2
ex 3 (reconnect network)
python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+COPS=1,2,20801 20
''' '''

View File

@@ -1,5 +1,7 @@
''' '''
Script to connect SARA-R410 to network SARA-R410 Script to connect SARA-R410 to network SARA-R410
python3 /var/www/nebuleair_pro_4g/SARA/sara_connectNetwork.py ttyAMA2 20801 10
AT+COPS=1,2,20801 AT+COPS=1,2,20801
mode->1 pour manual mode->1 pour manual
format->2 pour numeric format->2 pour numeric

View File

@@ -54,7 +54,9 @@ JSON PAYLOAD (Micro-Spot Servers)
{"value_type":"latitude","value":"43.2964"}, {"value_type":"latitude","value":"43.2964"},
{"value_type":"longitude","value":"5.36978"}, {"value_type":"longitude","value":"5.36978"},
{"value_type":"state_npm","value":"State: 00000000"}, {"value_type":"state_npm","value":"State: 00000000"},
{"value_type":"th_npm","value":"28.47 / 37.54"} {"value_type":"th_npm","value":"28.47 / 37.54"},
{"value_type":"CAIRSENS_NO2","value":"54"},
{"value_type":"CAIRSENS_H2S","value":"54"},
] ]
} }
""" """
@@ -72,8 +74,14 @@ from adafruit_bme280 import basic as adafruit_bme280
# Record the start time of the script # Record the start time of the script
start_time = time.time() start_time = time.time()
url="data.nebuleair.fr" url_nebuleair="data.nebuleair.fr"
payload = [None] * 20 payload_csv = [None] * 20
payload_json = {
"nebuleairid": "82D25549434",
"software_version": "ModuleAirV2-V1-042022",
"sensordatavalues": [] # Empty list to start with
}
# Set up GPIO mode (for Blue LED: network status) # Set up GPIO mode (for Blue LED: network status)
GPIO.setwarnings(False) GPIO.setwarnings(False)
@@ -136,6 +144,8 @@ envea_sondes = config.get('envea_sondes', [])
connected_envea_sondes = [sonde for sonde in envea_sondes if sonde.get('connected', False)] connected_envea_sondes = [sonde for sonde in envea_sondes if sonde.get('connected', False)]
selected_networkID = config.get('SARA_R4_neworkID', '') selected_networkID = config.get('SARA_R4_neworkID', '')
#update device id in the payload json
payload_json["nebuleairid"] = device_id
ser_sara = serial.Serial( ser_sara = serial.Serial(
port='/dev/ttyAMA2', port='/dev/ttyAMA2',
@@ -199,20 +209,25 @@ try:
PM25 = int.from_bytes(byte_data[11:13], byteorder='big') / 10 PM25 = int.from_bytes(byte_data[11:13], byteorder='big') / 10
PM10 = int.from_bytes(byte_data[13:15], byteorder='big') / 10 PM10 = int.from_bytes(byte_data[13:15], byteorder='big') / 10
payload[0] = PM1 #Add data to payload CSV
payload[1] = PM25 payload_csv[0] = PM1
payload[2] = PM10 payload_csv[1] = PM25
payload_csv[2] = PM10
#Add data to payload JSON
payload_json["sensordatavalues"].append({"value_type": "NPM_P0", "value": str(PM1)})
payload_json["sensordatavalues"].append({"value_type": "NPM_P1", "value": str(PM10)})
payload_json["sensordatavalues"].append({"value_type": "NPM_P2", "value": str(PM25)})
# Sonde BME280 connected # Sonde BME280 connected
if bme_280_config: if bme_280_config:
#on récupère les infos du BME280 et on les ajoute au payload #on récupère les infos du BME280 et on les ajoute au payload_csv
i2c = busio.I2C(board.SCL, board.SDA) i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76) bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)
bme280.sea_level_pressure = 1013.25 # Update this value for your location bme280.sea_level_pressure = 1013.25 # Update this value for your location
payload[3] = round(bme280.temperature, 2) payload_csv[3] = round(bme280.temperature, 2)
payload[4] = round(bme280.humidity, 2) payload_csv[4] = round(bme280.humidity, 2)
payload[5] = round(bme280.pressure, 2) payload_csv[5] = round(bme280.pressure, 2)
# Sonde Bruit connected # Sonde Bruit connected
if i2C_sound_config: if i2C_sound_config:
@@ -224,10 +239,10 @@ try:
content = file.read().strip() content = file.read().strip()
avg_noise, max_noise, min_noise = map(int, content.split()) avg_noise, max_noise, min_noise = map(int, content.split())
# Append the variables to the payload # Append the variables to the payload_csv
payload[6] = avg_noise payload_csv[6] = avg_noise
payload[7] = max_noise payload_csv[7] = max_noise
payload[8] = min_noise payload_csv[8] = min_noise
except FileNotFoundError: except FileNotFoundError:
print(f"Error: File {file_path} not found.") print(f"Error: File {file_path} not found.")
@@ -245,7 +260,7 @@ try:
if len(data_envea) >= 20: if len(data_envea) >= 20:
byte_20 = data_envea[19] byte_20 = data_envea[19]
byte_20 = byte_20 * coefficient byte_20 = byte_20 * coefficient
payload[10] = byte_20 payload_csv[10] = byte_20
print(f"Data from envea {byte_20}") print(f"Data from envea {byte_20}")
else: else:
print("Données reçues insuffisantes pour extraire le 20ème octet.") print("Données reçues insuffisantes pour extraire le 20ème octet.")
@@ -261,13 +276,13 @@ try:
if match: if match:
signal_quality = match.group(1) signal_quality = match.group(1)
print("Signal Quality:", signal_quality) print("Signal Quality:", signal_quality)
payload[12]=signal_quality payload_csv[12]=signal_quality
time.sleep(1) time.sleep(1)
#Write Data to saraR4 #Write Data to saraR4
#1. Open sensordata.json (with correct data size) #1. Open sensordata.json (with correct data size)
csv_string = ','.join(str(value) if value is not None else '' for value in payload) csv_string = ','.join(str(value) if value is not None else '' for value in payload_csv)
size_of_string = len(csv_string) size_of_string = len(csv_string)
command = f'AT+UDWNFILE="sensordata.json",{size_of_string}\r' command = f'AT+UDWNFILE="sensordata.json",{size_of_string}\r'
ser_sara.write((command + '\r').encode('utf-8')) ser_sara.write((command + '\r').encode('utf-8'))
@@ -322,11 +337,12 @@ try:
# and reset HTTP profile (AT+UHTTP=0) -> ne fonctionne pas.. # and reset HTTP profile (AT+UHTTP=0) -> ne fonctionne pas..
# tester un reset avec CFUN 15 # tester un reset avec CFUN 15
# 1.Reconnexion au réseau (AT+COPS) # 1.Reconnexion au réseau (AT+COPS)
command = f'AT+COPS=1,2,{selected_networkID}\r' command = f'AT+COPS=1,2,"{selected_networkID}"\r'
ser_sara.write((command + '\r').encode('utf-8')) ser_sara.write((command + '\r').encode('utf-8'))
responseReconnect = read_complete_response(ser_sara) responseReconnect = read_complete_response(ser_sara)
print("Response:") print("Response reconnect:")
print(responseReconnect) print(responseReconnect)
print("End response reconnect")
elif "Operation not allowed" in lines[-1]: elif "Operation not allowed" in lines[-1]:
print("Operation not allowed. This may require a different configuration.") print("Operation not allowed. This may require a different configuration.")
@@ -363,7 +379,7 @@ try:
GPIO.output(23, GPIO.LOW) # Éteindre la LED GPIO.output(23, GPIO.LOW) # Éteindre la LED
time.sleep(0.1) # Attendre 100 ms time.sleep(0.1) # Attendre 100 ms
GPIO.output(23, GPIO.LOW) # Turn off the LED GPIO.output(23, GPIO.LOW) # Turn off the LED
command = f'AT+UHTTP=0,1,"{url}"\r' command = f'AT+UHTTP=0,1,"{url_nebuleair}"\r'
ser_sara.write((command + '\r').encode('utf-8')) ser_sara.write((command + '\r').encode('utf-8'))
response_SARA_31 = read_complete_response(ser_sara) response_SARA_31 = read_complete_response(ser_sara)
if need_to_log: if need_to_log: