جدول المحتويات:

PInt @ t10n: نظام مراقبة المصنع الذكي: 9 خطوات
PInt @ t10n: نظام مراقبة المصنع الذكي: 9 خطوات

فيديو: PInt @ t10n: نظام مراقبة المصنع الذكي: 9 خطوات

فيديو: PInt @ t10n: نظام مراقبة المصنع الذكي: 9 خطوات
فيديو: Обзор планшета Rotor 10,1 дюйма 2024, يوليو
Anonim
PInt @ t10n: نظام مراقبة المصنع الذكي
PInt @ t10n: نظام مراقبة المصنع الذكي

PI @ nt @ t10n

تم إنشاء هذا المشروع كاختبار لـ ibm iot cloud. نحن نستخدم esp-8266 لإرسال واستقبال البيانات من وإلى سحابة IBM. يحدث الاتصال بين esp و ibm cloud من خلال MQTT.

للتعامل مع جميع البيانات ولتقديم المستخدم بواجهة مستخدم نستخدم node-red. انها ودية للغاية للمبتدئين.

للبدء ، تحتاج إلى:

  • Esp-8266
  • جهاز استشعار درجة الحرارة / الرطوبة dht 11/22
  • الصمام الثنائي الحساس للضوء (قياس الضوء)
  • صفارة
  • مستشعر رطوبة الأرض
  • حساب سحابة IBM

الخطوة 1: قم بتوصيل مستشعراتك

قم بتوصيل أجهزة الاستشعار الخاصة بك
قم بتوصيل أجهزة الاستشعار الخاصة بك
قم بتوصيل أجهزة الاستشعار الخاصة بك
قم بتوصيل أجهزة الاستشعار الخاصة بك
قم بتوصيل أجهزة الاستشعار الخاصة بك
قم بتوصيل أجهزة الاستشعار الخاصة بك

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

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

جميع أجهزة الاستشعار الأخرى متصلة رقميًا. يرسل مستشعر DHT11 البيانات رقميًا ونستخدم مكتبة dht لتفسير بيانات المستشعرات.

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

الخطوة 2: الكود

هذا هو رسم اردوينو الذي استخدمناه. يمكنك التعرف على كيفية عمل الكود إذا قرأت التعليقات.

#include ArduinoJson.h # include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h

#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define moistPin 4 #define DHTType DHT11 DHT dht (DHTPin، DHTType)؛ ESP8266WiFiMulti WiFi متعدد ؛ درجة حرارة تعويم = 0 ؛ الرطوبة العائمة = 0 ؛ رطوبة منطقية = خطأ ؛ ضوء int = 0 ؛ const char * ssid = STASSID ؛ const char * password = STAPSK ؛ const char * mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com" ؛ WiFiClient espClient ؛ عميل PubSubClient (espClient) ؛ طويل الأمد Msg = 0 ؛ char msg [50]؛ قيمة int = 0 ؛ #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d: cmfwqk: ESP8266: ESP" #define MQTT_USER "use-token-authT #define" MQTT_USER " iot-2 / evt / status / fmt / json "#define MQTT_TOPIC_DISPLAY" iot-2 / cmd / update / fmt / json "# include" stepses.h "// ملاحظات في اللحن: // note durations: 4 = ربع ملاحظة ، 8 = النوتة الثامنة ، إلخ: int shortTone = 80 ؛ int longTone = 200 ؛ int standardDelay = 50 ؛ int delayBetweenBars = 50 ؛ setup_wifi باطل () {delay (10) ؛ // نبدأ بالاتصال بشبكة WiFi Serial.println () ؛ Serial.print ("الاتصال بـ") ؛ Serial.println (ssid) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("متصل بشبكة WiFi") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ } رد نداء باطل (char * topic، byte * payload، unsigned int length) {Serial.print ("الرسالة وصلت [")؛ Serial.print (الموضوع) ؛ Serial.print ("]") ؛ لـ (int i = 0؛ i <length؛ i ++) {Serial.print ((char) payload ) ؛ } Serial.println () ، StaticJsonDocument jsonBuffer ؛ إلغاء تسلسل Json (jsonBuffer ، الحمولة) ؛ JsonObject root = jsonBuffer.as () ، if (root ["song"] == "darude") {darude ()؛ } if (root ["song"] == "starwars") {starwars ()؛ } if (root ["song"] == "jacques") {Serial.println ("jakakakakkakaka") ؛ جاك () ؛ }} إعادة الاتصال () {// Loop حتى نعيد الاتصال أثناء (! client.connected ()) {Serial.print ("Attempting MQTT connection…") ؛ // حاول الاتصال إذا (client.connect (MQTT_DEVICEID، MQTT_USER، MQTT_TOKEN)) {Serial.println ("متصل") ؛ client.subscribe (MQTT_TOPIC_DISPLAY) ، } else {Serial.print ("failure، rc =")؛ Serial.print (client.state ()) ؛ Serial.println ("حاول مرة أخرى خلال 5 ثوانٍ") ؛ // انتظر 5 ثوانٍ قبل إعادة محاولة التأخير (5000) ؛ }}} void setup () {Serial.begin (9600)؛ pinMode (الرطوبة ، الإدخال) ؛ dht.begin () ، pinMode (0 ، الإخراج) ؛ setup_wifi () ، client.setServer (mqtt_server ، MQTT_PORT) ، client.setCallback (رد الاتصال) ؛ تأخير (20) ؛ } حلقة باطلة () {إذا (! client.connected ()) {إعادة الاتصال ()؛ } client.loop () ؛ رطوبة = ديجيتال ريد (رطوبة بين) ؛ ضوء = analogRead (A0) ؛ temp = dht.readTemperature () ؛ الرطوبة = dht.readHumidity () ؛ Serial.println ("درجة الحرارة =" + سلسلة (درجة الحرارة ، 1) + "\ n الرطوبة =" + سلسلة (الرطوبة ، 1) + "\ n الرطوبة:" + سلسلة (رطوبة) + "\ n ضوء:" + سلسلة (ضوء)) ؛ حمولة السلسلة = "{" ts / ": {" t / ":" + سلسلة (درجة الحرارة ، 1) + "، \" h / ":" + سلسلة (الرطوبة ، 1) + "} ، \" مللي ثانية / ": {" m / ":" + سلسلة (رطوبة) + "}، \" ls / ": {" l / ":" + سلسلة (ضوء) + "}}"؛ Serial.println (الحمولة) ؛ if (client.publish (MQTT_TOPIC، (char *) payload.c_str ())) {Serial.println ("publish ok") ؛ } else {Serial.println ("فشل النشر")؛ } تأخير (2000)؛ } void darude () {tone (0، NOTE_B3، shortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_A3، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ } starwars () باطل {beep (NOTE_A4، 500)؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 650) ؛ تأخير (500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_F5، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_GS4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 650) ؛ } نغمة باطلة (ملاحظة ، مدة int) {// تشغيل النغمة على نغمة buzzerPin (0 ، ملاحظة ، المدة) ؛ التأخير (المدة) ؛ noTone (0) ، تأخير (standardDelay) ؛ } void heartOfCourage () {} void jacques () {beep (NOTE_C4، 500)؛ تنبيه (NOTE_D4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_D4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ }

الخطوة 3: Ibm Cloud

سحابة IBM
سحابة IBM

تحتاج إلى إعداد مثيل IBM-cloud. يمكنك العثور على معلومات حول هذا عبر هذا الرابط: جيثب.

الخطوة 4: Node-RED

نحن نستخدم node-red للتعامل مع منطق الأعمال العام لدينا وتصور هذه البيانات في واجهة مستخدم سهلة الاستخدام.

الخطوة 5: إعداد Node-RED: Light

إعداد Node-RED: خفيف
إعداد Node-RED: خفيف

قم باستيراد الكود التالي إلى مشروعك.

[{"id": "deb0d57.1c46528" ، "type": "tab" ، "label": "Light" ، "معطل": false ، "info": ""} ، {"id": "8a0fcaac. 4e54 "،" type ":" ibmiot in "،" z ":" deb0d57.1c46528 "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 120، "y": 62، "wires":

الخطوة 6: إعداد Node-RED: درجة الحرارة

إعداد Node-RED: درجة الحرارة
إعداد Node-RED: درجة الحرارة

قم باستيراد الكود التالي إلى مشروعك.

[{"id": "fbad3799.f0e0e"، "type": "tab"، "label": "درجة الحرارة"، "معطل": false، "info": ""}، {"id": "b8618eb9. 1c9288 "،" type ":" ibmiot in "،" z ":" fbad3799.f0e0e "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 145.5، "y": 49، "wires":

الخطوة 7: إعداد Node-RED: الرطوبة

إعداد Node-RED: الرطوبة
إعداد Node-RED: الرطوبة

قم باستيراد الكود التالي إلى مشروعك.

[{"id": "144cd53b.c00473"، "type": "tab"، "label": "الرطوبة"، "معطل": false، "info": ""}، {"id": "d958f58b. 2678e "،" type ":" ibmiot in "،" z ":" 144cd53b.c00473 "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 142، "y": 87، "wires":

الخطوة 8: إعداد Node-RED: الرطوبة

إعداد Node-RED: الرطوبة
إعداد Node-RED: الرطوبة

قم باستيراد الكود التالي إلى مشروعك.

[{"id": "4ee73536.ec6fc4"، "type": "tab"، "label": "Moisture"، "تعطيل": false، "info": ""}، {"id": "a6daac3e. 2d5268 "،" type ":" ibmiot out "،" z ":" 4ee73536.ec6fc4 "،" المصادقة ":" boundService "،" apiKey ":" "،" outputType ":" cmd "،" deviceId ":" ESP "،" deviceType ":" ESP8266 "،" eventCommandType ":" update "،" format ":" json "،" data ":" msg "،" qos ": 0 ،" name ":" Send command to ESP "،" service ":" Register "،" x ": 804.1944580078125،" y ": 383.0000305175781،" wires ": }، {" id ":" 4134fdb7.18e9b4 "،" type ":" ibmiot in "، "z": "4ee73536.ec6fc4" ، "المصادقة": "boundService" ، "apiKey": "" ، "inputType": "evt" ، "logicalInterface": "" ، "ruleId": "" ، "deviceId": "ESP"، "applicationId": ""، "deviceType": "ESP8266"، "eventType": "update"، "commandType": ""، "format": "json"، "name": "Get data من ESP "،" service ":" مسجلة "،" allDevices ": false،" allApplications ":" "،" allDeviceTypes ": false،" allLogicalInterfaces ":" "،" allEvents ": true،" allCommands ":" " ، "allFormats": false، "qos": 0، "x": 115، "y": 76، "wires":

الخطوة 9: لقد انتهيت

تهانينا! لديك الآن نظام مراقبة مصنع عامل.

إذا كان لديك أي سؤال ، فلا تتردد في الاتصال بنا!