كانت هناك
بالفعل مقالات حول 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
يمكن العثور على المزيد من تعليمات التكوين المفصلة
هنا .
تحتاج الآن إلى تثبيت خدمة 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 الخاصة بي ويزحف باستمرار على الإنترنت.