fix(mhz19): gestion d'erreurs JSON pour le capteur CO2
Le script get_data.py retourne maintenant toujours du JSON, meme en cas d'erreur (port serie, absence de donnees). Cote web, les erreurs sont affichees proprement dans la carte capteur. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,47 +12,42 @@ import time
|
|||||||
parameter = sys.argv[1:]
|
parameter = sys.argv[1:]
|
||||||
port = '/dev/' + parameter[0]
|
port = '/dev/' + parameter[0]
|
||||||
|
|
||||||
ser = serial.Serial(
|
|
||||||
|
def read_co2():
|
||||||
|
try:
|
||||||
|
ser = serial.Serial(
|
||||||
port=port,
|
port=port,
|
||||||
baudrate=9600,
|
baudrate=9600,
|
||||||
parity=serial.PARITY_NONE,
|
parity=serial.PARITY_NONE,
|
||||||
stopbits=serial.STOPBITS_ONE,
|
stopbits=serial.STOPBITS_ONE,
|
||||||
bytesize=serial.EIGHTBITS,
|
bytesize=serial.EIGHTBITS,
|
||||||
timeout=1
|
timeout=1
|
||||||
)
|
)
|
||||||
|
except serial.SerialException as e:
|
||||||
|
print(json.dumps({"error": f"Serial port error: {e}"}))
|
||||||
|
return
|
||||||
|
|
||||||
READ_CO2_COMMAND = b'\xFF\x01\x86\x00\x00\x00\x00\x00\x79'
|
READ_CO2_COMMAND = b'\xFF\x01\x86\x00\x00\x00\x00\x00\x79'
|
||||||
|
|
||||||
|
try:
|
||||||
def read_co2():
|
|
||||||
ser.write(READ_CO2_COMMAND)
|
ser.write(READ_CO2_COMMAND)
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
response = ser.read(9)
|
response = ser.read(9)
|
||||||
|
|
||||||
if len(response) < 9:
|
if len(response) < 9:
|
||||||
print("Error: No data or incomplete data received.")
|
print(json.dumps({"error": "No data or incomplete data received from sensor"}))
|
||||||
return None
|
return
|
||||||
|
|
||||||
if response[0] == 0xFF:
|
if response[0] == 0xFF:
|
||||||
co2_concentration = response[2] * 256 + response[3]
|
co2_concentration = response[2] * 256 + response[3]
|
||||||
return co2_concentration
|
print(json.dumps({"CO2": co2_concentration}))
|
||||||
else:
|
else:
|
||||||
print("Error reading data from sensor.")
|
print(json.dumps({"error": "Invalid response from sensor"}))
|
||||||
return None
|
except Exception as e:
|
||||||
|
print(json.dumps({"error": str(e)}))
|
||||||
|
|
||||||
def main():
|
|
||||||
try:
|
|
||||||
co2 = read_co2()
|
|
||||||
if co2 is not None:
|
|
||||||
data = {"CO2": co2}
|
|
||||||
json_data = json.dumps(data)
|
|
||||||
print(json_data)
|
|
||||||
else:
|
|
||||||
print("Failed to get CO2 data.")
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
print("Program terminated.")
|
|
||||||
finally:
|
finally:
|
||||||
ser.close()
|
ser.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
read_co2()
|
||||||
|
|||||||
@@ -299,7 +299,15 @@ function getMHZ19_values(){
|
|||||||
tableBody.innerHTML = "";
|
tableBody.innerHTML = "";
|
||||||
$("#loading_mhz19").hide();
|
$("#loading_mhz19").hide();
|
||||||
|
|
||||||
if (response.CO2 !== undefined) {
|
if (response.error) {
|
||||||
|
$("#data-table-body_mhz19").append(`
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="text-danger">
|
||||||
|
⚠ ${response.error}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`);
|
||||||
|
} else if (response.CO2 !== undefined) {
|
||||||
$("#data-table-body_mhz19").append(`
|
$("#data-table-body_mhz19").append(`
|
||||||
<tr>
|
<tr>
|
||||||
<td>CO2</td>
|
<td>CO2</td>
|
||||||
@@ -311,6 +319,14 @@ function getMHZ19_values(){
|
|||||||
error: function(xhr, status, error) {
|
error: function(xhr, status, error) {
|
||||||
console.error('AJAX request failed:', status, error);
|
console.error('AJAX request failed:', status, error);
|
||||||
$("#loading_mhz19").hide();
|
$("#loading_mhz19").hide();
|
||||||
|
const tableBody = document.getElementById("data-table-body_mhz19");
|
||||||
|
tableBody.innerHTML = `
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="text-danger">
|
||||||
|
⚠ Erreur de communication avec le capteur
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user