fix: OpenRemote REST - gestion version If-Match pour PUT assets
- 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)
This commit is contained in:
15
simulator.py
15
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():
|
||||
|
||||
Reference in New Issue
Block a user