كيف أضفت جهازًا جديدًا إلى SmartThings Hub ، الجزء الأول

في هذه المقالة ، أود أن أتحدث عن تجربتي في تطوير ما يسمى بمعالج الأجهزة لـ SmartThings. كانت المهمة هي إضافة جهاز عالمي قائم على بروتوكول Z-Wave - Z-Uno ، بالإضافة إلى معالجة الأجهزة التابعة المتصلة به.



لقد استغرقت مني مقدمة التطوير الكثير من الوقت ، ومع ذلك ، بعد تنوير دراسة متأنية لمعظم الوثائق ، لم يعد المزيد من التطوير يتطلب الكثير من الجهد. ونتيجة لذلك ، تقرر كتابة هذه المقالة لتسهيل عمل المستخدم الناطق باللغة الروسية.

تتم عملية التطوير بالكامل في تطبيق الويب SmartThings IDE للغة GroThy. يعد الاختبار أكثر ملاءمة لإجراءه من جهاز محمول ، ومع ذلك ، من الممكن إنشاء محاكيات للجهاز في بيئة التطوير نفسها. في حالة اختبار الغلاف الرسومي ، هناك حاجة بالفعل لاستخدام تطبيق الهاتف الذكي SmartThings Classic ( Android ، iOS ).

الجهاز الإضافي عبارة عن لوحة تسمح لك بإضافة التحكم إلى أي جهاز تقريبًا في Z-Wave. علاوة على ذلك ، يمكن أن تكون الأجهزة المتصلة رقمًا مختلفًا (حتى 32 قطعة). وفقًا لذلك ، على مستوى البرنامج ، يجب أيضًا معالجة جميع أنواع الأجهزة المتصلة والتحكم في مخرجات التطبيق.

قائمة الأنواع المعالجة:

  • Switch Binary - الأجهزة ذات الوضعين فقط: تشغيل / إيقاف
  • تبديل متعدد المستويات - الأجهزة التي يمكن إيقاف تشغيلها أو تشغيلها بمعان مختلفة. على سبيل المثال ، باهتة.
  • المستشعر متعدد المستويات - المستشعرات التي ترسل قيمًا غير ثنائية. على سبيل المثال ، جهاز استشعار درجة الحرارة.
  • متر - أجهزة مثل عداد
  • الإخطار - ستكون أجهزة الاستشعار الثنائية من هذا النوع. على سبيل المثال ، مفتاح القصب.
  • الترموستات - فئة منفصلة من الفرق المسؤولة عن العمل مع الترموستات


هيكل الوثيقة


يمكن تمييز الكتل المنطقية:

  • الوصف ومعلومات التعريف حول المعالج. يتضمن هذا معلومات حول الجهاز ، وكيفية رسم واجهة المستخدم والمعلومات الأخرى. يتم تخصيصه بواسطة طريقة metadata() .


  • طرق معالج هي منطق معالج. هم مسؤولون عن "التواصل" مع الجهاز.

    بشكل منفصل ، يمكننا تمييز طريقة parse () ، التي تفسر الأوامر المستلمة من الجهاز.

سأصف بمزيد من التفصيل الغرض من كل كتلة ومحتواها خلال سلسلة المقالات.

البيانات الوصفية


كما ترى من اسم الطريقة ، يحتوي هذا على معلومات وصفية.

دعونا نفكر في ما هو مدرج في هذه الكتلة:

التعريف ()


في هذه الطريقة ، تشير الحجج إلى ثلاثة أشياء ، على التوالي: اسم المعالج ومساحة الاسم واسم المؤلف.

  • سيتم استخدام اسم المعالج في المستقبل عند النشر وعند إنشاء أجهزة فرعية.
  • يتم استخدام مساحة الاسم عند البحث عن معالجات بالاسم للتأكد من العثور على الصحيح ، على سبيل المثال ، بين معالجات تحمل نفس الاسم. توصي SmartThings باستخدام لقبك على github.
  • اسم المؤلف معبأ باسمك.

  definition(name: "Your device", namespace: "yournamespace", author: "your name") {} 

يمكن تعريف المتغيرات التالية في نص الطريقة: attribute, capability, command, fingerprint . علاوة على ذلك ، سننظر بمزيد من التفصيل في ماهيتها ومتى يتم تطبيقها.

الاتصال وبصمات الأصابع


نقوم بتوصيل جهازنا. في حالتنا ، سيتم استخدام SmartThings V2 Hub و Z-Uno .

في وقت إضافة جهاز Z-Wave أو ZigBee جديد ، سيحاول المحور التعرف على نوع الجهاز الذي يحاول الاتصال به والبدء في البحث عن المعالج الأكثر صلة. سيختارها عن طريق "بصمات الأصابع". إذا لم يعثر الموزع على تطابقات في المعالجات المخصصة ، فسيحاول استخدام أحد أقرب النماذج القياسية.

يتم تعيين "بصمات الأصابع" في المعالج نفسه للإشارة إلى أنواع الأجهزة التي تدعمها. تقول الوثائق الرسمية أنها ستكون مختلفة لأجهزة Z-Wave وأجهزة ZigBee ، وسننظر في تنفيذ Z-Wave.

تقوم أجهزة بروتوكول Z-Wave بتخزين معلومات حول الشركة المصنعة ونوع الجهاز وإمكانياته ، إلخ. أثناء ما يسمى بـ "المقابلة" مع الجهاز ، تقوم شركة ST بجمع هذه المعلومات في الوصف الأولي لـ Z-Wave. مثال على هذا الخط:

 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 

يتم استخدام قيمة كل مفتاح لملء "بصمة الإصبع". يمكن العثور على وصف مفصل لكل عنصر هنا . سننظر في تلك التي سيتم استخدامها في معالجنا.

للعثور على هذا الخط بالمعلومات ، تحتاج إلى الانتقال إلى علامة التبويب "أجهزتي" والنقر على الجهاز الذي نحن مهتمون به (قبل ذلك ، يجب إضافة الجهاز إلى الشبكة).



mfr هي قيمة 16 بت تحتوي على معرف الشركة المصنعة. يمكن العثور على قائمة بالمصنّعين ومعرفاتهم هنا .

prod - قيمة 16 بت تحتوي على معرف نوع المنتج - معرف نوع جهاز فريد.

الطراز عبارة عن قيمة 16 بت تحتوي على معرف المنتج.

inClusters - قيمة من 8 بت تحدد الحاجة إلى فئة معينة من الأوامر. على سبيل المثال ، إذا كنا بحاجة إلى الإشارة إلى أن معالجنا سيعمل مع MultiChannel CC ، فستحتاج إلى كتابة الرمز 0x60. يمكن الاطلاع على قائمة المتوفرة لـ SmartThings CC هنا .

هذه المفاتيح الأربعة كافية للمحور لفهم الجهاز الذي ينتمي إليه هذا المعالج بالضبط. مثال على كيفية استخدامها معي:

 fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" 

يمكن أن يحتوي الجهاز على عدد أكبر من المعلمات ، وفي هذه الحالة يمكنه الاتصال بهذا المعالج بنجاح ، ومع ذلك ، إذا لم يتطابق أحدها على الأقل مع البصمة المعلنة ، فسوف يتجاهل الجهاز هذا المعالج.

توصي Smartthings بإضافة معلومات حول الشركة المصنعة (mfr) والطراز (prod ، model) في بصمة الإصبع ، لاستبعاد الحالات التي لن يكون فيها اختيار المعالج واضحًا. على سبيل المثال ، عندما تتطابق بصمات أحد النماذج أو الأمثلة المستخدمة افتراضيًا مع بصمات أصابعك.

الموقع في الرمز
 metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... } 


تم التخطيط لدورة كاملة من المقالات ، حتى الإصدار. آمل أن تساعدك هذه المعلومات في التطوير.

Source: https://habr.com/ru/post/ar427923/


All Articles