Yeni: Yapay zekâ güvenlik duvarı tüm platformu izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Cihaz HTTP API’si

HTTPS üzerinden tüm cihaz endpoint'leri – telemetri, öznitelikler, komut long poll'u ve yanıtları, cihaz istekleri ve provisioning – örnekler ve durum kodlarıyla.

Bir cihaz MQTT bağlantısını sürdüremediğinde HTTPS kullanın: uyanıp veri gönderen ve tekrar uykuya geçen pil ile çalışan cihazlar veya MQTT’yi engelleyen ağlar. HTTP mesajları, MQTT mesajlarıyla birebir aynı şekilde işlenir: aynı payload biçimleri, aynı anahtar kuralları, aynı hız sınırları, aynı aylık mesaj sayısı. Bu sayfa, bir cihazın çağırabileceği tüm endpoint’leri listeler.

Temel bilgiler

ÖğeDeğer
Temel adresCihazın Bağlantı ayrıntıları kartındaki HTTPS telemetri adresi: platformun 443 numaralı portundaki cihaz sunucusu
Oturum açmaAuthorization: Bearer <device access token>
İçerik türüapplication/json; charset=utf-8
Gövde boyutuEn fazla 64 KiB (profilin payload sınırı)
Düz HTTPKurulumunuz sunuyorsa 80 numaralı port çalışır, ancak bu durumda komutlar sınırlıdır (aşağıya bakın). HTTPS kullanın.

Token, URL’de token seçeneğini açan profiller dışında asla URL’ye konmaz (aşağıya bakın). HTTP API’sinde istemci sertifikaları kullanılmaz: X.509 ile oturum açan cihazlar MQTT kullanır. Burada listelenmeyen her yol 404 döndürür.

Endpoint’ler

YöntemYolMQTT karşılığıGövde veya sorguYanıt
POST/api/v1/telemetryv1/telemetrybir telemetri payload’ı200
POST/api/v1/attributesv1/attributesbir istemci öznitelikleri nesnesi200
GET/api/v1/rpc?timeout=20000v1/rpc/req/{id}long poll, en fazla 60 snbir komut {"id":n,"method":…,"params":…}
POST/api/v1/rpc/{id}v1/rpc/res/{id}komutun yanıtı200
POST/api/v1/rpcv1/rpc/up/req/{id}{"method":…,"params":…}bulutun yanıtı
POST/api/v1/provisionv1/provision/reqbir provisioning isteği, bearer başlığı yokprovisioning yanıtı
POST/api/v1/hellov1/hellocihazın kendi tanımılisanslı cihaz yazılımı tarafından kullanılır

HTTP üzerinden kullanılamaz: öznitelikleri okuma (GET /api/v1/attributes), paylaşılan öznitelik değişikliklerini bekleme, claim penceresini açma ve firmware isteme. Bu yollar 404 döndürür. Bunlara ihtiyaç duyan cihazlar MQTT kullanır.

Telemetri, MQTT ile aynı payload biçimlerini kullanır. Bkz. MQTT topic’leri ve payload referansı. POST /api/v1/telemetry üzerindeki JSON olmayan bir gövde, tek bir raw anahtarı olarak saklanır (profilin raw boyutuna kadar, varsayılan 4 KB).

Endpoint ayrıntıları

POST/api/v1/telemetry

Telemetri gönderin. Herhangi bir payload biçimini kullanın: düz bir nesne, ts ve values içeren bir nesne veya her ikisinden oluşan bir dizi. Authorization: Bearer <device access token> gönderin. 200 yanıtı yalnızca mesaj güvenli şekilde kuyruğa alındıktan sonra gelir; gövdesi boştur.

İstek gövdesi application/json

{
    "ts": 1759572000000,
    "values": {
        "temperature": 21.5,
        "humidity": 40
    }
}

Örnek curl

curl -X POST 'https://<your-host>/api/v1/telemetry' \
  -H 'Content-Type: application/json' \
  -d '{"ts":1759572000000,"values":{"temperature":21.5,"humidity":40}}'

Yanıtlar

200OK

Yanıt gövdesi yok.

400Bad Request
{
    "error": "invalid_payload"
}
401Unauthorized

Yanıt gövdesi yok.

413Payload Too Large
{
    "error": "payload_too_large"
}
429Too Many Requests
{
    "error": "rate_limited"
}
503Service Unavailable

Yanıt gövdesi yok.

POST/api/v1/attributes

İstemci özniteliklerini gönderin. Yalnızca gönderdiğiniz anahtarlar değişir.

İstek gövdesi application/json

{
    "current_fw_title": "boiler-fw",
    "current_fw_version": "26.10.2",
    "lan.ip": "192.168.1.1"
}

Örnek curl

curl -X POST 'https://<your-host>/api/v1/attributes' \
  -H 'Content-Type: application/json' \
  -d '{"current_fw_title":"boiler-fw","current_fw_version":"26.10.2","lan.ip":"192.168.1.1"}'

Yanıtlar

200OK

Yanıt gövdesi yok.

400Bad Request
{
    "error": "invalid_payload"
}
401Unauthorized

Yanıt gövdesi yok.

429Too Many Requests
{
    "error": "rate_limited"
}

GET/api/v1/rpc?timeout=20000

Bu cihaz için bir sonraki komutu bekleyin (long poll, en fazla 60 saniye). Aynı anda cihaz başına yalnızca bir poll açık olabilir. TLS olmayan bir bağlantıda, TLS olmadan komuta izin vermeyen bir profil 403 döndürür.

Örnek curl

curl -X GET 'https://<your-host>/api/v1/rpc?timeout=20000'

Yanıtlar

200OK
{
    "id": 42,
    "method": "sys.ping",
    "params": {
        "host": "8.8.8.8",
        "count": 3
    }
}
403Forbidden
{
    "error": "tls_required"
}
408Request Timeout
{
    "error": "timeout"
}
409Conflict
{
    "error": "poll_in_progress"
}

POST/api/v1/rpc/{id}

Bu id’ye sahip komutu yanıtlayın. MQTT v1/rpc/res/{id} üzerindeki gövdenin aynısını kullanın.

İstek gövdesi application/json

{
    "ok": true,
    "result": {
        "sent": 3,
        "received": 3,
        "avg_ms": 18.2
    }
}

Örnek curl

curl -X POST 'https://<your-host>/api/v1/rpc/{id}' \
  -H 'Content-Type: application/json' \
  -d '{"ok":true,"result":{"sent":3,"received":3,"avg_ms":18.2}}'

Yanıtlar

200OK

Yanıt gövdesi yok.

413Payload Too Large
{
    "error": "payload_too_large"
}

POST/api/v1/rpc

Cihazdan buluta method ve params içeren bir istek gönderin. Flow’larınız yanıtlar; yanıt, response gövdesidir. 10 saniye içinde yanıt gelmezse çağrı 408 döndürür. method içermeyen bir gövde 400 döndürür.

İstek gövdesi application/json

{
    "method": "app.request",
    "params": {}
}

Örnek curl

curl -X POST 'https://<your-host>/api/v1/rpc' \
  -H 'Content-Type: application/json' \
  -d '{"method":"app.request","params":{}}'

Yanıtlar

200OK

Yanıt gövdesi yok.

400Bad Request

Yanıt gövdesi yok.

408Request Timeout
{
    "error": "timeout"
}

POST/api/v1/provision

Bir cihazı profilinin provisioning anahtarı ve secret’ı ile kaydedin. Bearer başlığı göndermeyin. Çağrı, provisioning yanıtıyla 200 döndürür; ret durumunda da 200 döner, "status": "FAILURE" ile ve nedeni hermetry.error içinde (örneğin {"status": "FAILURE", "hermetry": {"error": "rate_limited"}}). Bkz. Cihaz ekleme ve claim etme.

İstek gövdesi application/json

{
    "deviceName": "boiler-07",
    "provisionDeviceKey": "pk_8f3b2c1e9d4a7b60",
    "provisionDeviceSecret": "ps_1c9e7f2a4b6d8e03"
}

Örnek curl

curl -X POST 'https://<your-host>/api/v1/provision' \
  -H 'Content-Type: application/json' \
  -d '{"deviceName":"boiler-07","provisionDeviceKey":"pk_8f3b2c1e9d4a7b60","provisionDeviceSecret":"ps_1c9e7f2a4b6d8e03"}'

Yanıtlar

200OK
{
    "status": "SUCCESS",
    "credentialsType": "ACCESS_TOKEN",
    "credentialsValue": "aZ3…"
}
413Payload Too Large
{
    "error": "payload_too_large"
}
503Service Unavailable

Yanıt gövdesi yok.

Örnekler

Sunucu tarafından zaman damgası eklenen tek bir okuma gönderin:

curl -X POST "https://<device host>/api/v1/telemetry" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"temperature": 21.5, "humidity": 40}'

Tamponlanmış okumaları kendi zamanlarıyla gönderin (1970’ten bu yana milisaniye, UTC):

curl -X POST "https://<device host>/api/v1/telemetry" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '[{"ts":1759572000000,"values":{"temperature":21.5}},{"ts":1759572060000,"values":{"temperature":21.7}}]'

Bir komutu bekleyin ve yanıtlayın:

curl -s "https://<device host>/api/v1/rpc?timeout=30000" -H "Authorization: Bearer <ACCESS_TOKEN>"
# → {"id": 42, "method": "sys.ping", "params": {...}}
curl -X POST "https://<device host>/api/v1/rpc/42" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" -H "Content-Type: application/json" \
  -d '{"ok": true, "result": {"sent": 3, "received": 3}}'

Durum kodları

KodAnlamı
200Kabul edildi. Yalnızca mesaj güvenli şekilde kuyruğa alındıktan sonra gönderilir.
400Geçersiz payload.
401Eksik veya bilinmeyen token.
403Cihaz devre dışı, organizasyon askıya alınmış, adres profilin izin verilen ağlarının dışında veya profilin izin vermediği düz HTTP üzerinden komut poll’u (tls_required).
404Bilinmeyen yol veya URL’de token seçeneği olmayan bir profilde URL token’ı.
408Long poll veri olmadan sona erdi veya bir cihaz isteği 10 saniyede yanıt alamadı.
409Bu cihazın başka bir komut poll’u zaten açık.
413Gövde çok büyük.
429Hız sınırı veya adresinizden çok fazla istek ya da başarısız oturum açma. Retry-After içindeki saniye kadar bekleyin.
503Aşırı yük. Retry-After içindeki saniye kadar bekleyin.

HTTP cihazları için çevrimiçi durumu

HTTP cihazları bağlantı tutmaz; bu nedenle Canlı bağlantı kullanan bir profil onları asla çevrimiçi göstermez. HTTP cihazlarına Son mesaj (son mesaj, beklenen aralık çarpı katsayıdan daha yeniyse çevrimiçi) veya Yalnızca son görülme seçeneğine sahip bir profil verin. Bkz. Bağlantı durumu ve etkinlik.

Başlık gönderemeyen cihazlar

Bazı cihazlar Authorization header’ı ayarlayamaz. Bu cihazlar için profilin Transport & auth sekmesinde Token in the URL seçeneğini açın. Cihazlar bundan sonra şunları kullanabilir:

POST /api/v1/{token}/telemetry
POST /api/v1/{token}/attributes

Uyarı

URL içindeki bir token, proxy günlükleri ve tarayıcı geçmişi üzerinden sızabilir. Bu anahtarın açık olduğu bir profil yalnızca HTTP içindir: bu profildeki cihazlar MQTT üzerinden oturum açamaz ve hiçbir zaman komut almaz. Header gönderebilen cihazlara bu anahtarın kapalı olduğu bir profil verin.

Düz HTTP üzerinden komutlar

Hermetry’ye TLS üzerinden ulaşmayan bir long poll, yalnızca profilin Commands allowed without TLS altında listelediği komutları alır. Diğer tüm komutlar bir TLS bağlantısını veya süresinin dolmasını bekler. Liste boşsa düz bir poll isteği 403 tls_required yanıtını verir.

İlgili