1. ภาพรวม/บทนำ
แม้ว่าแอปพลิเคชันแบบหลายระดับที่ประกอบไปด้วยเว็บ แอปพลิเคชันเซิร์ฟเวอร์ และฐานข้อมูลจะเป็นรากฐานของการพัฒนาเว็บและเป็นจุดเริ่มต้นสำหรับเว็บไซต์จำนวนมาก แต่ความสำเร็จมักนำมาซึ่งความท้าทายในด้านความสามารถในการปรับขนาด การผสานรวม และความคล่องตัว เช่น จะสามารถจัดการข้อมูลแบบเรียลไทม์ได้อย่างไร และจะเผยแพร่ไปยังระบบธุรกิจที่สำคัญหลายระบบได้อย่างไร ปัญหาเหล่านี้ประกอบกับความต้องการแอปพลิเคชันระดับอินเทอร์เน็ตที่ผลักดันให้เกิดความต้องการระบบรับส่งข้อความแบบกระจายตัวขึ้น และทำให้รูปแบบทางสถาปัตยกรรมของการใช้ไปป์ไลน์ข้อมูลเพื่อทำงานของระบบแบบเรียลไทม์ที่ยืดหยุ่น ด้วยเหตุนี้ การทำความเข้าใจวิธีเผยแพร่ข้อมูลแบบเรียลไทม์ไปยังระบบการรับส่งข้อความแบบกระจายและวิธีสร้างไปป์ไลน์ข้อมูลจึงเป็นทักษะสําคัญสําหรับนักพัฒนาซอฟต์แวร์และสถาปนิก
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะสร้างไปป์ไลน์ข้อมูลสภาพอากาศที่เริ่มต้นด้วยอุปกรณ์อินเทอร์เน็ตของสรรพสิ่ง (IoT) จะใช้คิวข้อความเพื่อรับและส่งข้อมูล ใช้ประโยชน์จากฟังก์ชันแบบ Serverless เพื่อย้ายข้อมูลไปยังคลังข้อมูล จากนั้นจึงสร้างหน้าแดชบอร์ดที่แสดงข้อมูลดังกล่าว ระบบจะใช้ Raspberry Pi ที่มีเซ็นเซอร์สภาพอากาศสำหรับอุปกรณ์ IoT และคอมโพเนนต์หลายอย่างของ Google Cloud Platform จะประกอบกันเป็นไปป์ไลน์ข้อมูล แม้ว่าการสร้าง Raspberry Pi จะมีประโยชน์ แต่ก็เป็นส่วนที่ไม่บังคับของ Codelab นี้ และข้อมูลสภาพอากาศสำหรับสตรีมมิงสามารถแทนที่ด้วยสคริปต์ได้
หลังจากทำตามขั้นตอนใน Codelab นี้แล้ว คุณจะได้รับสตรีมข้อมูลสตรีมมิงที่แดชบอร์ดจะแสดงอุณหภูมิ ความชื้น จุดน้ำค้าง และความกดอากาศ
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Google Pub/Sub
- วิธีทำให้ฟังก์ชัน Google Cloud ใช้งานได้
- วิธีใช้ประโยชน์จาก Google BigQuery
- วิธีสร้างแดชบอร์ดโดยใช้ Google Data Studio
- นอกจากนี้ หากสร้างเซ็นเซอร์ IoT คุณจะได้เรียนรู้วิธีใช้ Google Cloud SDK และวิธีทำให้การเรียกใช้การเข้าถึงจากระยะไกลไปยัง Google Cloud Platform ปลอดภัย
สิ่งที่คุณต้องมี
- บัญชี Google Cloud Platform ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรี$300
หากต้องการสร้างส่วนเซ็นเซอร์ IoT ของโค้ดแล็บนี้แทนที่จะใช้ประโยชน์จากข้อมูลตัวอย่างและสคริปต์ คุณจะต้องมีสิ่งต่อไปนี้ด้วย (ซึ่งสามารถสั่งซื้อเป็นชุดสมบูรณ์หรือเป็นชิ้นส่วนแยกต่างหากได้ที่นี่)...
- Raspberry Pi Zero W พร้อมแหล่งจ่ายไฟ การ์ดหน่วยความจำ SD และเคส
- เครื่องอ่านการ์ด USB
- ฮับ USB (สำหรับเชื่อมต่อแป้นพิมพ์และเมาส์เข้ากับพอร์ต USB เพียงพอร์ตเดียวของ Raspberry Pi)
- สายไฟเบรดบอร์ดตัวเมีย-ตัวเมีย
- หัวค้อน GPIO
- เซ็นเซอร์ BME280
- หัวแร้งพร้อมหัวแร้ง
นอกจากนี้ คุณจะต้องใช้จอภาพคอมพิวเตอร์หรือทีวีที่มีอินพุต HDMI, สาย HDMI, แป้นพิมพ์ และเมาส์
2. การเริ่มตั้งค่า
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
หากยังไม่มีบัญชี Google (Gmail หรือ G Suite) คุณต้องสร้างบัญชี ไม่ว่าคุณจะมีบัญชี Google อยู่แล้วหรือไม่ก็ตาม อย่าลืมใช้ประโยชน์จากการทดลองใช้ฟรีมูลค่า 12, 000 บาท!
ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) คุณสามารถใช้โปรเจ็กต์เริ่มต้น ("โปรเจ็กต์แรก") สำหรับห้องทดลองนี้ หรือจะเลือกสร้างโปรเจ็กต์ใหม่ก็ได้ หากต้องการสร้างโปรเจ็กต์ใหม่ ให้ใช้หน้าจัดการทรัพยากร รหัสโปรเจ็กต์ต้องเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (รหัสที่แสดงด้านล่างมีผู้อื่นนำไปใช้แล้วและไม่สามารถใช้งานได้) จดรหัสโปรเจ็กต์ไว้ (เช่น รหัสโปรเจ็กต์ของคุณคือ _____) เนื่องจากจะต้องใช้ในภายหลัง
ค่าใช้จ่ายในการทํา Codelab นี้ไม่ควรเกิน 200 บาท แต่อาจมากกว่านี้หากเลือกใช้ทรัพยากรเพิ่มเติมหรือปล่อยไว้ให้ทํางาน อย่าลืมดูส่วน "ล้างข้อมูล" ที่ท้ายโค้ดแล็บ
3. สร้างตาราง BigQuery
BigQuery เป็นคลังข้อมูลองค์กรแบบ Serverless ที่มีต้นทุนต่ำ รองรับการปรับขนาดได้สูง และเป็นตัวเลือกที่เหมาะสมที่สุดในการจัดเก็บข้อมูลที่สตรีมจากอุปกรณ์ IoT ในขณะเดียวกันก็อนุญาตให้แดชบอร์ดข้อมูลวิเคราะห์ค้นหาข้อมูลได้
มาสร้างตารางที่จะเก็บข้อมูลสภาพอากาศ IoT ทั้งหมดกัน เลือก BigQuery จาก Cloud Console การดำเนินการนี้จะเปิด BigQuery ในหน้าต่างใหม่ (อย่าปิดหน้าต่างเดิมเนื่องจากจะต้องเข้าถึงอีกครั้ง)
คลิกไอคอนลูกศรลงข้างชื่อโปรเจ็กต์ แล้วเลือก "สร้างชุดข้อมูลใหม่"
ป้อน "weatherData" สำหรับชุดข้อมูล เลือกตำแหน่งที่จะจัดเก็บชุดข้อมูล แล้วคลิก "ตกลง"
คลิกเครื่องหมาย "+" ข้างชุดข้อมูลเพื่อสร้างตารางใหม่
สำหรับข้อมูลแหล่งที่มา ให้เลือกสร้างตารางว่างเปล่า ป้อน weatherDataTable เป็นชื่อตารางปลายทาง ในส่วนสคีมา ให้คลิกปุ่มเพิ่มช่องจนกว่าจะมีทั้งหมด 9 ช่อง กรอกข้อมูลในช่องดังที่แสดงด้านล่าง อย่าลืมเลือกประเภทที่เหมาะสมสําหรับแต่ละช่องด้วย เมื่อดำเนินการเสร็จแล้ว ให้คลิกปุ่มสร้างตาราง
คุณควรเห็นผลลัพธ์แบบนี้...
ตอนนี้คุณตั้งค่าคลังข้อมูลเพื่อรับข้อมูลสภาพอากาศแล้ว
4. สร้างหัวข้อ Pub/Sub
Cloud Pub/Sub เป็นรากฐานที่ใช้งานง่าย เชื่อถือได้ และปรับขนาดได้สำหรับข้อมูลวิเคราะห์สตรีมและระบบการประมวลผลที่ทำงานตามเหตุการณ์ ด้วยเหตุนี้ จึงเหมาะกับการจัดการข้อความ IoT ขาเข้าและปล่อยให้ระบบดาวน์สตรีมประมวลผลข้อความเหล่านั้น
หากคุณยังคงอยู่ในหน้าต่างสำหรับ BigQuery ให้เปลี่ยนกลับไปใช้ Cloud Console หากปิด Cloud Console ไปแล้ว ให้ไปที่ https://console.cloud.google.com
เลือก Pub/Sub จาก Cloud Console แล้วเลือก Topics
หากคุณเห็นพรอมต์เปิดใช้งาน API ให้คลิกปุ่ม เปิดใช้งาน API
คลิกปุ่มสร้างหัวข้อ
ป้อน "weatherdata" เป็นชื่อหัวข้อ แล้วคลิกสร้าง
คุณควรเห็นหัวข้อที่สร้างขึ้นใหม่
ตอนนี้คุณมีหัวข้อ Pub/Sub ทั้งสําหรับเผยแพร่ข้อความ IoT และอนุญาตให้กระบวนการอื่นๆ เข้าถึงข้อความเหล่านั้น
การเผยแพร่เนื้อหาอย่างปลอดภัย
หากวางแผนที่จะเผยแพร่ข้อความไปยังหัวข้อ Pub/Sub จากทรัพยากรภายนอก Google Cloud Console (เช่น เซ็นเซอร์ IoT) คุณจะต้องควบคุมการเข้าถึงให้เข้มงวดยิ่งขึ้นโดยใช้บัญชีบริการ และเพื่อรักษาความปลอดภัยของการเชื่อมต่อด้วยการสร้างใบรับรองความน่าเชื่อถือ
จาก Cloud Console ให้เลือก IAM และผู้ดูแลระบบ แล้วเลือกบัญชีบริการ
คลิกปุ่มสร้างบัญชีบริการ
เลือกบทบาทผู้เผยแพร่ Pub/Sub ในเมนูแบบเลื่อนลง "บทบาท"
พิมพ์ชื่อบัญชีบริการ (iotWeatherPublisher) เลือกช่องทําเครื่องหมาย "จัดหาคีย์ส่วนตัวใหม่" ตรวจสอบว่าตั้งค่าประเภทคีย์เป็น JSON แล้วคลิก "สร้าง"
คีย์ความปลอดภัยจะดาวน์โหลดโดยอัตโนมัติ เนื่องจากคีย์มีเพียงคีย์เดียว คุณจึงไม่ควรทำคีย์หาย คลิก "ปิด"
คุณควรเห็นว่ามีการสร้างบัญชีบริการขึ้นและมีรหัสคีย์เชื่อมโยงอยู่
เราจะจัดเก็บคีย์ไว้ใน Google Cloud Storage เพื่อให้เข้าถึงคีย์ได้ง่ายๆ ในภายหลัง เลือก "พื้นที่เก็บข้อมูล" แล้วเลือก "เบราว์เซอร์" จาก Cloud Console
คลิกปุ่มสร้างที่เก็บข้อมูล
เลือกชื่อสำหรับที่เก็บข้อมูลของพื้นที่เก็บข้อมูล (ต้องเป็นชื่อที่ไม่ซ้ำกันทั่วโลกใน Google Cloud ทั้งหมด) แล้วคลิกปุ่ม "สร้าง"
ค้นหาคีย์ความปลอดภัยที่ดาวน์โหลดโดยอัตโนมัติ แล้วลาก/วางหรืออัปโหลดลงในที่เก็บข้อมูล
หลังจากการอัปโหลดคีย์เสร็จสมบูรณ์แล้ว คีย์จะปรากฏในเบราว์เซอร์ Cloud Storage
จดชื่อที่เก็บข้อมูลและชื่อไฟล์คีย์ความปลอดภัยไว้ใช้ภายหลัง
5. สร้างฟังก์ชันระบบคลาวด์
การประมวลผลแบบคลาวด์ทำให้โมเดลการประมวลผลแบบ Serverless สมบูรณ์แบบได้ ซึ่งสามารถเริ่มทํางานตามตรรกะได้ตามคําขอเพื่อตอบสนองต่อเหตุการณ์ที่มาจากทุกที่ สําหรับห้องทดลองนี้ Cloud Function จะเริ่มต้นทุกครั้งที่มีการเผยแพร่ข้อความไปยังหัวข้อสภาพอากาศ โดยจะอ่านข้อความและจัดเก็บไว้ใน BigQuery
เลือก Cloud Functions จาก Cloud Console
หากคุณเห็นข้อความ API ให้คลิกที่ปุ่ม เปิดใช้ API
คลิกปุ่มสร้างฟังก์ชัน
ในช่อง "ชื่อ" ให้พิมพ์ function-weatherPubSubToBQ เลือกหัวข้อ Cloud Pub/Sub สำหรับทริกเกอร์ และเลือก weatherdata ในเมนูแบบเลื่อนลงของหัวข้อ สําหรับซอร์สโค้ด ให้เลือกเครื่องมือแก้ไขในหน้า ในแท็บ index.js ให้วางโค้ดต่อไปนี้ทับโค้ดที่มีอยู่ อย่าลืมเปลี่ยนค่าคงที่สำหรับ projectId, datasetId และ tableId ให้เหมาะกับสภาพแวดล้อมของคุณ
/**
* Background Cloud Function to be triggered by PubSub.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.subscribe = function (event, callback) {
const BigQuery = require('@google-cloud/bigquery');
const projectId = "myProject"; //Enter your project ID here
const datasetId = "myDataset"; //Enter your BigQuery dataset name here
const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
const PubSubMessage = event.data;
// Incoming data is in JSON format
const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
const jsonData = JSON.parse(incomingData);
var rows = [jsonData];
console.log(`Uploading data: ${JSON.stringify(rows)}`);
// Instantiates a client
const bigquery = BigQuery({
projectId: projectId
});
// Inserts data into a table
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then((foundErrors) => {
rows.forEach((row) => console.log('Inserted: ', row));
if (foundErrors && foundErrors.insertErrors != undefined) {
foundErrors.forEach((err) => {
console.log('Error: ', err);
})
}
})
.catch((err) => {
console.error('ERROR:', err);
});
// [END bigquery_insert_stream]
callback();
};
ในแท็บ package.json ให้วางโค้ดต่อไปนี้เหนือโค้ดตัวยึดตำแหน่งที่มีอยู่แล้ว
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
หากตั้งค่าฟังก์ชันที่จะดำเนินการเป็น " HelloWorld" ให้เปลี่ยนเป็น "สมัคร" คลิกปุ่มสร้าง
ระบบจะใช้เวลาประมาณ 2 นาทีจนกว่าฟังก์ชันจะแสดงว่ามีการทำให้ใช้งานได้แล้ว
ยินดีด้วย คุณเพิ่งเชื่อมต่อ Pub/Sub กับ BigQuery ผ่านฟังก์ชัน
6. ตั้งค่าฮาร์ดแวร์ IoT (ไม่บังคับ)
ประกอบ Raspberry Pi และเซ็นเซอร์
หากมีมากกว่า 7 พิน ให้ตัดส่วนหัวให้เหลือเพียง 7 พิน บัดกรีขาต่อเข้ากับแผงเซ็นเซอร์
ติดตั้งหมุดส่วนหัวของค้อนลงใน Raspberry Pi อย่างระมัดระวัง
ฟอร์แมตการ์ด SD และติดตั้งโปรแกรมติดตั้ง NOOBS (New Out Of Box Software) โดยทำตามขั้นตอนที่นี่ ใส่การ์ด SD ลงใน Raspberry Pi แล้วใส่ Raspberry Pi ลงในกล่อง
ใช้สายเบรดบอร์ดเพื่อเชื่อมต่อเซ็นเซอร์กับ Raspberry Pi ตามแผนภาพด้านล่าง
Pin ของ Raspberry Pi | การเชื่อมต่อเซ็นเซอร์ |
ปักหมุด 1 (3.3 โวลต์) | VIN |
ปักหมุด 3 (CPIO2) | SDI |
PIN 5 (GPIO3) | SCK |
ขา 9 (กราวด์) | GND |
เชื่อมต่อจอภาพ (โดยใช้ขั้วต่อ mini-HDMI), แป้นพิมพ์/เมาส์ (โดยใช้ฮับ USB) และสุดท้ายคืออะแดปเตอร์
กำหนดค่า Raspberry Pi และเซ็นเซอร์
หลังจาก Raspberry Pi บูตเสร็จแล้ว ให้เลือก Raspbian สำหรับระบบปฏิบัติการที่ต้องการ ตรวจสอบว่าภาษาที่ต้องการถูกต้อง แล้วคลิก "ติดตั้ง" (ไอคอนฮาร์ดไดรฟ์ที่ด้านซ้ายบนของหน้าต่าง)
คลิกไอคอน Wi-Fi (ด้านขวาบนของหน้าจอ) แล้วเลือกเครือข่าย หากเป็นเครือข่ายที่มีการรักษาความปลอดภัย ให้ป้อนรหัสผ่าน (คีย์ที่แชร์ล่วงหน้า)
คลิกไอคอน Raspberry (ด้านซ้ายบนของหน้าจอ) เลือกค่ากําหนด แล้วเลือกการกําหนดค่า Raspberry Pi จากแท็บอินเทอร์เฟซ ให้เปิดใช้ I2C จากแท็บการแปล ให้ตั้งค่าภาษาและเขตเวลา หลังจากตั้งค่าเขตเวลาแล้ว อนุญาตให้ Raspberry Pi รีบูต
หลังจากรีบูตเสร็จแล้ว ให้คลิกไอคอนเทอร์มินัลเพื่อเปิดหน้าต่างเทอร์มินัล
พิมพ์คำสั่งต่อไปนี้เพื่อตรวจสอบว่าเซ็นเซอร์เชื่อมต่ออย่างถูกต้อง
sudo i2cdetect -y 1
ผลลัพธ์ควรมีลักษณะดังนี้ อ่านค่า 77
ติดตั้ง Google Cloud SDK
หากต้องการใช้ประโยชน์จากเครื่องมือใน Google Cloud Platform คุณจะต้องติดตั้ง Google Cloud SDK ใน Raspberry Pi SDK มีเครื่องมือที่จำเป็นในการจัดการและใช้ประโยชน์จาก Google Cloud Platform และพร้อมให้บริการในภาษาโปรแกรมหลายภาษา
เปิดหน้าต่างเทอร์มินัลใน Raspberry Pi หากยังไม่ได้เปิด และตั้งค่าตัวแปรสภาพแวดล้อมที่จะจับคู่เวอร์ชัน SDK กับระบบปฏิบัติการใน Raspberry Pi
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
ถึงตอนนี้ให้เพิ่มตำแหน่งที่เก็บแพ็กเกจ Google Cloud SDK เพื่อให้เครื่องมือติดตั้งทราบว่าต้องดูตำแหน่งใดเมื่อระบบขอให้ติดตั้ง SDK
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
เพิ่มคีย์สาธารณะจากที่เก็บแพ็กเกจของ Google เพื่อให้ Raspberry Pi ตรวจสอบความปลอดภัยและเชื่อถือเนื้อหาระหว่างการติดตั้ง
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
ตรวจสอบว่าซอฟต์แวร์ทั้งหมดใน Raspberry Pi อัปเดตแล้วและติดตั้ง Google Cloud SDK หลัก
sudo apt-get update && sudo apt-get install google-cloud-sdk
เมื่อได้รับข้อความแจ้งว่า "คุณต้องการดำเนินการต่อไหม" ให้กด Enter
ติดตั้งแพ็กเกจ Tenor โดยใช้ตัวจัดการแพ็กเกจ Python แพ็กเกจนี้ใช้ในการตรวจสอบว่าสคริปต์ทำงานมากกว่า 1 ครั้งหรือไม่ และกำลังจะติดตั้งแอปพลิเคชันไปยังสคริปต์สภาพอากาศหรือไม่
pip install tendo
ตรวจสอบว่าได้ติดตั้งแพ็กเกจ Google Cloud PubSub และ OAuth2 สำหรับ Python เป็นเวอร์ชันล่าสุดแล้วโดยใช้ตัวจัดการแพ็กเกจ Python
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
เริ่มต้น Google Cloud SDK
SDK อนุญาตให้เข้าถึง Google Cloud จากระยะไกลผ่านการตรวจสอบสิทธิ์ สําหรับโค้ดแล็บนี้ ระบบจะใช้เพื่อเข้าถึงที่เก็บข้อมูลเพื่อให้ดาวน์โหลดคีย์ความปลอดภัยไปยัง Raspberry Pi ได้อย่างง่ายดาย
จากบรรทัดคำสั่งใน Raspberry Pi ให้ป้อน
gcloud init --console-only
เมื่อได้รับข้อความแจ้งว่า "ต้องการเข้าสู่ระบบไหม (Y/n)" ให้กด Enter
เมื่อเห็นข้อความ "ไปที่ลิงก์ต่อไปนี้ในเบราว์เซอร์" ตามด้วย URL ที่ยาวซึ่งขึ้นต้นด้วย https://accounts.google.com/o/oauth?... ให้วางเมาส์เหนือ URL ดังกล่าว คลิกขวา แล้วเลือก "คัดลอก URL" จากนั้นเปิดเว็บเบราว์เซอร์ (ไอคอนลูกโลกสีน้ำเงินที่มุมซ้ายบนของหน้าจอ) คลิกขวาที่แถบที่อยู่ แล้วคลิก "วาง"
เมื่อเห็นหน้าจอลงชื่อเข้าใช้ ให้ป้อนอีเมลที่เชื่อมโยงกับบัญชี Google Cloud แล้วกด Enter จากนั้นป้อนรหัสผ่าน แล้วคลิกปุ่ม ถัดไป
คุณจะได้รับข้อความแจ้งว่า Google Cloud SDK ต้องการเข้าถึงบัญชี Google ของคุณ คลิกปุ่ม "อนุญาต"
คุณจะเห็นรหัสยืนยัน ใช้เมาส์ไฮไลต์แล้วคลิกขวาและเลือกคัดลอก กลับไปที่หน้าต่างเทอร์มินัล ตรวจสอบว่าเคอร์เซอร์อยู่ทางขวาของ "ป้อนรหัสยืนยัน:" คลิกขวาด้วยเมาส์ แล้วเลือกวาง กดปุ่ม Enter
หากระบบขอให้ "เลือกโปรเจ็กต์ที่อยู่ในระบบคลาวด์ที่จะใช้" ให้ป้อนตัวเลขที่ตรงกับชื่อโปรเจ็กต์ที่คุณใช้สำหรับโค้ดแล็บนี้ แล้วกด Enter
หากได้รับข้อความแจ้งให้เปิดใช้ Compute API ให้กดปุ่ม Enter เพื่อเปิดใช้ หลังจากนั้น ระบบจะขอให้คุณกำหนดการตั้งค่า Google Compute Engine กด Enter คุณจะเห็นรายการภูมิภาค/โซนที่มีสิทธิ์ ให้เลือกภูมิภาค/โซนที่อยู่ใกล้คุณ ป้อนหมายเลขที่เกี่ยวข้อง แล้วกด Enter
ในอีกสักครู่ คุณจะเห็นข้อมูลเพิ่มเติมแสดงอยู่ กำหนดค่า Google Cloud SDK แล้ว คุณปิดหน้าต่างเว็บเบราว์เซอร์ได้เนื่องจากจะไม่ต้องใช้อีกต่อไป
ติดตั้งซอฟต์แวร์เซ็นเซอร์และสคริปต์สภาพอากาศ
จากบรรทัดคำสั่งใน Raspberry Pi ให้โคลนแพ็กเกจที่จำเป็นสำหรับการอ่านข้อมูลจากหมุดอินพุต/เอาต์พุต
git clone https://github.com/adafruit/Adafruit_Python_GPIO
ติดตั้งแพ็กเกจที่ดาวน์โหลด
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
โคลนโค้ดโปรเจ็กต์ที่เปิดใช้เซ็นเซอร์สภาพอากาศ
git clone https://github.com/googlecodelabs/iot-data-pipeline
คัดลอกไดรเวอร์เซ็นเซอร์ลงในไดเรกทอรีเดียวกันกับส่วนที่เหลือของซอฟต์แวร์ที่ดาวน์โหลดมา
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
แก้ไขสคริปต์โดยพิมพ์...
nano checkWeather.py
เปลี่ยนโปรเจ็กต์เป็นรหัสโปรเจ็กต์และเปลี่ยนหัวข้อเป็นชื่อหัวข้อ Pub/Sub (ข้อมูลเหล่านี้ระบุไว้ในส่วน "การตั้งค่า" และ "สร้างหัวข้อ Pub/Sub" ของ Codelab นี้)
เปลี่ยนค่า SensorID, SensorZipCode, SensorLat และ SensorLong เป็นค่าใดก็ได้ตามต้องการ ดูค่าละติจูดและลองจิจูดของสถานที่หรือที่อยู่ที่เฉพาะเจาะจงได้ที่นี่
เมื่อทำการเปลี่ยนแปลงที่จำเป็นเสร็จแล้ว ให้กด Ctrl-X เพื่อเริ่มออกจากเครื่องมือแก้ไข Nano กด Y เพื่อยืนยัน
# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"
ติดตั้งคีย์ความปลอดภัย
คัดลอกคีย์ความปลอดภัย (จากส่วน "การเผยแพร่ที่ปลอดภัยไปยังหัวข้อ") ไปยัง Raspberry Pi
หากใช้ SFTP หรือ SCP เพื่อคัดลอกคีย์ความปลอดภัยจากเครื่องของคุณเองไปยัง Raspberry Pi (ในไดเรกทอรี /home/pi) ให้ข้ามขั้นตอนถัดไปและข้ามไปยังการส่งออกเส้นทาง
หากวางคีย์ความปลอดภัยลงในที่เก็บข้อมูลของพื้นที่เก็บข้อมูล คุณจะต้องจำชื่อของที่เก็บข้อมูลของพื้นที่เก็บข้อมูลและชื่อไฟล์ ใช้คำสั่ง gsutil เพื่อคัดลอกคีย์ความปลอดภัย คำสั่งนี้เข้าถึง Google Storage ได้ (เหตุผลที่ชื่อ gsutil และเหตุผลที่เส้นทางไปยังไฟล์ขึ้นต้นด้วย gs://) โปรดเปลี่ยนคำสั่งด้านล่างเพื่อใช้ชื่อที่เก็บข้อมูลและชื่อไฟล์
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
คุณควรเห็นข้อความว่ากำลังคัดลอกไฟล์อยู่และแจ้งว่าการดำเนินการเสร็จสมบูรณ์แล้ว
จากบรรทัดคำสั่งใน Raspberry Pi ให้ส่งออกเส้นทางไปยังคีย์ความปลอดภัย (เปลี่ยนชื่อไฟล์ให้ตรงกับที่คุณมี)
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
ตอนนี้คุณมีเซ็นเซอร์สภาพอากาศ IoT ที่พร้อมส่งข้อมูลไปยัง Google Cloud แล้ว
7. เริ่มไปป์ไลน์ข้อมูล
อาจต้องเปิดใช้ Compute API
การสตรีมข้อมูลจาก Raspberry Pi
หากคุณสร้างเซ็นเซอร์สภาพอากาศ IoT ของ Raspberry Pi ให้เริ่มสคริปต์ที่จะอ่านข้อมูลสภาพอากาศและส่งไปยัง Google Cloud Pub/Sub หากไม่อยู่ในไดเรกทอรี /home/pi/iot-data-pipeline ให้ย้ายไปที่ไดเรกทอรีดังกล่าวก่อน
cd /home/pi/iot-data-pipeline
เริ่มเขียนสคริปต์สภาพอากาศ
python checkWeather.py
คุณควรเห็นหน้าต่างเทอร์มินัลแสดงผลลัพธ์ข้อมูลสภาพอากาศทุกๆ นาที เมื่อข้อมูลไหลแล้ว คุณสามารถข้ามไปยังส่วนถัดไป (ตรวจสอบว่าข้อมูลไหล)
การสตรีมข้อมูลจำลอง
หากคุณไม่ได้สร้างเซ็นเซอร์สภาพอากาศ IoT คุณสามารถจำลองการสตรีมข้อมูลโดยใช้ชุดข้อมูลสาธารณะที่จัดเก็บไว้ใน Google Cloud Storage และป้อนชุดข้อมูลลงในหัวข้อ Pub/Sub ที่มีอยู่ ระบบจะใช้ Google Dataflow ร่วมกับเทมเพลตที่ Google มีให้สำหรับการอ่านจาก Cloud Storage และการเผยแพร่ไปยัง Pub/Sub
ในกระบวนการนี้ Dataflow จะต้องมีตำแหน่งพื้นที่เก็บข้อมูลชั่วคราว ลองสร้างที่เก็บข้อมูลของพื้นที่เก็บข้อมูลเพื่อวัตถุประสงค์นี้
เลือก "พื้นที่เก็บข้อมูล" แล้วเลือก "เบราว์เซอร์" จาก Cloud Console
คลิกปุ่มสร้างที่เก็บข้อมูล
เลือกชื่อสำหรับที่เก็บข้อมูลของพื้นที่เก็บข้อมูล (อย่าลืมว่าต้องเป็นชื่อที่ไม่ซ้ำกันทั่วโลกใน Google Cloud ทั้งหมด) และคลิกปุ่ม "สร้าง" โปรดจำชื่อที่เก็บข้อมูลนี้ไว้เนื่องจากจะต้องใช้ในไม่ช้า
เลือก Dataflow จาก Cloud Console
คลิกที่ "สร้างงานจากเทมเพลต" (ส่วนบนของหน้าจอ)
กรอกรายละเอียดของงานดังที่แสดงด้านล่าง โดยให้ความสำคัญกับสิ่งต่อไปนี้
- ป้อนชื่องาน dataflow-gcs-to-pubsub
- ภูมิภาคของคุณควรเลือกโดยอัตโนมัติตามสถานที่ที่โฮสต์โปรเจ็กต์ของคุณ และไม่ควรจำเป็นต้องเปลี่ยนแปลง
- เลือกเทมเพลต Cloud Dataflow ของข้อความ GCS ไปยัง Cloud Pub/Sub
- สําหรับไฟล์ Cloud Storage อินพุต ให้ป้อน gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (นี่คือชุดข้อมูลสาธารณะ)
- สำหรับหัวข้อ Pub/Sub ของเอาต์พุต เส้นทางที่แน่นอนจะขึ้นอยู่กับชื่อโปรเจ็กต์ของคุณ และจะมีลักษณะดังนี้ "projects/yourProjectName/topics/weatherdata"
- ตั้งค่าตำแหน่งชั่วคราวเป็นชื่อของที่เก็บข้อมูล Google Cloud Storage ที่คุณเพิ่งสร้างพร้อมกับคำนำหน้าชื่อไฟล์ "tmp" ซึ่งควรอยู่ในรูปแบบ "gs://myStorageBucketName/tmp"
เมื่อคุณกรอกข้อมูลทั้งหมดครบถ้วนแล้ว (ดูด้านล่าง) ให้คลิกปุ่ม เรียกใช้งาน
งานของ Dataflow ควรเริ่มทํางาน
งาน Dataflow ควรจะใช้เวลาประมาณ 1 นาที
8. ตรวจสอบว่าข้อมูลมีการส่ง
บันทึกของ Cloud Function
ตรวจสอบว่า Pub/Sub กำลังทริกเกอร์ Cloud Function
gcloud beta functions logs read function-weatherPubSubToBQ
บันทึกควรแสดงว่าฟังก์ชันกำลังทำงาน กำลังรับข้อมูล และกำลังแทรกข้อมูลลงใน BigQuery
ข้อมูล BigQuery
ตรวจสอบว่าข้อมูลเข้าสู่ตาราง BigQuery แล้ว จาก Cloud Console ให้ไปที่ BigQuery (bigquery.cloud.google.com)
ใต้ชื่อโปรเจ็กต์ (ทางด้านซ้ายมือของหน้าต่าง) ให้คลิกชุดข้อมูล (weatherData) จากนั้นคลิกตาราง (weatherDataTable) แล้วคลิกปุ่ม "ตารางการค้นหา"
เพิ่มเครื่องหมายดอกจันลงในคำสั่ง SQL เพื่อให้เป็น SELECT * FROM... ตามที่แสดงด้านล่าง แล้วคลิกปุ่มเรียกใช้การค้นหา
คลิกปุ่มเรียกใช้การค้นหาหากได้รับข้อความแจ้ง
หากคุณเห็นผลลัพธ์ แสดงว่าข้อมูลไหลลื่นอย่างถูกต้อง
เมื่อข้อมูลเริ่มไหลเข้ามาแล้ว คุณก็พร้อมสร้างแดชบอร์ดข้อมูลวิเคราะห์
9. สร้างแดชบอร์ด Data Studio
Google Data Studio จะเปลี่ยนข้อมูลของคุณเป็นหน้าแดชบอร์ดและรายงานให้ข้อมูลที่อ่านง่าย แชร์ได้สะดวก และปรับแต่งได้อย่างเต็มที่
ไปที่ https://datastudio.google.com จากเว็บเบราว์เซอร์
ในส่วน "เริ่มรายงานใหม่" ให้คลิก "ว่าง" แล้วคลิกปุ่ม "เริ่มต้นใช้งาน"
คลิกช่องทำเครื่องหมายเพื่อยอมรับข้อกำหนด คลิกปุ่ม "ถัดไป" เลือกอีเมลที่คุณต้องการรับ แล้วคลิกปุ่มเสร็จสิ้น อีกครั้ง ในส่วน "สร้างรายงานใหม่" ให้คลิก "ว่าง"
คลิกปุ่มสร้างแหล่งข้อมูลใหม่
คลิก BigQuery แล้วคลิกปุ่ม "ให้สิทธิ์" จากนั้นเลือกบัญชี Google ที่ต้องการใช้กับ Data Studio (ควรเป็นบัญชีเดียวกับที่คุณใช้กับ Codelab)
คลิกปุ่ม "อนุญาต"
เลือกชื่อโปรเจ็กต์ ชุดข้อมูล และตาราง จากนั้นคลิกปุ่ม "เชื่อมต่อ"
เปลี่ยนช่องประเภทตามที่แสดงด้านล่าง (ทุกอย่างควรเป็นตัวเลข ยกเว้น timecollected และ sensorID) โปรดทราบว่ามีการตั้งค่า timecollected เป็น Date Hour (ไม่ใช่แค่ Date) เปลี่ยนช่องการรวมข้อมูลตามที่แสดงด้านล่าง (จุดน้ำค้าง อุณหภูมิ ความชื้น และความดันควรเป็นค่าเฉลี่ย และตั้งค่าทุกอย่างเป็น "ไม่มี") คลิกปุ่ม สร้างรายงาน
ยืนยันโดยคลิกปุ่ม เพิ่มลงในรายงาน
หากระบบขอให้เลือกบัญชี Google ของคุณ ให้เลือกบัญชีแล้วคลิกปุ่มอนุญาตเพื่อให้ Data Studio จัดเก็บรายงานใน Google ไดรฟ์
คุณจะเห็นผืนผ้าใบเปล่าสำหรับสร้างหน้าแดชบอร์ด จากแถวบนสุดของไอคอน ให้เลือกอนุกรมเวลา
วาดสี่เหลี่ยมผืนผ้าที่มุมซ้ายบนของแผ่นงานเปล่า โดยควรใช้พื้นที่ประมาณ ¼ ของหน้ากระดาษเปล่าทั้งหมด
ที่ด้านขวาของหน้าต่าง ให้เลือกแท็บ รูปแบบ เปลี่ยน "ข้อมูลขาดหายไป" จาก "บรรทัดเป็น 0" เป็น "การแบ่งบรรทัด" ในส่วนแกน Y ซ้าย ให้ลบ 0 ออกจากแกนต่ำสุดเพื่อเปลี่ยนเป็น (อัตโนมัติ)
คลิกกราฟในชีต แล้วคัดลอก/วาง (Ctrl-C/Ctrl-V) 3 ครั้ง จัดแนวกราฟแต่ละรายการให้มีพื้นที่ ¼ ของเลย์เอาต์
คลิกแต่ละกราฟ และในส่วนคุณสมบัติของอนุกรมเวลาและข้อมูล ให้คลิกเมตริกที่มีอยู่ (จุดน้ำค้าง) ให้เลือกเมตริกอื่นที่จะแสดงจนกว่าค่าที่อ่านได้ของสภาพอากาศทั้ง 4 รายการ (จุดน้ำค้าง อุณหภูมิ ความชื้น และความดัน) มีกราฟของตัวเอง
ตอนนี้คุณมีแดชบอร์ดพื้นฐานแล้ว
10. ยินดีด้วย
คุณได้สร้างไปป์ไลน์ข้อมูลทั้งหมดแล้ว ด้วยเหตุนี้ คุณได้เรียนรู้วิธีใช้ Google Pub/Sub, วิธีทำให้ฟังก์ชันแบบ Serverless ใช้งานได้, วิธีใช้ประโยชน์จาก BigQuery และวิธีสร้างแดชบอร์ดการวิเคราะห์โดยใช้ Data Studio นอกจากนี้ คุณยังได้เห็นว่า Google Cloud SDK ใช้เพื่อนําข้อมูลไปยัง Google Cloud Platform อย่างปลอดภัยได้อย่างไร สุดท้าย ตอนนี้คุณมีประสบการณ์การใช้งานรูปแบบสถาปัตยกรรมที่สําคัญซึ่งจัดการปริมาณงานได้สูงในขณะที่ยังคงให้บริการได้
การจัดระเบียบ
เมื่อทดสอบข้อมูลสภาพอากาศและไปป์ไลน์การวิเคราะห์เสร็จสิ้นแล้ว คุณสามารถนำทรัพยากรที่ทำงานอยู่ออก
หากคุณสร้างเซ็นเซอร์ IoT ให้ปิดเซ็นเซอร์ กด Ctrl-C ในหน้าต่างเทอร์มินัลเพื่อหยุดสคริปต์ แล้วพิมพ์คำสั่งต่อไปนี้เพื่อปิด Raspberry Pi
shutdown -h now
ไปที่ Cloud Functions แล้วคลิกช่องทำเครื่องหมายถัดจากFunction-weatherPubSubToBQ แล้วคลิก "ลบ"
ไปที่ Pub/Sub คลิก "หัวข้อ" แล้วคลิกช่องทำเครื่องหมายข้างหัวข้อ weatherdata จากนั้นคลิก "ลบ"
ไปที่พื้นที่เก็บข้อมูล คลิกช่องทําเครื่องหมายข้างที่เก็บข้อมูล แล้วคลิก "ลบ"
ไปที่ BigQuery.cloud.google.com คลิกลูกศรลงข้างชื่อโปรเจ็กต์ แล้วคลิกลูกศรลงทางด้านขวาของชุดข้อมูล weatherData แล้วคลิก "ลบชุดข้อมูล"
เมื่อได้รับข้อความแจ้ง ให้พิมพ์รหัสชุดข้อมูล (weatherData) เพื่อลบข้อมูลให้เสร็จสมบูรณ์