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:]
|
||||
port = '/dev/' + parameter[0]
|
||||
|
||||
ser = serial.Serial(
|
||||
|
||||
def read_co2():
|
||||
try:
|
||||
ser = serial.Serial(
|
||||
port=port,
|
||||
baudrate=9600,
|
||||
parity=serial.PARITY_NONE,
|
||||
stopbits=serial.STOPBITS_ONE,
|
||||
bytesize=serial.EIGHTBITS,
|
||||
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'
|
||||
|
||||
|
||||
def read_co2():
|
||||
try:
|
||||
ser.write(READ_CO2_COMMAND)
|
||||
time.sleep(2)
|
||||
response = ser.read(9)
|
||||
|
||||
if len(response) < 9:
|
||||
print("Error: No data or incomplete data received.")
|
||||
return None
|
||||
print(json.dumps({"error": "No data or incomplete data received from sensor"}))
|
||||
return
|
||||
|
||||
if response[0] == 0xFF:
|
||||
co2_concentration = response[2] * 256 + response[3]
|
||||
return co2_concentration
|
||||
print(json.dumps({"CO2": co2_concentration}))
|
||||
else:
|
||||
print("Error reading data from sensor.")
|
||||
return None
|
||||
|
||||
|
||||
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.")
|
||||
print(json.dumps({"error": "Invalid response from sensor"}))
|
||||
except Exception as e:
|
||||
print(json.dumps({"error": str(e)}))
|
||||
finally:
|
||||
ser.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
read_co2()
|
||||
|
||||
@@ -299,7 +299,15 @@ function getMHZ19_values(){
|
||||
tableBody.innerHTML = "";
|
||||
$("#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(`
|
||||
<tr>
|
||||
<td>CO2</td>
|
||||
@@ -311,6 +319,14 @@ function getMHZ19_values(){
|
||||
error: function(xhr, status, error) {
|
||||
console.error('AJAX request failed:', status, error);
|
||||
$("#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