Utviklerguide

Finn en enhet i nærheten og styr reléet

En praktisk gjennomgang fra enhetsliste og Bluetooth-søk til pakkegenerering, BLE-overføring og sikker verifisering. Autentisering og tenanttilgang antas å være klare.

Tilbake til API-dokumentasjonen
1

Last inn enhetslisten

Hent først tenantens sensorer. Behold UUID, navn og type. Vis reléstyring bare når enhetstypen er relay. Normaliser UUID-er til små heksadesimale tegn uten skilletegn før sammenligning.

GET https://backend.solvotix.org/api/sensor
Authorization: Bearer <TOKEN>
Tenant: <TENANT_ID>
Accept: application/json

Backendstatus for online eller offline beskriver skykommunikasjon og må aldri avgjøre om telefonen ser enheten via Bluetooth.

2

Søk etter og match den fysiske enheten

Søk kontinuerlig med duplikate annonser mens enhetssiden vises. Bruk én felles skanneeier fordi mobile BLE-biblioteker vanligvis bare har ett globalt søk.

Forventet lokalt navnSVN
Produsent-ID0x79fd
Tidsgrense for nærhet10 s
  1. Be om Bluetooth-tillatelser for søk og tilkobling, og start et søk med lav ventetid.
  2. Godta navnet SVN, men ikke krev det: Android kan utelate det lokale navnet.
  3. Gjenkjenn produsent-ID 0x79fd. Lag den primære UUID-en på åtte byte av ID-en i little-endian fulgt av de første seks nyttelastbytene.
  4. Match normalisert UUID mot backendlisten, lagre native BLE-ID og RSSI, og fjern nærstatus etter 10 sekunder uten annonse.

Stopp søket før tilkobling og start det igjen etter frakobling. To sider må ikke konkurrere om native BLE-søk.

3

Be backend lage en enhetspakke

Når brukeren har bekreftet mål og fysisk handling, ber du om en komplett node-core-pakke for enheten. Både reléer og smartlåser kan levere pakker for direkte overføring. HTTP 200 betyr bare at pakken ble laget.

Eksempel på relépakke

POST https://backend.solvotix.org/api/relay/{relayId}/package
Authorization: Bearer <TOKEN>
Tenant: <TENANT_ID>
Content-Type: application/json

Open

{ "operation": "open" }

Close

{ "operation": "close" }

Pulse

{
  "operation": "pulse",
  "value": 5,
  "unit": "seconds"
}

Consumption

{
  "operation": "consumption",
  "kwh": 1.5
}

Pulse krever positiv verdi og milliseconds, seconds eller minutes. Consumption krever kwh. Dekod enten packageBase64 eller packageHex, krev nøyaktig 212 byte, og aldri endre eller logg pakken.

Pakker for smartlås

For en smartlås velger du pakkeendepunktet som svarer til ønsket handling. Svarpakken bruker samme node-core-format og samme BLE-levering som beskrevet nedenfor.

GET https://backend.solvotix.org/api/smartlocks/{lockId}/packages/pulse-open
GET https://backend.solvotix.org/api/smartlocks/{lockId}/packages/open
GET https://backend.solvotix.org/api/smartlocks/{lockId}/packages/lock

Authorization: Bearer <TOKEN>
Tenant: <TENANT_ID>
Accept: application/json
4

Lever pakken via BLE

Bruk sist observerte native BLE-ID. Vis et blokkerende fremdriftslag, stopp søket, fjern gammel tilkobling, koble til og finn nøyaktig GATT-tjeneste og skrivekarakteristikk.

GATT service12345678-1234-5678-1234-56789abcdef0
Write characteristic12345678-1234-5678-1234-5678efbeadde
Pakkestørrelse212 bytes
  1. Dekod én pakkerepresentasjon og kontroller at den er nøyaktig 212 byte.
  2. Les forhandlet MTU når mulig og beregn en sikker blokkstørrelse.
  3. Skriv blokkene sekvensielt i opprinnelig rekkefølge. Foretrekk skriving uten respons når det støttes.
  4. Koble alltid fra etter vellykkede blokker. Ikke gjenta en fysisk handling automatisk etter at levering har startet.
  5. Start kontinuerlig søk igjen etter en kort pause hvis siden fortsatt er åpen.
chunkSize = max(20, min(215, negotiatedMtu - 3))
fallbackChunkSize = 20

Hold kommunikasjonslaget synlig under pakkegenerering, tilkobling, oppdagelse, alle skrivinger og frakobling. Vis tydelig suksess eller feil.

5

Verifiser og rapporter riktig resultat

Fullførte skrivinger beviser transport, ikke nødvendigvis fysisk utførelse. Bruk enhetsbekreftelse eller observert status når det finnes.

  • Rapporter «Pakken ble overført» når BLE-transporten er fullført.
  • Rapporter fysisk fullføring bare når enheten eller observert status bekrefter den.
  • Logg livssyklus og blokklengder, men aldri token, pakkebyter, legitimasjon eller dekodet innhold.

Ikke send pakken automatisk på nytt ved usikkert resultat. Reléet kan allerede ha reagert, og gjentakelse kan være farlig.