From 8b87d95ca5a4e3c1c81e11103b273878a3c54cc0 Mon Sep 17 00:00:00 2001 From: Eric FELIXINE Date: Mon, 11 May 2026 14:56:27 -0400 Subject: [PATCH] fix: OpenRemote REST - gestion version If-Match pour PUT assets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Récupère la version actuelle de l'asset avant PUT - Ajoute la version au payload pour éviter HTTP 409 Conflict - OpenRemote: ✅ les assets sont mis à jour en temps réel - MQTT OK: 3/4 (EMQX, Mosquitto, BunkerM) --- simulator.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/simulator.py b/simulator.py index f1b9d7da..d035cb8c 100644 --- a/simulator.py +++ b/simulator.py @@ -797,13 +797,26 @@ def _or_put(asset_id: str, payload: dict) -> bool: if not token: return False try: + # Récupérer la version actuelle de l'asset + get_url = f"{OR_URL}/api/{OR_REALM}/asset/{asset_id}" + get_req = urllib.request.Request(get_url, headers={"Authorization": f"Bearer {token}"}) + version = 1 + try: + with urllib.request.urlopen(get_req, timeout=5) as resp: + asset_data = json.loads(resp.read().decode()) + version = asset_data.get("version", 1) + except: + pass # Si GET échoue, utiliser version=1 + + # Ajouter la version au payload + payload["version"] = version body = json.dumps(payload).encode() url = f"{OR_URL}/api/{OR_REALM}/asset/{asset_id}" req = urllib.request.Request(url, data=body, headers={ "Authorization": f"Bearer {token}", "Content-Type": "application/json", - "If-Match": str(payload.get("version", 1)), + "If-Match": str(version), }, method="PUT") with http_request_duration.labels(broker="openremote", method="PUT").time():