1. ภาพรวม/บทนำ
แม้ว่าแอปพลิเคชันแบบหลายระดับซึ่งประกอบด้วยเว็บ เซิร์ฟเวอร์แอปพลิเคชัน และฐานข้อมูลจะเป็นพื้นฐานของการพัฒนาเว็บและเป็นจุดเริ่มต้นของเว็บไซต์จำนวนมาก แต่ความสำเร็จมักจะมาพร้อมกับความท้าทายในเรื่องความสามารถในการปรับขนาด การผสานรวม และความคล่องตัว เช่น จะจัดการข้อมูลแบบเรียลไทม์ได้อย่างไร และจะกระจายข้อมูลไปยังระบบธุรกิจหลักหลายระบบได้อย่างไร ปัญหาเหล่านี้รวมกับความต้องการของแอปพลิเคชันขนาดอินเทอร์เน็ตทำให้เกิดความจำเป็นในการใช้ระบบการรับส่งข้อความแบบกระจาย และทำให้เกิดรูปแบบสถาปัตยกรรมของการใช้ไปป์ไลน์ข้อมูลเพื่อให้ได้ระบบแบบเรียลไทม์ที่ยืดหยุ่น ดังนั้น การทำความเข้าใจวิธีเผยแพร่ข้อมูลแบบเรียลไทม์ไปยังระบบการรับส่งข้อความแบบกระจาย และวิธีสร้างไปป์ไลน์ข้อมูลจึงเป็นทักษะที่สำคัญสำหรับทั้งนักพัฒนาซอฟต์แวร์และสถาปนิก
สิ่งที่คุณจะสร้าง
ในโค้ดแล็บนี้ คุณจะได้สร้างไปป์ไลน์ข้อมูลสภาพอากาศที่เริ่มต้นด้วยอุปกรณ์ Internet of Things (IoT) ใช้คิวข้อความเพื่อรับและส่งข้อมูล ใช้ฟังก์ชันแบบไม่ใช้เซิร์ฟเวอร์เพื่อย้ายข้อมูลไปยังคลังข้อมูล แล้วสร้างแดชบอร์ดที่แสดงข้อมูล Raspberry Pi ที่มีเซ็นเซอร์ตรวจอากาศจะใช้สำหรับอุปกรณ์ IoT และคอมโพเนนต์หลายอย่างของ Google Cloud Platform จะสร้างไปป์ไลน์ข้อมูล การสร้าง Raspberry Pi นั้นมีประโยชน์ แต่เป็นส่วนที่ไม่บังคับของ Codelab นี้ และสามารถแทนที่ข้อมูลสภาพอากาศแบบสตรีมด้วยสคริปต์ได้

หลังจากทำตามขั้นตอนในโค้ดแล็บนี้ คุณจะมีไปป์ไลน์ข้อมูลการสตรีมที่ป้อนแดชบอร์ดซึ่งแสดงอุณหภูมิ ความชื้น จุดน้ำค้าง และความกดอากาศ

สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Google Pub/Sub
- วิธีทำให้ Google Cloud Function ใช้งานได้
- วิธีใช้ประโยชน์จาก Google BigQuery
- วิธีสร้างแดชบอร์ดโดยใช้ Google Data Studio
- นอกจากนี้ หากคุณสร้างเซ็นเซอร์ IoT คุณจะได้เรียนรู้วิธีใช้ Google Cloud SDK และวิธีรักษาความปลอดภัยในการเรียกการเข้าถึงระยะไกลไปยัง Google Cloud Platform ด้วย
สิ่งที่คุณต้องมี
- บัญชี Google Cloud Platform ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรีมูลค่า$300
หากต้องการสร้างส่วนเซ็นเซอร์ IoT ของ Codelab นี้แทนการใช้ประโยชน์จากข้อมูลตัวอย่างและสคริปต์ คุณจะต้องมีสิ่งต่อไปนี้ด้วย ( ซึ่งสามารถสั่งซื้อเป็นชุดอุปกรณ์ที่สมบูรณ์หรือเป็นชิ้นส่วนแต่ละชิ้นได้ที่นี่)
- Raspberry Pi Zero W พร้อมแหล่งจ่ายไฟ การ์ดหน่วยความจำ SD และเคส
- เครื่องอ่านบัตร USB
- ฮับ USB (เพื่อให้เชื่อมต่อแป้นพิมพ์และเมาส์เข้ากับพอร์ต USB เดียวบน Raspberry Pi ได้)
- สายต่อแบบตัวเมียกับตัวเมียสำหรับเบรดบอร์ด
- ส่วนหัวของ GPIO Hammer
- เซ็นเซอร์ BME280
- หัวแร้งพร้อมตะกั่วบัดกรี
นอกจากนี้ ระบบยังถือว่าคุณมีสิทธิ์เข้าถึงจอคอมพิวเตอร์หรือทีวีที่มีอินพุต HDMI, สาย HDMI, คีย์บอร์ด และเมาส์
2. การเริ่มตั้งค่า
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ G Suite) คุณต้องสร้างบัญชี ไม่ว่าคุณจะมีบัญชี Google อยู่แล้วหรือไม่ โปรดใช้ประโยชน์จากการทดลองใช้ฟรีมูลค่า$300
ลงชื่อเข้าใช้คอนโซล Google Cloud Platform ( console.cloud.google.com) คุณสามารถใช้โปรเจ็กต์เริ่มต้น ("โปรเจ็กต์แรกของฉัน") สำหรับแล็บนี้ หรือจะเลือกสร้างโปรเจ็กต์ใหม่ก็ได้ หากต้องการสร้างโปรเจ็กต์ใหม่ คุณสามารถใช้หน้าจัดการทรัพยากร รหัสโปรเจ็กต์ต้องเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (รหัสที่แสดงด้านล่างมีผู้ใช้แล้วและจะใช้ไม่ได้) จดรหัสโปรเจ็กต์ของคุณ (เช่น รหัสโปรเจ็กต์ของคุณคือ _____) ไว้เนื่องจากคุณจะต้องใช้ในภายหลัง


การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่ก็อาจมีค่าใช้จ่ายมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทำงานต่อไป อย่าลืมไปที่ส่วนการล้างข้อมูลที่ท้าย Codelab
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
จาก Cloud Console ให้เลือก Pub/Sub แล้วเลือก 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 ให้เลือก Storage แล้วเลือก Browser

คลิกปุ่มสร้าง Bucket

เลือกชื่อสำหรับ Bucket ที่เก็บข้อมูล (ต้องเป็นชื่อที่ไม่ซ้ำกันทั่วโลกใน Google Cloud ทั้งหมด) แล้วคลิกปุ่มสร้าง

ค้นหาคีย์ความปลอดภัยที่ดาวน์โหลดโดยอัตโนมัติ แล้วลากและวางหรืออัปโหลดลงในที่เก็บข้อมูล

หลังจากอัปโหลดคีย์เสร็จแล้ว คีย์ควรปรากฏในเบราว์เซอร์ Cloud Storage

จดชื่อ Bucket ของพื้นที่เก็บข้อมูลและชื่อไฟล์คีย์ความปลอดภัยไว้ใช้ในภายหลัง
5. สร้างฟังก์ชันระบบคลาวด์
การประมวลผลแบบคลาวด์ทำให้เกิดโมเดลการประมวลผลแบบ Serverless อย่างเต็มรูปแบบ ซึ่งสามารถเรียกใช้ตรรกะได้ตามต้องการเพื่อตอบสนองต่อเหตุการณ์ที่มาจากทุกที่ สำหรับแล็บนี้ Cloud Function จะเริ่มทำงานทุกครั้งที่มีการเผยแพร่ข้อความไปยังหัวข้อสภาพอากาศ โดยจะอ่านข้อความแล้วจัดเก็บไว้ใน BigQuery
จาก Cloud Console ให้เลือก Cloud Functions

หากเห็นข้อความ 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" ให้เปลี่ยนเป็น "subscribe" คลิกปุ่มสร้าง

ระบบจะใช้เวลาประมาณ 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 ตามแผนภาพด้านล่าง

Raspberry Pi pin | การเชื่อมต่อเซ็นเซอร์ |
Pin 1 (3.3V) | VIN |
Pin 3 (CPIO2) | SDI |
Pin 5 (GPIO3) | SCK |
ขา 9 (กราวด์) | GND |

เชื่อมต่อจอภาพ (โดยใช้ขั้วต่อ Mini-HDMI), คีย์บอร์ด/เมาส์ (กับฮับ USB) และสุดท้ายคืออะแดปเตอร์จ่ายไฟ
กำหนดค่า Raspberry Pi และเซ็นเซอร์
หลังจาก Raspberry Pi บูตเสร็จแล้ว ให้เลือก Raspbian เป็นระบบปฏิบัติการที่ต้องการ ตรวจสอบว่าภาษาที่ต้องการถูกต้อง แล้วคลิก Install (ไอคอนฮาร์ดไดรฟ์ที่ส่วนบนซ้ายของหน้าต่าง)

คลิกไอคอน Wi-Fi (ด้านขวาบนของหน้าจอ) แล้วเลือกเครือข่าย หากเป็นเครือข่ายที่ปลอดภัย ให้ป้อนรหัสผ่าน (คีย์ที่แชร์ล่วงหน้า)

คลิกไอคอนราสเบอร์รี (ด้านซ้ายบนของหน้าจอ) เลือกค่ากำหนด แล้วเลือกการกำหนดค่า Raspberry Pi จากแท็บอินเทอร์เฟซ ให้เปิดใช้ I2C จากแท็บการแปล ให้ตั้งค่าภาษาและเขตเวลา หลังจากตั้งค่าเขตเวลาแล้ว ให้อนุญาตให้ Raspberry Pi รีบูต

หลังจากรีบูตเสร็จแล้ว ให้คลิกไอคอนเทอร์มินัลเพื่อเปิดหน้าต่างเทอร์มินัล

พิมพ์คำสั่งต่อไปนี้เพื่อให้แน่ใจว่าเซ็นเซอร์เชื่อมต่ออย่างถูกต้อง
sudo i2cdetect -y 1
ผลลัพธ์ควรมีลักษณะดังนี้ โปรดตรวจสอบว่าค่าเป็น 77

ติดตั้ง Google Cloud SDK
หากต้องการใช้ประโยชน์จากเครื่องมือในแพลตฟอร์ม Google Cloud คุณจะต้องติดตั้ง 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
ติดตั้งแพ็กเกจ tendo โดยใช้เครื่องมือจัดการแพ็กเกจ 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 จากระยะไกลโดยต้องมีการตรวจสอบสิทธิ์ สำหรับโค้ดแล็บนี้ ระบบจะใช้เพื่อเข้าถึงที่เก็บข้อมูลใน Bucket เพื่อให้ดาวน์โหลดคีย์ความปลอดภัยไปยัง 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
หากระบบขอให้คุณ "เลือกโปรเจ็กต์ระบบคลาวด์ที่จะใช้" ให้ป้อนหมายเลขที่สอดคล้องกับชื่อโปรเจ็กต์ที่คุณใช้สำหรับ Codelab นี้ แล้วกด 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://) อย่าลืมเปลี่ยนคำสั่งด้านล่างให้มีชื่อ Bucket และชื่อไฟล์
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
คุณควรเห็นข้อความว่าระบบกำลังคัดลอกไฟล์ และข้อความว่าการดำเนินการเสร็จสมบูรณ์แล้ว
จากบรรทัดคำสั่งใน Raspberry Pi ให้ส่งออกเส้นทางไปยังคีย์ความปลอดภัย (เปลี่ยนชื่อไฟล์ให้ตรงกับไฟล์ที่คุณมี)
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
ตอนนี้คุณมีเซ็นเซอร์ตรวจอากาศ IoT ที่เสร็จสมบูรณ์แล้ว ซึ่งพร้อมที่จะส่งข้อมูลไปยัง Google Cloud
7. เริ่ม Data Pipeline
อาจต้องเปิดใช้ 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 ให้เลือก Storage แล้วเลือก Browser

คลิกปุ่มสร้าง Bucket

เลือกชื่อสำหรับ Bucket ที่เก็บข้อมูล (โปรดทราบว่าชื่อต้องไม่ซ้ำกันทั่วโลกใน 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"
- ตั้งค่าตำแหน่งชั่วคราวเป็นชื่อของ Bucket ของ Google Cloud Storage ที่คุณเพิ่งสร้างพร้อมกับคำนำหน้าชื่อไฟล์เป็น "tmp" โดยควรมีลักษณะเป็น "gs://myStorageBucketName/tmp"
เมื่อกรอกข้อมูลทั้งหมดแล้ว (ดูด้านล่าง) ให้คลิกปุ่มเรียกใช้งาน

งาน Dataflow ควรเริ่มทำงาน

งาน Dataflow จะใช้เวลาประมาณ 1 นาทีจึงจะเสร็จสมบูรณ์

8. ตรวจสอบว่าข้อมูลไหลเวียน
บันทึกของ Cloud Functions
ตรวจสอบว่า 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 ไดรฟ์

คุณจะเห็นพื้นที่ว่างเปล่าสำหรับสร้างแดชบอร์ด เลือกอนุกรมเวลาจากแถวบนสุดของไอคอน

วาดสี่เหลี่ยมผืนผ้าที่มุมซ้ายบนของชีตเปล่า โดยควรมีขนาดประมาณ 1/4 ของแผ่นเปล่าทั้งหมด

เลือกแท็บสไตล์ที่ด้านขวามือของหน้าต่าง เปลี่ยนข้อมูลที่ขาดหายไปจาก "เส้นเป็น 0" เป็น "เส้นขาด" ในส่วนแกน Y ด้านซ้าย ให้ลบ 0 ออกจากค่าต่ำสุดของแกนเพื่อเปลี่ยนเป็น (อัตโนมัติ)

คลิกกราฟในชีตแล้วคัดลอก/วาง (Ctrl-C/Ctrl-V) 3 ครั้ง จัดแนวกราฟเพื่อให้แต่ละกราฟมี 1/4 ของเลย์เอาต์

คลิกที่กราฟแต่ละกราฟ แล้วคลิกเมตริกที่มีอยู่ (จุดน้ำค้าง) ในส่วนคุณสมบัติอนุกรมเวลาและข้อมูล จากนั้นเลือกเมตริกอื่นที่จะแสดงจนกว่าการอ่านค่าสภาพอากาศทั้ง 4 รายการ (จุดน้ำค้าง อุณหภูมิ ความชื้น และความกดอากาศ) จะมีกราฟของตัวเอง


ตอนนี้คุณมีแดชบอร์ดพื้นฐานแล้ว

10. ยินดีด้วย
คุณสร้างไปป์ไลน์ข้อมูลทั้งหมดแล้ว ในกระบวนการนี้ คุณได้เรียนรู้วิธีใช้ Google Pub/Sub, วิธีติดตั้งใช้งานฟังก์ชันแบบไร้เซิร์ฟเวอร์, วิธีใช้ประโยชน์จาก 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) เพื่อลบข้อมูลให้เสร็จสมบูรณ์
