الإعلانات

لا يعني Free دائمًا "ليس جيدًا مثل المدفوع" ، و OpenHAB ليس استثناءً. يتجاوز برنامج التشغيل الآلي للمنزل مفتوح المصدر قدرات أي نظام أتمتة منزلي آخر في السوق بكثير - ولكن ليس من السهل إعداده. في الواقع ، يمكن أن يكون محبطًا تمامًا.

هذا الدليل متاح للتنزيل كملف PDF مجاني. قم بتنزيل OpenHAB Beginner’s Guide Part 2: ZWave و MQTT والقواعد والرسوم البيانية الآن. لا تتردد في نسخ ومشاركة هذا مع أصدقائك وعائلتك.

في الجزء الأول من الدليل ، مررت بك تثبيت OpenHAB على راسبيري باي ابدأ مع OpenHAB Home Automation على Raspberry PiOpenHAB عبارة عن منصة أتمتة منزلية ناضجة ومفتوحة المصدر تعمل على مجموعة متنوعة من الأجهزة لا يعرف البروتوكول ، مما يعني أنه يمكن الاتصال بأي أجهزة أتمتة منزلية تقريبًا في السوق اليوم. قراءة المزيد ، قدم المفاهيم الأساسية لـ OpenHAB ، وأظهر لك كيفية إضافة العناصر الأولى الخاصة بك إلى النظام. اليوم سنذهب أبعد من ذلك:

  • إضافة أجهزة ZWave
  • إضافة وحدة تحكم Harmony Ultimate
  • إدخال القواعد
  • نقدم لك MQTT ، وتثبيت وسيط MQTT على جهاز Pi الخاص بك ، مع أجهزة استشعار على Arduino
  • تسجيل البيانات والرسوم البيانية
instagram viewer

مقدمة إلى Z-Wave

Z-Wave هو بروتوكول التشغيل الآلي للمنزل المهيمن لسنوات: إنه موثوق به ، وقد تم تطويره على نطاق واسع ، ويعمل على مدى أطول بكثير من أي منتجات منزلية ذكية أخرى. هناك المئات من مستشعرات Z-Wave المتاحة لك والتي تؤدي مجموعة كبيرة من المهام. OpenHAB يستطيع العمل مع Z-Wave ، ولكنه متاعب في الإعداد ، ولا يتم ضمان الموثوقية.

إذا كنت تفكر في شراء منزل مليء بمستشعرات Z-Wave خصيصًا للاستخدام مع OpenHAB ، فإنني أحثك ​​على إعادة النظر. قد يعمل بشكل رائع بالنسبة لك ، أو قد يعاني من مشاكل صغيرة ولكنها مستمرة. على الأقل ، لا تشتري منزلًا مليئًا بأجهزة الاستشعار حتى تتاح لك فرصة تجربة القليل منها. السبب الوحيد لاختيار Z-Wave هو إذا لم تكن مستقرًا بنسبة 100٪ على OpenHAB ، وترغب في ترك خياراتك مفتوحة في المستقبل: تعمل Z-Wave على سبيل المثال مع Samsung SmartThings ما هو المحور الذكي لأتمتة المنازل الأفضل بالنسبة لك؟لفترة من الوقت ، كان الناس يعتقدون أن الفكرة ليست أكثر من وسيلة للتحايل ، لكن إصدارات المنتجات الأخيرة أظهرت أن التشغيل الآلي للمنزل الذكي بدأ يفي بوعوده. قراءة المزيد بالإضافة إلى محاور Z-Wave الخاصة مثل Homeseer ومجموعة من خيارات البرامج الأخرى مثل Domoticz.

على الرغم من أن OpenHAB يتضمن ربط Z-Wave ، إلا أنك لا تزال بحاجة إلى ذلك تكوين شبكة Z-Wave أولاً، قبل أن يتمكن OpenHAB من بدء الاستعلام عنه للحصول على البيانات. إذا كان لديك لوحة تحكم Rasberry ، فلديك بعض البرامج الموردة لتكوين الشبكة ، لذلك لن نغطي ذلك هنا. إذا قمت بشراء وحدة تحكم Aeotec USB Z-Stick أو ما شابه ذلك ، فمن المحتمل ألا يكون لديك أي برامج مضمنة ، لذا تابع القراءة.

Aeotec Z-Stick Gen5 ، Z-Wave Plus USB لإنشاء بوابةAeotec Z-Stick Gen5 ، Z-Wave Plus USB لإنشاء بوابة اشترِ الآن على أمازون $44.95

إذا كان لديك بالفعل إعداد شبكة Z-Wave، يمكنك فقط توصيل وحدة التحكم الخاصة بك في Pi والبدء في تكوين الربط والعناصر. إذا كانت هذه أول غزوة لك في Z-Wave ، فهي أكثر تعقيدًا قليلاً.

أولاً ، من ناحية الأجهزة: لكل وحدة تحكم طريقتها الخاصة في الاقتران بالأجهزة (تُعرف تقنيًا باسم "وضع التضمين" الذي يتم فيه تعيين معرف العقدة). في حالة Aotec Z-Stick ، ​​هذا يعني فصله من منفذ USB ، والضغط على الزر مرة واحدة لوضعه في وضع التضمين. ثم خذها بالقرب من الجهاز الذي تقوم بإقرانه ، واضغط على زر التضمين في ذلك أيضًا (سيختلف هذا أيضًا: يتطلب مقبس Everspring الزر للضغط 3 مرات بتتابع سريع ، لذا فإن الدرس هنا هو قراءة الدليل لجهازك).

يومض Z-Stick لفترة وجيزة للإشارة إلى النجاح. هذا يمثل مشاكل عند توصيله مرة أخرى في Pi ، حيث يتم تعيين منفذ جديد. أعد تشغيل Pi لإعادة تعيينها إلى المنفذ القياسي إذا وجدت أنه قد تم إعادة تعيينه بشكل ديناميكي على منفذ آخر. والأفضل من ذلك: لا تقم بتوصيله بـ Pi حتى تنتهي من جميع عمليات إقران الأجهزة أولاً.

تثبيت HABmin و Z-Wave Bindings

نظرًا لأن OpenHAB ليس في الواقع أداة مساعدة لتهيئة Z-Wave ، فسنقوم بتثبيت أداة إدارة ويب أخرى تقوم بذلك - وهو ما يسمى HABmin. توجه إلى مستودع HABmin Github تنزيل الإصدار الحالي. بمجرد فك ضغطه ، ستجد 2 .إناء الملفات في دليل الإضافات - يجب وضعها في دليل الإضافات المقابلة في مشاركة OpenHAB Home (إذا كنت تستخدم Aotec gen5 Z-Stick أيضًا ، فتأكد من حصولك على الأقل على الإصدار 1.8 من ربط Z-Wave).

بعد ذلك ، أنشئ مجلدًا جديدًا في دليل webapps ، وأطلق عليه "habmin" (الأحرف الصغيرة مهمة). انسخ بقية الملفات التي تم تنزيلها إلى هناك.

ملاحظة: هناك أيضًا HABmin 2 تحت التطوير النشط. التثبيت هو نفسه تقريبًا ولكن مع ملحق. jar إضافي. قد يكون من المفيد تجربة كليهما فقط لمعرفة ما تفضله.

إذا لم تكن قد قمت بذلك بالفعل ، فقم بتوصيل وحدة التحكم الخاصة بك بـ Pi. اكتب ما يلي للعثور على المنفذ الصحيح.

ls / dev / tty *

أنت تبحث عن أي شيء باستخدام USB في الاسم ، أو في حالتي الخاصة ، قدم Z-stick نفسه /dev/ttyACM0 (مودم). قد يكون من الأسهل تنفيذ الأمر مرة واحدة قبل توصيله ، ومرة ​​بعد ذلك ، حتى تتمكن من معرفة التغييرات إذا لم تكن متأكدًا.

مخلص

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

sudo usermod -a -G Dialout openhab

الآن ، لبدء كل شيء في العمل ، أعد تشغيل OpenHAB

إعادة تشغيل خدمة sudo openhab

نأمل ، إذا كنت تتحقق من سجل تصحيح الأخطاء ، فسترى شيئًا كهذا. تهانينا ، أنت تتحدث الآن عن Z-Wave. قد تجد أيضًا سجل التصحيح مليئًا برسائل من عقد Z-Wave المختلفة. لنبدأ بالتحقق من HABMIN لمعرفة ما تم العثور عليه: http://openhab.local: 8080 / habmin / index.html (استبدال openhab.local باسم مضيف Raspberry Pi أو عنوان IP الخاص بك).

بدء zwave في سجل openhab

هناك الكثير لرؤيته في HABMIN ، لكننا مهتمون حقًا بـ التكوين -> الارتباطات -> الموجة Z -> الأجهزة علامة التبويب ، كما ترى أدناه. وسّع العقدة لتحرير الموقع وتسمية الاسم لسهولة الرجوع إليها.

تحرير اسم الجهاز

تكوين عناصر Z-Wave

سيكون لكل جهاز Z-Wave تكوين محدد لـ OpenHAB. لحسن الحظ ، تم استكشاف معظم الأجهزة بالفعل وستكون هناك أمثلة متاحة لك بالفعل. تكوين الأجهزة المخصصة التي لم يتم التعرف عليها يتجاوز نطاق هذا الدليل ، ولكن لنفترض أنه مدعوم في الوقت الحالي.

أولاً ، لقد حصلت على مفتاح ومقياس طاقة Everspring AN158 الأساسي على العقدة 3. قادني Googling السريع إلى مشاركة مدونة على Wetwa.re ، مع تكوين نموذج للعينة. قمت بتكييف هذا على النحو التالي:

Switch Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Number Dehumidifier_Watts "استهلاك طاقة مزيل الرطوبة [٪ .1f W]" {zwave = "3: command = meter"}

في احسن الاحوال.

التالي هو Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) اشترِ الآن على أمازون $69.27

لهذا ، وجدت نموذج التكوين في iwasdot.com، وجهاز الاستشعار المتعدد على العقدة 2.

الرقم Hallway_Temperature "درجة حرارة المدخل [٪ .1f ° C]" (المدخل ، درجة الحرارة) {zwave = "2: 0: command = sensor_multilevel، sensor_type = 1، sensor_scale = 0"} الرقم Hallway_Humidity "رطوبة Hallway [٪ .0f ٪٪]" (المدخل ، الرطوبة) {zwave = "2: 0: command = sensor_multilevel، sensor_type = 5"} الرقم Hallway_Luminance "Hallway Luminance [٪ .0f Lux]" (المدخل) {zwave = "2: 0: command = sensor_multilevel، sensor_type = 3"} اتصل Hallway_Motion "Hallway Motion [٪ s]" (Hallway، Motion) {zwave = "2: 0: command = sensor_binary، response_to_basic = true"} Number sensor_1_battery "البطارية [٪ s ٪٪]" (الحركة) {zwave = "2: 0: command = battery"}

إذا كان تنسيق هذا يبدو غريبًا بالنسبة لك ، فيرجى الرجوع إلى الأول دليل المبتدئين ابدأ مع OpenHAB Home Automation على Raspberry PiOpenHAB عبارة عن منصة أتمتة منزلية ناضجة ومفتوحة المصدر تعمل على مجموعة متنوعة من الأجهزة لا يعرف البروتوكول ، مما يعني أنه يمكن الاتصال بأي أجهزة أتمتة منزلية تقريبًا في السوق اليوم. قراءة المزيد ، على وجه التحديد قسم ربط Hue ، حيث أشرح كيفية إضافة العناصر. ربما ستحتاج فقط إلى نسخ أمثلة لصق مثل هذا ، ولكن إذا كان لديك جهاز جديد ، فإن وثائق الربط تفصل كل أوامر.

تجانس الوئام لوجيتك

قبل أن ننتقل إلى القواعد ، أردت إضافة ملاحظة سريعة حول العمل مع ربط Harmony. أنا من أشد المعجبين سلسلة التناغم من أجهزة التحكم عن بعد مراجعة لوجيتك هارموني في نهاية المطاف والهبةغرفة المعيشة الخاصة بك هي الفوضى - اعترف بذلك. أنت مغفور للتساؤل عن أجهزة التحكم عن بعد أي جهاز. ماذا مع التلفزيون ، مكبر الصوت ، TiVO ، مشغل BluRay ، ربما حتى الإضاءة - تصبح أنشطة التبديل طويلة ... قراءة المزيد لتبسيط تجربة المركز الإعلامي المنزلي ، لكنها غالبًا ما تقف كنظام منفصل داخل المنزل الذكي. مع OpenHAB ، يمكن الآن لأنشطة Logitech Harmony والتحكم الكامل في الجهاز أن تكون جزءًا من نظامك المركزي ، وحتى مضمنة في قواعد الأتمتة.

ابدأ بتثبيت ملفات الربط الثلاثة التي تعثر عليها باستخدام apt-cache للبحث عن "الانسجام":

openhab apt-cache ابحث عن ارتباط الانسجام

لا تنسى ذلك خلع دليل الربط مرة أخرى عند الانتهاء:

sudo apt-get install openhab-addon-action-harmonyhub. sudo apt-get install openhab-addon-الرابطة-harmonyhub. sudo apt-get install openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab

لتهيئة الربط ، افتح ملف openhab.cfg وأضف قسمًا جديدًا كما يلي:

########## أدوات التحكم عن بُعد هارموني ########## Harmonyhub: host = 192.168.1.181أو IP الخاص بك
هارمونيهوب: اسم المستخدم =تسجيل دخولك عبر الوئام الإلكتروني
هارمونيهوب: كلمة السر =كلمة مرورك

عنوان IP هو عنوان Harmony الخاص بك. استخدم ماسح ضوئي للشبكة لمعرفة ذلك. ستحتاج أيضًا إلى إدخال تفاصيل تسجيل الدخول ، تلك التي تدخلها عند تشغيل أداة Harmony config القياسية. هذا هو. عند إعادة تشغيل Hue ، يجب أن يحتوي سجل تصحيح الأخطاء على دفعة مفاجئة من الإخراج من الربط.

هذه قائمة بتنسيق JSON تحتوي على جميع أنشطتك وأجهزتك وأوامرك التي يمكن إرسالها. من الجيد نسخ هذا للرجوع إليه في المستقبل. يمكنك أن تجعل القراءة أسهل مع العقد القابلة للطي عن طريق اللصق في مُنسق JSON عبر الإنترنت مثل هذا.

تنسيق json إخراج openhab

بالإضافة إلى نشاط PowerOff القياسي ، وهو نشاط افتراضي ، ستجد الأنشطة المحددة الخاصة بك مدرجة هنا بالاسم. الآن ، لننشئ عنصر تحكم بسيطًا بزر واحد لبدء الأنشطة. أولاً ، في ملف العناصر ، أضف السطر التالي. قم بتغيير المجموعة والرمز إذا أردت.

/ * Harmony Hub * / Harmony_Activity السلسلة "Harmony [٪ s]" (Living_Room) {harmonyhub = "* [currentActivity]"}

هذا ال سلسلة ربط ملزمة، والتي هي قادرة على جلب النشاط الحالي ، وتوجيه النشاط الحالي ليكون شيئًا آخر. الآن يمكننا إنشاء زر له ، في ملف sitemap.

عنصر التبديل = تعيينات Harmony_Activity = [PowerOff = 'Off'، Exercise = 'Exercise'، 13858434 = 'TV'، Karaoke = 'Karaoke']

في القوس المربع ، سترى كل نشاط جنبًا إلى جنب مع التصنيف. بشكل عام ، يمكنك الإشارة مباشرةً إلى الأنشطة حيث قمت بتسميتها على جهاز التحكم عن بُعد ، ولكن الاستثناء من ذلك الذي وجدته كان أي شيء به مساحة في اسم النشاط ، مثل "مشاهدة التلفزيون". في هذه الحالة ، ستحتاج إلى استخدام معرف النشاط. مرة أخرى ، يمكنك العثور على المعرف في إخراج تصحيح JSON. احفظ واجهتك وقم بتحديثها ، من المفترض أن ترى شيئًا مشابهًا لهذا:

انسجام openhab في خريطة الموقع

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

مقدمة عامة للقواعد

تتضمن معظم محاور المنزل الذكي نوعًا من إنشاء القواعد حتى تتمكن من التفاعل تلقائيًا مع بيانات الاستشعار والأحداث في المنزل. في الواقع ، أود أن أزعم أن المنزل الذكي حقًا ليس المنزل الذي تحتاجه لقضاء بعض الوقت في التفاعل مع تطبيقات الجوال - إنه منزل غير مرئي للمستخدم النهائي ومؤتمت بالكامل. تحقيقا لهذه الغاية ، يتضمن OpenHAB أيضًا لغة برمجة قواعد قوية يمكنك برمجتها ، تتجاوز بكثير تعقيد معظم محاور المنزل الذكي معركة محاور المنزل الذكي: ما هو موجود وما هو قادم؟ قراءة المزيد أو وصفات IFTTT IFTTT يتصل الآن بأي شيء: تقديم قناة Makerالاستخدامات المحتملة لـ IFTTT لا حصر لها. ولكن حتى الآن ، كان من الصعب ربطه بمشاريع الأجهزة الخاصة بك. اليوم ، كل هذا تغير. قراءة المزيد .

قواعد البرمجة تبدو أسوأ مما هي عليه. دعنا نبدأ بسيطًا مع زوج من القواعد التي تشغل أو تطفئ الضوء اعتمادًا على مستشعر التواجد:

قاعدة "مكتب النور عند حضور جيمس" عندما تغير البند JamesInOffice من OFF إلى ON. ثم sendCommand (Office_Hue ، ON) القاعدة النهائية "ضوء المكتب مغلق عند مغادرة جيمس" عندما تغير البند JamesInOffice من تشغيل إلى إيقاف. ثم sendCommand (Office_Hue ، OFF) النهاية

أولاً ، نسمي القاعدة - كن وصفيًا ، حتى تعرف ما هو الحدث الذي يتم إطلاقه. بعد ذلك ، نحدد قاعدتنا البسيطة بالقول عندما تكون س صحيحة ، ثم ص. النهاية تعني إغلاق تلك القاعدة بالذات. هناك عدد من الكلمات الخاصة التي يمكنك استخدامها في القواعد ، لكننا نتعامل الآن مع وحدتين بسيطتين من بناء الجملة - بند، الذي يسمح لك بالاستعلام عن حالة شيء ما ؛ و إرسال أمر، والذي يفعل بالضبط ما تعتقد أنه سوف. أخبرتك أن هذا كان سهلا.

ربما يكون من غير الضروري استخدام زوج من القواعد ، ولكن مع تعقيد منطقى ، سيكون من المفيد أن نفصلهما عما إذا كنت دخول المنطقة أو مغادرتها - وقد تكون فكرة جيدة أن تضيف مستشعر ضوئي إلى مكان ما في المعادلة حتى لا نشغّل بدون داعٍ أضواء.

دعونا نلقي نظرة على مثال آخر لإنشاء قاعدة مجدولة.

حكم "تمرن كل صباح" متى Time cron "0 0 8 1/1 *؟ *" ثم harmonyStartActivity ("تمرين") النهاية.

مرة أخرى ، نقوم بتسمية القاعدة ، وشروط الحالة عندما يجب إطلاقها ، والإجراءات الواجب اتخاذها. لكن في هذه الحالة ، نحن نحدد نمط الوقت. الرمز المضحك الذي تراه في الاقتباسات هو تعبير CRON لـ كوارتز المجدول (التنسيق مختلف قليلاً عن CRONtab العادي). انا إستعملت cronmaker.com للمساعدة في إنشاء التعبير ، ولكن يمكنك أيضًا قراءة دليل التنسيق [لم يعد متاحًا] للحصول على شرح مفصل والمزيد من الأمثلة.

مولد كرون
يستخدم CronMaker.com لإنشاء تعبير Cron المنسق بشكل صحيح

تقول القواعد الخاصة بي ببساطة "8 صباحًا كل صباح ، كل يوم من أيام الأسبوع ، أخبر نظام Harmony Ultimate الخاص بي لبدء نشاط التمرين" ، والتي بدورها تنشط التلفاز ، إكس بوكس ​​، مكبر الصوت وتضغط على الزر A بعد دقيقة واحدة لتشغيل القرص في محرك الأقراص.

للأسف ، OpenHAB لم يتمكن بعد من القيام بالتمرين من أجلي.

قاعدة أخرى أريد أن أريكم إياها هي شيء أستخدمه لإدارة مستويات الرطوبة في منزلي. لدي مزيل واحد للرطوبة أحتاج إلى التنقل فيه حيثما دعت الحاجة ، لذلك قررت النظر في جميع مستشعرات الرطوبة الخاصة بي ، والعثور على أيهما أعلى ، وتخزينه في متغير. يتم تشغيله حاليًا كل دقيقة ، ولكن يمكن خفضه بسهولة. نلقي نظرة أولا:

استيراد org.openhab.core.library.types. * استيراد org.openhab.model.script.actions. * استيراد java.lang. قاعدة السلسلة "مراقب الرطوبة" عندما يكون الوقت كرون "0 * * * *؟" ثم var prevHigh = 0 var highHum = "" الرطوبة؟ .members.forEach [hum | logDebug ("humidity.rules" ، hum.name) ؛ if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "٪"}] logDebug ("humidity.rules"، highHum) ؛ postUpdate (مزيل الرطوبة ، عالي الارتفاع) ؛ النهاية.

جوهر القاعدة في الرطوبة؟. الأعضاء خط. الرطوبة هي اسم مجموعة لمستشعرات الرطوبة الخاصة بي ؛ .أفراد انتزاع جميع العناصر الموجودة في تلك المجموعة ؛ foreach يتكرر فوقها (بتنسيق قوس مربع غريب قد لا تكون على دراية به). بناء الجملة من القواعد هو مشتق من Xtend ، حتى تتمكن من قراءة وثائق Xtend إذا لم تتمكن من العثور على مثال للتكيف.

ربما لن تحتاج إلى ذلك - فهناك مئات من الأمثلة على القواعد:

  • شرح مفصل للقواعد على الويكي الرسمي
  • ال عينات القواعد الرسمية صفحة ويكي
  • أخذ القواعد إلى آفاق جديدة
  • عينات متقدمة في IngeniousFool.net

MQTT لـ OpenHAB وإنترنت الأشياء

MQTT هو نظام مراسلة خفيف الوزن للتواصل من آلة إلى أخرى - وهو نوع من Twitter يلائم احتياجاتك Arduinos أو Raspberry Pis للتحدث مع بعضهما البعض (على الرغم من أنه يعمل بالطبع مع أكثر من مجرد أولئك). تكتسب شعبية سريعة وتجد نفسها موطنًا مع أجهزة إنترنت الأشياء ، والتي عادة ما تكون منخفضة وحدات التحكم في الموارد الدقيقة التي تحتاج إلى طريقة موثوقة لنقل بيانات المستشعر إلى مركزك أو استقبال جهاز التحكم عن بُعد أوامر. هذا بالضبط ما سنفعله به.

ولكن لماذا إعادة اختراع العجلة؟

تم اختراع MQ Telemetry Transport في عام 1999 لربط أنابيب النفط عبر الأقمار الصناعية البطيئة اتصالات ، مصممة خصيصًا لتقليل استخدام البطارية وعرض النطاق الترددي ، مع الاستمرار في توفير موثوقة تسليم البيانات. على مر السنين ، ظلت مبادئ التصميم كما هي ، ولكن حالة الاستخدام تحولت من أنظمة مدمجة متخصصة إلى أجهزة إنترنت الأشياء العامة. في عام 2010 تم إصدار البروتوكول بدون حقوق ملكية ، وهو متاح لأي شخص للاستخدام والتنفيذ. نحب مجانية.

قد تتساءل عن سبب إزعاجنا لبروتوكول آخر - لدينا بالفعل HTTP بعد كل شيء - والذي يمكن يمكن استخدامها لإرسال رسائل سريعة بين جميع أنواع الأنظمة المتصلة بالويب (مثل OpenHAB و IFTTT ، خاصة مع الجديد قناة صانع IFTTT يتصل الآن بأي شيء: تقديم قناة Makerالاستخدامات المحتملة لـ IFTTT لا حصر لها. ولكن حتى الآن ، كان من الصعب ربطه بمشاريع الأجهزة الخاصة بك. اليوم ، كل هذا تغير. قراءة المزيد ). وستكون على حق. ومع ذلك ، فإن الحمل الزائد لخادم HTTP كبير جدًا - لدرجة أنه لا يمكنك تشغيل واحد بسهولة على متحكم مضمن مثل Arduino (على الأقل ، يمكنك ذلك ، ولكن لن يكون لديك الكثير من الذاكرة المتبقية لأي شيء آخر). MQTT هو من ناحية أخرى خفيف الوزن ، لذا فإن إرسال الرسائل حول شبكتك لن يسد الأنابيب ، ويمكن أن يتناسب بسهولة مع مساحة ذاكرة Arduino الصغيرة الخاصة بنا.

كيف يعمل MQTT؟

يتطلب MQTT خادم (يسمى "وسيط") وعميل واحد أو أكثر. يعمل الخادم كوسيط ، حيث يتلقى الرسائل ويعيد بثها لأي عملاء مهتمين.

دعنا نواصل مع تويتر للآلات القياس على الرغم من. تمامًا مثلما يمكن لمستخدمي تويتر أن يقوموا بتغريد 140 حرفًا لا معنى لها ، ويمكن للمستخدمين "متابعة" المستخدمين الآخرين لمشاهدة تدفق منسق من المشاركات ، يمكن لعملاء MQTT الاشتراك في قناة معينة لتلقي جميع الرسائل من هناك ، وكذلك نشر رسائلهم الخاصة على ذلك قناة. يشار إلى نمط النشر والاشتراك هذا باسم حانة / فرعية، على عكس التقليد خدمة الزبائن نموذج HTTP.

يتطلب HTTP أن تتواصل مع الجهاز الذي تتواصل معه ، على سبيل المثال ، مرحبًا ، ثم تحصل على الاعتراف المتبادل باستمرار أثناء الحصول على البيانات أو وضعها. باستخدام pub / sub ، لا يحتاج العميل الذي يقوم بالنشر إلى معرفة العملاء المشتركين: فهو يضخ الرسائل فقط ، ويقوم الوسيط بإعادة توزيعها على أي عملاء مشتركين. يمكن لأي عميل نشر المواضيع والاشتراك فيها ، تمامًا مثل مستخدم Twitter.

على عكس Twitter ، لا يقتصر MQTT على 140 حرفًا. إنها غير مدركة للبيانات ، لذا يمكنك إرسال أرقام صغيرة أو كتل نصية كبيرة ، أو مخططات بيانات بتنسيق JSON ، أو حتى صور وملفات ثنائية.

ليس الأمر أن MQTT أفضل من HTTP لكل شيء - ولكنه كذلك يكون أكثر ملاءمة إذا كان لدينا الكثير من أجهزة الاستشعار في جميع أنحاء المنزل ، والتي تقدم تقارير باستمرار.

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

قم بتثبيت Mosquitto على جهاز Pi

على الرغم من أن OpenHAB يتضمن عميل MQTT حتى تتمكن من الاشتراك في موضوع ما ونشر رسائل أيضًا ، إلا أنه لن يعمل كخادم. لذلك ، تحتاج إما إلى استخدام وسيط MQTT على الويب (مدفوع أو مجاني) ، أو تثبيت البرنامج المجاني على Pi. أود أن أبقي كل شيء في المنزل ، لذلك قمت بتثبيت Mosquitto على Pi.

لسوء الحظ ، فإن الإصدار المتاح عبر apt-get المعتاد قديم تمامًا. بدلاً من ذلك ، دعنا نضيف أحدث المصادر.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key add mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get تثبيت البعوض.

هذا كل ما نحتاج إلى فعله للحصول على خادم MQTT وتشغيله على الشبكة المحلية. وسيطك يعمل على المنفذ 1883 بشكل افتراضي.

تحقق من أن خادم MQTT يعمل باستخدام MQTT.fx المجاني ، وهو عبارة عن منصة مشتركة. انقر فوق رمز الإعدادات لإنشاء ملف تعريف جديد ، وأدخل عنوان IP أو اسم IP الخاص بـ Raspberry Pi. حفظ ، واضغط على اتصال. إذا تحولت إشارة المرور الصغيرة في أعلى اليمين إلى اللون الأخضر ، فأنت على ما يرام.

مثال mqttfx الشخصي

لإجراء اختبار سريع ، انقر فوق علامة التبويب "الاشتراك" ، واكتب inTopic / في مربع النص ، ثم اضغط على الإشتراك زر. أنت الآن مشترك لتلقي رسالة حول الموضوع المسمى inTopic ، على الرغم من أنه لن يعرض أي رسائل. ارجع إلى علامة تبويب النشر ، واكتب inTopic في المربع الصغير ، ورسالة قصيرة في مربع النص الكبير أدناه. نجاح ينشر عدة مرات وإلقاء نظرة على علامة التبويب "الاشتراك". من المفترض أن ترى بعض الرسائل التي ظهرت في هذا الموضوع.

اختبار InTopic MQTT

قبل أن نضيف بعض المستشعرات الفعلية إلى شبكتنا ، نحتاج إلى التعرف على مستويات الموضوعات ، والتي تمكننا من هيكلة شبكة MQTT وتصفيتها. أسماء الموضوعات حساسة لحالة الأحرف ، ولا يجب أن تبدأ بـ $ ، أو تتضمن مسافة ، أو أحرف غير ASCII - ممارسات البرمجة القياسية لأسماء المتغيرات ، حقًا.

يشير الفاصل / فاصل إلى مستوى موضوع ، وهو تسلسل هرمي ، على سبيل المثال ما يلي كلها مستويات موضوع صالحة.

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / temperature. myHome / livingRoom / الرطوبة. myHome / kitchen / temperature. myHome / kitchen / الرطوبة

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

يمكن للعملاء بعد ذلك نشر أو الاشتراك في أي عدد من مستويات الموضوعات الفردية ، أو استخدام بعض أحرف البدل الخاصة للتصفية من أعلى في الشجرة.

يستبدل حرف البدل لأي مستوى موضوع واحد. على سبيل المثال:

myHome / + / درجة الحرارة

يشترك العميل على حد سواء

myHome / livingRoom / temperature. myHome / kitchen / temperature

... ولكن ليس مستويات الرطوبة.

# هو حرف بدل متعدد المستويات ، لذلك يمكنك جلب أي شيء من مجموعة مستشعر LivingRoom باستخدام:

myHome / livingRoom / #

من الناحية الفنية ، يمكنك أيضًا الاشتراك في مستوى الجذر # الذي تحصل عليه على الإطلاق يمر عبر الوسيط ، ولكن يمكن أن يكون ذلك مثل وضع خرطوم حريق في وجهك: قليلاً ساحق. حاول الاتصال بسمسار MQTT العام من HiveMQ والاشتراك في #. تلقيت حوالي 300 رسالة في بضع ثوانٍ قبل تعطل عميلي.

نصيحة MQTT للمبتدئين: "/myHome/” هو موضوع مختلف عن "منزلي/" - تضمين الخط المائل في البداية يخلق مستوى موضوعًا فارغًا ، والذي لا يُنصح به لأنه فنيًا لأنه يمكن أن يكون مربكًا.

الآن بعد أن عرفنا النظرية ، دعنا نذهب مع Arduino و Ethernet Shield ومستشعر درجة الحرارة والرطوبة DHT11 - ربما لديك واحدة في مجموعة البداية الخاصة بك ، ولكن إذا لم يكن الأمر كذلك ، فاستبدل جهاز الاستشعار البيئي بجهاز استشعار الحركة (أو حتى زر).

نشر MQTT من اردوينو مع اتصال إيثرنت

إذا كان لديك جهاز مختلط متوافق مع Arduino مع Wi-Fi أو Ethernet مدمج ، فيجب أن يعمل ذلك أيضًا. في نهاية المطاف ، نريد طريقة أفضل / أرخص للتواصل ، والتي تتطلب استخدام اتصال شبكة في كل غرفة ، ولكن هذا يساعد على تعلم الأساسيات.

ابدأ بالتنزيل مكتبة pubsubclient من جيثب. إذا كنت قد استخدمت زر "تنزيل بتنسيق ZIP" ، فإن البنية خاطئة بعض الشيء. بفك ، إعادة تسمية المجلد إلى فقط pubsubclientثم اخرج الملفين من الملف src المجلد ونقلها لأعلى مستوى واحد إلى جذر المجلد الذي تم تنزيله. ثم انقل المجلد بأكمله إلى اردوينو / مكتبات الدليل.

إليك عينة من الكود يمكنك تعديلها: إخراج إشارة DHT11 موجود على دبوس 7. قم بتغيير عنوان IP للخادم الخاص بـ Pi على السطر التالي:

client.setServer ("192.168.1.99"، 1883) ؛

للأسف ، لا يمكننا استخدام الاسم المألوف (OpenHAB.local في حالتي) نظرًا لأن حزمة TCP / IP على Arduino بسيطة للغاية ، وإضافة رمز تسمية Bonjour سيكون هناك الكثير من الذاكرة التي لا نريد أن نضيعها. لتغيير الموضوعات التي يتم بث بيانات المستشعر عليها ، مرر لأسفل إلى هذه الأسطر:

تشار العازلة [10] ؛ dtostrf (t، 0، 0، buffer) ؛ client.publish ("openhab / himitsu / temperature" ، المخزن المؤقت) ؛ dtostrf (ح ، 0 ، 0 ، عازلة) ؛ client.publish ("openhab / himitsu / الرطوبة" ، العازلة) ؛

يتضمن الرمز أيضًا الاشتراك في قناة الأوامر. ابحث عن الخط التالي واضبطه:

client.subscribe ("openhab / himitsu / command") ؛

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

قم بتحميل الكود الخاص بك ، وقم بتوصيل Arduino بالشبكة ، واستخدم MQTT.fx للاشتراك # أو openhab / هيمتسو / # (أو أي شيء قمت بتغيير اسم الغرفة إليه ، ولكن لا تنسى تضمين # في النهاية). قريبا جدا سترى الرسائل الواردة ؛ وإذا أرسلت ON أو OFF إلى موضوع الأمر ، فسترى أيضًا شكر وتقدير.

رسائل mqtt arduino عائدة

ربط MQTT لـ OpenHAB

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

sudo apt-get install openhab-addon -inding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

وتحرير ملف التكوين لتمكين الربط.

mqtt: broker.url = tcp: // localhost: 1883. mqtt: broker.clientId = openhab

أعد تشغيل OpenHAB

إعادة تشغيل خدمة sudo openhab

ثم دعنا نضيف عنصرًا أو اثنين:

/ * مجسات MQTT * / رقم Himitsu_Temp "درجة حرارة Himitsu [٪ .1f ° C]"(Himitsu ، درجة الحرارة) {mqtt = " (Himitsu، Humidity) {mqtt = "

الآن يجب أن تفهم الشكل ؛ إنها تحصل على عنصر رقم من ربط MQTT ، حول موضوع محدد. هذا مثال بسيط ، قد ترغب في الرجوع إلى صفحة ويكي حيث يمكن أن يصبح أكثر تعقيدًا.

تهانينا ، لديك الآن أساس مجموعة أجهزة استشعار رخيصة تعتمد على Arduino. سنعيد النظر في هذا الأمر في المستقبل وسنضع Arduino على شبكة RF المنفصلة تمامًا. لقد أنشأت أيضًا نسخة متطابقة للوحات Wizwiki 7500 إذا كان لديك واحد من هؤلاء.

بيانات الثبات والرسوم البيانية

في الوقت الحالي ، ربما تكون لديك مجموعة من أجهزة الاستشعار التي تم إعدادها ، سواء من Z-Wave أو Arduinos المخصصة التي تعمل بنظام MQTT - لذا يمكنك عرض الحالة الحالية لهذه المستشعرات في أي وقت ، ويجب أيضًا أن تتفاعل مع قيمتها في قواعد. لكن الشيء المثير للاهتمام حول قيم المستشعر بشكل عام هو أنها تتغير بمرور الوقت: هذا هو المكان الذي يأتي فيه المثابرة والرسوم البيانية. إصرار في OpenHAB يعني حفظ البيانات بمرور الوقت. دعنا نمضي قدمًا ونعد RRD4J (قاعدة بيانات Round Robin for Java) ، وهذا ما يسمى لأنه يتم حفظ البيانات بطريقة robin المستديرة - يتم تجاهل البيانات القديمة لضغط حجم قاعدة البيانات.

قم بتثبيت حزم rrd4j بالأوامر التالية.

sudo apt-get install openhab-addon-persistent-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab. 

ثم قم بإنشاء ملف جديد يسمى rrd4j.persist في ال التكوينات / المثابرة مجلد. قم بلصق ما يلي:

الاستراتيجيات {everyMinute: "0 * * * *؟" everyHour: "0 0 * * *؟" EveryDay: "0 0 0 * *؟" افتراضي = everyChange. } العناصر {/ / / تستمر في كل شيء عند تحديث القيمة ، فقط افتراضي ، واستعادتها من قاعدة البيانات عند بدء التشغيل *: Strategy = everyChange ، RestOnStartup // next نحدد إستراتيجيات محددة لكل ساعة لأي شيء في مجموعة درجات الحرارة ، وكل دقيقة لدرجة حرارة الرطوبة *: Strategy = everyHour Humidity *: Strategy = everyMinute // أو يمكنك إضافة عناصر محددة هنا ، مثل // Bedroom_Humidity، JamesInOffice: Strategy = everyMinute. }

في الجزء الأول من هذا الملف ، نقوم بتحديد الاستراتيجيات ، وهو ما يعني فقط إعطاء اسم لتعبير CRON. هذا هو نفس ما فعلناه بالفعل مع My. OpenHAB ، لكننا هذه المرة ننشئ بعض الإستراتيجيات الجديدة التي يمكننا استخدامها كل يوم وكل ساعة وكل دقيقة. لم أستخدمها جميعًا حتى الآن ، ولكن قد أكون في المستقبل.

في النصف الثاني من الملف ، نخبر rr4dj عن قيم البيانات التي سيتم حفظها. بشكل افتراضي ، سنقوم بحفظ كل شيء في كل مرة يتم فيها التحديث ، ولكني قمت أيضًا بتحديد بعض الاستراتيجيات المستندة إلى الوقت لأجهزة استشعار محددة. درجات الحرارة لا أزعجني كثيرًا ، لذلك قمت بتعيين ذلك لتوفير كل ساعة فقط ، ولكن الرطوبة هي مصدر قلق كبير بالنسبة لي ، لذلك أريد أن أرى كيف تتغير كل دقيقة. إذا كانت هناك بيانات أخرى تريد حفظها تحديدًا في الأوقات المحددة ، فأضفها هنا الآن أو اضبطها حسب الحاجة.

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

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

تخزين البيانات rrd4j

بعد ذلك ، لنقم بعمل بعض الرسوم البيانية الجميلة لكل هذه البيانات. إنه سهل حقًا. لإنشاء رسم بياني لمستشعر فردي ، أضف ما يلي إلى خريطة موقعك:

عنصر المخطط = غرفة نوم_فترة الرطوبة = ح

هذا كل ما تحتاجه حرفيا. القيم الصالحة للفترة هي ح ، 4 س ، 8 س ، 12 س ، د ، 3 د ، ث ، 2 و ، م ، 2 م ، 4 د ، ص; يجب أن يكون واضحا ما تعنيه هذه. يتم تعيينه افتراضيًا إلى D ليوم كامل من البيانات إذا لم يتم تحديده.

لإنشاء رسم بياني بعناصر متعددة ، ما عليك سوى رسم اسم المجموعة بدلاً من ذلك:

عنصر المخطط = فترة الرطوبة = ح
مخطط

قد تكون مهتمًا أيضًا بمعرفة أنه يمكنك استخدام هذا الرسم البياني في مكان آخر ؛ يتم إنشاء صورة باستخدام عنوان URL التالي: http://YOUROPENHABURL: 8080 / الرسم البياني؟ المجموعات = الرطوبة والفترة = ح

كيف الخاص بك نظام OpenHAB قادم؟

هذا هو هذا الإصدار من الدليل ، ولكن لا تتوقع أن يكون هذا آخر ما تسمعه منا عن OpenHAB. نأمل أن يكون هذا ودليل المبتدئين قد أعطاك أساسًا متينًا لتطوير نظام OpenHAB الكامل الخاص بك - لكنها عملية لم تنته تمامًا أبدًا.

لحسن الحظ ، يمكن لـ OpenHAB التوسع جيدًا من عدد قليل من الأجهزة إلى المئات ، بدءًا من تعقيد القواعد البسيطة إلى أقصى حد في التشغيل الآلي للمنزل - فكيف يتقدم نظامك؟ ما الأجهزة التي اخترتها؟ ما هو المشروع الكبير التالي الذي ستعالجه؟

لنتحدث في التعليقات - ويرجى ، إذا وجدت هذا الدليل مفيدًا ، انقر فوق أزرار المشاركة هذه لإخبار أصدقائك كيف يمكنهم أيضًا إعداد نظام OpenHAB الخاص بهم.

جيمس حاصل على درجة البكالوريوس في الذكاء الاصطناعي ، وهو حاصل على شهادة CompTIA A + و Network +. وهو المطور الرئيسي لـ MakeUseOf ، ويقضي وقت فراغه في لعب كرة الطلاء VR وألعاب الطاولة. لقد كان يبني أجهزة الكمبيوتر منذ أن كان طفلاً.