Logga in eller skapa ett konto för att testa API:et live med dina egna enheter och nycklar.

Returnerar alla enheter på vald hubb inklusive deras kanals och aktuella tillstånd.

[
  {
    "name": "Vardagsrum lampa",
    "typeId": 1,
    "brand": "Nexa",
    "addr": 12345,
    "endpoints": [
      { "nr": 1, "name": "Kanal 1", "type": "Switch", "typeId": 5, "unit": "", "state": "on", "lastUpdated": "2026-03-07T10:00:00Z" }
    ]
  }
]

Returnerar en enskild enhet med alla dess kanals och aktuella tillstånd.

{
  "name": "Vardagsrum lampa",
  "typeId": 1,
  "brand": "Nexa",
  "addr": 12345,
  "endpoints": [
    { "nr": 1, "name": "Kanal 1", "type": "Switch", "typeId": 5, "unit": "", "state": "on", "lastUpdated": "2026-03-07T10:00:00Z" },
    { "nr": 2, "name": "Kanal 2", "type": "Switch", "typeId": 5, "unit": "", "state": "off", "lastUpdated": "2026-03-07T09:30:00Z" }
  ]
}

Skickar ett kommando till hubben för att ändra kanal-tillståndet. Använd ?set=-parametern med värden som on, off, up, down, stop.

{
  "mac": "AA:BB:CC:DD:EE:FF",
  "typeId": 1,
  "addr": 12345,
  "endpointNr": 1,
  "command": "on",
  "state": null,
  "sent": true
}

Alla datatyper för kanaler (id, namn, enhet). Varje kanal i svaren ovan har ett typeId som pekar hit, och ett unit som är kanalens gällande enhet (egen enhet på virtuella enheter, annars datatypens).

[
  { "id": 1, "name": "Temperature", "unit": "°C" },
  { "id": 2, "name": "Humidity", "unit": "%" },
  { "id": 5, "name": "Switch", "unit": "" }
]

Öppna en WebSocket mot /api/ws med din API-nyckel som Bearer-token i handskakningen (eller ?access_token= om klienten inte kan sätta headers). Kanalen följer alla hubbar du äger: du får ett hello med hubbar och datatyper, därefter endpoint när en kanal ändras (state är typat: bool för strömbrytare, text för jalusi, tal annars; rawState är det råa värdet) och hub när en hubb kopplar upp eller tappar kontakten. Alla tider är UTC.

wss://qtrl.me/api/ws            Authorization: Bearer {token}
wss://qtrl.me/api/ws?access_token={token}

← { "cmd": "hello", "server": "MasterPortal", "time": "2026-03-07T10:00:00Z",
        "hubs": [ { "hubId": 12, "mac": "A1B2C3D4E5F6", "name": "Hemma", "online": true } ],
        "dataTypes": [ { "id": 1, "name": "Temperature", "unit": "°C" }, ... ] }
← { "cmd": "endpoint", "hubId": 12, "mac": "A1B2C3D4E5F6", "brandId": 1, "addr": 12345, "nr": 1,
        "typeId": 5, "state": true, "rawState": "on", "deviceId": 991, "endpointId": 4411,
        "lastUpdated": "2026-03-07T10:00:05Z" }
← { "cmd": "hub", "hubId": 12, "mac": "A1B2C3D4E5F6", "name": "Hemma", "online": false }
→ { "cmd": "ping" }      ← { "cmd": "pong", "time": "..." }
→ { "cmd": "refresh" }   ← hello