import hashlib import hmac import json import os import time import uuid import requests INTEGRATION_BASE_URL = os.getenv("INTEGRATION_BASE_URL", "http://localhost:8800") AGX_HMAC_SECRET = os.getenv("AGX_HMAC_SECRET", "") TRACE_ID = os.getenv("AGX_TRACE_ID", "trace-demo-001") def sign(body: dict): if not AGX_HMAC_SECRET: return {} ts = str(int(time.time() * 1000)) nonce = str(uuid.uuid4()) body_json = json.dumps(body, separators=(",", ":"), sort_keys=True) payload = f"{ts}.{nonce}.{body_json}" sig = hmac.new(AGX_HMAC_SECRET.encode(), payload.encode(), hashlib.sha256).hexdigest() return { "X-AGX-SIGNATURE": sig, "X-AGX-TIMESTAMP": ts, "X-AGX-NONCE": nonce, "Content-Type": "application/json" } def main(): payload = { "assetRef": {"source": "demo", "deviceId": "demo-device-1"}, "metric": "soil_moisture", "value": 21.7, "ts": int(time.time() * 1000), "schema_version": "1.0" } headers = sign(payload) headers["X-AGX-TRACE-ID"] = TRACE_ID r = requests.post(f"{INTEGRATION_BASE_URL}/write/observation", data=json.dumps(payload), headers=headers, timeout=20) print(r.status_code, r.text) if __name__ == "__main__": main()