إضافة أجهزة ZigBee إلى Homebridge باستخدام CC2531

كانت هناك بالفعل مقالات حول Habr حول كيفية جعل أجهزة ZigBee من مختلف الشركات المصنعة مع أنظمة التحكم في المنزل الذكية ، دون استخدام المحاور ذات العلامات التجارية ، مثل بوابة Xiaomi. ومع ذلك ، لم أجد تعليمات حول homebridge ، ليس فقط على Habré ، ولكن أيضًا على مساحات الإنترنت المفتوحة الأخرى. لذلك ، أريد أن أشارككم تجربة إضافة أجهزة ZigBee إلى homebridge. شكرًا جزيلاً لمبدع zigbee2mqtt.io الخاص بالموارد ، وقد تم بالفعل وصف طرق وميض CC2531 المودم والاتصال بأنظمة التحكم الذكي بالمنزل مثل Home Assistant و Domoticz و Majordomo . هذه المقالة مخصصة للمستخدمين الذين قاموا بالفعل بتثبيت homebridge وتكوينه .


سيتم تنفيذ جميع الإجراءات الواردة في المقال مع مجموعة المعدات التالية:

  • Raspberry Pi 3 B + (نظام تشغيل Raspbian)
  • CC2531 دونغل (مخيط)
  • أجهزة Xiaomi (مفتاح لاسلكي ، مستشعر درجة الحرارة والرطوبة ...)
  • MacBook Pro (OSX 10.14)

تعليمات البرامج الثابتة CC2531 باللغة الروسية هنا (عبر Pi) وهنا (عبر CCDebuger) .

من الناحية التخطيطية ، يمكن تمثيل سلسلة العمل بأكملها على النحو التالي:



الآن بالترتيب.

بعد وميض المودم ، تحتاج إلى تثبيت وسيط MQTT (إذا لم يكن مثبتًا بالفعل).

يمكنني استخدام Mosquitto ، تثبيت مثل هذا:

sudo apt install -y mosquitto mosquitto-clients # sudo services mosquitto start #  sudo systemctl enable mosquitto.service # 

يمكن العثور على المزيد من تعليمات التكوين المفصلة هنا .

تحتاج الآن إلى تثبيت خدمة zigbee2mqtt ، التي تتفاعل مع مودم CC2531 وتنقل البيانات إلى Mosquitto:

 sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt sudo chown -R pi:pi /opt/zigbee2mqtt cd /opt/zigbee2mqtt npm install 

لتشغيل zigbee2mqtt كخدمة ، تحتاج إلى إنشاء ملف:
/etc/systemd/system/zigbee2mqtt.service

مع المحتويات التالية:
 [Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target 


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

 /opt/zigbee2mqtt/data/configuration.yaml 

نبدأ الخدمة وإضافتها إلى التشغيل التلقائي:

 sudo systemctl start zigbee2mqtt sudo systemctl enable zigbee2mqtt.service 

نحن ننظر إلى السجل:

 sudo journalctl -u zigbee2mqtt.service -f 

إذا تم تكوين كل شيء بشكل صحيح ، يجب أن تشاهد الأسطر التالية:
 `permit_join` set to `true` in configuration.yaml. Allowing new devices to join. Set `permit_join` to `false` once you joined all devices. Zigbee: allowing new devices to join. Connecting to MQTT server at mqtt://localhost zigbee-shepherd ready Connected to MQTT server 


يمكنك البدء في التكامل مع homebridge. يحتوي مورد zigbee2mqtt.io على قائمة بالأجهزة المدعومة والتعليمات الخاصة بإنشاء زوج. على سبيل المثال ، فكر في إضافة مفتاح التبديل اللاسلكي Xiaomi.



لعرض الأحداث في Mosquitto ، استخدم برنامج MQTT Explorer . نبدأ ، أدخل عنوان خادم MQTT ، في حالتي يقع في 192.168.1.104 . إذا تم تثبيت كل شيء بشكل صحيح ، ثم في الشجرة سنرى فرع zigbee2mqtt. نمر فيه. الآن على Xiaomi Wireless Switch ، استمر في الضغط على زر إعادة الضبط حتى يومض الصمام الثنائي (حوالي 5 ثوانٍ). بعد حوالي 10 ثوانٍ في فرع zigbee2mqtt ، سنرى جهازنا والبيانات التي يرسلها.

إذا لم يحدث ذلك ، فبعد وميض الصمام الثنائي ، حاول الضغط على "إعادة تعيين" مرة واحدة بتردد في الثانية. يجب أن يكون مثل هذا:



دعنا نحلل البيانات:

 { "linkquality":110, "battery":100, "voltage":3052, "click":"single" } 

يحتوي حقل النقر على نوع النقرة ، ويمكن أن يكون هناك خمسة:
Click, double click, triple click, long, long_release

لقد تعلمنا كيفية تلقي البيانات ، والآن قم بإضافة مفتاح التبديل اللاسلكي Xiaomi إلى homebrdige. للتفاعل مع MQTT ، سوف نستخدم وحدة homebridge-mqttthing . يثبت بنفس طريقة تثبيت الآخرين:

 (sudo) npm install -g homebridge-mqttthing 

تدعم الوحدة النمطية عددًا كبيرًا من فئات الأجهزة من المحولات إلى منظمات الحرارة. بالنسبة إلى مفتاح التبديل اللاسلكي Xiaomi ، تعد فئة StatelessProgramableSwitch مناسبة تمامًا. لإضافة ، تحتاج إلى معرفة الموضوع (0x00158d00022c85ea) وأسماء الأوامر. اتضح هذا النوع من التكوين:

 { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] } 

عن طريق القياس ، أضفت:

درجة الحرارة والرطوبة الاستشعار ، استشعار اللمس ، وجود مستشعر والتبديل.
 "accessories": [ { "accessory": "mqttthing", "type": "occupancySensor", "name": "Xiaomi Occupancy Sencor", "topics": { "getOccupancyDetected": { "topic": "zigbee2mqtt/0x00158d000236b492", "apply": "return JSON.parse(message).occupancy;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "contactSensor", "name": "Xiaomi Contatc Sencor", "topics": { "getContactSensorState": { "topic": "zigbee2mqtt/0x00158d000278db8c", "apply": "return !JSON.parse(message).contact;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] }, { "accessory": "mqttthing", "type": "temperatureSensor", "name": "Xiaomi Temperature Sencor", "topics": { "getCurrentTemperature": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).temperature);" } }, "history": true }, { "accessory": "mqttthing", "type": "humiditySensor", "name": "Xiaomi Humidity Sencor", "topics": { "getCurrentRelativeHumidity": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).humidity);" } }, "history": true } ] 


نتحقق من:



اعتدت على استخدام وحدة homebridge-mi-aqara ، التي تضيف أجهزة ZigBee ، والتفاعل مع بوابة Xiaomi. عندما يتم إلغاء Gateway ، ينخفض ​​وقت استجابة الأجهزة ، بالإضافة إلى التخلص من الجهاز الذي يقع على شبكة WiFi الخاصة بي ويزحف باستمرار على الإنترنت.

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


All Articles