การสร้างไปป์ไลน์ข้อมูลแบบ Serverless: IoT ไปยัง Analytics

1. ภาพรวม/บทนำ

แม้ว่าแอปพลิเคชันแบบหลายระดับที่ประกอบไปด้วยเว็บ แอปพลิเคชันเซิร์ฟเวอร์ และฐานข้อมูลจะเป็นรากฐานของการพัฒนาเว็บและเป็นจุดเริ่มต้นสำหรับเว็บไซต์จำนวนมาก แต่ความสำเร็จมักนำมาซึ่งความท้าทายในด้านความสามารถในการปรับขนาด การผสานรวม และความคล่องตัว เช่น จะสามารถจัดการข้อมูลแบบเรียลไทม์ได้อย่างไร และจะเผยแพร่ไปยังระบบธุรกิจที่สำคัญหลายระบบได้อย่างไร ปัญหาเหล่านี้ประกอบกับความต้องการแอปพลิเคชันระดับอินเทอร์เน็ตที่ผลักดันให้เกิดความต้องการระบบรับส่งข้อความแบบกระจายตัวขึ้น และทำให้รูปแบบทางสถาปัตยกรรมของการใช้ไปป์ไลน์ข้อมูลเพื่อทำงานของระบบแบบเรียลไทม์ที่ยืดหยุ่น ด้วยเหตุนี้ การทำความเข้าใจวิธีเผยแพร่ข้อมูลแบบเรียลไทม์ไปยังระบบการรับส่งข้อความแบบกระจายและวิธีสร้างไปป์ไลน์ข้อมูลจึงเป็นทักษะสําคัญสําหรับนักพัฒนาซอฟต์แวร์และสถาปนิก

สิ่งที่คุณจะสร้าง

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Google Pub/Sub
  • วิธีทำให้ฟังก์ชัน Google Cloud ใช้งานได้
  • วิธีใช้ประโยชน์จาก Google BigQuery
  • วิธีสร้างแดชบอร์ดโดยใช้ Google Data Studio
  • นอกจากนี้ หากสร้างเซ็นเซอร์ IoT คุณจะได้เรียนรู้วิธีใช้ Google Cloud SDK และวิธีทำให้การเรียกใช้การเข้าถึงจากระยะไกลไปยัง Google Cloud Platform ปลอดภัย

สิ่งที่คุณต้องมี

หากต้องการสร้างส่วนเซ็นเซอร์ 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 ทั้งหมด (รหัสที่แสดงด้านล่างมีผู้อื่นนำไปใช้แล้วและไม่สามารถใช้งานได้) จดรหัสโปรเจ็กต์ไว้ (เช่น รหัสโปรเจ็กต์ของคุณคือ _____) เนื่องจากจะต้องใช้ในภายหลัง

f414a63d955621a7.png

3415e861c09cd06a.png

ค่าใช้จ่ายในการทํา Codelab นี้ไม่ควรเกิน 200 บาท แต่อาจมากกว่านี้หากเลือกใช้ทรัพยากรเพิ่มเติมหรือปล่อยไว้ให้ทํางาน อย่าลืมดูส่วน "ล้างข้อมูล" ที่ท้ายโค้ดแล็บ

3. สร้างตาราง BigQuery

BigQuery เป็นคลังข้อมูลองค์กรแบบ Serverless ที่มีต้นทุนต่ำ รองรับการปรับขนาดได้สูง และเป็นตัวเลือกที่เหมาะสมที่สุดในการจัดเก็บข้อมูลที่สตรีมจากอุปกรณ์ IoT ในขณะเดียวกันก็อนุญาตให้แดชบอร์ดข้อมูลวิเคราะห์ค้นหาข้อมูลได้

มาสร้างตารางที่จะเก็บข้อมูลสภาพอากาศ IoT ทั้งหมดกัน เลือก BigQuery จาก Cloud Console การดำเนินการนี้จะเปิด BigQuery ในหน้าต่างใหม่ (อย่าปิดหน้าต่างเดิมเนื่องจากจะต้องเข้าถึงอีกครั้ง)

12a838f78a10144a.png

คลิกไอคอนลูกศรลงข้างชื่อโปรเจ็กต์ แล้วเลือก "สร้างชุดข้อมูลใหม่"

27616683b64ce34a.png

ป้อน "weatherData" สำหรับชุดข้อมูล เลือกตำแหน่งที่จะจัดเก็บชุดข้อมูล แล้วคลิก "ตกลง"

62cfcbd1add830ea.png

คลิกเครื่องหมาย "+" ข้างชุดข้อมูลเพื่อสร้างตารางใหม่

3d7bff6f9843fa3c.png

สำหรับข้อมูลแหล่งที่มา ให้เลือกสร้างตารางว่างเปล่า ป้อน weatherDataTable เป็นชื่อตารางปลายทาง ในส่วนสคีมา ให้คลิกปุ่มเพิ่มช่องจนกว่าจะมีทั้งหมด 9 ช่อง กรอกข้อมูลในช่องดังที่แสดงด้านล่าง อย่าลืมเลือกประเภทที่เหมาะสมสําหรับแต่ละช่องด้วย เมื่อดำเนินการเสร็จแล้ว ให้คลิกปุ่มสร้างตาราง

eef352614a5696a7.png

คุณควรเห็นผลลัพธ์แบบนี้...

7d10e5ab8c6d6a0d.png

ตอนนี้คุณตั้งค่าคลังข้อมูลเพื่อรับข้อมูลสภาพอากาศแล้ว

4. สร้างหัวข้อ Pub/Sub

Cloud Pub/Sub เป็นรากฐานที่ใช้งานง่าย เชื่อถือได้ และปรับขนาดได้สำหรับข้อมูลวิเคราะห์สตรีมและระบบการประมวลผลที่ทำงานตามเหตุการณ์ ด้วยเหตุนี้ จึงเหมาะกับการจัดการข้อความ IoT ขาเข้าและปล่อยให้ระบบดาวน์สตรีมประมวลผลข้อความเหล่านั้น

หากคุณยังคงอยู่ในหน้าต่างสำหรับ BigQuery ให้เปลี่ยนกลับไปใช้ Cloud Console หากปิด Cloud Console ไปแล้ว ให้ไปที่ https://console.cloud.google.com

เลือก Pub/Sub จาก Cloud Console แล้วเลือก Topics

331ad71e8a1ea7b.png

หากคุณเห็นพรอมต์เปิดใช้งาน API ให้คลิกปุ่ม เปิดใช้งาน API

9f6fca9dc8684801.png

คลิกปุ่มสร้างหัวข้อ

643670164e9fae12.png

ป้อน "weatherdata" เป็นชื่อหัวข้อ แล้วคลิกสร้าง

d7b049bc66a34db6.png

คุณควรเห็นหัวข้อที่สร้างขึ้นใหม่

7c385759f65a1031.png

ตอนนี้คุณมีหัวข้อ Pub/Sub ทั้งสําหรับเผยแพร่ข้อความ IoT และอนุญาตให้กระบวนการอื่นๆ เข้าถึงข้อความเหล่านั้น

การเผยแพร่เนื้อหาอย่างปลอดภัย

หากวางแผนที่จะเผยแพร่ข้อความไปยังหัวข้อ Pub/Sub จากทรัพยากรภายนอก Google Cloud Console (เช่น เซ็นเซอร์ IoT) คุณจะต้องควบคุมการเข้าถึงให้เข้มงวดยิ่งขึ้นโดยใช้บัญชีบริการ และเพื่อรักษาความปลอดภัยของการเชื่อมต่อด้วยการสร้างใบรับรองความน่าเชื่อถือ

จาก Cloud Console ให้เลือก IAM และผู้ดูแลระบบ แล้วเลือกบัญชีบริการ

8e2f8a1428d0feca.png

คลิกปุ่มสร้างบัญชีบริการ

60892b564e0ac140.png

เลือกบทบาทผู้เผยแพร่ Pub/Sub ในเมนูแบบเลื่อนลง "บทบาท"

31f8c944af11270e.png

พิมพ์ชื่อบัญชีบริการ (iotWeatherPublisher) เลือกช่องทําเครื่องหมาย "จัดหาคีย์ส่วนตัวใหม่" ตรวจสอบว่าตั้งค่าประเภทคีย์เป็น JSON แล้วคลิก "สร้าง"

7e3f9d7e56a44796.png

คีย์ความปลอดภัยจะดาวน์โหลดโดยอัตโนมัติ เนื่องจากคีย์มีเพียงคีย์เดียว คุณจึงไม่ควรทำคีย์หาย คลิก "ปิด"

60a7da32dd85ba73.png

คุณควรเห็นว่ามีการสร้างบัญชีบริการขึ้นและมีรหัสคีย์เชื่อมโยงอยู่

b25f6f5629fe8fd7.png

เราจะจัดเก็บคีย์ไว้ใน Google Cloud Storage เพื่อให้เข้าถึงคีย์ได้ง่ายๆ ในภายหลัง เลือก "พื้นที่เก็บข้อมูล" แล้วเลือก "เบราว์เซอร์" จาก Cloud Console

c4414fe61be320a9.png

คลิกปุ่มสร้างที่เก็บข้อมูล

cde91311b267fc65.png

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

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

จดชื่อที่เก็บข้อมูลและชื่อไฟล์คีย์ความปลอดภัยไว้ใช้ภายหลัง

5. สร้างฟังก์ชันระบบคลาวด์

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

เลือก Cloud Functions จาก Cloud Console

a14ac2e4f03bf831.png

หากคุณเห็นข้อความ API ให้คลิกที่ปุ่ม เปิดใช้ API

40ba0a08430e0e8a.png

คลิกปุ่มสร้างฟังก์ชัน

5d82d8faeffa55bf.png

ในช่อง "ชื่อ" ให้พิมพ์ 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" ให้เปลี่ยนเป็น "สมัคร" คลิกปุ่มสร้าง

3266d5268980a4db.png

ระบบจะใช้เวลาประมาณ 2 นาทีจนกว่าฟังก์ชันจะแสดงว่ามีการทำให้ใช้งานได้แล้ว

26f45854948426d0.png

ยินดีด้วย คุณเพิ่งเชื่อมต่อ Pub/Sub กับ BigQuery ผ่านฟังก์ชัน

6. ตั้งค่าฮาร์ดแวร์ IoT (ไม่บังคับ)

ประกอบ Raspberry Pi และเซ็นเซอร์

หากมีมากกว่า 7 พิน ให้ตัดส่วนหัวให้เหลือเพียง 7 พิน บัดกรีขาต่อเข้ากับแผงเซ็นเซอร์

a162e24426118c97.png

ติดตั้งหมุดส่วนหัวของค้อนลงใน Raspberry Pi อย่างระมัดระวัง

a3a697907fe3c9a9.png

ฟอร์แมตการ์ด SD และติดตั้งโปรแกรมติดตั้ง NOOBS (New Out Of Box Software) โดยทำตามขั้นตอนที่นี่ ใส่การ์ด SD ลงใน Raspberry Pi แล้วใส่ Raspberry Pi ลงในกล่อง

1e4e2459cd3333ec.png

ใช้สายเบรดบอร์ดเพื่อเชื่อมต่อเซ็นเซอร์กับ Raspberry Pi ตามแผนภาพด้านล่าง

392c2a9c85187094.png

Pin ของ Raspberry Pi

การเชื่อมต่อเซ็นเซอร์

ปักหมุด 1 (3.3 โวลต์)

VIN

ปักหมุด 3 (CPIO2)

SDI

PIN 5 (GPIO3)

SCK

ขา 9 (กราวด์)

GND

44322e38d467d66a.png

เชื่อมต่อจอภาพ (โดยใช้ขั้วต่อ mini-HDMI), แป้นพิมพ์/เมาส์ (โดยใช้ฮับ USB) และสุดท้ายคืออะแดปเตอร์

กำหนดค่า Raspberry Pi และเซ็นเซอร์

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

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

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

พิมพ์คำสั่งต่อไปนี้เพื่อตรวจสอบว่าเซ็นเซอร์เชื่อมต่ออย่างถูกต้อง

  sudo i2cdetect -y 1

ผลลัพธ์ควรมีลักษณะดังนี้ อ่านค่า 77

cd35cd97bee8085a.png

ติดตั้ง 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

c4414fe61be320a9.png

คลิกปุ่มสร้างที่เก็บข้อมูล

cde91311b267fc65.png

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

1dad4cfbccfc96b1.png

เลือก Dataflow จาก Cloud Console

43ec245b47ae2e78.png

คลิกที่ "สร้างงานจากเทมเพลต" (ส่วนบนของหน้าจอ)

da55aaf2a1b0a0d0.png

กรอกรายละเอียดของงานดังที่แสดงด้านล่าง โดยให้ความสำคัญกับสิ่งต่อไปนี้

  • ป้อนชื่องาน 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"

เมื่อคุณกรอกข้อมูลทั้งหมดครบถ้วนแล้ว (ดูด้านล่าง) ให้คลิกปุ่ม เรียกใช้งาน

5f8ca16672f19d9b.png

งานของ Dataflow ควรเริ่มทํางาน

e020015c369639ad.png

งาน Dataflow ควรจะใช้เวลาประมาณ 1 นาที

218a3ff7197dcf75.png

8. ตรวจสอบว่าข้อมูลมีการส่ง

บันทึกของ Cloud Function

ตรวจสอบว่า Pub/Sub กำลังทริกเกอร์ Cloud Function

  gcloud beta functions logs read function-weatherPubSubToBQ

บันทึกควรแสดงว่าฟังก์ชันกำลังทำงาน กำลังรับข้อมูล และกำลังแทรกข้อมูลลงใน BigQuery

d88f7831dabc8b3f.png

ข้อมูล BigQuery

ตรวจสอบว่าข้อมูลเข้าสู่ตาราง BigQuery แล้ว จาก Cloud Console ให้ไปที่ BigQuery (bigquery.cloud.google.com)

85627127d58f1d2e.png

ใต้ชื่อโปรเจ็กต์ (ทางด้านซ้ายมือของหน้าต่าง) ให้คลิกชุดข้อมูล (weatherData) จากนั้นคลิกตาราง (weatherDataTable) แล้วคลิกปุ่ม "ตารางการค้นหา"

44dc0f765a69580c.png

เพิ่มเครื่องหมายดอกจันลงในคำสั่ง SQL เพื่อให้เป็น SELECT * FROM... ตามที่แสดงด้านล่าง แล้วคลิกปุ่มเรียกใช้การค้นหา

b3a001e11c2902f2.png

คลิกปุ่มเรียกใช้การค้นหาหากได้รับข้อความแจ้ง

2c894d091b789ca3.png

หากคุณเห็นผลลัพธ์ แสดงว่าข้อมูลไหลลื่นอย่างถูกต้อง

c8a061cebb7b528a.png

เมื่อข้อมูลเริ่มไหลเข้ามาแล้ว คุณก็พร้อมสร้างแดชบอร์ดข้อมูลวิเคราะห์

9. สร้างแดชบอร์ด Data Studio

Google Data Studio จะเปลี่ยนข้อมูลของคุณเป็นหน้าแดชบอร์ดและรายงานให้ข้อมูลที่อ่านง่าย แชร์ได้สะดวก และปรับแต่งได้อย่างเต็มที่

ไปที่ https://datastudio.google.com จากเว็บเบราว์เซอร์

10f8c27060cd7430.png

ในส่วน "เริ่มรายงานใหม่" ให้คลิก "ว่าง" แล้วคลิกปุ่ม "เริ่มต้นใช้งาน"

df1404bc0047595e.png

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

55e91d3dd88b05ca.png

คลิกปุ่มสร้างแหล่งข้อมูลใหม่

a22f3fac05774fc9.png

คลิก BigQuery แล้วคลิกปุ่ม "ให้สิทธิ์" จากนั้นเลือกบัญชี Google ที่ต้องการใช้กับ Data Studio (ควรเป็นบัญชีเดียวกับที่คุณใช้กับ Codelab)

5ab03f341edc8964.png

คลิกปุ่ม "อนุญาต"

22bcdbb5f5f1d30c.png

เลือกชื่อโปรเจ็กต์ ชุดข้อมูล และตาราง จากนั้นคลิกปุ่ม "เชื่อมต่อ"

dc6b6b0ed9ced509.png

เปลี่ยนช่องประเภทตามที่แสดงด้านล่าง (ทุกอย่างควรเป็นตัวเลข ยกเว้น timecollected และ sensorID) โปรดทราบว่ามีการตั้งค่า timecollected เป็น Date Hour (ไม่ใช่แค่ Date) เปลี่ยนช่องการรวมข้อมูลตามที่แสดงด้านล่าง (จุดน้ำค้าง อุณหภูมิ ความชื้น และความดันควรเป็นค่าเฉลี่ย และตั้งค่าทุกอย่างเป็น "ไม่มี") คลิกปุ่ม สร้างรายงาน

c60887e29c3bdf9b.png

ยืนยันโดยคลิกปุ่ม เพิ่มลงในรายงาน

5ec3888dfdd85095.png

หากระบบขอให้เลือกบัญชี Google ของคุณ ให้เลือกบัญชีแล้วคลิกปุ่มอนุญาตเพื่อให้ Data Studio จัดเก็บรายงานใน Google ไดรฟ์

7b8006a813b3defa.png

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

c7cd97354e1cde04.png

วาดสี่เหลี่ยมผืนผ้าที่มุมซ้ายบนของแผ่นงานเปล่า โดยควรใช้พื้นที่ประมาณ ¼ ของหน้ากระดาษเปล่าทั้งหมด

e0e82cb19921f835.png

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

c7620bfe734d546.png

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

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

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

8f59e8f4d44b8552.png

10. ยินดีด้วย

คุณได้สร้างไปป์ไลน์ข้อมูลทั้งหมดแล้ว ด้วยเหตุนี้ คุณได้เรียนรู้วิธีใช้ Google Pub/Sub, วิธีทำให้ฟังก์ชันแบบ Serverless ใช้งานได้, วิธีใช้ประโยชน์จาก BigQuery และวิธีสร้างแดชบอร์ดการวิเคราะห์โดยใช้ Data Studio นอกจากนี้ คุณยังได้เห็นว่า Google Cloud SDK ใช้เพื่อนําข้อมูลไปยัง Google Cloud Platform อย่างปลอดภัยได้อย่างไร สุดท้าย ตอนนี้คุณมีประสบการณ์การใช้งานรูปแบบสถาปัตยกรรมที่สําคัญซึ่งจัดการปริมาณงานได้สูงในขณะที่ยังคงให้บริการได้

79cd6c68e83f7fea.png

การจัดระเบียบ

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

หากคุณสร้างเซ็นเซอร์ IoT ให้ปิดเซ็นเซอร์ กด Ctrl-C ในหน้าต่างเทอร์มินัลเพื่อหยุดสคริปต์ แล้วพิมพ์คำสั่งต่อไปนี้เพื่อปิด Raspberry Pi

  shutdown -h now

ไปที่ Cloud Functions แล้วคลิกช่องทำเครื่องหมายถัดจากFunction-weatherPubSubToBQ แล้วคลิก "ลบ"

ae95f4f7178262e0.png

ไปที่ Pub/Sub คลิก "หัวข้อ" แล้วคลิกช่องทำเครื่องหมายข้างหัวข้อ weatherdata จากนั้นคลิก "ลบ"

6fb0bba3163d9a32

ไปที่พื้นที่เก็บข้อมูล คลิกช่องทําเครื่องหมายข้างที่เก็บข้อมูล แล้วคลิก "ลบ"

9067fb2af9f907f4.png

ไปที่ BigQuery.cloud.google.com คลิกลูกศรลงข้างชื่อโปรเจ็กต์ แล้วคลิกลูกศรลงทางด้านขวาของชุดข้อมูล weatherData แล้วคลิก "ลบชุดข้อมูล"

a952dfeec49248c4.png

เมื่อได้รับข้อความแจ้ง ให้พิมพ์รหัสชุดข้อมูล (weatherData) เพื่อลบข้อมูลให้เสร็จสมบูรณ์

6310b1cc8da31a77.png