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
| Öğe | Değer |
|---|---|
| Temel adres | Cihazın Bağlantı ayrıntıları kartındaki HTTPS telemetri adresi: platformun 443 numaralı portundaki cihaz sunucusu |
| Oturum açma | Authorization: Bearer <device access token> |
| İçerik türü | application/json; charset=utf-8 |
| Gövde boyutu | En fazla 64 KiB (profilin payload sınırı) |
| Düz HTTP | Kurulumunuz 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öntem | Yol | MQTT karşılığı | Gövde veya sorgu | Yanıt |
|---|---|---|---|---|
| POST | /api/v1/telemetry | v1/telemetry | bir telemetri payload’ı | 200 |
| POST | /api/v1/attributes | v1/attributes | bir istemci öznitelikleri nesnesi | 200 |
| GET | /api/v1/rpc?timeout=20000 | v1/rpc/req/{id} | long poll, en fazla 60 sn | bir komut {"id":n,"method":…,"params":…} |
| POST | /api/v1/rpc/{id} | v1/rpc/res/{id} | komutun yanıtı | 200 |
| POST | /api/v1/rpc | v1/rpc/up/req/{id} | {"method":…,"params":…} | bulutun yanıtı |
| POST | /api/v1/provision | v1/provision/req | bir provisioning isteği, bearer başlığı yok | provisioning yanıtı |
| POST | /api/v1/hello | v1/hello | cihazı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ı
| Kod | Anlamı |
|---|---|
| 200 | Kabul edildi. Yalnızca mesaj güvenli şekilde kuyruğa alındıktan sonra gönderilir. |
| 400 | Geçersiz payload. |
| 401 | Eksik veya bilinmeyen token. |
| 403 | Cihaz 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). |
| 404 | Bilinmeyen yol veya URL’de token seçeneği olmayan bir profilde URL token’ı. |
| 408 | Long poll veri olmadan sona erdi veya bir cihaz isteği 10 saniyede yanıt alamadı. |
| 409 | Bu cihazın başka bir komut poll’u zaten açık. |
| 413 | Gövde çok büyük. |
| 429 | Hı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. |
| 503 | Aşı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.

