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:
|
if not token:
|
||||||
return False
|
return False
|
||||||
try:
|
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()
|
body = json.dumps(payload).encode()
|
||||||
url = f"{OR_URL}/api/{OR_REALM}/asset/{asset_id}"
|
url = f"{OR_URL}/api/{OR_REALM}/asset/{asset_id}"
|
||||||
req = urllib.request.Request(url, data=body,
|
req = urllib.request.Request(url, data=body,
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Bearer {token}",
|
"Authorization": f"Bearer {token}",
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"If-Match": str(payload.get("version", 1)),
|
"If-Match": str(version),
|
||||||
},
|
},
|
||||||
method="PUT")
|
method="PUT")
|
||||||
with http_request_duration.labels(broker="openremote", method="PUT").time():
|
with http_request_duration.labels(broker="openremote", method="PUT").time():
|
||||||
|
|||||||
Reference in New Issue
Block a user