1. Trang chủ
  2. » Luận Văn - Báo Cáo

So sánh và đánh giá các nền tảng điện toán đám mây iot trong kịch bản nhà thông minh

108 33 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 108
Dung lượng 6,88 MB

Nội dung

Luận văn nghiên cứu về phương pháp xây dựng một hệ thống Internet of Things thực tế ứng dụng nền tảng điện toán đám mây IoT. Luận văn đề xuất mô hình kiến trúc dữ liệu của hệ thống IoT sử dụng nền tảng điện toán đám mây bao gồm thiết kế về khung phân loại gói tin chung; xác định và phân loại gói tin trong hệ thống nhà thông minh; thiết kế một số kiến trúc luồng dữ liệu chính của hệ thống và cuối cùng triển khai các thiết kế trên hai nền tảng điện toán đám mây AWS IoT và Google Cloud IoT để thực hiện đánh giá, so sánh và rút ra kết luận.

ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC BÁCH KHOA -  - C C R L T LÊ CÔNG VĨNH KHẢI U D SO SÁNH VÀ ĐÁNH GIÁ CÁC NỀN TẢNG ĐIỆN TOÁN ĐÁM MÂY IOT TRONG KỊCH BẢN NHÀ THÔNG MINH LUẬN VĂN THẠC SĨ CHUYÊN NGÀNH: KỸ THUẬT ĐIỆN TỬ ĐẠI HỌC ĐÀ NẴNG TRƢỜNG ĐẠI HỌC BÁCH KHOA - LÊ CÔNG VĨNH KHẢI SO SÁNH VÀ ĐÁNH GIÁ CÁC NỀN TẢNG ĐIỆN TOÁN ĐÁM MÂY IOT TRONG KỊCH BẢN NHÀ THÔNG MINH C C R L T Chuyên ngành : Kỹ thuật điện tử Mã số: 8520203 U D LUẬN VĂN THẠC SĨ NGƢỜI HƢỚNG DẪN KHOA HỌC: TS Ngơ Minh Trí Đà Nẵng – Năm 2020 C C DU R L T ii MỤC LỤC LỜI CAM ĐOAN i MỤC LỤC …… ii DANH MỤC CÁC HÌNH v DANH MỤC CÁC BẢNG…………………………………………………………… vii MỞ ĐẦU……… CHƢƠNG 1.1 TỔNG QUAN ĐỀ TÀI Tổng quan Internet of Things 1.1.1 Định nghĩa Internet of Things 1.1.2 Kiến trúc Internet of Things 1.2 Tổng quan điện toán đám mây C C 1.2.1 Định nghĩa điện toán đám mây 1.2.2 Phân loại điện toán đám mây 1.2.3 Các mơ hình triển khai điện tốn đám mây 1.2.4 Lợi ích điện tốn đám mây 1.3 R L T U D Phân tích lựa chọn tảng điện toán đám mây IoT cho đề tài 1.3.1 Các yếu tố tảng điện toán đám mây IoT 1.3.2 Lựa chọn tảng điện toán đám mây IoT 10 1.4 Phương pháp thực quy trình đánh giá đề xuất tiêu chí đánh giá 11 1.4.1 Phương pháp thực quy trình đánh giá 11 1.4.2 Đề xuất tiêu chí đánh giá 12 1.5 Kết luận chương 12 CHƢƠNG THIẾT KẾ MƠ HÌNH NHÀ THƠNG MINH VÀ ĐỀ XUẤT MƠ HÌNH KIẾN TRÚC DỮ LIỆU 13 2.1 Thiết kế kịch nhà thông minh 13 2.2 IoT Đề xuất mơ hình kiến trúc liệu hệ thống sử dụng tảng điện toán đám mây 14 2.2.1 Các đối tượng hệ thống IoT 14 2.2.2 Định nghĩa khung phân loại gói tin chung cho hệ thống IoT 14 2.2.3 Xác định phân loại gói tin theo khung đề xuất 16 2.2.4 Thiết kế kiến trúc luồng liệu 17 2.3 Thiết kế phần cứng hệ thống 19 iii 2.3.1 Sơ đồ kết nối phần cứng 19 2.3.2 Chi tiết phần cứng sử dụng 21 2.3.3 Lưu đồ thuật toán thiết bị 22 2.4 Kết luận chương 25 CHƢƠNG QUẢN LÝ HỆ THỐNG NHÀ THƠNG MINH SỬ DỤNG NỀN TẢNG ĐIỆN TỐN ĐÁM MÂY AWS IOT 26 3.1 Kiến trúc liệu hệ thống nhà thông minh sử dụng tảng AWS IoT 26 3.1.1 Dịch vụ AWS IoT Core 26 3.1.2 Lựa chọn mô tả dịch vụ CSDL 29 3.1.3 Quy trình luồng liệu cảm biến 30 3.1.4 Quy trình luồng liệu điều khiển cập nhật trạng thái 34 3.1.5 Thiết kế API tương tác ứng dụng website 37 3.2 C C R L T Kết luận chương 40 CHƢƠNG QUẢN LÝ HỆ THỐNG SỬ DỤNG NỀN TẢNG ĐIỆN TOÁN ĐÁM MÂY GOOGLE CLOUD IOT 41 4.1 U D Kiến trúc liệu hệ thống nhà thông minh sử dụng tảng Google Cloud IoT 41 4.1.1 Dịch vụ Cloud IoT Core 42 4.1.2 Lựa chọn mô tả dịch vụ CSDL 45 4.1.3 Dịch vụ Cloud Pub/Sub 48 4.1.4 Quy trình luồng liệu cảm biến 49 4.1.5 Quy trình luồng liệu điều khiển cập nhật trạng thái 51 4.1.6 Thiết kế API tương tác ứng dụng website 53 4.2 Kết luận chương 54 CHƢƠNG KẾT QUẢ THỰC NGHIỆM VÀ SO SÁNH, ĐÁNH GIÁ 55 5.1 Kết thực nghiệm 55 5.2 Đánh giá định lượng 55 5.3 Đánh giá định tính 66 5.4 Kết luận chương 70 KẾT LUẬN VÀ KIẾN NGHỊ 71 DANH MỤC TÀI LIỆU THAM KHẢO 72 QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN 74 PHỤ LỤC 75 iv SO SÁNH VÀ ĐÁNH GIÁ CÁC NỀN TẢNG ĐIỆN TỐN ĐÁM MÂY IOT TRONG KỊCH BẢN NHÀ THƠNG MINH Học viên: Lê Công Vĩnh Khải Chuyên ngành: Kỹ thuật điện tử Mã số: 8520203 Khóa: K38.KĐT Trường Đại học Bách khoa – ĐHĐN Tóm tắt – Luận văn nghiên cứu phương pháp xây dựng hệ thống Internet of Things thực tế ứng dụng tảng điện tốn đám mây IoT Luận văn đề xuất mơ hình kiến trúc liệu hệ thống IoT sử dụng tảng điện toán đám mây bao gồm thiết kế khung phân loại gói tin chung; xác định phân loại gói tin hệ thống nhà thơng minh; thiết kế số kiến trúc luồng liệu hệ thống cuối triển khai thiết kế hai tảng điện toán đám mây AWS IoT Google Cloud IoT để thực đánh giá, so sánh rút kết luận Từ khóa – Internet of Things; Điện toán đám mây; AWS IoT; Google Cloud IoT; Định tính dịch vụ; Định lượng thơng lượng; C C R L T COMPARISON AND EVALUATION OF IOT CLOUD PLATFORMS IN THE CONTEXT OF SMART HOME U D Abstract – This thesis studies a method of deploying an actual Internet of Things system using the IoT cloud platforms The thesis has proposed a data architecture model of an IoT system using IoT cloud platform including the design of a common message classification framework; identifying and classifying messages in smart home systems; designing some of the main data flow architectures of the system and finally implementing designs on both AWS IoT and Google Cloud IoT platforms to evaluate, compare, and draw conclusions Keywords – Internet of Things; Cloud platform; AWS IoT; Google Cloud IoT; Qualitative service; Quantitative throughput; v DANH MỤC CÁC HÌNH Hình 1: Các thành phần hệ thống Internet of Things Hình 2: Bốn lĩnh vực cơng nghệ gắn với Internet of Things Hình 3: Kiến trúc Internet of Things Hình 4: Nền tảng IoT hệ sinh thái IoT Hình 5: Mơ hình khối tính tảng IoT hoàn chỉnh 10 Hình 6: Xếp hạng tảng IoT giới năm 2019 11 Hình 7: đối tượng hệ thống IoT 14 Hình 8: Thiết kế hệ thống IoT đơn giản 17 Hình 9: Kiến trúc luồng liệu cảm biến theo quy trình bước 17 Hình 10: Mơ hình lưu trữ luồng liệu trạng thái thiết bị 18 Hình 11: Sơ đồ khối tổng quát kết nối phần cứng hệ thống 20 Hình 12: Bản thiết kế nguyên lý mạch phần cứng 20 Hình 13: ESP32 DevKit V1.0 Doit 21 Hình 14: Cảm biến DHT11 21 Hình 15: Cảm biến MQ2 22 Hình 16: Màn hình cảm ứng NX4024T032 22 Hình 17: Lưu đồ thuật tốn luồng xử lý 23 Hình 18: Lưu đồ thuật toán luồng xử lý nhấn nút bảng điều khiển cảm ứng 24 Hình 19: Lưu đồ thuật toán luồng xử lý nhận liệu điều khiển cấu hình 24 Hình 20: Kiến trúc liệu từ Thiết bị -> Đám mây -> Ứng dụng 26 Hình 21: Kiến trúc liệu từ Ứng dụng -> Đám mây -> Thiết bị 26 Hình 22: Kiến trúc dịch vụ AWS IoT Core 27 Hình 23: Mơ hình bảo mật xác thực AWS IoT 28 Hình 24: Mơ tả cấu trúc DynamoDB 30 Hình 25: Quy trình luồng liệu cảm biến tảng AWS 30 Hình 26: Cấu hình chuyển tiếp liệu từ AWS IoT Rule đến SQS 31 Hình 27: Minh họa bước quy trình vịng đời tin nhắn SQS 31 Hình 28: Minh họa bước quy trình vịng đời tin nhắn SQS 32 Hình 29: Minh họa bước quy trình vịng đời tin nhắn SQS 32 Hình 30: Cấu hình SmhQueue làm trình kích hoạt Lambda đến hàm 33 Hình 31: Lambda sử dụng trình kích hoạt ánh xạ kiện đọc liệu từ 33 Hình 32: Giá trị cảm biến lưu trữ DynamoDB 34 Hình 33: Quy trình luồng liệu điều khiển cập nhật trạng thái tảng AWS 34 Hình 34: Tài liệu shadow lưu liệu trạng thái điều khiển 37 Hình 35:Tài liệu shadow lưu liệu cấu hình 37 Hình 36: Sơ đồ kiến trúc thiết kế API cho ứng dụng website theo kiến trúc REST 38 Hình 37: Quá trình hoạt động thành phần API Gateway 40 Hình 38: Kiến trúc liệu từ Thiết bị -> Đám mây -> Ứng dụng 41 Hình 39: Kiến trúc liệu từ Ứng dụng -> Đám mây -> Thiết bị 42 C C U D R L T vi Hình 40: Các thành phần dịch vụ Google Cloud IoT Core 43 Hình 41: Quy trình xác thực thiết bị Cloud IoT Core 45 Hình 42: Giao diện tổ chức liệu Cloud Firestore 48 Hình 43: Mơ hình hoạt động dịch vụ Cloud Pub/Sub 48 Hình 44: Các dịch vụ kết nối với Cloud Pub/Sub 49 Hình 45: Quy trình luồng liệu cảm biến tảng GCP 50 Hình 46: Giá trị cảm biến lưu trữ Firestore 50 Hình 47: Quy trình luồng liệu điều khiển cập nhật trạng thái tảng GCP 51 Hình 48: Tổ chức liệu theo kiến trúc reported-desired Firestore 52 Hình 49: Sơ đồ kiến trúc thiết kế API cho ứng dụng website theo kiến trúc REST 53 Hình 50: Giao diện website quản lý hệ thống 55 Hình 51: Các bước dùng để đánh giá định lượng 56 Hình 52: Dấu thời gian gói tin bắt đầu AWS (trường hợp 1) 57 Hình 53: Dấu thời gian gói tin kết thúc AWS (trường hợp 1) 58 Hình 54: Dấu thời gian gói tin bắt đầu AWS (trường hợp 2) 58 Hình 55: Dấu thời gian gói tin kết thúc AWS (trường hợp 2) 59 Hình 56: Biểu đồ tất trình với độ phân giải phút AWS (trường hợp 1) 59 Hình 57: Biểu đồ tất trình với độ phân giải phút AWS (trường hợp 2) 60 Hình 58: Biểu đồ tổng số gói tin trình AWS (trường hợp 1) 60 Hình 59: Biểu đồ tổng số gói tin trình AWS (trường hợp 2) 61 Hình 60: Dấu thời gian gói tin bắt đầu GCP (trường hợp 1) 61 Hình 61: Dấu thời gian gói tin kết thúc GCP (trường hợp 1) 62 Hình 62: Dấu thời gian gói tin bắt đầu GCP (trường hợp 2) 62 Hình 63: Dấu thời gian gói tin kết thúc GCP (trường hợp 2) 63 Hình 64: Biểu đồ tất trình với độ phân giải phút GCP (trường hợp 1) 63 Hình 65: Biểu đồ tất trình với độ phân giải phút GCP (trường hợp 2) 64 Hình 66: Biểu đồ tổng số gói tin q trình GCP (trường hợp1) 64 Hình 67: Biểu đồ tổng số gói tin q trình GCP (trường hợp 2) 65 C C U D R L T vii DANH MỤC CÁC BẢNG Bảng 1: Ánh xạ tiêu chí đánh giá kịch nhà thông minh 14 Bảng 2: Khung phân loại gói tin sở 15 Bảng 3: Sắp xếp gói tin hệ thống nhà thơng minh vào khung phân loại gói tin sở 16 Bảng 4: Phân loại dịch vụ CSDL AWS mục đích sử dụng 29 Bảng 5: phương thức truy vấn với dịch vụ Device Shadow 35 Bảng 6: So sánh dịch vụ CSDL hỗ trợ GCP 46 Bảng 7: So sánh Cloud Firestore Firebase Realtime Database 46 Bảng 8: Dấu thời gian q trình thử nghiệm phía thiết bị 56 Bảng 9: Kết phân tích thơng lượng hai tảng đám mây 66 C C U D R L T MỞ ĐẦU Tính cấp thiết đề tài Internet of Things (IoT) thuật ngữ phổ biến giới công nghệ ngày Việc ứng dụng hiệu hệ thống IoT góp phần cải tiến hiệu hoạt động nhiều lĩnh vực khác nhau, giúp sống người ngày tiện lợi hơn, nhiên số lượng thiết bị IoT tăng đột biến đặt nhiều toán cho nhà nghiên cứu lĩnh vực Hiện nay, giới nói chung đặc biệt Việt Nam nói riêng hệ thống IoT ứng dụng nhiều lĩnh vực, từ công nghiệp nông nghiệp ứng dụng nhà thông minh, thành phố thông minh, trường học thông minh, nông trại thông minh,… Các tổ chức, doanh nghiệp ứng dụng IoT ngồi mục đích tối ưu hóa quy trình vận hành, cịn khai thác hiệu từ lượng liệu để lưu trữ, phân tích đưa định, điều chỉnh phù hợp từ liệu Tuy nhiên phần lớn giải pháp IoT triển khai theo hướng thủ công cục tức phải thiết kế xây dựng toàn hệ thống từ thành phần thiết bị, máy chủ hạ tầng giao thức kết nối Mặt khác, máy chủ cục thường bị giới hạn dung lượng lưu trữ, tốc độ xử lý có khả mở rộng thấp, có nhiều vấn đề cần giải triển khai hệ thống IoT vậy: khả quản lý hệ thống, khả mở rộng, yêu cầu bảo mật kết nối, bảo mật thiết bị, xác thực, chi phí triển khai, khả lưu trữ phân tích liệu,… C C R L T U D Trong năm gần đây, hãng cơng nghệ lớn điện tốn đám mây cho đời nhiều loại dịch vụ công nghệ học máy, trí tuệ nhân tạo, liệu lớn, sở liệu (CSDL), website… dịch vụ với kết hợp ưu điểm điện toán đám mây tảng IoT gọi tảng điện tốn đám mây IoT điển hình là: Amazon AWS IoT, Google Cloud IoT, Microsoft Azure IoT, Oracle IoT Cloud, IBM Watson IoT,… Với công nghệ tảng này, doanh nghiệp tổ chức không cần phải xây dựng thêm phần cứng máy chủ, cấu hình quản lý mơ hình mạng hạ tầng triển khai hệ thống Các thiết bị kết nối tương tác với tảng tương tác với thiết bị khác cách dễ dàng bảo mật, tảng điện tốn đám mây IoT có khả hỗ trợ kết nối lên đến hàng tỉ thiết bị hay lưu trữ, xử lý hàng nghìn tỉ gói tin liên kết đến dịch vụ mạnh mẽ khác bên hệ sinh thái hãng cơng nghệ Vì vậy, giải pháp giúp tiết kiệm thời gian triển khai hệ thống, cắt giảm 85 } } else errorResponse("Unknown resource: "+resource, context.awsRequestId, callback) }; b) Chƣơng trình Cloud Function GCP: - File index.js (deviceStateReportedFunction) exports.Reported_Storage = (data, context) => { var exitstsData=false; const PubSubMessage = data; const encodeData = PubSubMessage.data ? Buffer.from(PubSubMessage.data,'base64').toString(): ''; C C console.log(`Data: ${encodeData}`); R L T if(encodeData!='') { U D var temp_json= JSON.parse('{"relayState":{"light1": "","light2": "","fan": ""}}'); const messjson= JSON.parse(encodeData); if(messjson.SyncRequest != true) //update reported { console.log(`Update reported Data: ${JSON.stringify(messjson)}`); const docRef = db.collection('reported-desiredcollection').doc('reported-doc'); const updateAda = docRef.update(messjson); const clearDesiredRef = db.collection('reported-desiredcollection').doc('desired-doc'); const clearAda = clearDesiredRef.update(temp_json); } else // SyncRequest { var reported_state_1=""; 86 var reported_state_2=""; var reported_state_3=""; var desired_state_1=""; var desired_state_2=""; var desired_state_3=""; async function readFirestore() { const desiredRef = collection').doc('desired-doc'); db.collection('reported-desired- const desiredDoc = await desiredRef.get(); console.log(`Desired Data: ${JSON.stringify(desiredDoc.data())}`); C C desired_state_1 = desiredDoc.data().relayState.light1; R L T desired_state_2 = desiredDoc.data().relayState.light2; desired_state_3 = desiredDoc.data().relayState.fan; U D const reportedRef = collection').doc('reported-doc'); db.collection('reported-desired- const reportedDoc = await reportedRef.get(); console.log(`Reported Data: ${JSON.stringify(reportedDoc.data())}`); reported_state_1 = reportedDoc.data().relayState.light1; reported_state_2 = reportedDoc.data().relayState.light2; reported_state_3 = reportedDoc.data().relayState.fan; if (desiredDoc.exists && reportedDoc.exists) { exitstsData= true; console.log(`Exist data`); console.log(`Excute publish to device`); var publishData=""; if(desired_state_1 !="") temp_json.relayState.light1= desired_state_1; else 87 temp_json.relayState.light1= reported_state_1; if(desired_state_2 !="") temp_json.relayState.light2= desired_state_2; else temp_json.relayState.light2= reported_state_2; if(desired_state_3 !="") temp_json.relayState.fan= desired_state_3; else temp_json.relayState.fan= reported_state_3; publishData = Buffer.from(JSON.stringify(temp_json)); C C const request = { name: formattedName, R L T binaryData: publishData, U D }; async function sendcommand() { await iotClient.sendCommandToDevice(request) then(responses => { const response = responses[0]; // doThingsWith(response) console.log(response); }) catch(err => { console.error(err); }); } sendcommand(); } } readFirestore(); } 88 } }; - File index.js (sensorStorageFunction) exports.Sensor_Storage = (data, context) => { const PubSubMessage = data; const encodeData = PubSubMessage.data ? Buffer.from(PubSubMessage.data,'base64').toString(): ''; console.log(`Data: ${encodeData}`); if(encodeData!='') { C C const messjson= JSON.parse(encodeData); // Creat time R L T var dt = dateTime.create(); dt.offsetInHours(7); U D var time_formatted = dt.format('Y-m-d H:M:S'); messjson.time = time_formatted; setFirestore('sensor-collection',messjson.time,messjson); // const test_data = '{"sensorValue": {"temperature": "30.4","humidity": "80","gas": "250","pir": "true"}}'; // const testencodeData = test_data ? Buffer.from(test_data).toString(): ''; // console.log(`testData: ${testencodeData}`); // const testmessjson= JSON.parse(testencodeData); // console.log(`Update data: ${JSON.stringify(testmessjson)}`); const reported_sensor_json= JSON.parse('{"sensorValue":{"temperature": "","humidity": "","gas": "","pir": ""}}'); reported_sensor_json.sensorValue.temperature = messjson.temperature; reported_sensor_json.sensorValue.humidity = messjson.humidity; reported_sensor_json.sensorValue.gas = messjson.gas; reported_sensor_json.sensorValue.pir = messjson.pir; console.log(`Update data: ${JSON.stringify(reported_sensor_json)}`); 89 updateFirestore('reported-desired-collection','reported-doc', reported_sensor_json); } }; async function setFirestore(_collection,_doc,_data) { const db_set = new Firestore ({ projectId: process.env.GCLOUD_PROJECT, keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS, C C }); let docRef = db_set.collection(_collection).doc(_doc); R L T let setAda = await docRef.set(_data); } U D async function updateFirestore(_collection,_doc,_data) { const db_update = new Firestore ({ projectId: process.env.GCLOUD_PROJECT, keyFilename: process.env.GOOGLE_APPLICATION_CREDENTIALS, }); const testdocRef = db_update.collection(_collection).doc(_doc); const testsetAda = await testdocRef.update(_data); } - File index.js (APIFunction) GCP.initGCP( ProjectId_def, reportedDoc_def, desiredDoc_def, sensorCollection_def, 90 ); GCP.initDevice( ProjectId_def, keyPath_def, cloudRegion, registryId, deviceId, ); app.get('/', function (req, res){ C C res.send('Home API'); R L T }) app.get('/getdata/reported/deviceid/'+ deviceId, function (req, res){ (async () => { U D const dataArray= await GCP.getState(); console.log('JsonState: ',dataArray); res.send(dataArray); })(); }) app.get('/getdata/sensor/deviceid/'+ deviceId, function (req, res){ console.log({ From: req.query.dtstart, To: req.query.dtend}); (async () => { const dataArray= await GCP.getData( req.query.dtstart, req.query.dtend); console.log('JsonData: ',dataArray); res.send(dataArray); })(); }) 91 app.post('/command/relay/deviceid/'+deviceId, function (req, res){ console.log(req.body); GCP.sendStatus(req.body); res.status(200).send("Control Ok"); }) app.post('/config/gas/deviceid/'+deviceId, function (req, res){ GCP.sendConfig(req.body); res.status(200).send("Config Ok"); }) exports.apigateway = app; U D R L T C C C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T C C DU R L T ... định tính, định lượng để đánh giá tảng điện tốn đám mây IoT; - Triển khai mơ hình hệ thống IoT kịch nhà thông minh sử dụng tảng điện toán đám mây IoT; - So sánh, đánh giá tảng khảo sát dựa kết triển... điện toán đám mây; - Nền tảng điện toán đám mây IoT; - Phân loại tảng điện toán đám mây IoT; - Các giao thức truyền thông (MQTT, HTTP); - Mơ hình nhà thơng minh; - Xác thực bảo mật hệ thống IoT; ... điện tốn đám mây 1.3 R L T U D Phân tích lựa chọn tảng điện toán đám mây IoT cho đề tài 1.3.1 Các yếu tố tảng điện toán đám mây IoT 1.3.2 Lựa chọn tảng điện toán đám mây IoT

Ngày đăng: 29/04/2021, 16:16

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w