إدارة مرحلات الإنترنت من RouterOS Mikrotik عبر API

MikroTik RODOS-8/9/10

أداة يدوية لإدارة وحدات PDU في أجهزة التوجيه MikroTik


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

في هذه المقالة ، سأناقش كيف يمكنك استخدام الوظائف المتقدمة لأجهزة التوجيه MikroTik لإصدار أوامر التحكم في الطاقة باستخدام PDUs (مرحلات الإنترنت) مباشرة من جهاز التوجيه عبر وظائف البرنامج النصي. بصفتي PDU ، استخدمت تتابع إيثرنت RODOS-8/9/10 لشركة OLIMP (الأجهزة متطابقة تمامًا من حيث التحكم) ، والتي بقيت بعد عدة مشاريع وكانت "في متناول اليد".

ميزات RouterOS لإدارة PDU


يمكن أن تتيح الوظائف المتقدمة لـ RouterOS:

  • قم بتشغيل / إيقاف تشغيل طاقة الأجهزة المتصلة بوحدة PDU عن بُعد
  • التحكم عن بعد في PDU عند حدوث أحداث مختلفة في الشبكة (على سبيل المثال ، إذا لم يكن هناك استجابة من أي جهاز إلى ping ، عندما يكون عميل VPN محدد ، عميل شبكة wifi ، وما إلى ذلك ، متصلًا بالموجه) ، اعتمادًا على الوقت (مجدول)
  • إخطار المسؤول أو المستخدمين بالتغيير في حالة الترحيل على وحدة PDU عن طريق البريد الإلكتروني أو رقم الهاتف (عبر الرسائل القصيرة)

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

يتم توفير القدرة على التحكم في ترحيل الإنترنت من RouterOS بواسطة الأمر fetch router ، الذي يتم وصف بناء الجملة بالتفصيل في الرابط الموجود في نهاية المقالة.

إدارة وحدات PDU عبر أمر "جلب" جهاز التوجيه


تدعم وحدات RODOS-8/9/10 PDU تنسيق عنوان URL التالي:

http: // [تسجيل الدخول]: [كلمة المرور] @ [عنوان IP] [/ protect] / rb [X-1] [action] .cgi
  • تسجيل الدخول وكلمة المرور - البيانات ذات الصلة للوصول إلى الجهاز في "الوضع المحمي" (حماية)
  • عنوان IP - عنوان IP للجهاز على الشبكة
  • / حماية - مفتاح الوصول في "الوضع المحمي". إذا تم تثبيت وصول "مفتوح" على الجهاز ، لم يتم تحديد / حماية ، كما لم يتم تحديد تسجيل الدخول وكلمة المرور
  • [الإجراء] - الإجراء المتخذ على التتابع: n-turn on، f-off off، s-تعطي نبضة تدوم 1 ثانية
  • X هو رقم المرحل الذي يتم الوصول إليه ، وتعتمد القيم المحتملة على طراز الجهاز:
    1. RODOS-8 - غير مذكور يحتوي الجهاز على مرحل واحد
    2. RODOS-9 - X = 1 أو X = 2
    3. RODOS-10 - X = [1-4]

يتم تمرير جميع المعلمات المحددة دون قوسين [].

وبالتالي ، لحل مشكلتنا في RouterOS ، لتمكين الترحيل الأول لوحدة PDU الخاصة بنا ، يكون الإدخال التالي كافيًا:

/tool fetch url="http://[:]@192.168.1.20/protect/rb0n" 

إذا أردنا استجابة من الجهاز ، فيجب أن نستخدم:

 /tool fetch url="http://[:]@192.168.1.20/protect/rb0n" mode=http dst-path="Rodosanswer.txt"; :local Rodosanswer [/file get Rodosanswer.txt contents]; 

يتم إرجاع استجابة PDU في حالتنا باستخدام آلية json إلى متغير Rodosanswer في الشكل التالي:

  • "النجاح! "- في حالة تنفيذ الأمر بنجاح
  • "خطأ" - إذا لم يتم تنفيذ الأمر (كقاعدة ، عند الوصول دون الإشارة إلى تسجيل دخول PDU وكلمة المرور في سطر عنوان URL ، إذا كان PDU في وضع "محمي")

نقوم بإنشاء وظيفة إدارة Rodos PDU في مستودع جهاز التوجيه Mikrotik


لذلك دعونا نبدأ. دعنا ننشئ وظيفة التحكم في الترحيل باستخدام مثال التحكم RODOS-10 في مستودع النصوص البرمجية لجهاز التوجيه MikroTik تحت اسم "Func_RODOS10rele":

الرمز "Func_RODOS10rele"
 ################ FuncRODOS10rele ###################### #     PDU RODOS-10 # by Sergej Serkov 23.12.2017 ####################################################### #  ,   :global FuncRODOS10rele do={ :local Sport ""; :if ([:len $Rport]=0) do={:set Sport "80";} else={:set Sport $Rport;} :global FuncPing; :local PingAnswer [$FuncPing PingAdr=$Radr]; :if ($PingAnswer="OK") do={ :local Rprotect; :local Wprotect; :local Rmode "0"; :local Nrele 0; :local Act; :if (([:len $Rlogin]=0) and ([:len $Rpass]=0)) do={:set Rprotect ""; set Wprotect "";} else={:set Rprotect ("$Rlogin".":"."$Rpass"."@"); set Wprotect "/protect";} :if ($Rstatus="on") do={:set Rmode "1"; :set Act "n"} :if ($Rstatus="off") do={:set Rmode "1"; :set Act "f"} :if ($Rstatus="inv") do={:set Rmode "1"; :set Act "s"} else={} :if ($Rmode="1") do={ :set Nrele ([:tonum $Rrele] - 1); :if (($Nrele > -1 and ($Nrele < 4)) do={ :local StrFetchRodos; :set StrFetchRodos ("http://"."$Rprotect"."$Radr".":"."$Sport"."$Wprotect"."/rb"."$Nrele"."$Act".".cgi"); do { [/tool fetch url=$StrFetchRodos mode=http dst-path="Rodosanswer.txt";]; } on-error={: log info ""; :log error ("Call ERROR function <RODOS10rele> ERROR fetch command"); :local Rodosanswer "ERROR: command ROS <fetch>"; : log info ""; :return $Rodosanswer} :log info ""; :log warning ("all "."$Wprotect "."function <RODOS10rele> set rele #"."$Rrele "."is ["."$Rstatus"."]"); :log info ""; :delay 2s; :local Rodosanswer [/file get Rodosanswer.txt contents]; /file remove Rodosanswer.txt; :return $Rodosanswer; } else={ :log info ""; :log error ("all ERROR"."$Wprotect "."function <RODOS10rele> set rele#"."$Rrele"." but NUMBER RELE MISMATCH"); :log info ""; :local Rodosanswer "ERROR: rele range mismath"; :return $Rodosanswer;} } else={ :log info ""; :log error ("all ERROR"."$Wprotect "."function <RODOS10rele> set rele#"."$Rrele"." but RELE REGIME SET MISMATCH"); :log info ""; :local Rodosanswer "ERROR: rele regime set mismatch"; :return $Rodosanswer;} } else={ :log info ""; :log error ("all ERROR"."$Wprotect "."function <RODOS10rele> but DEVICE NOT RESPONDED"); :log info ""; :local Rodosanswer "ERROR: device not responded"; :return $Rodosanswer;} } 

تستخدم وظيفة FuncRODOS10rele أيضًا في عملها وظيفة صغيرة أخرى للتحقق من عنوان الشبكة لـ ping - FuncPing ، والتي يجب أن تكون موجودة في بيئة متغيرات مستودع جهاز التوجيه أثناء تشغيل الوظيفة الرئيسية.

الرمز "Func_Ping"
 :global FuncPing do={ :local PingCount 3; #  ; :local Result [/ping $PingAdr count=$PingCount]; :delay 2s; :local PingAnswer ""; :local MainIfInetOk false; :set MainIfInetOk ((3*$Result) >= (2 * $PingCount)) :put "MainIfInetOk=$MainIfInetOk" if (!$MainIfInetOk) do={ :set PingAnswer "ERROR" } if ($MainIfInetOk) do={ :set PingAnswer "OK" } :return $PingAnswer;} 

تطبيق وظيفة التحكم في التتابع


يجب تمرير ما يلي كمعلمات للدالة FuncRODOS10rele:

  • Radr - عنوان IP للجهاز
  • Rport - منفذ http. إذا تم تكوين المنفذ القياسي لـ http (80) ، يمكن حذف هذه المعلمة
  • Rrele - عدد التتابع الذي نقوم به بإجراء (لـ RODOS-10 [1-4]) ،
    من أجل RODOS-9 [1-2] ، من أجل RODOS-8 لا يتم إرسالها)
  • Rstatus - الإجراء الذي يتم اتخاذه ("إيقاف" - تعطيل ؛ "تشغيل" - تمكين ؛ "inv" - إعطاء دفعة)
  • Rlogin - تسجيل الدخول ، Rpass - كلمة مرور الوصول إلى الجهاز
    (إذا لم يتم تعيينها ، يتم استخدام استدعاء الأمر بدون "/ حماية")

مثال 1: استدعاء وظيفة ذات وصول إلى PDU عبر منفذ http القياسي عندما يكون "الوضع المحمي" في وضع إيقاف التشغيل في الوحدة ، مما يؤدي إلى تشغيل المرحل رقم 2:
 [$FuncRODOS10rele Radr="192.168.1.20" Rrele="2" Rstatus="on"] 

مثال 2: استدعاء وظيفة ذات وصول إلى PDU عبر منفذ http 8021 الذي تم تكوينه باستخدام مجموعة "الوضع المحمي" ، وإيقاف تشغيل المرحل رقم 2
 [$FuncRODOS10rele Radr="192.168.1.20" Rport="8021" Rrele="2" Rstatus="off" Rlogin="login" Rpass="password"] 

يمكن إرجاع استجابة الدالة إلى متغير سلسلة Rodosanswer .

قد يحتوي Rodosanswer على النص التالي:
  • "النجاح!" - في حالة نجاح المكالمة وتنفيذ فريق

  • "خطأ" - في حالة التعامل الخاطئ وعدم التنفيذ

  • "خطأ: عدم تطابق نطاق rele" - إذا تم تحديد رقم ترحيل غير صالح 
	 في معلمة دالة Rrele لهذا الإصدار من الجهاز

  • "خطأ: عدم تطابق نظام rele system" - في حالة عدم التحديد أو الخطأ 
     المعلمة المحددة لوظيفة Rstatus ("on" ، "off" ، "inv")

  • "خطأ: لم يتم الرد على الجهاز" - إذا لم يكن هناك استجابة من الجهاز 
     بينغ

  • "ERROR: command ROS <fetch>" - في حالة حدوث خطأ مباشرةً
     عند تنفيذ أمر جلب عنوان URL الخاص بـ RouterOS (عادةً إن لم يكن كذلك
     رقم المنفذ المحدد في Rport ، معلمات Rlogine المحددة بشكل غير صحيح
     و / أو Rpass)

يمكنك استدعاء وظيفة التحكم في الترحيل في وحدة PDU من أي نصوص أخرى على النحو التالي:

  1. تحتاج أولاً إلى تنفيذ برامج نصية تضع الوظائف الضرورية في بيئة متغيرات مستودع جهاز التوجيه. يمكن القيام بذلك مرة واحدة ، على سبيل المثال ، عند بدء تشغيل جهاز التوجيه من RouterOS Scheduler ( / system Scheduler )

     #          /system script run Func_RODOS10rele; #      «FuncPing» # (  FuncRODOS10rele) /system script run Func_Ping; 
  2. بعد تحديد الوظائف ، يمكنك استخدامها (على وجه الخصوص ، استدعاء FuncRODOS10rele)

    كمثال ، نسمي وظيفتنا بتطبيق نبضة على المرحل رقم 4 من PDU RODOS-10:

     :global FuncRODOS10rele; :local Rodosanswer [$FuncRODOS10rele Radr="192.168.1.20" Rport="8021" Rrele="4" Rstatus="inv" Rlogin="login" Rpass="password"]; :log info $Rodosanswer; 

    سيتم إرجاع الرد إلى متغير Rodosanswer ، وفي هذه الحالة ، يتم عرضه في سجل جهاز التوجيه.

    مكتبة جاهزة من الوظائف للعمل مع وحدات PDU


    لسهولة الاستخدام ، قمت بإنشاء مكتبة وظائف لـ Rodos PDUs للنماذج 8 و 9 و 10 و 10 من تنفيذ DIN (إصدار المكتبة 1.0 بتاريخ 25 ديسمبر 2017). يتم دمج البرامج النصية للمكتبة في ملف Func_RODOS.rsc ، والذي يمكن استيراده إلى RouterOS بواسطة الأمر الطرفي للأداة المساعدة WINBOX التالي:

     /import file= Func_RODOS.rsc 

    يمكن أن تستغرق عملية الاستيراد من 20 ثانية إلى دقيقة واحدة ، اعتمادًا على طراز جهاز التوجيه Mikrotik (سرعته).
    في هذه الحالة ، لا تتأثر جميع البرامج النصية التي كانت متاحة سابقًا في جهاز التوجيه ، وتتم إضافة وظائف البرامج النصية ومكتبة Func_RODOS إلى البرامج النصية الموجودة في المستودع.

    تحتوي مكتبة Rodos.rsc الإصدار 1.0 على البرامج النصية التالية:
    • start_RODOS - يؤدي تشغيل هذا النص البرمجي إلى تعيين جميع الوظائف لمتغيرات البيئة
    • Func_Ping - وظيفة التحقق من عنوان "ping"
    • Func_Mail - وظيفة لإرسال رسالة عشوائية إلى بريد المسؤول
    • Func_RODOS8rele - RODOS-8 PDU relay control function
    • Func_RODOS8reset - وظيفة إعادة تعيين ("إعادة تعيين") لترحيل PDU RODOS-8
    • Func_RODOS9rele - ... وبالمثل للنماذج المشار إليها ...
    • Func_RODOS9 إعادة تعيين
    • Func_RODOS10rele
    • Func_RODOS10 إعادة تعيين
    • call_example [...] - أمثلة على استدعاءات وظائف المكتبة
    • Func_RODOS_lib - جميع وظائف PDU (باستثناء Ping و Mail) في ملف نصي واحد

    بعد استيراد المكتبة ، يمكنك إزالة الوظائف والبرامج النصية غير الضرورية من المستودع ، مع ترك وظائف نموذج PDU والبرامج النصية فقط مع وظائف FuncMail و FuncPing.

    في المكتبة ، لكل طراز من نماذج PDU المدعومة ، هناك أيضًا وظائف إعادة تعيين ("إعادة تعيين") ملائمة (مميزة في الأسماء على أنها "~ إعادة"). تتشابه معلمات وظائف إعادة التعيين مع معلمات وظائف تثبيت الترحيل ، باستثناء معلمة "Rstatus" ، التي لا يتم استخدامها أثناء "إعادة التعيين" والمعلمة الاختيارية Rtime ، التي تحدد الوقت بالثواني بين إيقاف تشغيل التتابع وتشغيله مرة أخرى (إذا لم يتم تمرير Rtime إلى الوظيفة ، يتم استخدامها افتراضيًا الوقت 5 ثوان).

    تعمل وظائف إعادة التشغيل على النحو التالي:
    1. يتم إرسال التتابع المحدد أمر إيقاف التشغيل
    2. ثم ينتظر ثواني Rtime مع أمر التضمين اللاحق. في هذه الحالة ، تشير وظائف إعادة التعيين إلى وظائف تثبيت التتابع المقابلة ، والتي يجب تحديدها قبل الأولى

    وبالتالي ، إذا تم تشغيل مرحل معين قبل استدعاء وظيفة إعادة التعيين ، فسيتم إيقاف تشغيله وبعد تشغيل وقت محدد مرة أخرى (وسيتم إعادة تعيين الحمل المتصل بها). يتم تنفيذ عملية مماثلة على مرحل مغلق ، وبعد تنشيط الوظيفة ، يصبح المرحل قيد التشغيل (أي ، في هذه الحالة ، تفي الوظيفة بنفسها كوظيفة لتشغيل المرحل). من الملائم استخدام وظائف إعادة التعيين لإعادة تشغيل معدات الشبكة "المعلقة" المتصلة بوحدات Rodos PDUs (نقاط الوصول ، والموجهات ، والمحولات ، والخوادم المختلفة ، وما إلى ذلك ...).

    يتم "التعليق" بتفاصيل كافية على الرموز المصدر لمكتبة Rodos.rsc (الوظائف والنصوص ، أمثلة للوصول إليها) ، والتي يمكن أن تكون مفيدة لأولئك الذين يريدون فهم المكتبة بالتفصيل (أو ربما يعدلونها بنفسك ، أو كتابة نسختك الخاصة).

    في أمثلة المكالمات لوظائف إعادة التشغيل ، بعد الانتهاء من الوظيفة ، من الممكن إرسال رسائل إلى عنوان البريد الإلكتروني لمسؤول الموجه (يمكنك تحديد عنوان بريدك في إعدادات متغير البرنامج النصي). في هذه الحالة ، تستخدم البرامج النصية خدمة بريد RouterOS من / أداة البريد الإلكتروني / tool ، والتي يجب تكوين معلماتها بشكل صحيح مسبقًا.

    الخطط المستقبلية


    في المستقبل ، سيتم توسيع مكتبة النصوص البرمجية لوحدات رودوس PDUs - من المخطط إنشاء وظائف لمحطة الطقس عبر الإنترنت RODOS-16 ، والتي تحتوي على "على متن الطائرة" ، بالإضافة إلى المرحلات وخطوط الإدخال / الإخراج ومستشعرات درجة الحرارة / الرطوبة / الضغط الجوي. ومن المخطط أيضًا تنفيذ تسجيل الوظائف ليس فقط لسجل الموجه والبريد ، ولكن أيضًا لرقم الهاتف المحدد الذي يختاره المستخدم (عن طريق إرسال رسائل SMS عبر مودم الموجه).

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

    رابط لوصف أمر الجلب لأجهزة التوجيه MikroTik
    رابط إلى وثائق وحدات PDU المستخدمة
    رابط إلى مكتبة وظائف البرنامج النصي لوحدة PDos PDOS

    سيركوف سيرجي فلاديميروفيتش ، 26 ديسمبر 2017

Source: https://habr.com/ru/post/ar410107/


All Articles