دخول
لبعض الوقت ، استخدمت عدة مرحلات Sonoff قياسية تتحكم في الضوء من خلال Google Home Mini. لكن في النهاية أردت أكثر. الوظيفة القياسية ليست كافية ، قررت أن تجعل شيئا تدريجيا النظام أكثر مرونة. اخترت ioBroker.
في البداية ، كالمعتاد ، نظرت ، اخترت ، فحصت وظائف. عندما ، بشكل منفصل ، عملت الضروريات الأساسية ، بدأ في التجميع. وبطبيعة الحال ، واجهت مشاكل.
الصعوبات الرئيسية:
- بالضبط ما تختار؟ بعد كل شيء ، هناك العديد من الطرق لتنفيذ خطتنا. وحتى في الحل المختار ، هناك العديد من الخيارات ...
- لا توجد إرشادات جاهزة حول كيفية تجميع مجموعة الحلول التي اخترتها بالضبط وبالتحديد في التكوينات الخاصة بي.
ما اخترته ، ولماذا ، وما الصعوبات التي واجهتها وكيفية حلها ، وسيتم مناقشتها.
في المستقبل ، سوف أصف كيف أطلقت ioBroker في جهاز الالتحام على جهاز كمبيوتر محمول قديم وألقت Zigbee به للتفاعل مع أجهزة استشعار Xiaomi مباشرة ، دون بوابة. أنا لا أعطي تعليمات قياسية ، فقط "المطبات".
نظرًا لأنه لم يتم إنتاجه بعد ، فمن الممكن تمامًا تغيير شيء ما. لذلك سوف أكون ممتنا للنصيحة والتصحيح :)
قائمة الامنيات وتدريب أفكاري
كانت هناك بكرات Sonoff (انتهى بها المطاف في eWeLink) ، نوع من سلك التمديد (Tuya SmartLife) ، بوابة Xiaomi مع عدة أجهزة استشعار (Mi Home) ، عمود Google Home Mini.
عادةً ما يتم التقاط eWeLink و SmartLife على Google Home ، والاستماع إلى الأوامر الصوتية مثل "تشغيل الأنوار على الطاولة". لم يبدأ Mi Home (هناك عدد قليل من أجهزة Xiaomi المدعومة في Google Home).
أنا وضعت ioBroker ، التقطت بوابة شياومي ، من حيث المبدأ ، كل شيء يعمل. كل شيء جميل ، راجعت البرامج النصية ، مكتوبة (اخترت Node-Red) ، قررت أن أفعل كل شيء في هذا.
ومع ذلك ، لست مسؤولًا محترفًا ، يمكنني معرفة كيفية إعداده ، لكنني لا أعرف التفاصيل الدقيقة مثل المكتبات والمكونات التي تم وضعها (ولا أريد التعمق). لذلك ، أزعجني قليلاً أن ioBroker يحتاج إلى nodejs ، بعض npm التي لم أتعامل معها من قبل. هناك صعوبات في الإصدارات (مثل yum القياسي من المستودع الذي وضع nodejs قديمة جدًا ، وما إلى ذلك).
حسنًا ، أنا بدأت كل شيء ، لكن ظل الخوف في قلبي هو أنه على الرغم من أنه يعمل ، إلا أنني لا أفهم كيف. وإذا حدث ، على سبيل المثال ، حدوث شيء أثناء الترقية ، فلن أعرف كيفية إصلاحه. لكن بالإضافة إلى برنامج ioBroker ، أردت أيضًا تكديس الأنظمة الأخرى على الكمبيوتر المحمول.
سأضع ، على سبيل المثال ، تحديثًا حول شيء يبدو أنه يعمل. وبعد بعض الوقت اتضح أنه يعمل بشكل سيء. سيتعين علينا استعادة النسخة الاحتياطية قبل شهر. علاوة على ذلك ، فإن النسخة الاحتياطية لا تقتصر على هذا النظام فحسب ، بل على جميع الأنظمة الأخرى ، لأنني لا أفهم حتى النهاية من أي نظام توجد الملفات القابلة للتنفيذ ، وأين هي ملفات التكوين ، وأين هي البيانات نفسها ...
لقد أزعجني كثيرًا ، لذلك قررت استخدام Docker. الرمز في الحاوية. البيانات بشكل منفصل ، يتم تحميل الدليل على المضيف. سهلة النسخ الاحتياطي.
هل هناك نسخة جديدة؟ نعم ، حتى على جهاز ظاهري آخر ، من السهل التحقق من كيفية عمل الإصدار الجديد من الحاوية مع بيانات من هذا الدليل. أنظمة مختلفة لا تتداخل مع بعضها البعض. من السهل استعادة ثنائيات بعض النظام. مرة أخرى ، من السهل النقل إلى شيء آخر (يعمل برنامج ioBroker في الحاوية على Synology وعلى اللوحة المفردة). الجمال!
سيكون هناك المزيد من المتطلبات (لإتاحة عبر الإنترنت ، ولكن ليست متاحة للجمهور للأمن) ، وسوف تؤثر بشكل أكبر عند اختيار التكوينات.
تركيب
نظام التشغيل المضيف ليس بالغ الأهمية ، لقد قمت بتنزيل CentOS (من الذاكرة القديمة تذكرت أنه لجميع مهام الشبكة كان يعمل بثبات وبدون أي مشاكل). الإصدار الحالي كان Cent OS 8.
ضعه قمت بإجراء الإعدادات الأساسية مثل اسم المضيف ، fail2ban (مجرد عادة ، على الرغم من أن المضيف موجود فقط في الشبكة المحلية). ضع عامل الميناء. لن أسهب في الحديث عن هذا.
مثال التعليمات .
حان الوقت لإطلاق ioBroker. لكن أي شبكة تختار؟ المضيف أو Macvlan؟
أولاً ، أراد Macvlan أن تحصل كل حاوية على عنوان IP الخاص بها من جهاز التوجيه. ولكن بعد ذلك قرر التخلي عن هذا المشروع:
- مع Host ، بالطبع ، تحتاج إلى الإشارة بوضوح إلى أي المنافذ لإعادة توجيهها ، تأكد من أنها لا تتقاطع مع الحاويات الأخرى. لكن
- يجب تكوين iptables داخل كل حاوية. بما في ذلك بعد كل إعادة تشغيل مع المعلمات الأخرى ، الترقية / الاستبدال. وفي وضع المضيف ، إنها نقطة واحدة لإدارة الأمن.
- ما زلت أخطط لجعله متاحًا ليس فقط من شبكة WiFi المنزلية. وفي هذه الحالة ، يكون أكثر ملاءمة لجعل مضيفًا واحدًا يمكن الوصول إليه من الخارج (وتخطيط المنافذ عليه) بدلاً من تكوينه للعديد.
تم الفحص حاليًا ZeroTier One. تثبيته فقط على المضيف. الوصول إلى عنوان IP لهذا المضيف (غير محلي ، ولكن صادر عن ZeroTier) والمنفذ 8082 من الهاتف المحمول عبر GPRS عندما يعمل عميل ZeroTier يفتح واجهة vis تمامًا.لذلك القياسية
docker run -d --name ioBroker -p 8081:8081 -p 8082:8082 -v /opt/iobroker/:/opt/iobroker/ --device=/dev/ttyACM0 --env-file /opt/ioBroker_env.list --restart=always buanet/iobroker:latest
عفوا. حدث خطأ ما.
docker logs ioBroker
يوضح
docker logs ioBroker
أنه في الخطوة الأخيرة لا يوجد اتصال بالموارد الخارجية. لا يمكنني الحصول على اسم razorolvit.
يوضح
docker exec -it ioBroker bash
أن تنفيذ الأمر ping عبر IP يمرر جيدًا منه ، ولكن ليس بالاسم.
Google ، أجد مجموعة من الروابط حول كيفية قيام عامل النقل باستبدال خادم DNS بشكل غير صحيح ، وأنا أحكم /etc/docker/daemon.json ، وأنا أفهم dnsmasq - لا شيء يساعد.
يزحف الفكر ، فجأة يتم حظر شيء على مستوى الشبكة. ولكن لا يوجد telnet أو حليقة في الحاوية ، لا يمكنني التحقق. التثبيت أيضًا ليس سهلاً - التثبيت yum لا يعمل. يمكنك بالطبع تحديد المضيفين الضروريين في / etc / hosts يدويًا ، لكن هذا يستغرق وقتًا طويلاً للغاية ، وسأحقق بشكل أفضل من الإصدارات الأخرى.
على سبيل المثال ، أوقف جدار الحماية على المضيف بغباء على أمل أن يفتح كل شيء. لكن لا.
أذكر أنه لا يزال من الممكن التحقق من توفر المنفذ باستخدام wget. وهو في الحاوية! ولا يمكن تنزيل أي شيء حتى بواسطة IP. حتى واجهة الويب لجهاز التوجيه المنزلي لا يمكن الاتصال. حسنًا ، هذا يعني أن المشكلة ليست بالتأكيد في DNS ، ولكن في iptables.
نتيجة لذلك ، كل شيء يعمل بعد إضافة واجهة عامل ميناء إلى المنطقة الموثوقة:
sudo firewall-cmd --permanent --zone=trusted --change-interface=docker0 sudo firewall-cmd --reload
هذا مثير للاهتمام ، هل أغفلت في مكان ما في التعليمات؟
أو هل آخذ لا CentOS 8 ، ولكن شيء آخر ، لن يكون هناك مشكلة (في نظام التشغيل الآخر فإنه لا جدار الحماية بشكل افتراضي)؟
أم أنه من الواضح للجميع أنه لم يكتبوا في التعليمات ، لقد كنت غبية لفترة طويلة وحدي؟
زيجبي
لذا ، فإن برنامج ioBroker الخاص بي موجود في الحاوية ، ولم ينشر سوى عدد قليل من المنافذ. الآن هذا هو المشرف 8081 و 8082 ، ثم ستتم إضافة mqtt 1883 ، وربما شيء لدعم Tuya (رأيت مثل هذا السائق ، لكنني لم أحسبه بعد).
للأسف ، للتفاعل مع أجهزة Xiaomi من خلال بوابتها ، هناك حاجة إلى بث متعدد ، وهذا في هذا التكوين من التعقيد. لذلك ، قررت رمي في حاوية عصا USB. أيضا عملية طبيعية.
في سطر الأوامر ، لقد شاهدت بالفعل
--device=/dev/ttyACM0
لهذا الغرض. ظهر الجهاز في الحاوية. في ioBroker ، قمت بتنشيط برنامج التشغيل القياسي "Zigbee for Xiaomi والأجهزة الأخرى" ، لكنه لم ينجح.
تقترح Google أنه للوصول إلى المنفذ التسلسلي ، تحتاج إلى إضافة المستخدم إلى مجموعة الطلب الهاتفي. أذهب إلى الحاوية ، أضف iobroker إلى هذه المجموعة - لا يساعد ذلك.
أرى التلميحات التي تحتاجها لتثبيت حزمة serialport من خلال npm.
لا أستطيع ، لا حقوق. جوجل كذلك.
يخبر Bluefox بمفرده أنه يجب القيام بذلك من دليل /opt/iobroker/node_modules/iobroker.javascript/ - ليس لدي واحد ، وما زلت لا أمتلك حقوق التثبيت (حسنًا ، أي أن التثبيت يبدأ ، إحباط).
أخيرًا ، يتضح لي أنني بحاجة إلى تحديد صريح في سطر الأوامر في الدليل الذي يجب وضعه.
npm install -g serialport --production --save --prefix "/opt/iobroker"
يتم تثبيته ، ولكن لا يساعد.
بدأت أشك في أنك ما زلت بحاجة للتعامل مع حقوق الوصول. التحقق (من داخل الحاوية ، بالطبع):
test -w /dev/ttyACM0 && echo success || echo failure
النجاح. أي ومع ذلك ، ألقى عامل الميناء الجهاز بشكل صحيح.
sudo -H -u iobroker test -w /dev/ttyACM0 && echo success || echo failure
فصيل عبد الواحد، التقط! فشل
باش داخل الحاوية يعمل تحت الجذر ، ولكن من مستخدم iobroker لا يوجد منفذ إلى المنفذ. على الرغم من إضافته مسبقًا إلى مجموعة Dialout.
ls -l /dev/ttyACM0
يعطي
crw-rw----. 1 root 18 166, 0 Nov 3 18:14 /dev/ttyACM0
ها! ما هو 18 بدلا من اسم المجموعة؟
كل شيء صحيح على المضيف الرئيسي:
crw-rw----. 1 root dialout 166, 0 Nov 3 15:15 /dev/ttyACM0
crw-rw----. 1 root dialout 166, 0 Nov 3 15:15 /dev/ttyACM0
اتضح أنه على المضيف الرئيسي في / etc /
dialout:x:18
المجموعة
dialout:x:18
، وفي
dialout:x:20
الحاوية
dialout:x:20
على الرغم من أنني أضفت مستخدمًا إلى المجموعة بهذا الاسم ، فليس هناك معنى ، فالعدد ليس هو نفسه. لذلك قمت بإنشاء مجموعة أخرى ذات المعرف 18 ، وأضفت المستخدم إليها بالفعل:
groupadd -g 18 serial usermod -a -G serial iobroker
قمت بإعادة تشغيل كل شيء لمزيد من اليقين. وعلى هذا انتهى مواجهتي :)
قام بهدوء بربط جميع المستشعرات من بوابة Xiaomi ، وربطها بـ ioBroker.
أراها ككائنات في ioBroker نفسها:

تتم قراءة قراءات Vis:

عند إغلاق جهات الاتصال في مستشعر التسرب ، يتم استلام البيانات. والصورة تتغير:

وفي Node-Red ، تأتي الإشارة. وفقًا لذلك ، على الرغم من إرسال البريد الإلكتروني أو أي شيء آخر ، يتم إرسال ملف صوتي أو MP3 إلى عمود GH Mini:

بالمناسبة ، عند عرض الأشياء ، انتظرتني مفاجأة:

التفت Xiaomi Cube إلى جانب آخر. تظهر التغييرات الأخيرة باللون الأخضر.
لقد تغير Flip90 - وهذا أمر مفهوم. يتم اكتشاف هذه الإشارة للسيطرة. ولكن ، كما اتضح ، لا يزال هناك flip90_from و flip90_to - مع الجانب الذي التفت إليه.
اتضح أنه ، من الناحية النظرية ، يمكنك الحصول على المزيد من إشارات التحكم من المكعب. على سبيل المثال ، إذا قمت برسم أسهم على الحواف (كما لو كنت في دائرة) ، فيمكنك تتبع ليس فقط "تحويل 90" ، ولكن أيضًا في أي اتجاه (من نفسك أو إلى نفسك ، إلى اليسار أو اليمين).
ل flip180 يعمل أيضا. وللفتات الأخرى توجد معلومات إضافية مشابهة (الجانب العلوي على الوجه 180 درجة ، الجانب العلوي على الشريحة ، الجانب العلوي عند النقر)
ليس هذا هو الحاجة الماسة. لكن في Mi Home القياسي ، لم تكن هناك معلومات عن الوجوه. يبدو أنه مع الاتصال السابق عبر بوابة Xiaomi ، لم أكن أرى ذلك أيضًا ، ولم أكن أعرف أن كل وجه له رقم. في السابق ، لم أكن أعلم سوى بالأحداث الإضافية للسقوط (السقوط الحر) ، والتي كانت ، ولكن تم طردهم من Mi Home (على ما يبدو ، لقد أسقطوها كثيرًا).
خاتمة
كل ما احتاجه هو العمل. ثم يمكنك إحضار الجمال ، كتابة البرامج النصية ، توصيل Tuya ، إطلاق حاوية مع Blynk لمشاريع أخرى ...
وربما ، لإعادة شيء بناء على تعليقاتكم :)