Lompat ke awan. Membangun solusi IoT anggaran di NodeMCU + Azure IoT Hub

Tujuan paling populer untuk perangkat IoT adalah pengumpulan telemetri. Hingga saat ini, harga untuk layanan cloud IoT telah menurun sedemikian rupa sehingga bahkan pengguna biasa pun dapat menggunakannya. Hari ini kita akan berbicara tentang cara mengirim data ke cloud dari papan NodeMCU menggunakan bahasa Lua.



Catatan: kami melanjutkan serangkaian publikasi artikel versi lengkap dari majalah Hacker. Ejaan dan tanda baca penulis disimpan.


Saya memberikan lantai kepada penulis.


Karena saya bekerja di tumpukan teknologi Microsoft, saya menggunakan Fungsi Azure dan Penyimpanan Tabel untuk membuat bagian cloud dari solusi IoT, tetapi PoC saya untuk NodeMCU dan Lua juga dapat digunakan dengan penyedia cloud lainnya dari solusi IoT.


INFO


Expressif NodeMCU adalah salah satu motherboard yang paling terjangkau dengan Wi-Fi, micro USB dan on-board programmer. Ini didasarkan pada modul ESP8266. Papan generasi kedua dapat dibeli sekitar $ 6-7. Anda dapat bekerja dengan papan dari Arduino IDE. Selain itu, dewan mendukung bahasa penulisan yang disebut Lua (diterjemahkan dari bahasa Portugis sebagai "Bulan").


Hubungkan dan konfigurasikan perangkat


Agar perangkat dikenali di bawah Windows, Anda perlu mengunduh driver dari tautan berikut: CP210x USB ke UART Bridge VCP Drivers


Kecepatan port serial NodeMCU standar adalah 115'200bps. Anda dapat mengatur kecepatan yang berbeda, pada reset pertama perangkat itu akan kembali ke 115200.
Penting bahwa pengemudi diatur ke kecepatan yang persis sama:



Firmware


Kemungkinan besar, ada sesuatu yang terlewatkan dalam firmware awal, jadi idealnya mem-flash perangkat sendiri. Ada beberapa cara untuk membangun citra Firmware. Menggunakan layanan cloud , gambar Docker , atau menggunakan instruksi untuk Linux . Saya mengumpulkan menggunakan layanan cloud. Saya juga menyarankan Anda opsi ini.


Jika Anda perlu mengirim data ke cloud, maka fungsi yang diperlukan untuk seleksi adalah SNTP, MQTT, HTTP (WiFi, timer, file, GPIO, net, node, UART sudah dipilih secara default). Penting juga untuk menandai sebagaimana diperlukan dukungan TLS / SSL dalam opsi Lain-lain
Tautan dengan file bin datang ke email. Lebih tepatnya, bahkan 2 tautan langsung hadir. Satu dengan gambar yang mendukung operasi titik mengambang, dan yang kedua dengan yang tidak mendukung.


Sebelum menginstal ESP8266, Anda harus membawanya ke mode khusus. Ada tombol FLASH terpisah di papan tulis. Menekannya selama power-up atau menekan reset membawa perangkat ke mode bootloader. Jika tiba-tiba tidak ada tombol seperti itu di papan modifikasi Anda, maka sebelum flashing Anda harus menghubungkan GPIO0 ke GND dan tekan reset (metode ini cocok untuk ESP-12).


Firmware dapat di- flash dengan utilitas PyFlasher . Py dalam namanya berarti bahwa aplikasi tersebut ditulis dalam Python. Ada juga nodemcu-flasher , tetapi belum diperbarui untuk waktu yang lama. Saya belum mencobanya.


Jendela PyFlasher terlihat seperti ini:



Mode lampu kilat dipilih tergantung pada papan yang Anda miliki. Kebanyakan motherboard modern berdasarkan pada modul ESP8266 ESP-12 dan ESP32 menggunakan mode DIO. ESP8266 01 hingga 07 cocok dengan mode QIO yang lebih cepat. DOUT digunakan oleh ESP8285.


Pengaturan IDE


Unduh IDE gratis di tautan ESPlorer . Atau ada ZeroBrane Studio . Saya paling suka ESPlorer, jadi saya akan memberikan contoh bekerja dengannya. ESPlorer ditulis dalam bahasa JAWA. Antarmuka aplikasi



Di sebelah kiri adalah kode, pengaturan dan beberapa fungsi serupa lainnya. Di sebelah kanan adalah jendela pemantauan dan perintah manajemen perangkat. Buka aplikasi, pilih port. Tetapkan kecepatan pertukaran akan terjadi (kemungkinan besar adalah 115200) dan klik Buka.



Untuk pemanasan, Anda dapat menjalankan skrip sederhana yang berkedip dengan LED bawaan:


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) 

Jika papan Anda tidak memiliki LED bawaan (atau Anda benar-benar bosan dengan contoh LED berkedip), maka Anda dapat mencoba menjalankan skrip yang lebih sederhana yang menampilkan baris:


 print("Hello from Lua!") 

Setelah Anda membuat file .lua (katakan test.lua), tambahkan kode itu dan simpan ke disk, Anda dapat mengunduhnya ke perangkat Anda. Untuk melakukan ini, buka port jika tidak terbuka (tombol Buka) dan klik tombol Unggah. Anda dapat menemukannya di antara tombol-tombol yang terletak di bawah kode (di sebelah kiri).


Setelah mengunduh file, Anda dapat menjalankannya dengan mengirimkan perintah:


 dofile("test.lua") 

Perintah dapat dimasukkan secara manual di bidang bawah yang terletak di kanan bawah monitor. Atau jika Anda tidak ingin mengetik teks apa pun, Anda dapat mengklik tombol Muat Ulang (baris tombol paling ekstrem di kanan). Setelah mengklik tombol ini, Anda akan menerima daftar tombol dengan file .lua dimuat di papan tulis. Mengklik tombol dengan nama file akan meluncurkan file untuk dieksekusi.


Jika Anda ingin file mulai segera setelah dihidupkan, maka buat file bernama init.lua.


Mengkonfigurasi bagian cloud untuk bekerja dengan perangkat


Mari kita tinggalkan perangkat kita untuk beberapa waktu dan buat gandanya di cloud. Baru-baru ini, perangkat ganda dapat dibuat langsung di portal Azure, menggunakan fungsionalitas baru. Di grup pengaturan hub IoT yang disebut Penjelajah, Anda harus memilih Perangkat IoT dan klik โ€œ+ Tambahโ€


Untuk menghubungkan perangkat ke hub IoT, kita perlu membuat SAS (tanda tangan akses bersama). Untuk menghasilkan SAS, kunci ganda perangkat digunakan, yang dapat diperoleh dengan menggunakan beberapa utilitas tambahan (Device Explorer, iothub-explorer, IoT Extension untuk Azure CLI 2.0). Tetapi cara termudah adalah dengan mendapatkan kunci di tempat yang sama, di portal Azure, dengan pergi ke IoT Hub -> IoT Devices.



SAS dapat dibuat di perangkat, atau dapat dibuat menggunakan salah satu layanan online-nya. Jika Anda menggunakan SDK, maka ia dapat menghasilkan SAS untuk Anda secara otomatis (itu sudah cukup untuk menentukan kunci ganda perangkat dalam kode).



Cara SAS token dihasilkan oleh layanan web untuk waktu terbatas tertentu sedikit lebih aman. Meski ada nuansa tertentu. Jika Anda hanya mengirim nama perangkat ke layanan, maka seseorang dapat mencari melalui nama untuk mendapatkan token dari beberapa perangkat lain. Oleh karena itu, untuk membuat proses ini sedikit lebih aman, saya mengusulkan solusi ini: mari kita simpan hash Azure dari kunci ganda perangkat pada perangkat. Dan dalam kode layanan, sebelum menghasilkan SAS, kami akan memeriksa apakah hash cocok dengan hash kunci perangkat. Dengan demikian, akan mungkin untuk mendapatkan SAS hanya dengan mengetahui nama perangkat dan hash kuncinya.


Cara pertama di mana SAS dihasilkan pada perangkat lebih sederhana dan lebih nyaman, tetapi sedikit kurang aman. Karena, setelah mendapatkan akses ke perangkat, penyerang akan dapat memperoleh kunci dan menghasilkan perangkat SAS sendiri. Dalam kasus kedua, setelah mendapatkan akses ke perangkat, cracker hanya dapat menerima token SAS, yang masa pakainya terbatas.


Ternyata kedua metode ini pada umumnya tidak ideal jika peretas memiliki akses ke perangkat. Bahkan mengamankan koneksi menggunakan VPN tidak akan membantu di sini. Dalam hal ini, saluran transmisi akan dilindungi, tetapi mereka yang memiliki perangkat di tangan mereka akan dapat mengakses saluran tersebut. Sayangnya, pada perangkat NodeMCU, Arduino, dll tidak ada cara untuk menyimpan kunci / kata sandi dalam penyimpanan aman apa pun. Mungkin pasar untuk perangkat IoT murah membutuhkan fungsi perangkat keras baru.


Membuat Fungsi Azure untuk Generasi SAS


Sebagai layanan online, paling mudah menggunakan fitur Azure. Ini adalah cuplikan unik yang dapat ditulis langsung di portal Azure di browser. Bercanda sebagai lelucon, tetapi dengan cara ini Anda dapat memprogram bahkan dari telepon pintar. Tentu saja, tidak ada yang melarang membuat dan men-debug mereka dari Visual Studio, dan hanya kemudian menerbitkannya ke Azure dalam bentuk yang dikompilasi.


Tugas dari fungsi ini adalah untuk melakukan beberapa operasi yang biasanya tidak terlalu rumit. Menurut gagasan layanan mikro, setiap fungsi dapat melakukan satu hal, tetapi sangat bagus (Prinsip tanggung jawab tunggal).


Anda dapat membuat Aplikasi Fungsi Azure di portal dengan mengisi formulir singkat



Paket Konsumsi memungkinkan Anda membayar hanya untuk panggilan-panggilan fungsi yang telah dilakukan. Ini adalah opsi termurah. Saat ini, sejuta panggilan fitur gratis.


Perhatikan bahwa seiring dengan penciptaan fungsi, penyimpanan data tambahan (Penyimpanan) juga dibuat.


Setelah membuat Aplikasi Fungsi, Anda dapat membuat fungsi itu sendiri. Dalam hal ini, kita memerlukan fungsi seperti Webhook + API. Fungsi ini mungkin terbuka untuk semua orang (akses anonim), dan mungkin hanya tersedia untuk pemilik kode khusus. Kode dapat diperoleh dari jendela dengan fungsi dengan mengklik tautan </> Dapatkan URL fungsi:



Fungsinya dapat ditulis dalam berbagai bahasa. Saya lebih suka 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); } 

Kami membuat file project.json dan menambahkan konten berikut ke dalamnya:


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

Kode menggunakan string koneksi ke hub IoT. Ini dapat dikacaukan dengan string koneksi ke perangkat. Agar Anda tidak bingung, izinkan saya mengingatkan Anda di mana Anda bisa mendapatkannya:



Diperlukan untuk mengambil string Koneksi dari beberapa Kebijakan dengan hak terhubung Perangkat.
Yang terbaik adalah tidak menentukan string koneksi itu sendiri dalam kode, seperti yang saya lakukan. Saya melakukan ini semata-mata demi contoh. Yang terbaik untuk masuk ke fungsi pengaturan aplikasi.



Dan tentukan string koneksi di sana. Setelah itu, Anda bisa "mendapatkannya" dari toko aman menggunakan


 ConfigurationManager.ConnectionStrings["___"].ConnectionString 

Di perangkat, kita perlu menyimpan hashedkey. Tetapi pertama-tama Anda harus menyandikan karakter. HttpUtility.UrlEncode dari ruang System.Web akan membantu kita dengan ini.


 hashedkey = HttpUtility.UrlEncode(hashedkey); 

Kami akan mengirimkan permintaan menggunakan Get, tetapi tidak semua karakter dapat diteruskan sebagai nilai parameter.


Menulis kode untuk mengirim data ke cloud


Saya menulis sedikit kode pada Lua mengirim data ke cloud. Hasilnya adalah semacam PoC. Anda dapat menggunakannya dan memodifikasinya sesuai kebutuhan Anda.
Buat 2 file init.lua dan SendDataToCloud.lua
Isi yang pertama:


 --    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 ) 

File ini terhubung ke jaringan dan mengeksekusi kode dari file SendDataToCloud.lua jika koneksi berhasil.


Anda harus menentukan data titik akses Wi-Fi Anda sebagai nilai untuk station_cfg.ssid dan station_cfg.pwd.


Dalam file berikut, Anda perlu mengubah nama perangkat dan IOT hub (variabel PERANGKAT dan IOTHUB). Variabel funcurl berisi alamat fungsi penghasil SAS dan hash kunci perangkat (yang sebelumnya kami disandikan menggunakan HttpUtility.UrlEncode) sebagai nilai parameter hash


 --  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 

Data dikirim tanpa menggunakan Azure SDK, sehingga Anda dapat menggunakan kode ini tidak hanya untuk mengirim data ke Azure. Ada banyak alternatif: AWS, Google Cloud IoT, IBM Watson IoT Platform.


Contoh ini menggunakan protokol MQTT (Message Queuing Telemetry Transport). Ini adalah protokol terbuka yang dirancang khusus untuk perangkat IoT. Data dikirim dalam format JSON. Di mana dalam proyek nyata data diambil dari sensor, angka acak dihasilkan dalam contoh.


Selama proses jabat tangan antara perangkat dan hub IoT, server dapat mengirim sertifikatnya, atau dapat meminta sertifikat perangkat. Jika Anda ingat, terakhir kali kami bekerja dengan perangkat Arduino, kami menginstalnya dengan sertifikat. Sekarang satu kode sudah cukup:


 tls.cert.verify(false) 

Kami terbatas pada sertifikat yang akan dikirimkan server kepada kami.


INFO


Anda mungkin tertarik pada konten sertifikat untuk hub Anda menggunakan perintah OpenSSL berikut.


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

Untuk menyiapkan materi, laboratorium digunakan, yang tersedia di tautan: Mengirim Pesan Device-to-Cloud (D2C)
Kode ini tidak cukup terbaru dan saya harus memperbaruinya sedikit, tetapi secara umum, tautannya mungkin berguna.


Bekerja dengan NodeMCU dari Arduino IDE


Saya tidak bisa mengabaikan topik menggunakan SDK. Solusi Anda bagus, tetapi SDK adalah kode yang sama yang sudah didebug, disederhanakan, dan siap digunakan. Beberapa kata tentang cara mengkonfigurasi dan menggunakan Arduino IDE untuk bekerja dengan NodeMCU.


Setelah menginstal IDE Arduino, Anda harus pergi ke menu File - Preferences



Dan tambahkan tautan ke manajer dewan tambahan - masukkan bidang URL Pengelola Papan Tambahan alamat: http://arduino.esp8266.com/versions/2.4.0/package_esp8266com_index.json


Lalu pergi ke menu Tools - Board xxx - Boardx Manager dan instal ESP8266
Instal perpustakaan AzureIoTHub, AzureIoTUtility, AzureIoTProtocol_MQTT. Setelah menginstal pustaka terakhir dalam contoh (File menu - Contoh - AzureIoTProtocol_MQTT), Anda dapat menemukan contoh simplesample_mqtt untuk ESP8266.


Contohnya siap untuk digunakan. Cukup isi nilai variabel dalam file iot_configs.h
Saya menyebutkan satu minus kecil. Menyusun proyek dan mengunduh ke papan, dibandingkan dengan Lua, membutuhkan waktu yang cukup lama.


Menyimpan data di cloud Azure


Dengan pengiriman data, semuanya jelas, tetapi betapa murahnya menyimpan data di cloud.
Cara paling murah untuk mengirim data dari hub IoT ke database adalah Fungsi Azure. Dan penyimpanan data yang paling murah adalah Azure Table Storage.


Menariknya, ketika Anda membuat Aplikasi Fungsi, Penyimpanan juga dibuat secara otomatis, yang fungsi itu sendiri perlu berfungsi. Jika Anda membuat repositori yang terpisah, maka disarankan untuk membuat pengaturan dasar seperti ini:



Replikasi LSR saat ini merupakan opsi yang paling murah. Itu dipilih ketika secara otomatis membuat repositori terikat ke suatu fungsi.
Yang kita butuhkan sekarang adalah menerima data dari hub IoT dan menuliskannya ke penyimpanan. Untuk kasus ini, saat membuat fungsi, jendela Mulai Cepat tidak akan dapat menawarkan opsi yang diinginkan kepada kami.



Oleh karena itu, klik pada tautan fungsi Kustom yang terletak di bagian bawah dan pilih opsi IoT Hub (Event Hub).
Jendela ini akan terbuka untuk kita:



Di mana kita dapat mengisi bidang koneksi Event Hub dengan pilihan sederhana (dengan mengklik baru). Tetapi untuk menunjukkan nama Hub Acara Anda harus pergi ke hub IoT. Di hub Anda harus pergi ke Endpoints (endpoints) dan mendapatkan nama yang kompatibel dengan Event Hub dari sana



Mari kita beralih ke kode fungsi. Cuplikan berikut menerima data dari hub IoT dan menyimpannya di Table Storage:


 #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; } } 

Jika Anda akan menggunakan kode ini dalam proyek nyata, maka jangan lupa untuk meletakkan string koneksi di tempat yang lebih aman - di pengaturan App (persis sama dengan string koneksi dari fungsi pertama).


String koneksi itu sendiri dapat diambil dalam item pengaturan yang disebut Kunci akses:



Lihat konten tabel dengan utilitas Azure Storage Explorer gratis


Karena biaya Penyimpanan Meja Azure cukup rendah, dan Fungsi Azure dan hub IoT menawarkan sumber daya tertentu setiap bulan secara gratis, biaya seluruh solusi per bulan bisa kurang dari $ 1. Tentu saja, itu tergantung pada jumlah data. Hitung sendiri. Hari ini, 1 GB data biayanya 7 sen per bulan dan untuk setiap juta transaksi Anda hanya akan dikenakan biaya 4 sen.


INFO


Saat menggunakan layanan cloud dari penyedia mana pun, saya selalu menyarankan Anda untuk menautkan kartu kredit dengan jumlah minimum uang ke akun Anda. Secara kebetulan, dengan memilih semacam pengaturan yang salah Anda membayar lebih dari yang Anda harapkan.


Kami mengingatkan Anda bahwa ini adalah versi lengkap dari artikel dari majalah Hacker . Penulisnya adalah Alexey Sommer .


Bahan yang berguna


Panduan Arsitektur Aplikasi Cloud


Ambil pendekatan terstruktur untuk mengembangkan aplikasi cloud. E-book 300 halaman tentang arsitektur komputasi awan ini membahas arsitektur, pengembangan, dan pedoman implementasi yang berlaku terlepas dari platform cloud mana yang Anda pilih. Panduan ini mencakup langkah-langkah untuk:


  • Memilih gaya arsitektur aplikasi cloud yang tepat untuk aplikasi atau solusi Anda;
  • pemilihan teknologi komputasi dan penyimpanan data yang tepat;
  • menerapkan 10 prinsip pengembangan untuk membuat aplikasi yang skalabel, tangguh, dan mudah dikelola;
  • mengikuti lima prinsip untuk menciptakan perangkat lunak berkualitas yang menjamin keberhasilan aplikasi cloud Anda;
  • Menggunakan pola desain yang dirancang untuk masalah yang Anda coba selesaikan.

โ†’ Unduh


Panduan Pengembang Azure



Dalam pembaruan ini untuk Panduan Pengembang Azure, Anda akan melihat bagaimana rangkaian layanan lengkap untuk platform perangkat lunak Azure memenuhi kebutuhan Anda. Di sini Anda akan menemukan informasi tentang pendekatan arsitektur dan situasi paling umum yang muncul saat membuat aplikasi cloud.


โ†’ Unduh


Dasar-Dasar Microsoft Azure


Buku ini memberikan wawasan penting tentang layanan Azure utama bagi pengembang dan profesional TI yang baru dalam komputasi awan. Demo langkah-demi-langkah disertakan untuk membantu pembaca memahami cara memulai dengan masing-masing layanan utama. Setiap bab independen, tidak diperlukan untuk melakukan demonstrasi praktis dari bab-bab sebelumnya untuk memahami bab tertentu.


Topik-topik berikut tercakup dalam buku ini:


  • Memulai dengan Azure;
  • Layanan Aplikasi Azure dan Aplikasi Web;
  • Mesin virtual;
  • Layanan penyimpanan;
  • Basis data
  • Layanan Azure Tambahan.

โ†’ Unduh


Tautan yang bermanfaat


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


All Articles