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

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

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

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

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

79cd6c68e83f7fea.png

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

e28ca9ea4abb1457.png

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

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

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

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

f414a63d955621a7.png

3415e861c09cd06a.png

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่ก็อาจมีค่าใช้จ่ายมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทำงานต่อไป อย่าลืมไปที่ส่วนการล้างข้อมูลที่ท้าย Codelab

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

จาก Cloud Console ให้เลือก Pub/Sub แล้วเลือก 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 ให้เลือก Storage แล้วเลือก Browser

c4414fe61be320a9.png

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

cde91311b267fc65.png

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

28c10e41b401f479.png

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

a0f6d069d42cec4b.png

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

55b25c8b9d73ec19.png

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

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

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

จาก Cloud Console ให้เลือก Cloud Functions

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

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

Raspberry Pi pin

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

Pin 1 (3.3V)

VIN

Pin 3 (CPIO2)

SDI

Pin 5 (GPIO3)

SCK

ขา 9 (กราวด์)

GND

44322e38d467d66a.png

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

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

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

a16f0da19b93126.png

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

17f380b2d41751a8.png

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

14741a77fccdb7e7.png

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

9df6f228f6a31601.png

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

  sudo i2cdetect -y 1

ผลลัพธ์ควรมีลักษณะดังนี้ โปรดตรวจสอบว่าค่าเป็น 77

cd35cd97bee8085a.png

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

c4414fe61be320a9.png

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

cde91311b267fc65.png

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

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

5f8ca16672f19d9b.png

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

e020015c369639ad.png

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

218a3ff7197dcf75.png

8. ตรวจสอบว่าข้อมูลไหลเวียน

บันทึกของ Cloud Functions

ตรวจสอบว่า 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

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

e0e82cb19921f835.png

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

c7620bfe734d546.png

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

9a7d3faa28996219.png

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

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

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

8f59e8f4d44b8552.png

10. ยินดีด้วย

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

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

9067fb2af9f907f4.png

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

a952dfeec49248c4.png

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

6310b1cc8da31a77.png