اقفز إلى السحابة. بناء حل ميزانية إنترنت الأشياء على NodeMCU + Azure IoT Hub

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



ملاحظة: نواصل سلسلة المنشورات من إصدارات كاملة من المقالات من مجلة هاكر. حفظ الإملاء وعلامات الترقيم للمؤلف.


أعطي الكلمة للمؤلف.


نظرًا لأنني أعمل في مجموعة تكنولوجيا Microsoft ، فأنا أستخدم Azure Functions و Table Storage لإنشاء الجزء السحابي من حل إنترنت الأشياء ، ولكن يمكن استخدام PoC لـ NodeMCU و Lua أيضًا مع موفري خدمات السحابة الإلكترونية الآخرين لحلول إنترنت الأشياء.


INFO


تعد Expressif NodeMCU واحدة من أكثر اللوحات الأم بأسعار معقولة مع Wi-Fi و micro USB ومبرمج مدمج. لأنه يقوم على وحدة ESP8266. يمكن شراء لوحة الجيل الثاني لحوالي 6-7 دولارات. يمكنك العمل مع اللوحة من Arduino IDE. بالإضافة إلى ذلك ، يدعم المجلس لغة برمجة نصية تسمى Lua (مترجمة من البرتغالية باسم "القمر").


قم بتوصيل وتكوين الجهاز


من أجل التعرف على الجهاز تحت نظام Windows ، تحتاج إلى تنزيل برنامج التشغيل من الرابط التالي: USB CP210x إلى UART Bridge VCP Drivers


سرعة المنفذ التسلسلي NodeMCU القياسية هي 115'200bps. يمكنك ضبط سرعة مختلفة ، عند إعادة ضبط الجهاز لأول مرة ، سيعود إلى 115200.
من المهم أن يتم ضبط السائق على نفس السرعة بالضبط:



البرامج الثابتة


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


إذا كنت بحاجة إلى إرسال البيانات إلى السحابة ، فإن الوظائف اللازمة للاختيار هي SNTP و MQTT و HTTP (WiFi ، ومؤقت ، وملف ، و GPIO ، وشبكة ، وعقدة ، و UART محددة بالفعل بشكل افتراضي). من الضروري أيضًا وضع علامة على دعم TLS / SSL كمطلوب في خيارات متنوعة
يأتي الرابط مع ملف bin إلى البريد. بتعبير أدق ، يأتي رابطان على الفور. واحد مع صورة تدعم عمليات النقطة العائمة ، والثاني مع صورة غير داعمة.


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


يمكن وميض البرامج الثابتة باستخدام أداة PyFlasher . Py في الاسم يعني أن التطبيق مكتوب بلغة Python. هناك أيضًا nodemcu-flasher ، ولكن لم يتم تحديثه لفترة طويلة. لم اجربها


تبدو نافذة PyFlasher كما يلي:



يتم تحديد وضع الفلاش بناءً على اللوحة التي لديك. تستخدم معظم اللوحات الأم الحديثة المعتمدة على وحدات ESP8266 ESP-12 و ESP32 وضع DIO. يناسب ESP8266 01 إلى 07 وضع QIO الأسرع. يتم استخدام DOUT بواسطة ESP8285.


إعداد IDE


قم بتنزيل IDE المجاني على رابط ESPlorer . بدلاً من ذلك هناك ZeroBrane Studio . لقد أحببت برنامج ESPlorer أكثر من أي شيء آخر ، لذا سأعطي مثالاً للعمل معه. ESPlorer مكتوب بلغة JAVA. واجهة التطبيق



على الجانب الأيسر يوجد الرمز والإعدادات وبعض الوظائف المشابهة الأخرى. على اليمين توجد نافذة المراقبة وأوامر إدارة الجهاز. افتح التطبيق ، حدد المنفذ. قم بتعيين السرعة التي سيتم بها التبادل (على الأرجح 115200) وانقر فوق فتح.



للإحماء ، يمكنك تشغيل نص برمجي بسيط يومض مع LED مدمج:


LED = 0 gpio.mode(LED, gpio.OUTPUT) function flash_led() gpio.write(LED, gpio.LOW) tmr.delay(500000) gpio.write(LED, gpio.HIGH) end tmr.alarm(1, 1000, tmr.ALARM_AUTO, flash_led) 

إذا لم يكن على اللوحة الخاصة بك مؤشر LED مدمج (أو كنت متعبًا تمامًا من أمثلة LED الوامضة =) ، فيمكنك محاولة تنفيذ برنامج نصي أبسط يعرض الخط:


 print("Hello from Lua!") 

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


بعد تنزيل الملف ، يمكنك تنفيذه عن طريق إرسال الأمر:


 dofile("test.lua") 

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


إذا كنت تريد أن يبدأ الملف مباشرة بعد تشغيل اللوحة ، فقم بإنشاء ملف يسمى init.lua.


تكوين جزء السحابة للعمل مع الجهاز


دعونا نترك الجهاز لبعض الوقت وننشئ ضعفه في السحابة. في الآونة الأخيرة ، يمكن إنشاء جهاز مزدوج مباشرة على بوابة Azure ، باستخدام الوظيفة الجديدة. في مجموعة إعدادات محور إنترنت الأشياء المسماة المستكشفون ، تحتاج إلى تحديد أجهزة إنترنت الأشياء والنقر على "+ إضافة"


لتوصيل الجهاز بمحور إنترنت الأشياء ، نحتاج إلى إنشاء SAS (توقيع الوصول المشترك). لإنشاء SAS ، يتم استخدام مفتاح مزدوج للجهاز ، والذي يمكن الحصول عليه باستخدام بعض الأدوات المساعدة (مستكشف الأجهزة ، مستكشف iothub ، IoT Extension لـ Azure CLI 2.0). ولكن أسهل طريقة هي الحصول على المفتاح في نفس المكان ، على بوابة Azure ، من خلال الانتقال إلى IoT Hub -> IoT Devices.



يمكن إنشاء SAS على الجهاز ، أو يمكن إنشاؤه باستخدام أي من خدماته عبر الإنترنت. إذا كنت تستخدم SDK ، فيمكنه إنشاء SAS لك تلقائيًا (يكفي تحديد المفتاح المزدوج للجهاز في الرمز).



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


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


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


إنشاء وظيفة Azure لإنشاء SAS


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


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


يمكنك إنشاء تطبيق Azure Function على البوابة عن طريق ملء نموذج قصير



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


لاحظ أنه جنبًا إلى جنب مع إنشاء الوظيفة ، يتم أيضًا إنشاء تخزين بيانات مساعد (تخزين).


بعد إنشاء تطبيق الوظائف ، يمكنك إنشاء الوظيفة نفسها. في هذه الحالة ، نحتاج إلى وظيفة مثل Webhook + API. قد تكون الوظيفة متاحة للجميع (وصول مجهول) ، وقد تكون متاحة فقط لأصحاب رمز خاص. يمكن الحصول على الكود من النافذة التي تحتوي على الوظيفة بالنقر فوق ارتباط عنوان الوظيفة </> Get:



يمكن كتابة الوظائف بلغات مختلفة. أفضل C #.


 using System.Net; using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Common.Security; using System.Globalization; using System.Security.Cryptography; using System.Text; public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) { string deviceid = req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "deviceid", true, CultureInfo.InvariantCulture) == 0).Value; string hash = req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "hash", true, CultureInfo.InvariantCulture) == 0).Value; if (String.IsNullOrEmpty(deviceid)) return req.CreateResponse(HttpStatusCode.BadRequest, "device id missing"); if (String.IsNullOrEmpty(hash)) return req.CreateResponse(HttpStatusCode.BadRequest, "hash missing"); var resourceUri ="ArduinoDemoHub.azure-devices.net/devices/"+deviceid; // taken from IoT Hub user with Connect devices rights (not from Device Explorer) var connectionString = "HostName=ArduinoDemoHub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=cuYBKc42lfJr4oSRGQGQ8IiKWxGQkLre7rprZDZ/ths="; var registryManager = RegistryManager.CreateFromConnectionString(connectionString); var device = await registryManager.GetDeviceAsync(deviceid); var key = device.Authentication.SymmetricKey.PrimaryKey; HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes("somerandomkeyKJBWyfy4gski")); var hashedkey = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(key))); if (hashedkey!=hash) return req.CreateResponse(HttpStatusCode.BadRequest, "wrong hash"); SharedAccessSignatureBuilder sasBuilder = new SharedAccessSignatureBuilder() { Key = key, Target = resourceUri, TimeToLive = TimeSpan.FromDays(Convert.ToDouble(7)) }; var SAS = sasBuilder.ToSignature(); return req.CreateResponse(HttpStatusCode.OK, SAS); } 

نقوم بإنشاء ملف project.json وإضافة المحتويات التالية إليه:


 { "frameworks": { "net46":{ "dependencies": { "Microsoft.Azure.Devices": "1.4.1" } } } } 

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



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



وحدد سلسلة الاتصال هناك. بعد ذلك ، يمكنك "الحصول عليه" من المتجر الآمن باستخدام


 ConfigurationManager.ConnectionStrings["___"].ConnectionString 

على الجهاز ، نحتاج إلى حفظ علامة التجزئة. ولكن عليك أولاً ترميز الأحرف. HttpUtility.UrlEncode من System.Web space سيساعدنا في ذلك.


 hashedkey = HttpUtility.UrlEncode(hashedkey); 

سنرسل الطلب باستخدام Get ، ولكن لا يمكن تمرير جميع الأحرف كقيمة معلمة.


كتابة كود لإرسال البيانات إلى السحابة


كتبت كودًا صغيرًا عن إرسال لوا البيانات إلى السحابة. كانت النتيجة نوعًا من PoC. يمكنك استخدامه وتعديله حسب احتياجاتك.
أنشئ ملفين init.lua و SendDataToCloud.lua
محتويات الأول:


 --    print('init.lua ver 1.2') wifi.setmode(wifi.STATION) print('set mode=STATION (mode='..wifi.getmode()..')') print('MAC: '..wifi.sta.getmac()) print('chip: '..node.chipid()) print('heap: '..node.heap()) --  Wifi station_cfg={} station_cfg.ssid="_SSID" station_cfg.pwd="___" station_cfg.save=false wifi.sta.config(station_cfg) wifi_status_codes = { [0] = "Idle", [1] = "Connecting", [2] = "Wrong Password", [3] = "No AP Found", [4] = "Connection Failed", [5] = "Got IP" } sntp_connect_status_codes = { [1] = "DNS lookup failed", [2] = "Memory allocation failure", [3] = "UDP send failed", [4] = "Timeout, no NTP response received" } --    Wi-fi (   ) tmr.alarm(6,1000, 1, function() if wifi.sta.getip()==nil then print("Waiting for IP address! (Status: "..wifi_status_codes[wifi.sta.status()]..")") else print("New IP address is "..wifi.sta.getip()) tmr.stop(6) --    NTP sntp.sync({'pool.ntp.org'}, function(sec, usec, server) print("Clock Synced: "..sec..", "..usec..", "..server) tls.cert.verify(false) --    dofile('SendDataToCloud.lua') end, function(error_code) print("Clock Sync Failed: "..sntp_connect_status_codes[error_code]) end, 1 --      ) end end ) 

يتصل هذا الملف بالشبكة وينفذ الرمز من ملف SendDataToCloud.lua إذا كان الاتصال ناجحًا.


يجب تحديد بيانات نقطة وصول Wi-Fi الخاصة بك كقيم station_cfg.ssid و station_cfg.pwd.


في الملف التالي ، تحتاج إلى تغيير اسم الجهاز وإنترنت الأشياء للمحور (متغيرات DEVICE و IOTHUB). يحتوي متغير funcurl على عنوان وظيفة إنشاء SAS وتجزئة مفتاح الجهاز (الذي تم ترميزه مسبقًا باستخدام HttpUtility.UrlEncode) كقيمة لمعلمة التجزئة


 --  DEVICE = "LuaDevice" IOTHUB = "ArduinoDemoHub.azure-devices.net" PORT = 8883 USER = "ArduinoDemoHub.azure-devices.net/"..DEVICE.."/api-version=2016-11-14" telemetry_topic="devices/"..DEVICE.."/messages/events/" connected = false local headers = 'Content-Type: application/x-www-form-urlencoded\r\n'.. 'Accept: */*\r\n'.. 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0' funcurl = "https://arduinofunction.azurewebsites.net/api/GenerateSASFunction?code=Jn7j54PbR31BSRa0UZrDwp4ZEltjmWHmblG9zLo0Ne0tyGM7w/wQ7w==" funcurl = funcurl.."&hash=oJzykimyQsTPtzgJxYq90Xfqmw1rZTPTCH%2bJ5sSurKI%3d" funcurl = funcurl.."&deviceid="..DEVICE tmr.alarm(1,5000, 1, function() http.get(funcurl, headers, function(code, data, header) if (code < 0) then print("HTTP request failed") else sas = true print(code, data) if string.match(data, "Shared") then tmr.stop(1) SAS = string.sub(data,2,string.len(data)-1) print(SAS) connect(SAS) end end end) end) function connect(SAS) --   MQTT client = mqtt.Client(DEVICE, 240, USER, SAS) --   IoTHub    MQTT print ("Connecting to MQTT broker. Please wait...") tmr.alarm(2,1000, 1, function() client:connect(IOTHUB, PORT, 1, -- Callback     function(client) tmr.stop(2) print("Connected to MQTT: "..IOTHUB..":"..PORT.." as "..DEVICE) connected = true senddata() end, -- Callback    function(client, reason) print("Error Connecting: "..reason) end ) end) end function senddata() math.randomseed(1) tmr.alarm(3, 1000, tmr.ALARM_AUTO, publish_data) --   ,     callback client:on("offline", function(client) print("MQTT Disconnected.") connected = false end) end --      function publish_data() if connected == true then somedata = math.random(1,100) --     payload = "{ \"deviceId\" : \""..DEVICE.."\",".. "\"iotdata\" :"..somedata.."}" --   client:publish(telemetry_topic, payload, 1, 0, function(client) print("Data published successfully.") end) end end 

يتم إرسال البيانات دون استخدام Azure SDK ، لذا يمكنك استخدام هذا الرمز ليس فقط لإرسال البيانات إلى Azure. هناك العديد من البدائل: AWS و Google Cloud IoT و IBM Watson IoT Platform.


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


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


 tls.cert.verify(false) 

نحن مقيدون بالشهادة التي سيرسلها الخادم إلينا.


INFO


قد تكون مهتمًا بمحتويات الشهادات الخاصة بلوحة الوصل الخاصة بك باستخدام الأمر OpenSSL التالي.


 openssl s_client -showcerts -connect ArduinoDemoHub.azure-devices.net:8883 

لتحضير المادة ، تم استخدام المختبرات ، والتي تتوفر على الرابط: إرسال رسائل الجهاز إلى السحابة (D2C)
الرمز ليس محدثًا تمامًا واضطررت إلى تحديثه قليلاً ، ولكن بشكل عام ، قد يكون الرابط مفيدًا.


العمل مع NodeMCU من Arduino IDE


لا يمكنني تجاهل موضوع استخدام SDK. الحل الخاص بك جيد ، ولكن SDK هو نفس الرمز الذي تم تصحيحه بالفعل وتبسيطه وجاهز للاستخدام. بضع كلمات حول كيفية تكوين واستخدام Arduino IDE للعمل مع NodeMCU.


بعد تثبيت Arduino IDE ، تحتاج إلى الانتقال إلى قائمة ملف - تفضيلات



وأضف رابطًا لمدير مجلس الإدارة الإضافي - أدخل في حقل عناوين URL الإضافية لمدير المجالس العنوان: http://arduino.esp8266.com/versions/2.4.0/package_esp8266com_index.json


ثم انتقل إلى أدوات - لوحة xxx - قائمة Boardx Manager وقم بتثبيت ESP8266
قم بتثبيت المكتبات AzureIoTHub و AzureIoTUtility و AzureIoTProtocol_MQTT. بعد تثبيت المكتبة الأخيرة في الأمثلة (قائمة ملف - أمثلة - AzureIoTProtocol_MQTT) ، يمكنك العثور على مثال simplesample_mqtt لـ ESP8266.


المثال جاهز للذهاب. ما عليك سوى ملء القيم المتغيرة في ملف iot_configs.h
أذكر ناقص صغير واحد. يستغرق تجميع المشروع وتنزيله على اللوحة مقارنةً بـ Lua وقتًا طويلاً.


حفظ البيانات في سحابة Azure


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


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



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



لذلك ، انقر على رابط الوظيفة المخصصة الموجود في الأسفل وحدد خيار IoT Hub (Event Hub).
ستفتح لنا هذه النافذة:



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



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


 #r "Microsoft.WindowsAzure.Storage" #r "Newtonsoft.Json" using Microsoft.Azure; // Namespace for CloudConfigurationManager using Microsoft.WindowsAzure.Storage; // Namespace for CloudStorageAccount using Microsoft.WindowsAzure.Storage.Table; // Namespace for Table storage types using Newtonsoft.Json; public static void Run(string myIoTHubMessage, TraceWriter log) { var e = JsonConvert.DeserializeObject<EventDataEntity>(myIoTHubMessage); log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}"); CloudStorageAccount storageAccount = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=iotdatademostorage;AccountKey=JgStNcJvlQYeNsVCmpkHQUkWlZiQ7tJwAm6OCL34+lGx3XrR+0CPiY9RoxIDA6VSvMKlOEUrVWL+KWP0qLMLrw==;EndpointSuffix=core.windows.net"); CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference("iottable"); table.CreateIfNotExists(); EventDataEntity edata = new EventDataEntity("IOTpartition", Guid.NewGuid().ToString()); edata.DeviceId = e.DeviceId; edata.IotData = e.IotData; TableOperation insertOperation = TableOperation.Insert(edata); table.Execute(insertOperation); } public class EventDataEntity : TableEntity { public EventDataEntity(string pkey, string rkey) { this.PartitionKey = pkey; this.RowKey = rkey; } public EventDataEntity() { } public string DeviceId { get; set; } public int IotData { get; set; } } 

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


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



عرض محتويات الجدول باستخدام أداة Azure Storage Explorer المجانية


نظرًا لأن تكلفة تخزين Azure Table منخفضة للغاية ، وأن وظائف Azure و IoT تقدمان بعض الموارد شهريًا مجانًا ، يمكن أن تكون تكلفة الحل بالكامل في الشهر أقل من دولار واحد. بالطبع ، هذا يعتمد على كمية البيانات. عد لنفسك. اليوم ، تكلف 1 غيغابايت من البيانات 7 سنتات شهريًا ولكل مليون معاملة ستتم محاسبتك على 4 سنتات فقط.


INFO


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


نذكرك أن هذه هي النسخة الكاملة لمقال من مجلة هاكر . مؤلفها هو أليكسي سومر .


مواد مفيدة


دليل بنية التطبيقات السحابية


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


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

تنزيل


دليل مطور Azure



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


تنزيل


أساسيات Microsoft Azure


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


يتم تناول المواضيع التالية في هذا الكتاب:


  • الشروع في استخدام Azure ؛
  • خدمة تطبيق Azure وتطبيقات الويب ؛
  • الأجهزة الافتراضية ؛
  • خدمة التخزين ؛
  • قواعد البيانات
  • خدمات Azure إضافية.

تنزيل


روابط مفيدة


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


All Articles