في هذه المقالة ، أصف كيفية توصيل وحدة Noolite MTRF-32 بنظام التحكم في المنزل الذكي القائم على Domoticz.
القليل عن المنزل نفسه
منزلي خاص. لقد أدخلت بالفعل بعض أساسيات المنزل الذكي القائم على Domoticz والمحركات اللاسلكية على MySensors.
في الوقت الحالي ، يتم تنفيذ مجسات فتح الباب ، وإدراج إضاءة المنزل ، وأجهزة استشعار درجة الحرارة والرطوبة في المنزل وفي الشارع ، والإعلام الصوتي عن الأحداث وتوقعات الطقس.
المنزل خشبي ، لذلك لم أرغب حقًا في التحكم في الإضاءة عن طريق إغلاق بكرات من الصين. سحب الأسلاك في أي مكان ليس خيارًا أيضًا. بعد الكثير من المداولات ، تم التحكم في الضوء على وحدات الطاقة ووحدات تحكم النولايت وبقي إلى حد ما لتكوين صداقات مع Domoticz.
في هذه اللحظة ، لفتت انتباهي
مقال عن وحدة MTRF-32 من Noolite. يدعم Domoticz إرسال طلبات HTTP GET. كما يُحتمل احتمال استخدام الوحدات مع التعليقات ، لذلك تم طلب الوحدة.
حول ما تحتاج إلى قياسه 7 مرات قبل القطع
كما اتضح ، لم أشتري ما تحتاجه تمامًا. في وقت الشراء ، كانت وحدة MTRF-32 واحدة متاحة. وأثناء قراءة المقال ، لم أر معلومات حول أصناف هذه الوحدات. بشكل عام ، كنت بحاجة إلى إصدار USB من MTRF-32-USB.
يجب توضيح32 يعني القدرة على التحكم في 32 قناة. حتى الآن ، تتوفر وحدة مع 64 قناة على موقع noolite ، مع كلا الخيارين مع أو بدون USB. سؤال لقراء MTRF-32 يمكن بطريقة أو بأخرى لتحديث MTRF-64؟
ما تم القيام به. تم تأجيل الشال حتى وضع
شخص ما المكتبة النهائية لأوقات أفضل.
لسبب ما ، لم تأت أفضل الأوقات. على الرغم من أنني اعتقدت أن النظام كان شائعًا.
المحاولة الأولى
بعد زيارة الموقع ، عثر Noolite على برنامج NooliteOne للعمل مع MTRF-64-USB. اتضح أنه يعمل من خلال منفذ كوم وأدركت أن MTRF-64 يختلف عن MTRF-64-USB مع محول USB-COM مدمج. تضمنت البرامج المجمعة برامج تشغيل من شريحة FTDI ، وكان لدى لوحتي لوحة اتصال مناسبة.
لم أقم بلصق الرقاقة. لكنني صنعت محول USB-COM من Arduino Nano الصيني مع FTDI وقمت بتوصيله باللوحة.
لم تقلع. لسبب ما ، لم يتمكن NooliteOne من العثور على المحول الخاص بي. لقد بدأت بالفعل النظر نحو de compilation عندما اكتشفت
مكتبة وحدة MT1132.
المحاولة الثانية
قارنت بين وصف الوحدات وأدركت أنها لا تختلف تقريبًا فيما يتعلق بنقل البيانات. كانت الوظيفة التي تم تنفيذها في المكتبة لـ MT1132 كافية بالنسبة لي (لم تكن هناك حاجة إلى التعليقات حتى الآن - لا توجد وحدات طاقة مناسبة).
بعد تصحيح الرمز في المكتبة ، بدأت أتلقى ردودًا من MTRF-32. ومن الغريب أن كل شيء يعمل في المرة الأولى. وإليك ما حدث في النهاية:
أردونو
#ifndef ARDUNOO_H
# تعريف ARDUNOO_H
#if المعرفة (ARDUINO) && ARDUINO> = 100
# تتضمن "Arduino.h"
#else
# تضمين "WProgram.h"
#endif
# تتضمن <SoftwareSerial.h>
فئة ArduNoo {
بايت chnl
البرامج التسلسلية ؛
عام:
ArduNoo (بايت rx ، بايت tx ، بايت ch = 0) ؛
باطلة على (بايت الفصل = -1) ؛
باطلة قبالة (بايت الفصل = -1) ؛
باطلة onoff (بايت الفصل = -1) ؛
ربط الفراغ (بايت الفصل = -1) ؛
إلغاء ربط باطل (بايت الفصل = -1) ؛
أمر منطقي (قناة بايت ، أمر بايت) ؛
} ؛
#endif
Ardunoo.cpp# تشمل <ardunoo.h>
ArduNoo :: ArduNoo (byte rx، byte tx، byte ch): ns (rx، tx) {
chnl = ch ؛
nsbegin (9600) ؛
}}
void ArduNoo :: off (byte ch) {فارغ
الأمر (الفصل 0) ؛
}}
void ArduNoo :: on (byte ch) {
الأمر (الفصل 2) ؛
}}
void ArduNoo :: onoff (byte ch) {
الأمر (الفصل 4) ؛
}}
باطل ArduNoo :: Unbind (byte ch) {
الأمر (الفصل 9) ؛
}}
باطل ArduNoo :: bind (byte ch) {
الأمر (الفصل 15) ؛
}}
bool ArduNoo :: command (byte chnl، byte command) {
بايت ثابت i ، r ، buf [17] = {171،0،0،0،0،0،0،0،0،0،0،0،0،0،0،0،0،0،0،172} ؛
عدد صحيح = 0 ؛
memset (buf + 2،0،14) ؛ / * نص رسالة واضحة * /
buf [4] = chnl ؛
buf [5] = الأمر ؛
for (i = 0؛ i <15؛ ++ i) {// 10
sum + = buf [i] ؛
}}
buf [15] = lowByte (sum)؛ // 10
buf [16] = 172؛ // 11
for (i = 0؛ i <17؛ ++ i) {
nswrite (buf [i]) ؛
}}
// رمز التصحيح
for (i = 0؛ i <17؛ ++ i) {
بينما (! ns.available ()) تأخير (10) ؛
r = ns.read () ؛
Serial.print®؛
}}
Serial.println () ؛
العودة صحيحة ؛
}}
Ardunoo.ino# تتضمن <SoftwareSerial.h>
# تشمل <ardunoo.h>
# تحديد RXpin 10
# تحديد TXpin 11
ArduNoo noo (RXpin ، TXpin) ؛
سلسلة readString ، chString ؛
إعداد باطل () {
Serial.begin (9600) ؛
}}
حلقة فارغة () {
readString = "" ؛
chString = "" ؛
بينما (Serial.available ()) {
تأخير (3) ؛ // مهلة للسماح لملء المخزن المؤقت
if (Serial.available ()> 0) {
char c = Serial.read () ؛ // يحصل على بايت واحد من المخزن المؤقت التسلسلي
readString + = c ؛ // يجعل السلسلة readString
}}
}}
if (readString.length ()> 1 && readString.length () <4) {// نتوقع حرفًا واحدًا ورقمًا أو رقمين (ch = 0-31)
for (int i = 1؛ i <readString.length ()؛ i ++) {
if (isDigit (readString [i])) {
chString.concat (readString [i]) ؛
}}
}}
//Serial.println(readString [0]) ؛
int ch = chString.toInt () ،
switch (readString [0]) {
case 'n': // on
noo.on (ch) ؛
استراحة
case 'f': // off
noo.off (الفصل) ؛
استراحة
case 'x': // toggle
noo.onoff (الفصل) ؛
استراحة
الحالة "ب": // bind
noo.bind (الفصل) ؛
استراحة
case 'u': // unind
noo.unbind (الفصل) ؛
استراحة
case 'y': // على جميع القنوات
for (int i = 0؛ i <32؛ i ++) {
noo.on (i) ؛
تأخير (100) ؛
}}
استراحة
case 'z': // off all channels
for (int i = 0؛ i <32؛ i ++) {
noo.off (ط) ؛
تأخير (100) ؛
}}
استراحة
}}
}}
}}
ترخيص مكتبة Zhumatiy Sergeyرخصة MIT (MIT)
حقوق النشر © 2014 Zhumatiy Sergey
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة
من هذا البرنامج وملفات التوثيق المرتبطة به ("البرامج") للتعامل
في البرنامج دون قيود ، بما في ذلك على سبيل المثال لا الحصر الحقوق
لاستخدام و / أو نسخ أو تعديل أو دمج أو نشر أو توزيع أو ترخيص من الباطن و / أو البيع
نسخ من البرنامج ، والسماح للأشخاص الذين هم البرنامج
مفروشة للقيام بذلك ، مع مراعاة الشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في الكل
نسخ أو أجزاء كبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، سواء كان صريحًا أو صريحًا
ضمنيًا ، بما في ذلك على سبيل المثال لا الحصر ، ضمانات قابلية التسويق ،
الملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال
يكون المؤلفون أو حاملو حقوق النشر مسؤولين عن أي مطالبة أو أضرار أو غيرها
المسؤولية ، سواء كان ذلك في دعوى العقد أو الضرر أو غير ذلك ، الناشئة عن ،
خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في
البرمجيات.
يتم إيقاف تشغيل الأوامر التي تم تنفيذها ، تشغيل ، تبديل ، تشغيل الكل ، إيقاف تشغيل الكل.
الشيء صغير ، تحتاج إلى إعطاء أوامر لمنفذ com. نظرًا لأن هذا يمثل مشكلة من Domoticz على Windows ، فقد قررت كتابة تطبيق وحدة تحكم يترجم الأوامر من البرنامج النصي lua. يتم تمرير الأوامر إلى التطبيق كمعلمات إطلاق.
noo.csباستخدام النظام ؛
باستخدام System.Collections.Generic ؛
باستخدام System.Linq ؛
باستخدام System.Text ؛
باستخدام System.IO.Ports ؛
مساحة الاسم noo
{
برنامج الفصل
{
الفراغ الثابت الرئيسي (سلسلة [] قوس)
{
if (args.Length == 2)
{
SerialPort COM = SerialPort الجديد (args [0]) ؛
COM.Open () ؛
COM.WriteLine (args [1]) ؛
COM.Close () ؛
}}
}}
}}
}}
مثال القيادة:
noo.exe com5 n4 - قم بتشغيل الضوء على القناة 4 ، ثم يتم نقله إلى لوحة Arduino على منفذ COM5. القيم الممكنة لمعلمة الزناد الثانية:
- nX - تمكين القناة X
- fX - قم بإيقاف تشغيل القناة X
- xX - تبديل القناة X
- bX - ربط كتلة الطاقة بالقناة X
- UX - فك كتلة الطاقة من القناة X
- yX - تمكين جميع القنوات ، X أي قيمة
- zX - قم بإيقاف تشغيل جميع القنوات ، X أي قيمة
النصي لوامستشعر محلي 1 = "SWHallWay"
المستشعر المحلي 2 = "SWHall"
مستشعر محلي 3 = "SWKitchen"
مستشعر محلي 4 = "غرفة نوم مشتركة"
مستشعر محلي 5 = "BTNLiteOff"
commandArray = {}
إذا (devicechanged [sensor1] == 'On') ، فعندئذٍ
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n3")
النهاية
إذا (devicechanged [sensor1] == 'Off') إذن
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f3")
النهاية
إذا (devicechanged [sensor2] == 'On') ، فعندئذٍ
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n0")
النهاية
إذا (devicechanged [sensor2] == 'Off') إذن
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f0")
النهاية
إذا (devicechanged [sensor3] == 'On') ، فعندئذٍ
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n1")
النهاية
إذا (devicechanged [sensor3] == 'Off') إذن
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f1")
النهاية
إذا (devicechanged [sensor4] == 'On') ، فعندئذٍ
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 n2")
النهاية
إذا (devicechanged [sensor4] == 'Off') إذن
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 f2")
النهاية
إذا (devicechanged [sensor5] == 'Off') إذن
os.execute ("c: \\ PROGRA ~ 1 \\ Domoticz \\ scripts \\ noo.exe com4 z9")
النهاية
عودة commandArray
مخطط الطابق الأرضي في Domoticz فيديو قصير