Identifikation af Z-Wave enheder

7. januar, 2010 af Henrik Leidecker Jørgensen Skriv en kommentar »

Z-Wave controlleren kan fortælle hvilke enheder, der er knyttet til den. Denne artikel ser på, hvilke beskeder, der sendes og modtages i forbindelse med dette.
Artiklen er én ud af en række artikler om Z-Wave protokollen og hvordan denne kan implementeres i C#. Det er en fordel, men ikke strengt nødvendigt, at have læst de foregående artikler.

Et Z-Wave netværk kan bestå af 232 enheder, hvor hver enhed har et node id. Ud over node id’et findes der en række af andre attributter bl.a. type. Der er defineret et væld af nodetyper i Z-Wave protokollen, men i denne artikel vil kun Controller, Switch og Dimmer blive berørt.
Fremgangsmåden for at identificere hvilke enheder, der findes i Z-Wave netværket, er relativ enkelt.

  1. Spørg Z-Wave controlleren hvilke node id’er, der findes
  2. Spørg Z-Wave controlleren for hver node id, hvilken type denne node er

I den foregående artikel ‘Z-Wave protokollen i C# – Del 3‘ blev callback id introduceret. Det er også muligt at tilføje et callback id til de requests, som beskrives i denne artikel, men de tilsvarende responses indeholder ikke et callback id. Hvorfor Zensys har valgt ikke at implementere callback id for alle request/response par er uklart. Vær derfor opmærksom på, at de requests, der er beskrevet i denne artikel, ikke indeholder callback id.

Beskeden, der skal sendes til Z-Wave controlleren for at få at vide, hvilke noder, der findes i netværket, ser således ud.

/*
    0x01, 0x03, 0x00, 0x02, 0xFE
*/

Der anvendes den samme konfiguration som i artiklen ‘Z-Wave protokollen i C# – Del 3‘, hvilket betyder, at Z-Wave controlleren svarer følgende.

/*
    0x01, 0x25, 0x01, 0x02, 0x04, 0x00, 0x1D, 0x21, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0xE7
*/

Det er de 29 bytes, der følge 0×1D, som er de interessante i svaret. De repræsenterer en bitmaske, der beskriver hvilke node id’er, der er registrerede i Z-Wave controlleren. Det giver ialt 232 enheder (29 bytes * 8 bits / byte = 232 bit).
Den først byte, der følger 0×1D er 0×21. Denne byte beskriver node 1 til node 8. Den binære repræsentation af 0×21 er 0010 0001. Ved at se på den binære repræsentation fra højre mod venstre bliver det klart, at bit 1 og 6 er sat, hvilket betyder, at der er enheder registreret på Z-Wave controlleren med node id 1 og 6.
Den sjette byte efter 0×1D er 0×04. Denne byte beskriver node 41 til 48. 0×04 er 0000 0100 binært, hvilket betyder, at der også er en enhed med node id 43.
Resultatet er, at der ialt findes tre noder (1, 6 og 43).

Næste skridt er at identificere, hvilken type den enkelte enhed er. Dette initieres med følgende request.

/*
    0x01, 0x04, 0x00, 0x41, node id, checksum
*/

Svaret fra node 43 ser således ud.

/*
    0x01, 0x09, 0x01, 0x41, 0xD1, 0x8C, 0x00, 0x04, 0x10, 0x01, 0xFE
*/

Det er den 9. byte, der er relevant at se på og I denne artikel optræder der tre enheder.

/*
    0x02:    Controller
    0x10:    Switch
    0x11:    Dimmer
*/

Dermed kan det konkluderes, at noden med id 29 er en switch.

Næste artikel viser en konkret C# implementation af ovenstående beskeder.
En switch er ikke ‘bare’ en switch – nogle understøtter f.eks. måling af strømforbrug, men det er ikke alle. Der findes derfor i Z-Wave protokollen metoder til at undersøge, hvad de enkelt noder rent faktisk understøttet. Dette vil blive dækket i en af de senere artikler.

Annoncer

Kommentarer er lukket.