In diesem Artikel möchte ich ĂŒber meine Erfahrungen bei der Entwicklung des sogenannten Device Handler fĂŒr SmartThings sprechen. Die Aufgabe bestand darin, ein universelles GerĂ€t hinzuzufĂŒgen, das auf dem Z-Wave-Protokoll basiert -
Z-Uno - sowie die Verarbeitung der damit verbundenen untergeordneten GerÀte.

Die EinfĂŒhrung in die Entwicklung hat mich ziemlich viel Zeit gekostet, aber nachdem ich die meisten Dokumentationen sorgfĂ€ltig studiert hatte, erforderte die weitere Entwicklung keinen groĂen Aufwand mehr. Aus diesem Grund wurde beschlossen, diesen Artikel zu schreiben, um die Arbeit des russischsprachigen Benutzers zu erleichtern.
Der gesamte Entwicklungsprozess findet in der SmartThings IDE-Webanwendung in der Sprache GroThy statt. Das Testen ist bequemer von einem mobilen GerĂ€t aus durchzufĂŒhren. Es ist jedoch möglich, GerĂ€tesimulatoren in derselben Entwicklungsumgebung zu erstellen. Beim Testen der grafischen Shell muss bereits die mobile Anwendung SmartThings Classic (
Android ,
iOS ) verwendet werden.
Ein Plug-In-GerĂ€t ist eine Karte, mit der Sie fast jedem GerĂ€t in Z-Wave die Steuerung hinzufĂŒgen können. DarĂŒber hinaus können die angeschlossenen GerĂ€te eine andere Nummer haben (bis zu 32 StĂŒck). Dementsprechend mĂŒssen auf Softwareebene auch alle Arten verbundener GerĂ€te verarbeitet und die Ausgabe an die Anwendung gesteuert werden.
Liste der verarbeiteten Typen:
- BinÀr schalten - GerÀte mit nur zwei Positionen: Ein / Aus
- Multilevel wechseln - GerÀte, die mit unterschiedlichen Bedeutungen ein- oder ausgeschaltet werden können. Zum Beispiel ein Dimer.
- Sensor Multilevel - Sensoren, die nicht-binÀre Werte senden. Zum Beispiel ein Temperatursensor.
- MessgerÀt - GerÀte wie ein ZÀhler
- Benachrichtigung - BinÀrsensoren werden von diesem Typ sein. Zum Beispiel ein Reed-Schalter.
- Thermostat - eine separate Klasse von Teams, die fĂŒr die Arbeit mit dem Thermostat verantwortlich sind
Dokumentstruktur
Es können zwei logische Blöcke unterschieden werden:
- Beschreibung und Metainformationen zum Handler. Dies beinhaltet Informationen ĂŒber das GerĂ€t, wie die BenutzeroberflĂ€che und andere Informationen gezeichnet werden sollen. Es wird nach der Methode
metadata()
zugewiesen.

- Handler-Methoden sind Handler-Logik. Sie sind fĂŒr die âKommunikationâ mit dem GerĂ€t verantwortlich.
Separat können wir die parse () -Methode unterscheiden, die die vom GerÀt empfangenen Befehle interpretiert.
Ich werde den Zweck und den Inhalt jedes Blocks wÀhrend der Artikelserie genauer beschreiben.
Metadaten
Wie Sie dem Namen der Methode entnehmen können, enthÀlt diese Metainformationen.
Betrachten wir in der Reihenfolge, was in diesem Block enthalten ist:
Definition ()
Bei dieser Methode geben Argumente jeweils drei Dinge an: den Namen des Handlers, den Namespace und den Namen des Autors.
- Der Name des Handlers wird zukĂŒnftig beim Veröffentlichen und beim Erstellen von untergeordneten GerĂ€ten verwendet.
- Der Namespace wird bei der Suche nach Handlern nach Namen verwendet, um sicherzustellen, dass der richtige gefunden wird, z. B. unter Handlern mit demselben Namen. SmartThings empfiehlt, Ihren Spitznamen auf github zu verwenden.
- Der Name des Autors wird mit Ihrem Namen ausgefĂŒllt.
definition(name: "Your device", namespace: "yournamespace", author: "your name") {}
Die folgenden Variablen können im Hauptteil der Methode deklariert werden:
attribute, capability, command, fingerprint
. Weiter werden wir genauer betrachten, was es ist und wann es angewendet wird.
Verbindung und Fingerabdruck
Wir verbinden unser GerÀt. In unserem Fall werden SmartThings V2 Hub und
Z-Uno verwendet.
Beim HinzufĂŒgen eines neuen Z-Wave- oder ZigBee-GerĂ€ts versucht der Hub zu erkennen, mit welchem ââGerĂ€tetyp eine Verbindung hergestellt werden soll, und sucht nach dem relevantesten Handler. Er wird es durch "FingerabdrĂŒcke" auswĂ€hlen. Wenn der Hub in den benutzerdefinierten Handlern keine Ăbereinstimmungen findet, versucht er, eine der nĂ€chstgelegenen Standardvorlagen zu verwenden.
Im Handler selbst werden âFingerabdrĂŒckeâ festgelegt, um anzugeben, welche Arten von GerĂ€ten unterstĂŒtzt werden. Die offizielle Dokumentation besagt, dass sie fĂŒr Z-Wave-GerĂ€te und ZigBee-GerĂ€te unterschiedlich sein werden. Wir werden die Implementierung fĂŒr Z-Wave in Betracht ziehen.
Z-Wave-ProtokollgerĂ€te speichern Informationen ĂŒber Hersteller, GerĂ€tetyp, Funktionen usw. WĂ€hrend des sogenannten âInterviewsâ mit dem GerĂ€t sammelt ST diese Informationen in der Z-Wave-Rohbeschreibung. Ein Beispiel fĂŒr eine solche Zeile:
zw:Ss type:2101 mfr:0086 prod:0102 model:0064 ver:1.04 zwv:4.05 lib:03 cc:5E,86,72,98,84 ccOut:5A sec:59,85,73,71,80,30,31,70,7A role:06 ff:8C07 ui:8C07
Der Wert jedes SchlĂŒssels wird verwendet, um den âFingerabdruckâ auszufĂŒllen. Eine detaillierte Beschreibung der einzelnen Artikel finden Sie
hier . Wir werden diejenigen berĂŒcksichtigen, die in unserem Handler verwendet werden.
Um diese Zeile mit Informationen zu finden, mĂŒssen Sie auf die Registerkarte "Meine GerĂ€te" klicken und auf das GerĂ€t klicken, an dem wir interessiert sind (vorher muss das GerĂ€t dem Netzwerk hinzugefĂŒgt werden).
mfr ist ein 16-Bit-Wert, der die Hersteller-ID enthÀlt. Eine Liste der Hersteller und ihrer IDs finden Sie
hier .
prod - ein 16-Bit-Wert, der die Produkttyp-ID enthÀlt - eine eindeutige GerÀtetyp-ID.
Modell ist ein 16-Bit-Wert, der die Produkt-ID enthÀlt.
inClusters - Ein 8-Bit-Wert, der die Notwendigkeit einer bestimmten
Befehlsklasse festlegt. Wenn wir beispielsweise angeben mĂŒssen, dass unser Handler mit MultiChannel CC funktioniert, mĂŒssen Sie den Code 0x60 schreiben. Die Liste der fĂŒr SmartThings
CC verfĂŒgbaren GerĂ€te finden Sie
hier .
Diese vier SchlĂŒssel reichen aus, damit der Hub genau versteht, zu welchem ââGerĂ€t dieser Handler gehört. Ein Beispiel, wie sie bei mir verwendet werden:
fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60"
Ein GerĂ€t kann eine gröĂere Anzahl von Parametern haben. In diesem Fall kann es erfolgreich eine Verbindung zu diesem Handler herstellen. Wenn jedoch mindestens einer von ihnen nicht mit dem deklarierten Fingerabdruck ĂŒbereinstimmt, ignoriert das GerĂ€t diesen Handler.
Smartthings empfiehlt, Informationen ĂŒber den Hersteller (Hersteller) und das Modell (Produkt, Modell) in den Fingerabdruck aufzunehmen, um FĂ€lle auszuschlieĂen, in denen die Wahl eines Handlers nicht offensichtlich ist. Zum Beispiel, wenn FingerabdrĂŒcke einer der standardmĂ€Ăig verwendeten Vorlagen oder Beispiele mit Ihren ĂŒbereinstimmen.
Position im Code
metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... }
Bis zur Veröffentlichung ist ein vollstÀndiger Artikelzyklus geplant. Ich hoffe, diese Informationen helfen Ihnen bei der Entwicklung.