أود أن أوجه انتباهكم إلى سلسلة من المقالات حول وحدات التحكم في Laurent الخاصة بـ KernelChip . في هذه السلسلة ، سأخبرك عن كيفية دمج هذه الوحدات في Smart Home الخاص بك ، وكيفية تعلم كيفية إدارتها من نظام التشغيل الآلي للمنزل الرائد MajorDoMo ، من رسومات Arduino ، من نظام Arduino Mega Server وحتى كيفية تطبيق هذه الوحدات لغرض غير متوقع تمامًا - تعليم أطفالك البرمجة في المعالجة.
بشكل عام ، يمكن أن تكون الوحدات المثيرة للاهتمام في حد ذاتها مفيدة بشكل غير متوقع في الأسر إذا اتصلت بها بقدر معين من الخيال والإبداع.لماذا لوران؟
لأن هذه الوحدات تعمل بنجاح في نظام Smart Home الخاص بي لفترة طويلة (أكثر من ثلاث سنوات) وقد اكتسبت بعض الخبرة في استخدامها ولدي ما أقوله عنه. ولدي أيضًا بعض الخبرة ورمز جاهز ومختبر لإدارة هذه الوحدات ، والتي أريد مشاركتها معك.وستكون قادرًا على تطوير حلول البرامج الخاصة بك استنادًا إلى هذا الرمز ، سيكون الأمر بسيطًا جدًا ، لأنني قمت بالفعل بمعظم العمل. بالإضافة إلى ذلك ، سيتم شرح الكود بالتفصيل ، مما يساهم بالتأكيد في فهمك لكيفية عمله ، وتعلم البرمجة وبناء أنظمة المنزل الذكي.الوحدات النمطية نفسها
عندما اخترت لنفسي بعض الحلول الجاهزة لإدارة الأحمال الكهربائية من خلال الشبكة ، قدم لي لوران رشوة مع اكتمال وبساطة الحل. من أجل البدء في التحكم في الشبكة وإيقاف تشغيل الأجهزة والإضاءة ، لم يكن هناك حاجة تقريبًا إلى أي شيء. لم يكن من الضروري تعلم لغة البرمجة ، لم يكن من الضروري لحام أي شيء ، كان يكفي لتوصيل الوحدة بالشبكة المحلية ، وتوصيل الحمل بأطراف التتابع (ولا تنس تطبيق الطاقة على الوحدة نفسها) وهذا كل شيء. بعد ذلك ، كان من الممكن إرسال أوامر مباشرة من الكمبيوتر (من البرنامج الطرفي). بدأت الوحدة على الفور في تشغيل وإطفاء الضوء وفقًا لأوامري. في ذلك الوقت ، لم أكن بحاجة إلى المزيد.يمكنني أن أقول عن الوحدات نفسها أنه خلال فترة العملية بأكملها لم تكن هناك أعطال وتجمد ، كل شيء يعمل ويعمل "مثل الساعة" ، وهو في الواقع مطلوب من هذه الوحدات للعمل فقط.جودة التصميم والبناء
يكفي مجرد إلقاء نظرة على الوحدة النمطية لتوضيح أنه تم تطويرها لسبب ما ، "إذا كان فقط" ، ولكنها حاولت القيام بشيء جدير حقًا. ليس لدي أيضًا أي شكاوى حول جودة البناء ، كل شيء يتم بعناية وكما يجب أن يكون: لا توجد أجزاء ملتوية ، لطخات اللحام أو أي شيء من هذا القبيل ، كل شيء واضح وأنيق. بشكل عام ، لا تختلف جودة البناء عن مكونات الكمبيوتر "ذات العلامات التجارية" و "المصنع" اردوينو.الشيء الوحيد الذي كنت سأفعله إذا قمت بإطلاق هذه الوحدات بنفسي هو تثبيت أطراف متعددة الألوان بدلاً من أطراف أحادية اللون لتوصيل الأسلاك ، على الأقل تسليط الضوء على محطات توصيل الطاقة ، ولكن هذا هو الأمر ، التقاط صغير (كل شيء ، بالطبع ، تم توقيعه بدقة).ما هي المقالة الأولى من الدورة
تنقسم جميع المعلومات إلى ثلاث مقالات منتهية منطقيا. ستركز المقالة الأولى على دمج وحدات Laurent مع MajorDoMo ، وهي منصة مشهورة لأتمتة المنازل مفتوحة المصدر. سيتم إعطاء أمثلة محددة ورمز PHP.المقالة الثانية عن التكامل مع نظام Arduino البيئي. يمكنك إدارة الوحدات من رسوماتك الفردية أو دمج Laurent مع خادم Arduino Mega Server (الذي يعتمد أيضًا على رمز Arduino) وإدارة Laurents من واجهة ملائمة أو تلقائيًا ، وفقًا للبرنامج. سيتم أيضًا تقديم حلول جاهزة ورمز اختبار.والثالث - حول إدارة وحدات لوران من الرسومات على المعالجة. أي من سطح مكتب الكمبيوتر المنزلي. تصف المقالة نفسها كيفية زيادة اهتمام الأطفال ببرمجة التعلم والدور الذي يمكن أن تلعبه هذه الوحدات في هذه المسألة.السلسلة مكرسة لدمج وحدات لوران مع أنظمة التشغيل الآلي للمنزل ولا تأخذ بعين الاعتبار هندسة وتشغيل الوحدات نفسها. تم وصف ذلك في مقالات أخرى يمكنك أن تقرأ بها 1 ، 2 ، 3 وسيتم مناقشتها لاحقًا. نحن هنا نركز فقط على التكامل.في عملية كتابة المقالات ، تم استخدام وحدة Laurent مع البرامج الثابتة La01 وإصدار واجهة الويب LW1.0 ، أي الوحدة "القتالية" التي تعمل منذ ثلاث سنوات. في الإصدارات الجديدة من الوحدات النمطية ، قد تختلف تفاصيل تنفيذ الوحدات قليلاً ، ولكن يتم الحفاظ على التوافق مع فرق التحكم ، لذلك كل ما قيل هنا ينطبق أيضًا على التعديلات الأحدث.كيف تعمل إدارة الوحدة النمطية
تتم جميع عمليات تبادل المعلومات مع الوحدات عبر الشبكة ولبدء العمل بها تحتاج إلى إنشاء اتصال TCP / IP على المنفذ 2424. بمجرد إنشاء الاتصال ، يمكنك إرسال أوامر نصية (تسمى أوامر KE) تتحكم في الوحدة النمطية. يحتوي موقع KernelChip على وثائق تفصيلية ، بما في ذلك وصف يمكن الوصول إليه لأوامر KE.اهتم KernelChip بالمستخدمين وزود وحداته بواجهة ويب ملائمة ، ولكن هذا هو "التحكم اليدوي" ، وستزداد سهولة الحل وقيمته وفائدته بأمر إذا تعلمنا إدارة الوحدة من المنزل الذكي الخاص بنا.
واجهة الويب محمية بكلمة مرور افتراضيًا ولرؤية محتويات صفحة الويب ، يلزمك إدخال اسم المستخدم "admin" وكلمة المرور "Laurent".MajorDoMo
نظام MajorDoMo يحظى بشعبية كبيرة ولن أتناوله هنا بالتفصيل. من المفترض أنك قمت بالفعل بتثبيت هذا النظام وعملت معه لبعض الوقت. بالنسبة لأولئك الذين ليسوا على الإطلاق ، سأوضح أن هذا هو نظام التشغيل الآلي للمنزل المفتوح الذي يعمل على نظامي التشغيل Windows و Linux ويستند إلى خادم ويب وهو نوع من CMS (نظام إدارة المحتوى) ذو إمكانات واسعة و "حاد" لـ أتمتة المنزل.إن إمكانيات MajorDoMo لا نهاية لها حقًا ، وإدارة وحدات Laurent هي مجرد واحدة من مواهب هذا النظام.تفاصيل تقنية
يدمج MajorDoMo ملف laurent.class.php الموجود في الدليل\htdocs\lib\
كود كامل laurent.class.php<?
function laurent_command($host, $command, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
socket_close($socket);
return trim($res);
}
function laurent_getStat($host, $password='Laurent') {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo «socket_create() failed: reason: ». socket_strerror(socket_last_error()). "\n";
return 0;
}
$result = socket_connect($socket, $host, 2424);
if ($result === false) {
echo «socket_connect( $socket, $host, 2424) failed.\nReason: ($result) ». socket_strerror(socket_last_error($socket)). "\n";
return 0;
}
$in='$KE'."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$in='$KE,PSW,SET,'.$password."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "\n"))) {
break;
}
}
$command='$KE,DAT,ON';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
$res='';
$started=0;
while ($out = socket_read($socket, 2048, PHP_NORMAL_READ)) {
$res.=$out;
if (is_integer(strpos($out, "#TIME,"))) {
if (!$started) {
$started=1;
} else {
break;
}
}
}
$command='$KE,DAT,OFF';
$in=$command."\r\n";
socket_write($socket, $in, strlen($in));
sleep(1);
socket_write($socket, $in, strlen($in));
socket_write($socket, $in, strlen($in));
socket_close($socket);
return trim($res);
}
?>
ويحتوي على كل ما تحتاجه للعمل مع وحدات Laurent. يحتوي هذا الملف على وظائف في لغة برمجة PHP ، وربما في شكل نهائي أو مع تعديلات طفيفة ، يمكن نقله إلى أي نظام يستخدم لغة البرمجة هذه. لذلك ، إذا كان لديك مشروع Smart Home على نظام أساسي مختلف ، فيمكنك تجربة دمج Laurent مع نظامك باستخدام هذا الملف.الوظيفة الرئيسية المستخدمة للتحكم في الوحدة هيlaurent_command('< >', '<>', '< >');
على سبيل المثال ،$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
، حيث "192.168.2.19" هو عنوان IP للوحدة النمطية ، "$ KE، INF" هو الأمر نفسه ، "Laurent" هي كلمة المرور (افتراضي).تدخل نتيجة عمل الوظيفة في النتيجة $ المتغيرة ، أي استجابة الوحدة ، والتي يمكنك تحليلها وتفسيرها باستخدام أدوات لغة PHP القياسية. يتم تحديد كلمة المرور كما هي بشكل افتراضي. في حالة تغيير كلمة المرور للوصول إلى الوحدة النمطية الخاصة بك ، ستحتاج إلى استبدالها بكلمة مرور جديدة وفي استدعاء الوظيفة.يجب أن يكون كل شيء واضحًا مع الفريق ، يمكنك أخذ أي أوامر من الدليل وإدارة الوحدة النمطية كما تريد. يجب ألا يتسبب عنوان IP في حدوث أي مشاكل أيضًا. ما عليك سوى تحديد عنوان IP الذي تمتلكه وحدة Laurent حقًا.يمكنك إنهاء النظرية بهذا ، والآن سأوضح لك بمثال عملي كيفية التحكم في الضوء (أو جهاز) مباشرة من قائمة MajorDoMo.مثال عملي
كمثال عملي ، لنلق نظرة على إنشاء زرين "تشغيل" و "إيقاف" في القائمة الرئيسية لنظام MajorDoMo. باستخدام هذه الأزرار يمكنك تشغيل أو إيقاف الضوء أو أي جهاز كهربائي (هنا تحتاج فقط لتذكر أن المرحلات المثبتة على الوحدة غير قادرة على التحكم مباشرة في حمولة قوية مثل موقد كهربائي أو سخان مياه).لذا ، نقوم بإنشاء زر "تمكين" ، لذلك ننتقل إلى لوحة إدارة MajorDoMo وأدخل اسم المستخدم وكلمة المرور (المشرف / المشرف افتراضيًا) وانقر على "OBJECTS / قائمة التحكم" ثم على الزر الأخضر الكبير "إضافة قسم جديد".
بعد ذلك ، نجد القائمة المنسدلة "النوع" وحدد "زر" من مجموعة متنوعة من الأنواع المقدمة وانقر على "حفظ".
بعد ذلك ، حدد "عنصر القائمة الرئيسية" هو المكان الذي يوجد فيه زر "السنانير". لدي لوران ، ويمكنك الحصول على أي عنصر قائمة مناسب. بشكل افتراضي ، هناك "ROOT" ، مما يعني أن الزر سيكون مرئيًا على الفور ، دون النقر على أي عنصر في القائمة.في حقل الإدخال "العنوان" ، اكتب ما تريد كتابته على الزر. وأخيرًا ، في حقل الرمز ، اكتب رمز وظيفة laurent_command المألوفة لنا بالفعل:laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
هنا هو نفسه كما في المثال النظري ، فقط متغير النتيجة $ مفقود (لا نحتاج إليه) ويتم استبدال الأمر بـ '$ KE، REL، 2،1' ، مما يعني تشغيل التتابع رقم 2.نفعل نفس الشيء بالنسبة لزر "إيقاف التشغيل" ، فقط لا تنس تغيير اسم الزر وبدلاً من "$ KE ، REL ، 2.1" كتابة "$ KE ، REL ، 2.0" ، مما يعني إيقاف التتابع رقم 2:laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
هذا كل شئ. نعيد تحميل الصفحة باستخدام واجهة MajorDoMo ، يظهر زران جديدان يشغلان الأضواء (أو الجهاز) ويطفئان مباشرة من واجهة MajorDoMo بشكل جميل وبدون تأخير تقريبًا. ما أردنا تحقيقه.تحكم تلقائى
الآن دعنا نحاول التحكم في الوحدة تلقائيًا ، دون تدخل بشري. الآن سترى أنه أسهل من استخدام الأزرار للتحكم في الوحدة.
نجد في القائمة الرئيسية للوحة إدارة MajorDoMo العنصر "كائنات" ، انقر فوقه ، ثم نجد الكائن "ClockChime" وطريقته "onNewMinute". نحن بحاجة إليه. بالنسبة لأولئك الذين ليسوا على دراية ، هذه هي الطريقة "المركزية" MajorDoMo ، والتي تسمى كل دقيقة وهي مشهورة جدًا. في هذه الطريقة هناك العديد من الوظائف ومكالمات البرنامج النصي التي توفر وظائف المستخدم للنظام.
وكل ما نحتاجه هو إضافة رمزنا إلى هذه الطريقة. على سبيل المثال ، ضع في اعتبارك هذا الموقف. تتحكم وحدة Laurent في الإضاءة الليلية في فناء منزلك. وتريد ، على سبيل المثال ، أن يضيء الضوء الساعة 21.00 ، وينطفئ الساعة 7.30 صباحًا. لا شيء أبسط ، إليك الشفرة التي يجب إضافتها إلى طريقة onNewMinute:if (timeIs('21:00')) {
laurent_command('192.168.2.19', '$KE,REL,2,1', 'Laurent');
}
if (timeIs('7:30')) {
laurent_command('192.168.2.19', '$KE,REL,2,0', 'Laurent');
}
وهذا كل شيء! يجب أن تعترف أنه ليس صعبًا على الإطلاق. هذا مجرد مثال ، يمكن أن يكون منطق العمل معقدًا ومتطرفًا للغاية. ولا تنتهي مواهب وحدات Laurent مع تشغيل الأحمال وإيقافها ، ووظائفها أوسع بكثير ، لكن هذا ليس موضوع هذا المقال ، هنا نعتبر فقط قضايا التكامل مع أمثلة بسيطة.استقبال وإخراج بيانات الوحدة
والمثال الأخير سيكون كيفية الحصول على المعلومات الواردة من وحدة Laurent وعرضها على صفحة ويب MajorDoMo.MajorDoMo هو نظام كائني التوجه ويتم كل العمل فيه من خلال إنشاء الكائنات واستخدام بياناتها (المتغيرات) والأساليب (رمز البرنامج). صعب قليلا؟ في الواقع ، لا بأس والآن سترى بنفسك.
لذلك ، على سبيل المثال ، سنستخدم الكائن الموجود بالفعل "ThisComputer" وسنضيف إليه خاصية "اختبار" جديدة. للقيام بذلك ، انقر فوق عنصر القائمة "كائنات" المألوف لنا بالفعل في منطقة المشرف MajorDoMo ، وابحث عن كائن "ThisComputer" وانقر على عنصر "خصائص" ، وانتقل إلى الجزء السفلي واعثر على حقل الإدخال "إضافة خاصية جديدة" ، وأدخل "اختبار" وانقر "تحديث" (اترك القيمة فارغة).
على هذا ، يمكن اعتبار العمليات التحضيرية مكتملة ، أضفنا خاصية جديدة "اختبار" إلى كائن "ThisComputer" ، والذي سنستخدمه في تجاربنا.الآن مهمتنا هي طلب المعلومات الضرورية من وحدة Laurent ووضعها في خاصية (متغير) "اختبار" الكائن "ThisComputer". كيف نفعل ذلك؟ بسيط جدا.أضف هذا الكود إلى طريقة onNewMinute التي نعرفها بالفعل:$result = laurent_command('192.168.2.19', '$KE,INF', 'Laurent');
setGlobal('ThisComputer.test', $result);
وفي كل دقيقة سيطلب MajorDoMo من الوحدة المعلومات اللازمة وتحديث المتغير "test" ، الذي يمكننا استخدامه حسب الحاجة. على سبيل المثال ، عرض على صفحة ويب. للقيام بذلك ، نضع الكود التالي في أي مكان في الصفحة التي نحتاجها:%ThisComputer.test%
هذا ما يسمى ب. ماكرو ، عند تحميل صفحة ، يستبدل قيمة متغير في خاصية "test" للكائن "ThisComputer" بدلاً من نفسه. ونتيجة لذلك ، ترى المعلومات المرسلة بواسطة وحدة Laurent استجابة لطلبك على صفحة الويب.كيف تضيف الماكرو إلى الصفحة؟ نذهب إلى قائمة المسؤول ونحدد عنصر "الصفحات الرئيسية" ونختار أي صفحة تريدها أو ننشئ صفحة جديدة باستخدام الزر الأخضر الكبير "صفحة جديدة". وأضف الماكرو إلى أي مكان مرغوب فيه على الصفحة.المجموع الفرعي
هذا كل شيء. مسلحًا بالمعلومات الواردة في هذه المقالة ، يمكنك أن تشعر وكأنك سيد حقيقي لـ Laurents وتدمج هذه الوحدات في نظام Smart Home الخاص بك. وفي المقالة التالية من السلسلة ، ستتعلم كيفية إدارة الوحدات من رسوماتك على Arduino ومن نظام Arduino Mega Server .