دليل OpenHAB للمبتدئين الجزء 2: ZWave و MQTT والقواعد والرسوم البيانية

دليل OpenHAB للمبتدئين الجزء 2: ZWave و MQTT والقواعد والرسوم البيانية

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





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





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

مقدمة إلى Z-Wave

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





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

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



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB لإنشاء بوابة (أبيض عادي) اشترِ الآن على أمازون

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

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





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

تثبيت روابط HABmin و Z-Wave

نظرًا لأن 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 الخاص بك).

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

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

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

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

التبديل Dehumidifier_Switch 'مزيل الرطوبة' {zwave = '3: command = switch_binary'}

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

ممتاز.

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

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

لهذا ، وجدت نموذجًا للتكوين في iwasdot.com ، و multisensor الخاص بي موجود على Node 2.

Number Hallway_Temperature 'درجة حرارة المدخل [٪ .1f ° C]' (المدخل ، درجة الحرارة) {zwave = '2: 0: command = sensor_multilevel، sensor_type = 1، sensor_scale = 0'}

Number Hallway_Humidity 'Hallway Humidity [٪ .0f ٪٪]' (المدخل ، الرطوبة) {zwave = '2: 0: command = sensor_multilevel، sensor_type = 5'}

Number Hallway_Luminance 'Hallway Luminance [٪ .0f Lux]' (Hallway) {zwave = '2: 0: command = sensor_multilevel، sensor_type = 3'}

Contact Hallway_Motion 'Hallway Motion [٪ s]' (المدخل ، الحركة) {zwave = '2: 0: command = sensor_binary، response_to_basic = true'}

Number sensor_1_battery 'Battery [٪ s ٪٪]' (Motion) {zwave = '2: 0: command = battery'}

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

لوجيتك هارموني ملزم

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

ابدأ بتثبيت ملفات الربط الثلاثة التي تجدها باستخدام 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 وأضف قسمًا جديدًا على النحو التالي:

########## تحكم HARMONY عن بعد ##########

Harmonyhub: المضيف = 192.168.1.181 أو عنوان IP الخاص بك

Harmonyhub: اسم المستخدم = your-Harmony-email-login

Harmonyhub: كلمة المرور = كلمة السر خاصتك

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

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

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

/ * Harmony Hub * /

String Harmony_Activity 'Harmony [٪ s]' (Living_Room) {Harmonyhub = '* [currentActivity]'}

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

تبديل العنصر = تعيينات Harmony_Activity = [PowerOff = 'إيقاف' ، التمرين = 'تمرين' ، 13858434 = 'تلفزيون' ، كاريوكي = 'كاريوكي']

أفضل تطبيق للصور لنظام التشغيل windows 10

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

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

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

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

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

حكم 'ضوء المكتب عند حضور جيمس'

متي

تم تغيير عنصر JamesInOffice من OFF إلى ON

من ثم

sendCommand (Office_Hue ، تشغيل)

نهاية

حكم 'ضوء المكتب عندما يغادر جيمس'

متي

تم تغيير عنصر JamesInOffice من ON إلى OFF

من ثم

sendCommand (Office_Hue ، إيقاف)

نهاية

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

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

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

حكم 'تمرن كل صباح'

متي

الوقت كرون 0 0 8 1/1 *؟ * '

من ثم

HarmonyStartActivity ('تمرين')

نهاية

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

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

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

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

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

استيراد org.openhab.core.library.types. *

استيراد org.openhab.model.script.actions. *

استيراد java.lang.String

قاعدة 'مراقبة الرطوبة'

عندما كان الوقت كرون '0 * * * *؟'

من ثم

فار prevHigh = 0

var highHum = '

الرطوبة؟. الأعضاء. لكل [همهمة |

logDebug ('humidity.rules'، hum.name) ؛

إذا (hum.state كـ DecimalType> prevHigh) {

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '٪'

}

99 بالمائة من استخدام القرص windows 10

]

logDebug ('قواعد الرطوبة' ، ارتفاع Hum) ؛

postUpdate (Dehumidifier_Needed، highHum) ؛

نهاية

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

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

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

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

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

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

قد تتساءل عن سبب إزعاجنا لبروتوكول آخر - لدينا بالفعل HTTP بعد كل شيء - والذي يمكن استخدامه لإرسال رسائل سريعة بين جميع أنواع الأنظمة المتصلة بالويب (مثل OpenHAB و 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 إضافة mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

سودو apt-get install mosquitto

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

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

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

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

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

قسم غير مصنف في الرياض

myHome / غرفة المعيشة / درجة الحرارة

myHome / غرفة المعيشة / الرطوبة

myHome / مطبخ / درجة حرارة

myHome / المطبخ / الرطوبة

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

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

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

myHome / + / temperature

سيشترك العميل في كليهما

myHome / غرفة المعيشة / درجة الحرارة

myHome / مطبخ / درجة حرارة

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

# عبارة عن حرف بدل متعدد المستويات ، لذا يمكنك إحضار أي شيء من مصفوفة مستشعر غرفة المعيشة باستخدام:

myHome / غرفة المعيشة / #

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

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

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

نشر MQTT من Arduino مع اتصال Ethernet

إذا كان لديك جهاز هجين متوافق مع 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 ، المخزن المؤقت) ؛

client.publish ('openhab / himitsu / temperature' ، المخزن المؤقت) ؛

dtostrf (ح ، 0 ، 0 ، المخزن المؤقت) ؛

client.publish ('openhab / himitsu / humidity'، buffer) ؛

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

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

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

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

MQTT ملزم لـ OpenHAB

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

sudo apt-get install openhab-addon-ملزم-mqtt

sudo chown -hR openhab: openhab / usr / share / openhab

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

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

mqtt: broker.clientId = openhab

أعد تشغيل OpenHAB

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

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

/ * مجسات MQTT * /

Number Himitsu_Temp 'درجة حرارة Himitsu [٪ .1f ° C] '(Himitsu ، درجة الحرارة) {mqtt ='<[broker:openhab/himitsu/temperature:state:default]'}

Number Himitsu_Humidity'Himitsu Humidity [٪ .1f ٪٪] '(Himitsu ، الرطوبة) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

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

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

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

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

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

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

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

الإستراتيجيات {

كل دقيقة: '0 * * * *؟'

كل ساعة: '0 0 * * *؟'

كل يوم: '0 0 0 * *؟'

الافتراضي = everyChange

}

العناصر {

// استمر في كل شيء عندما يتم تحديث القيمة ، بشكل افتراضي فقط ، واستعدها من قاعدة البيانات عند بدء التشغيل

*: إستراتيجية = كل تغيير ، استعادة التشغيل

// بعد ذلك نحدد استراتيجيات محددة لكل ساعة لأي شيء في مجموعة درجة الحرارة ، وكل دقيقة للرطوبة

جيد جدا 2.00 دولار هوائي محلي الصنع للتلفزيون عالي الوضوح

درجة الحرارة *: استراتيجية = كل ساعة

الرطوبة *: استراتيجية = كل دقيقة

// بدلاً من ذلك ، يمكنك إضافة عناصر محددة هنا ، مثل

// Bedroom_Humidity، JamesInOffice: إستراتيجية = everyMinute

}

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

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

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

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

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

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

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

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

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

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

كيف حال لك نظام OpenHAB قادم؟

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

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

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

نأمل أن تعجبك العناصر التي نوصي بها ونناقشها! لدى MUO شراكات تابعة ورعاية ، لذلك نتلقى حصة من الإيرادات من بعض مشترياتك. لن يؤثر ذلك على السعر الذي تدفعه ويساعدنا في تقديم أفضل توصيات المنتجات.

يشارك يشارك سقسقة بريد الالكتروني دليل المبتدئين لتحريك الكلام

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

اقرأ التالي
مواضيع ذات صلة
  • افعلها بنفسك
  • المنزل الذكي
  • اردوينو
  • أتمتة المنزل
  • وثيقةطويلة
  • دليل Longform
نبذة عن الكاتب جيمس بروس(تم نشر 707 مقالات)

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

المزيد من James Bruce

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك