fix: improve error management when decoding uplink messages

This commit is contained in:
Alexis Fourmaux 2026-05-09 17:47:37 +02:00
parent f77cf3dd75
commit 5c480db410
3 changed files with 50 additions and 26 deletions

View file

@ -8,6 +8,7 @@ from paho.mqtt.enums import CallbackAPIVersion
from paho.mqtt.properties import Properties
from paho.mqtt.reasoncodes import ReasonCode
from exceptions import MessageBrokerError, InfrastructureError
from entities import UplinkEvent
from ports import MessageBroker
@ -36,15 +37,29 @@ class PahoMqttBroker(MessageBroker):
def _on_message(client: mqtt.Client, userdata: None, msg: mqtt.MQTTMessage) -> None:
try:
body = json.loads(msg.payload)
except json.JSONDecodeError as e:
log.error("Payload JSON invalide sur %s : %s", msg.topic, e)
return
try:
dev_eui = body["deviceInfo"]["devEui"]
pulse_count = int(body["object"]["pulse_count"])
except (KeyError, ValueError, TypeError) as e:
log.error("Champs manquants ou invalides : %s | body=%s", e, body)
return
try:
on_uplink(UplinkEvent(dev_eui=dev_eui, pulse_count=pulse_count))
except Exception as e:
log.exception("Erreur parsing message MQTT : %s", e)
except InfrastructureError as e:
log.error("Erreur infrastructure pour %s : %s", dev_eui, e)
_client.on_connect = _on_connect
_client.on_message = _on_message
_client.reconnect_delay_set(min_delay=1, max_delay=30)
_client.connect(self._host, self._port, keepalive=60)
try:
_client.connect(self._host, self._port, keepalive=60)
except OSError as e:
raise MessageBrokerError(f"Impossible de joindre {self._host}:{self._port} : {e}") from e
_client.loop_forever()