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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ต.ค. 10, 2020
account_circleเขียนโดย Brandon Freitag

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

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

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

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

79cd6c68e83f7fea.png

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

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
  • เซ็นเซอร์ 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 นี้น่าจะมีค่าใช้จ่ายไม่เกิน 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

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

331ad71e8a1ea7b.png

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

9f6fca9dc8684801.png

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

643670164e9fae12.png

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

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 สร้างฟังก์ชันระบบคลาวด์

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

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

a14ac2e4f03bf831.png

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

40ba0a08430e0e8a.png

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

5d82d8faeffa55bf.png

ในช่อง Name ให้พิมพ์ function-weatherPubSubToBQ สำหรับทริกเกอร์ ให้เลือกหัวข้อ Cloud Pub/Sub แล้วเลือกข้อมูลสภาพอากาศในเมนูแบบเลื่อนลงของหัวข้อ สำหรับซอร์สโค้ด ให้เลือกตัวแก้ไขในบรรทัด ในแท็บindex.js ให้วางโค้ดต่อไปนี้ไว้เหนือโค้ดที่จะขึ้นต้นด้วย อย่าลืมเปลี่ยนค่าคงที่สำหรับ projectId, sessionId และ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

หมุด 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

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

17f380b2d41751a8.png

คลิกไอคอนราสเบอร์รี่ (ด้านบนซ้ายของหน้าจอ) เลือก "ค่ากำหนด" จากนั้นเลือก "การกำหนดค่า Raspberry Pi" จากแท็บอินเทอร์เฟซ ให้เปิดใช้ I2C จากแท็บ Localisation ให้ตั้งค่าภาษาและเขตเวลา หลังจากตั้งค่าเขตเวลาแล้ว อนุญาตให้ 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 จากระยะไกลผ่านการตรวจสอบสิทธิ์ สำหรับ Codelab นี้ ระบบจะใช้คีย์นี้ในการเข้าถึงที่เก็บข้อมูลของพื้นที่เก็บข้อมูลเพื่อให้ดาวน์โหลดคีย์ความปลอดภัยไปยัง Raspberry Pi ได้อย่างง่ายดาย

จากบรรทัดคำสั่งใน Raspberry Pi ให้ป้อน

  gcloud init --console-only

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

ในอีกสักครู่ คุณจะเห็นข้อมูลเพิ่มเติมแสดงอยู่ กำหนดค่า Google Cloud SDK แล้ว คุณสามารถปิดหน้าต่างเว็บเบราว์เซอร์ได้ เพราะคุณจะไม่ต้องการใช้อีกต่อไป

ติดตั้งซอฟต์แวร์เซ็นเซอร์และสคริปต์สภาพอากาศ

โคลนแพ็กเกจที่จำเป็นในการอ่านข้อมูลจาก PIN อินพุต/เอาต์พุตจากบรรทัดคำสั่งบน 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 เพื่อเริ่มออกจากโปรแกรมแก้ไขนาโน กด 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 ได้ (ทำไมถึงเรียกว่า 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

หากคุณสร้างเซ็นเซอร์สภาพอากาศ Raspberry Pi IoT ให้เริ่มต้นสคริปต์ที่จะอ่านข้อมูลสภาพอากาศและพุชไปยัง 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... ดังที่แสดงด้านล่าง แล้วคลิกปุ่ม RUN QUERY

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) โปรดทราบว่า timeCollect มีการตั้งค่าเป็น Date Hour (ไม่ใช่แค่วันที่) เปลี่ยนช่องการรวมดังที่แสดงด้านล่าง (จุดน้ำค้าง อุณหภูมิ ความชื้น และความดันควรเป็นค่าเฉลี่ย และตั้งค่าอื่นๆ เป็น "ไม่มี") คลิกปุ่ม สร้างรายงาน

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, วิธีทำให้ฟังก์ชันแบบ 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