Author: wiboon.w

  • จัดทำรายงาน Dashboard ด้วย Microsoft Tools(5-9)

    Forms + Power Automate (Flow) + Excel with Pivot Table + SharePoint Site Page

    ความเดิมตอนที่แล้ว แสดงขั้นตอนที่ 1 ถึง ขั้นตอนที่ 4 จัดทำรายงาน Dashboard ด้วย Microsoft Tools(1-4)

    แสดงขั้นตอนที่ 5 ถึง ขั้นตอนที่ 9

    5.1 ใช้ชี้ต ชื่อ Main สร้างข้อความตามต้องการ

    5.2 ต่อไปเราจะดึงข้อมูลมาไว้ใน เซล ต่าง ๆ แล้วจะ รวมบริการวิชาการในเซล D17 ได้

    ตัวอย่างที่ 1 เช่น จำนวนโครงการที่มีการเก็บค่าลงทะเบียน ตำแหน่ง B10 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Count of ID",Sheet2!$A$1,"จัดบริการแบบ","ที่มีการเก็บค่าลงทะเบียน"),0)

    ตัวอย่างที่ 2 เช่น จำนวนคนที่มีการเก็บค่าลงทะเบียน ตำแหน่ง C10 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Sum of จำนวนคน",Sheet2!$A$1,"จัดบริการแบบ","ที่มีการเก็บค่าลงทะเบียน"),0)

    ตัวอย่างที่ 3 เช่น จำนวนโครงการ IT Services ตำแหน่ง B11 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Count of ID",Sheet2!$A$1,"จัดบริการแบบ","IT Services"),0)

    มาดูอีกชุด เราจะดึงข้อมูลมาไว้ใน เซล ต่าง ๆ แล้วจะ รวมบริการวิชาการในเซล D29 ได้

    ตัวอย่างที่ 4 การให้บริการอื่นๆ จำนวนโครงการ โครงการวิจัยหรือที่ปรึกษา ตำแหน่ง B26 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Count of การให้บริการอื่นๆ",Sheet2!$A$42,"การให้บริการอื่นๆ","โครงการวิจัยหรือที่ปรึกษา"),0)

    ตัวอย่างที่ 5 การให้บริการอื่นๆ จำนวนคน โครงการวิจัยหรือที่ปรึกษา ตำแหน่ง C26 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Sum of จำนวนคน",Sheet2!$A$42,"การให้บริการอื่นๆ","โครงการวิจัยหรือที่ปรึกษา"),0)

    ตัวอย่างที่ 6 การให้บริการอื่นๆ จำนวนครั้ง เช่าโน้ตบุ๊ค ตำแหน่ง B27 จะดึงข้อมูลด้วยวิธีเขียนอ้างอิง ดังนี้

    =IFERROR(GETPIVOTDATA("Count of การให้บริการอื่นๆ",Sheet2!$A$42,"การให้บริการอื่นๆ","เช่าโน้ตบุ๊ค"),0)

    ส่วนอื่น ๆ ก็ทำเช่นเดียวกับ ตัวอย่างที่ 1 ถึง ตัวอย่างที่ 6

    6.1 ข้อมูลที่เราเตรียมไว้ เป้าหมาย คือ ที่เราคีย์เข้าไป ส่วนรายได้จากบริการวิชาการที่ทำได้ จะเกิดจากรวมอัตโนมัติมาจากเซลต่าง ๆ

    6.2 จากข้อมูลนี้ เราสร้างกราฟแท่ง 2 แท่ง แบบแท่งกราฟไม่เว้นระยะห่างเพื่อให้ซ้อนกัน ได้ดังรูป

    หมายเหตุ วิธีทำแท่งที่สองให้ซ้อนทับกับแท่งที่หนึ่ง ค่อนข้างยาว ศึกษาเพิ่มเติมได้จาก google search ค้นว่า “excel กราฟ แท่ง ซ้อน กัน” มีคลิปสอนเยอะ (ความรู้การทำกราฟซ้อนทับ 2 แท่ง สอน Excel: การสร้างกราฟเปรียบเทียบการใช้งบประมาณกับที่เบิกจ่ายจริง https://www.youtube.com/watch?v=_JnX9kdS-Og)

    6.3 คลิกเมาส์ปุ่มขวาที่แท่งที่ 1 สีฟ้า แท่งเป้าหมาย และเลือก Format Data Series เลือกไอคอนที่ 3 Series Options กำหนดค่าให้กับ Primary Axis ด้วย Series Overlap 100% และ Gap Width 143%

    6.4 คลิกเมาส์ปุ่มขวาที่แท่งที่ 2 สีน้ำเงิน แท่งผลงานที่ทำได้ และเลือก Format Data Series เลือกไอคอนที่ 3 Series Options กำหนดค่าให้กับ Secondary Axis ด้วย Series Overlap 100% และ Gap Width 500%

    7.1 เมื่ออยู่หน้าต่าง SharePoint Site ให้คลิก New เลือก Page

    จะได้หน้าตั้งค่าเริ่มต้น ให้เลือกว่า Create Page

    7.2 จะได้หน้าต่างแบบนี้

    ควรเริ่มต้นตั้งชื่อ Title ให้คลิกตรงช่อง Add a title ควรเป็นชื่อย่อ ภาษาอังกฤษน่าจะดี เช่นในตัวอย่างนี้จะตั้งว่า OJT เป็นต้น เพราะจะถูกนำไปตั้งเป็นชื่อ Site Page ส่วนชื่อผู้ทำเพจ ก็อาจคลิกกากบาท ไม่ระบุ ก็ได้

    7.3 ถัดไปเอาเมาส์ชี้บริเวณ ด้านล่าง จนขึ้นมาเห็นเครื่องหมาย + ให้คลิก และเลือก File and Media

    จะได้หน้าคำถามว่า จะเอาไฟล์อะไรมาแสดง

    เลือก OneDrive และเลือกหาตำแหน่ง พาธของไฟล์ ที่เราเก็บไฟล์ excel นั้น เช่น ตัวอย่างข้างล่างนี้ และคลิก Select

    7.4 จะได้หน้าต่าง

    ให้คลิกเลือกเครื่องมือ Edit web part

    ช่องแรก เปลี่ยนจาก Entire workbook เป็น Range

    ช่อง Sheet name เลือกชื่อแท็บซี้ต คือ Main

    ช่อง Starting cell เป็น A1

    ช่อง Ending cell เป็น H30 (ให้ดูข้อมูลในแท็บชี้ต Main ก่อนนะว่าจะครอบคลุมข้อมูลที่จะแสดง)

    คลิก Apply

    7.5 ถ้าตรวจสอบแล้วว่า ชอบ ก็คลิกปุ่ม Publish

    7.6 ต่อไปตรวจสอบว่า Site Page ใหม่ที่สร้างไว้ถูกเก็บอยู่ที่ใด จากตัวอย่างที่สร้าง New Site Page ชื่อ OJT

    จะได้เป็นไฟล์ชื่อ OJT.aspx

    8.1 ด้านซ้ายของหน้าจอ คลิก Edit

    จะได้หน้าต่าง สำหรับตั้งค่า

    ให้คลิกที่ EDIT LINKS

    8.2 จะได้หน้าต่างใหม่ ที่มีคำว่า + link

    คลิก + link

    8.3 จะได้หน้าต่างย่อย

    ช่อง Text to display ใส่ ข้อความ เช่น ในตัวอย่างนี้ ใส่ว่า ข้อมูลตัวอย่าง

    ช่อง Address ใส่ https://emailpsuac.sharepoint.com/sites/DIIS/ISO/SERVICES/SitePages/OJT.aspx

    คลิกปุ่ม OK

    จะได้ปุ่ม Save

    คลิกปุ่ม Save

    8.4 ผลลัพธ์ เมนูด้านซ้าย จะมีรายการ ข้อมูลตัวอย่าง

    เมื่อจะส่ง Form นี้ให้กับผู้กรอกข้อมูล (หรือเราอาจจะสร้างเป็น link ไว้ในหน้า Site Page ในขั้นตอนที่ 7 ได้ เพื่อช่วยจำ)

    9.1 ขณะที่อยู่ที่หน้าออกแบบสร้างแบบฟอร์ม คลิกที่ Collect responses

    9.2 กำหนดค่าต่าง ๆ อนุญาตอย่างไรบ้าง แล้วคลิกที่ Copy Link

    9.3 ส่ง link ให้กับผู้กรอกข้อมูล

    9.4. เมื่อต้องการกลับไปจัดการกับฟอร์ม ให้คลิกที่ 9 จุด ในหน้า SharePoint Site จะได้เปิดหน้า Forms ขึ้นมาให้ และเลือก My forms

    หวังว่าจะเกิดไอเดียครับ

  • จัดทำรายงาน Dashboard ด้วย Microsoft Tools(1-4)

    Forms + Power Automate (Flow) + Excel with Pivot Table + SharePoint Site Page

    แสดงขั้นตอนที่ 1 ถึง ขั้นตอนที่ 4

    1.1 คลิกที่ จุด 9 จุด มุมบนซ้าย

    1.2 คลิกที่ไอคอน Forms

    1.3 คลิก New Form และสร้างจากฟอร์มเปล่า

    1.4 ตัวอย่างฟอร์มที่สร้างด้วย Microsoft Forms

    เป็นการนำเข้าข้อมูลด้วย Microsoft Form โดยการสร้างฟอร์ม หลังจากได้ฟอร์มแล้ว เราก็ทำการ Export Data จาก Form ไปเป็น Excel ตอนนี้ก็จะได้หัวคอลัมน์เป็นชื่อของคำถามแต่ละข้อใน Form และกำหนดให้ข้อมูลเป็นชนิด Table โดยทั่วไปมักเริ่มต้นด้วยชื่อ Table1

    2.1 เมื่อทดสอบป้อนข้อมูลแล้ว ให้คลิกที่แท็บ (ด้านบน) คำว่า Responses และเลือก Open in Excel

    2.2 ในตอนทำครั้งแรก จะได้ไฟล์อยู่ใน Downloads ชื่อไฟล์ที่ได้มาอาจไม่ถูกใจก็เปลี่ยนชื่อให้เรียบร้อย

    2.3 นำไฟล์นี้ไปวางไว้ใน OneDrive ในตัวอย่างนี้ จะสร้าง Folder ชื่อ Forms เพื่อเก็บไฟล์ Excel

    2.4 ดังนั้น พาธของไฟล์ คือ /Share/Forms/DIIS-ข้อมูลบริการวิชาการ.xlsx พาธของไฟล์นี้จะถูกอ้างถึงตอนที่เราสร้าง Flow

    2.5 มาดูไส้ในกันครับว่า ในชี้ตชื่อ Sheet1 มีหัวคอลัมน์และข้อมูลแบบนี้

    ขั้นตอนในตอนนี้เป็นการใช้ Microsoft Power Automate ผูก Microsoft Forms เข้ากับ Excel file นั่นเอง

    3.1 คลิกที่ จุด 9 จุด มุมบนซ้าย เลือก Microsoft Power Automate

    3.2 คลิก Create

    3.3 สร้าง Flow โดยใช้ object ตามรูป

    ตัวอย่างการตั้งชื่อ เช่น นำเข้าข้อมูลจากFormเข้าExcel_DIIS-ข้อมูลบริการวิชาการ

    Object ขั้นที่ 1 คือ When a new response is submitted

    Object ขั้นที่ 2 คือ Get response details

    3.4 Object ขั้นที่ 3 คือ Add a row into a table

    3.5 และเลือก รายการ มาใส่ให้ครบ เมื่อคลิกที่ช่องแต่ละช่อง จะมีหน้าต่าง pop up ขึ้นมา ให้เลือก ได้ดังรูป

    เป็นการทำงานเพื่อรวมจำนวนโครงการ จำนวนคน จำนวนเงิน ตัวเลขเหล่านี้จะถูกอ้างถึงในสูตรของเซลในชี้ต Main

    4.1 สร้างแท็บชี้ตในไฟล์ Excel เพิ่ม ให้ชื่อว่า Sheet2 คือ Pivot Table

    4.2 สร้างแท็บชี้ตในไฟล์ Excel เพิ่ม Sheet3 เปลี่ยนชื่อเป็น Main

    4.3 คลิกที่ Sheet1 วางเมาส์ไว้ใน Range Table1 และเลือกเมนู Insert เลือก PivotTable

    4.4 มาดูว่าใน Sheet2 มี Pivot Table อยู่หลายอัน ตามที่เราต้องรวมข้อมูล

    Pivot Table ที่ 1

    Pivot Table ที่ 2

    Pivot Table ที่ 3

    Pivot Table ที่ 4

    Pivot Table ที่ 5

    Pivot Table ที่ 6

    จัดทำรายงาน Dashboard ด้วย Microsoft Tools(5-9)

  • จัดทำรายงาน Dashboard ด้วย Microsoft Tools

    Forms + Power Automate (Flow) + Excel with Pivot Table + SharePoint Site Page

    การใช้งาน Microsoft จะมี Tools ต่าง ๆ ให้เราประกอบกันเข้าเพื่อการทำงาน เช่น เราสามารถสร้าง Site Page (คือเว็บเพจ) และดึงข้อมูลจากชี้ตใน Excel File มาแสดงเป็นข้อมูลในหน้าเว็บเพจ เพื่อจัดทำ Dashboard นำเสนอข้อมูล ตัวอย่างเช่น
    https://emailpsuac.sharepoint.com/sites/DIIS/ISO/SERVICES/SitePages/MSDdata.aspx

    จากรูปภาพตัวอย่างด้านบน ที่เห็นการจัดหัวเรื่อง จัดวางข้อความเหล่านี้เราต้องออกแบบเองนะ แล้วดึงข้อมูลจาก Pivot Table มาแสดง เช่น ตัวเลขของจำนวนโครงการ จำนวนคน จำนวนเงิน นอกจากนี้เราสามารถทำกราฟแท่งซ้อนกัน 2 แท่งเพื่อให้ดูสถานะผลสำเร็จในปัจจุบันที่จะไปถึงเป้าหมายได้
    การจัดทำ Dashboard นำเสนอข้อมูล สามารถเขียนเป็นขั้นตอนหลัก ๆ ได้ดังนี้
    1.สร้าง Form กรอกข้อมูล ด้วย Microsoft Forms
    2.สร้าง Excel file จาก Form ที่สร้างเสร็จและทดสอบป้อนข้อมูลสัก 1 รายการแล้ว
    3.สร้าง Flow เพื่อนำข้อมูลที่กรอกลง Form แต่ละครั้งลงใน Excel file ด้วย Microsoft Power Automate
    4.สร้าง Pivot Table จากข้อมูลในชี้ต Sheet1 ของ Excel file

    จัดทำรายงาน Dashboard ด้วย Microsoft Tools(1-4)

    5.สร้าง หน้า Dashboard จัดรูปแบบและดึงข้อมูลจาก Pivot Table ในชี้ต Sheet2 โดยเทคนิคอ้างอิงชื่อเซลล์
    6.สร้าง กราฟ แสดงสถานะผลสำเร็จในปัจจุบันจนถึงเป้าหมาย ด้วยกราฟแท่งจำนวน 2 แท่ง แบบแท่งกราฟไม่เว้นระยะห่างเพื่อให้ซ้อนกัน
    7.สร้าง Site Page ใน SharePoint site ของเรา โดยเลือกเครื่องมือ ชื่อ File and Media
    8.สร้าง เมนู สำหรับ Site Page ที่ทำเสร็จ หรือจะนำ Site Page ไปกำหนดเป็น Default Home Page ก็ได้
    9.ส่ง Form นี้ให้กับผู้กรอกข้อมูล

    จัดทำรายงาน Dashboard ด้วย Microsoft Tools(5-9)

  • เล่าเรื่องเกี่ยวกับ cloning Windows (Windows 11)

    ผมได้ทำ google form สอบถามเกี่ยวกับการ cloning ต้นฉบับ Windows เพื่อนำไป cloned ลงยังเครื่องอื่น ๆ ในห้องปฏิบัติการหรือสำนักงาน

    ได้ข้อสรุปและคำถามมาดังนี้

    แผนภูมิ ข้อมูลจากแบบสอบถามใช้ซอฟต์แวร์ใดในการ cloning Windows

    มีผู้เข้ามาตอบจำนวน 14 คน ได้ผลสรุปตามรูปภาพ
    o มีผู้ที่ตอบว่าใช้ PSU12-Sritrang (opensource.psu.ac.th) จำนวน 7 คน
    o มีผู้ที่ตอบว่าใช้ โปรแกรมอื่น จำนวน 4 คน
    o มีผู้ที่ตอบว่าใช้ FogProject (fogproject.org) จำนวน 2 คน
    o มีผู้ที่ตอบว่าใช้ PSU12-Fog (opensource.psu.ac.th) จำนวน 1 คน

    โปรแกรมอื่นที่เลือกใช้ในการ cloning Windows มีดังนี้
    o Clonezilla
    o Aomei backupper
    o Acronis True Image ทำทีละเครื่อง
    o Acronis True Image 2014 premium (ใช้ในการ clone เครื่องในสำนักงาน)
    o Norton Ghost with Windows 7 PE ใช้งานร่วมกับ PSU12-Sritrang
    o Norton ghost

    ความคิดเห็นอื่น ๆ ที่เกี่ยวกับการเตรียม Windows ห้องคอมพิวเตอร์ มีดังนี้
    1.การติดตั้ง Windows11 และการปรับแต่งให้เหมาะสมสำหรับใช้ในห้องปฎิบัติการคอมพิวเตอร์
    2.ทั้ง PSU12-Sritrang และ PSU12-fog ใช้โคลน windows 10 ได้ดี และทั้งการโคลนและสูตรการจัดการให้บริการห้องแลปด้วย PSU 12 Sritrang สามารถใช้บริหารจัดการห้องแลปคอมที่ใช้ windows 10 ได้ดีครับ โดยเฉพาะเรื่องการจัดการเลือกบูต OS ได้ แต่การเลือก Boot OS ด้วย windows 11 จากการทดลองไม่สามารถทำได้แล้วเพราะมีการจัดการ Partition ในรูปแบบใหม่
    3.อยากให้เปิดการอบรมPSU12-Sritrang(opensource.psu.ac.th)อีกครั้งครับเพราะทำกับเครื่องจริงแล้วมีปัญหาหลายอย่าง
    4.ปัญหาการ Cloning Windows กับ SSD ssd nvme m.2
    5.ปัญหาเกี่ยวกับต้องใส่ cd key เสมอเวลา cloning windows ใหม่
    6.อยากทราบว่ามีท่านใดใช้โปรแกรมใดในการ clone harddisk ที่เป็น ssd เพราะ software รุ่นเก่าจะมองไม่เห็น เท่าที่ดู พาทของ /dev/sda ก้จะเปลี่ยน
    7.PSU12-Sritrang Support Windows11 มั้ยคับ

    ผมจะขอให้ข้อมูลเท่าที่พอจะมีความรู้นะครับ

    O เกี่ยวกับ PSU12-Sritrang (opensource.psu.ac.th)

    เนื่องจากผมทำชุดติดตั้งสำหรับ cloning Windows คือ PSU12-Sritrang (opensource.psu.ac.th) นั่นคือ ต้องมี server 1 ตัว ผมเลือกใช้ ubuntu server ทดสอบล่าสุดใช้ได้เพียง ubuntu server 20.04 เมื่อทดสอบกับ ubuntu server 22.04 จะเริ่มมีปัญหาในขณะ Boot client จึงยังคงไว้ที่รุ่นนี้ มาพูดถึงการ cloning Windows นั้น ชุดติดตั้งนี้รองรับเพียงแค่ Windows ที่สามารถจัดการ partition แบบ MBR ได้เท่านั้น เมื่อดู Windows 11 แล้วจะพบว่า ทำไม่ได้ แล้ว หากว่าเครื่อง clients ที่ลง Windows ยังสามารถทำ partition แบบ MBR ได้ ไม่ว่าจะเป็น disk ชนิด SATA หรือ SSD nvme M.2 ชุดติดตั้งนี้รองรับครับ ตั้งแต่รุ่น sysresccd-5.1.2-16.04-dvd-psu12-sritrang-server-autopartition-offline-2019-12-13.iso ครับ ปัจจุบันล่าสุดคือ sysresccd-5.1.2-20.04-dvd-psu12-sritrang-server-autopartition-offline-2022-03-18.iso

    หากใช้ PSU12-Sritrang รุ่นใด ๆ แล้วทดสอบกับคำสั่งดังนี้
    grep SSD /var/www/cloning/backup.sh
    ไม่พบข้อความ
    use for M.2 SSD

    ให้ดาวน์โหลดชุดติดตั้งได้ ซึ่งจะแบ็กอัพไฟล์เดิมไว้ให้ก่อนเขียนทับ backup.sh, welcome.sh และ multicast.sh
    wget https://ftp.psu.ac.th/pub/psu12-sritrang/download/diskselect/installdiskselect.sh
    bash installdiskselect.sh

    O เกี่ยวกับ PSU12-Fog (opensource.psu.ac.th)

    ชุดติดตั้งนี้ ผมเลือกใช้ FogProject 1.5.9 มาใช้เป็นตัว cloning Windows ซึ่งจะเป็นแบบ Web-base GUI โดยผมปรับปรุง script เดิมของ PSU12-Sritrang ตัดส่วนที่เป็น cloning ทิ้งไป คงเหลือส่วนที่เป็น dhcp server เอาไว้ ซึ่งผมขอแนะนำให้ใช้ชุดนี้เพราะว่า รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ

    ตัวอย่างการตั้งค่า BIOS เครื่องที่ทดสอบ ลง Windows 11 ดังนี้
    Power
    Power On by Onboard LAN = Enabled
    BIOS Setup Utility
    Secure Boot = Disabled
    Boot Options
    CSM = Disabled
    Launch PXE OPROM = UEFI
    Launch Storage OPROM = UEFI
    Launch Video OPROM = UEFI
    Boot Filter = UEFI
    Boot Priority Order
    1st Boot Device = [UEFI: PXE IPv4…]
    2nd Boot Device = [Windows Boot Manager]

    และที่โปรแกรม Web-base GUI FogProject
    เมนู Image ให้ตั้ง Host EFI Exit Type แบบ REFIND_EFI

    O เกี่ยวกับ FogProject (fogproject.org)

    FogProject รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ แต่เท่าที่สำรวจดูที่เว็บไซต์ จะพบว่า เวอร์ชั่นล่าสุด ยังหยุดอยู่ที่ 1.5.9 ซึ่งรองรับ ubuntu 20.04 เท่านั้น หากนำไปติดตั้งใน ubuntu 22.04 ณ วันที่เขียนบทความนี้ ติดตั้งไม่สำเร็จ เพราะว่า FogProject จะมีการระบุ php เวอร์ชั่นที่ต่ำกว่า php8 ซึ่ง php8 เป็นค่า default ของ ubuntu 22.04 ครับ FogProject รองรับ M.2 SSD และรองรับ partition หลากหลายชนิด ผมทดสอบแล้วกับ Windows 11 สามารถทำต้นฉบับและ cloning ได้ครับ

    O ปัญหาเกี่ยวกับต้องใส่ cd key เสมอเวลา cloning windows ใหม่

    มีคำแนะนำว่า ให้ใช้แผ่นจาก Volume Licensing เพราะปกติมันจะใส่ key ที่เป็น KMS ไว้ให้แล้ว แค่ set ให้ถูกก็จะ activate เอง

    O การติดตั้ง Windows11 และการปรับแต่งให้เหมาะสมสำหรับใช้ในห้องปฎิบัติการคอมพิวเตอร์

    เรื่องนี้ เราไปคุยกันในเฟสบุ๊คกรุ๊ปนี้กันดีมั้ยครับ Smart computer lab (Cloning and computer management) ที่ https://www.facebook.com/groups/1916830435076306

    หวังว่าจะเป็นประโยชน์สำหรับแอดมินที่ดูแลเรื่องนี้ครับ

  • Firebase และ Arduino ตอนที่ 2

    ในตอนที่ 2 เราจะมาดูภาคการเขียนโปรแกรมในส่วนของ board โดยใช้ซอฟต์แวร์ arduino-1.8.10 เขียน sketch แล้ว upload เข้า board เพื่อใช้งานร่วมกับ Firebase หากบังเอิญ search มาเจอบทความนี้ก่อน ย้อนกับไปอ่าน ตอนที่ 1 ได้ครับ

    เริ่มต้นเราต้องดาวน์โหลดซอฟต์แวร์ที่จะต้องใช้ ดังรูป

    ภาพที่ 1 แสดงรายการไฟล์ที่ใช้ใน project Firstapp-IoT ของผม

    รันโปรแกรมที่ดาวน์โหลดมา arduino-1.8.10-windows.exe (ส่วนอีก 2 ไฟล์ที่เป็น .zip แตกไฟล์ออกมา CH341SER_WINDOWS.zip ใช้เพื่อให้ USB port ของ Notebook จำลองเป็น Serial port COM3 ได้ และ firebase-arduino-master.zip จะใช้ในโปรแกรม Arduino ในขั้นตอน Add Libraries)

    ภาพที่ 2 แสดงโครงสร้างไดเรกทอรีของโปรแกรม Arduino จะได้ libraries มา และเราสร้างไดเรกทอรีเพิ่มเองเพื่อเก็บโปรแกรม

    ในไดเรกทอรี libraries จะเห็นว่าเราใช้งาน libraries ใดได้บ้างในการเขียนโปรแกรม

    ภาพที่ 3 แสดงรายการไดเรกทอรีภายในของ libraries

    และเมื่อเราจะเขียนโปรแกรม จะต้องวางไว้ในไดเรกทอรี ดูตัวอย่าง

    ภาพที่ 4 แสดงชื่อโปรแกรม nodemcu-8021x-v3.ino (แจกโค๊ด)

    เอาโค๊ดของ project ชื่อ Firstapp-IoT ได้ที่ link นี้ https://github.com/woonpsu/firstapp-iot

    เมื่อรันโปรแกรม Arduino ในครั้งแรก ให้ตั้งค่าเพิ่มที่ File > Preferences

    ภาพที่ 5 เพิ่ม Additional Boards Manager URLs

    ตัวอย่าง Arduino board ที่ใช้ ESP8266 ต้องใส่ URL: https://arduino.esp8266.com/stable/package_esp8266com_index.json

    ถัดไป ตั้งค่าเลือก Board ให้ตรงกับที่เราซื้อมา (ให้ข้อมูลเพิ่มครับ ที่ซื้อมาคือรุ่น บอร์ดทดลอง NodeMCU V2 NodeMCU V2 ESP8266 Development Kit ESP-12F/N)

    ภาพที่ 6 แสดงการเลือกใช้ Board: “NodeMCU 1.0 (ESP-12E Module)”

    เมื่อเราเขียน Sketch book เสร็จ ไม่ error แล้ว เราจะอัปโหลดใส่ board ในขั้นตอนนี้ เราใช้สาย USB data ต่อ board เข้ากับ USB port ในรูปจะเห็น COM3 หากใช้สาย USB Charger จะไม่เห็น Serial port นะ เมื่อพร้อมก็คลิกปุ่ม upload

    ภาพที่ 7 เมื่อเปิดโปรแกรม Arduino จะจำ Sketch book ล่าสุดที่เราใช้งาน คลิกรูปลูกศรชี้ขวา ด้านบน เพื่อ upload

    ต่อไปเราก็เปิดหน้าต่าง Serial Monitor เพื่อดูผลลัพธ์ หรือ debug

    ภาพที่ 8 เปิด Serial Monitor จากเมนู Tools

    จะเห็นว่า โปรแกรมมีการใช้คำสั่ง Serial.println(“WiFi connected”); เพื่อ debug

    ภาพที่ 9 แสดงข้อมูลในหน้าต่าง Serial monitor เมื่อ board เริ่มทำงาน

    ผลลัพธ์เมื่อเราใช้โปรแกรม JavaScript สั่งเปิด LED1 และ LED2 และตั้งสีให้กับหลอดสี เป็น สีเขียว

    ภาพที่ 10 แสดงผลลัพธ์การทำงานที่ถูกต้องตาม Project นี้

    อ้างอิง:

    • อ่านเยอะ ๆ และ search จาก google หลายเพจมาก ๆ
    • ได้รับข้อมูลเรื่องการเชื่อมต่อเน็ต Arduino ไปยัง Wi-Fi 802.1x จากเพื่อนชื่อโป้งทำงานที่ CLIB PSU โดยนักศึกษาฝึกงานเขียนโค๊ดไว้บน github ที่นี่ https://github.com/ton28919/firedoor/blob/main/nodeMCU_WifiEnterprise/nodeMCU_WifiEnterprise.ino
    • โปรแกรม JavaScript ที่เขียนก็ได้จาก Firebase Document ส่วนมาก
    • ต้องขอบคุณเพจนี้ด้วย เป็นเพจแรก ๆ ที่จุดประกายให้ http://www.daydev.com/firebase/web-authentication-with-firebase.html และ https://adamblog.co/firebase-authentication-with-firebaseui/
    • Firebase UI https://github.com/firebase/firebaseui-web
    • และขอบคุณทุกเพจบนโลกใบนี้ที่เขียนแนะนำโดยไม่หวังสิ่งใดตอบแทน

  • Firebase และ Arduino ตอนที่ 1

    บทความนี้ ตอนที่ 1 จะพูดถึง (แจกโค๊ด) Firebase Realtime Database และ ตอนที่ 2 จะพูดถึง Arduino โดยที่ในตอนที่ 1 จะเป็นโปรแกรมให้เห็นว่า นำข้อมูลใส่เข้าใน Firebase Realtime Database ได้อย่างไร แล้วในตอนที่ 2 เราจะโปรแกรม Arduino ให้เชื่อมต่อเน็ตผ่าน Wi-Fi 802.1x แล้วหลอด LED จะถูกเปิด/ปิด หรือ เปลี่ยนสี เมื่อมีการสั่งจากโปรแกรม JavaScript ในตอนที่ 1

    ในขั้นตอนการติดตั้ง Firebase สมัครใช้งาน สร้าง Database ลองหาอ่านกันเอาเองนะครับ มันง่าย ๆ ครับ เรามาเริ่มต้นที่มี Database ชื่อว่า Firstapp-IoT ที่ผมสร้างไว้แล้ว ขั้นตอนมาเราจะโปรแกรม JavaScript โดยการเขียนโปรแกรมไว้ใน local folder เครื่องของผมใช้ Windows 10 ผมก็สร้างไว้ที่ C:\myFirebase และก็ไปดาวน์โหลด firebase-tools-instant-win.exe เพื่อใช้ในการทดสอบแบบ localhost ด้วยคำสั่ง firebase serve แล้วทำการทดสอบโปรแกรมผ่านเว็บเบราว์เซอร์ที่ localhost:5000 และเมื่อโปรแกรมพร้อมใช้ก็นำขึ้นไปไว้ใน Firebase hosting ด้วยคำสั่ง firebase deploy –only hosting แล้วก็สามารถใช้โปรแกรมผ่านทางเว็บเบราว์เซอร์ที่ firstapp-iot.web.app

    ภาพที่ 1 สร้างไดเรกทอรีขึ้นมาเองชื่อ myFirebase

    รัน firebase-tools-instant-win.exe

    ในขั้นตอน setup ครั้งแรก เราสร้างไดเรกทอรีชื่อ nodemcu

    จะมีคำถามว่าจะสร้าง project ใหม่ หรือ ใช้ที่มีอยู่ ผมมีอยู่แล้ว ดังรูป

    ภาพที่ 2 Firebase setup

    และถัดไป

    ภาพที่ 3 Firebase setup เสร็จจะได้ C:\myFirebase\nodemcu\public ไว้เขียนโปรแกรม

    เราจะเขียนโปรแกรมภาษา JavaScript ไว้ที่เรา setup ไว้ ไฟล์แรกที่เราจะเขียนคือ index.html และเมื่อเสร็จเราก็รัน firebase-tools-instant-win.exe กลับเข้ามา และทดสอบโดยคำสั่ง firebase serve

    ภาพที่ 4 ย้ายเข้าไปในที่ที่เรากำหนดเป็น project ของเรา และรันคำสั่งเพื่อทดสอบ

    และเมื่อโปรแกรมเริ่มใช้งานได้แล้ว ก็นำไปไว้บน Firebase hosting ด้วยคำสั่ง firebase deploy ดังรูป

    ภาพที่ 5 คำสั่ง firebase deploy –only hosting คือเอาเฉพาะที่อยู่ในไดเรกทอรี public

    ผลลัพธ์ของโปรแกรม

    ภาพที่ 6 เว็บเพจ firstapp-iot.web.app หน้านี้ใช้ index.html

    เมื่อเราใส่ email ที่อนุญาต ก็จะเข้าสู่หน้าต่อไปที่จะทดสอบการอัปเดตค่าข้อมูลใน Firebase Realtime Database ของ project ชื่อ Firstapp-IoT ดังรูป

    ภาพที่ 7 เว็บเพจหน้านี้ใช้ setled.html

    เมื่อคลิกที่ SET LED ON ได้ผลลัพธ์แบบนี้

    ภาพที่ 8 ที่ Firebase มีการอัปเดตข้อมูล

    สำหรับเว็บเพจ setled.html เป็นการทดสอบให้เห็นว่า เราสามารถตั้งค่า Firebase authentication ด้วย email แล้วอนุญาตให้แก้ไขข้อมูลใน Firebase Realtime Database ได้ โดยต้องไปตั้งค่า Rules ให้ดี

    ถัดไป คลิกที่ Goto NodeMCU ESP8266 Project ผมจะสาธิตการควบคุม Arduino NodeMCU ESP8266 ให้เปิด/ปิด LED ตรงนี้เชื่อมต่อผ่านเน็ต Wi-Fi 802.1x

    ภาพที่ 9 เว็บเพจ setledcolor.html

    ทดสอบคลิก Set LED On และเลือก GREEN

    ภาพที่ 10 ที่ Firebase จะมีการอัปเดตข้อมูลตามที่เราเลือก

    และดูผลลัพธ์ที่อุปกรณ์ ดังรูป

    ภาพที่ 11 Arduino เปิด LED และเปลี่ยนสีเขียว

    ถัดไปลองอีกตัวอย่าง คลิก Set LED Off และเลือก BLUE

    ภาพที่ 12 ที่ Firebase จะมีการอัปเดตข้อมูลตามที่เราเลือก

    และดูผลลัพธ์ที่อุปกรณ์ ดังรูป

    ภาพที่ 13 Arduino ปิด LED และเปลี่ยนสีฟ้า

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

    ภาพที่ 14 ใช้สายชาร์ตแบตมือถือนำไปเสียบปลั๊กไฟเพื่อจ่ายไฟแทนก้อนแบตก็ได้

    ต่อไปมาดูส่วนโปรแกรมกันบ้าง

    ภาพที่ 15 แสดงไดเรกทอรีที่เราทำขั้นตอน firebase setup

    คลิกเข้าไปในไดเรกทอรี public จะเห็นดังรูป

    ภาพที่ 16 แสดงไดเรกทอรีที่เราเขียนโปรแกรมเอาไว้

    แจกโค๊ดให้ครับ เข้าไปที่ github ตาม link นี้ https://github.com/woonpsu/firstapp-iot

    ถัดไปเรามาดูส่วนที่เราต้องมีใน Firebase

    ภาพที่ 17 ส่วนของ Web App ที่เราจะต้อง set up แล้วเราจะได้ firebaseConfig นำไปใส่ในโค๊ดที่แจก

    ในการทดสอบโปรแกรม เราจะต้องเปิด Developer tools ดังรูป

    ภาพที่ 18 เว็บเบราว์เซอร์ Google Chrome เปิด Developer tools

    เราใช้คำสั่ง console.log() เพื่อ debug ดูว่าโปรแกรม error มั้ย

    ภาพที่ 19 แสดงผลการ debug ของคำสั่ง console.log(‘Success!’);

    ถัดไปมาดูส่วนที่เราจะต้องมีใน Firebase

    ภาพที่ 20 แสดงการ set up Firebase Authentication ให้ใช้ Sign-in method เฉพาะ Email/Password

    สร้าง User ได้ในแท็บ Users และ Firebase Authentication Built-In Sign-In อนุญาตให้สร้างเพิ่มจากหน้า Sign-In หากยังไม่มีชื่อ User ที่ป้อน ตรงนี้เราต้องจัดการลบทิ้ง หรือ setup Firebase API ควบคุม หรือ เขียนส่วน Sign-In ใหม่เองครับ

    ภาพที่ 21 แสดงตัวอย่าง User ที่จะได้ Unique User UID ใช้ในการอนุญาต

    ถัดไปมาดู Rules ที่เราใช้ใน Project นี้

    ภาพที่ 22 แสดง Rules ที่กำหนดว่า อนุญาตให้ Read และ อนุญาตให้ Write ได้อย่างไรบ้าง

    ในตัวอย่าง setled.html แสดงตัวอย่างการใช้ rules แบบ “.read”: true และ “.write”: “$uid === auth.uid” โดยมี path เริ่มต้นที่ “$uid”

    ในตัวอย่าง setledcolor.html แสดงตัวอย่างการใช้ rules แบบ “.read”: true และ “.write”: true เนื่องจาก FirebaseArduino Library ไม่รองรับคำสั่ง Firebase Authentication ด้วย User

    และเมื่อเราใช้ Firebase cli ในการ deploy เราก็จะได้ Firebase Hosting ดังรูป

    ภาพที่ 23 แสดง Hosting ของ Project firstapp-iot และเห็น Current release และ Deployed ซึ่งเป็นอันก่อนหน้า

    ในบทความต่อไปจะเป็น Arduino เชื่อมต่อเน็ต Wi-Fi 802.1x ตอนที่ 2

  • A Testing Virtual Data Center with OpenNebula miniONE on KVM

    โน้ตบุ๊ค HP รุ่น 6450b มีหน่วยความจำ 4 GB ผมเอามาทำเป็นเซิร์ฟเวอร์สำหรับรัน Virtual Machine (VM) ผมใช้ทดสอบติดตั้ง server หรือ services ต่าง ๆ เช่น Ubuntu server ทำงานเป็น web server เป็นต้น ผมอยากจะเรียกว่า Mobile Virtual Data Center ครับ โดยที่ผมนำซอฟต์แวร์ที่ชื่อว่า OpenNebula มาใช้ ตัวนี้ใช้ทำเป็น Virtual Data Center ขนาดใหญ่ได้เลยหากมี Hardware สเปคสูง ๆ สร้าง VM ให้บริการได้จริง เค้ามีซอฟต์แวร์สำหรับเครื่องเดียว (Test Drive) เรียกว่า OpenNebula miniONE ให้ใช้ น่าจะนำมาลงโน้ตบุ๊คได้ จึงได้ทดลองดู พบว่าใช้ได้จริง

    สิ่งที่ทำมีดังนี้

    1. เตรียม USB Drive ที่ Boot เป็น Ubuntu Desktop สำหรับติดตั้ง 
      • ดาวน์โหลดรุ่น LTS 20.04  ไฟล์นี้ ubuntu-20.04.1-desktop-amd64.iso
      • นำมาเขียนลง USB Drive ด้วยโปรแกรม Rufus for Windows

    (สร้าง Bootable USB Drive ด้วยโปรแกรม Rufus for Windows)

    1. นำ USB Drive ไป Boot ที่โน้ตบุ๊ค และ ติดตั้ง Ubuntu Desktop 

    (ติดตั้ง Ubuntu Desktop 20.04)

    1. Boot Ubuntu Desktop ที่โน้ตบุ๊ค และเข้าใช้งาน
      ติดตั้ง OpenSSH server
      • คำสั่ง sudo apt install openssh-server
    2. ติดตั้งเซิร์ฟเวอร์สำหรับสร้าง VM 
      • ติดตั้ง OpenNebula miniONE on KVM
      • แก้ไขเล็กน้อย
        • เตรียมไว้ว่าต่อไปจะใช้ TCP Port 80 สำหรับ web server ที่เป็น VM จึงต้องแก้ไข default port จาก 80 เป็นอย่างอื่น ตั้งค่า :port: 8080 แก้ไขที่ไฟล์ /etc/one/sunstone-server.conf
        • รันคำสั่ง sudo systemctl restart opennebula-sunstone.service
        • หลังจากติดตั้ง miniONE จะมีการจัดการค่าทาง network ใหม่ เราต้องแก้ไขให้ Ubuntu Desktop ได้รับ DHCP IP ดังนี้ ตั้งค่า renderer: networkd ตั้งชื่อ ethernets ที่ใช้ และ dhcp4: yes แก้ไขที่ไฟล์ /etc/netplan/01-network-manager-all.yaml
        • รันคำสั่ง sudo netplan apply
        • รันคำสั่ง ip addr
      • เข้า Browser ไปที่ URL http://NOTEBOOK_IP:8080 และ Login เข้าใช้ด้วย username คือ oneadmin และ password ที่ได้รับ
      • ปรับแต่งให้ Ubuntu Desktop ทำ enable packet forwarding for IPv4 เข้าออก VM ได้
        • ตั้งค่า net.ipv4.ip_forward=1 แก้ไขที่ไฟล์ /etc/sysctl.conf
        • รันคำสั่ง sudo sysctl -p

    (ติดตั้ง OpenNebula miniONE on KVM)

    1. สร้าง VM 
      • สร้าง VM Template ชื่อ Install new ubuntu และระบุว่าจะใช้ ubuntu-20.04.1-live-server-amd64.iso ในขั้นตอนติดตั้ง
      • สร้าง VM จาก VM Template ที่สร้างในข้อที่แล้ว
      • เปิด VM และ เข้าไปทำงานทางหน้า Web console จากนั้น login เข้าใช้งาน
      • ติดตั้ง Ubuntu Server (ติดตั้ง Ubuntu Server 20.04 ใน VM ของ miniONE KVM)
      • ติดตั้ง apache2 web server (เปิด port 80) พร้อม php และลงซอฟต์แวร์ชื่อ CMSimple version 5.3 สำหรับทำเป็น CMS Web Server อย่างง่าย ไม่มี database (แตกไฟล์ CMSimple_5-3.zip ไว้ใน /var/www/html/cms/)
        (ติดตั้ง CMSimple version 5.3 ใน VM ของ miniONE KVM)
      • ทดสอบการเข้าใช้งานจาก Ubuntu Desktop ที่โน้ตบุ๊ค เพราะว่าในตอนนี้ OpenNebula miniONE จะสร้าง network ชื่อ vnet บน Interface ชื่อ minionebr ทำให้เข้าถึง http://VM_IP/cms/ ได้เฉพาะจากเครื่องโน้ตบุ๊คนี้เท่านั้น

    (สร้าง VM OpenNebula miniONE on KVM)

    1. ปรับแต่งให้ Ubuntu Desktop ทำหน้าที่เป็น proxy web server
      • ติดตั้ง haproxy
      • ตั้งค่า haproxy.conf ให้ชี้ไปที่ VM web server ที่ถูกต้อง ตามค่า URL path คือ /cms/  

    (ติดตั้ง haproxy บน Ubuntu Desktop)

    1. ทดสอบใช้งาน http://NOTEBOOK_IP/cms/ จากเครื่องอื่นใน LAN
  • ติดตั้ง haproxy บน Ubuntu Desktop

    เป็นขั้นตอนที่ทำขึ้น เพื่อทำการ redirect port 80 เข้าไปยัง web server ใน VM (OpenNebula miniONE on KVM) ที่เราติดตั้งไว้ในเครื่อง Ubuntu Desktop ในตัวอย่างนี้ Ubuntu Desktop มี IP 192.168.1.70 และ VM มี IP 172.16.100.3

    ขั้นตอน

    1. เปิด Terminal และติดตั้ง haproxy ด้วยคำสั่ง sudo apt install haproxy
    2. เข้าทำงานสิทธิ root ด้วยคำสั่ง sudo  su  –
      และไปในไดเรกทอรี cd  /etc/haproxy
      เก็บสำรองไฟล์ config ไว้ก่อน ด้วย cp  haproxy.cfg  haproxy.cfg.orig
      เข้าไปแก้ไขไฟล์ vi  haproxy.cfg
    3. เพิ่มบรรทัดเหล่านี้ ต่อท้ายบรรทัด errorfile 504 /etc/haproxy/errors/504.http

    frontend www-http

       bind *:80

       mode http

       acl is_cms path -i -m beg /cms/

       use_backend be_cms if is_cms

    backend be_cms

       option forwardfor

       server cms 172.16.100.3:80

    1. ทำการ restart haproxy และ ดู status
    2. ทดสอบการเข้าใช้งานจากเครื่องใน network เดียวกันกับเครื่อง Ubuntu Desktop ของเรา ไปที่ http://REAL-IP/cms/ 

    จบครับ

  • ติดตั้ง CMSimple version 5.3 ใน VM ของ miniONE KVM

    เป็น CMS Web Server อย่างง่าย ไม่มี database ติดตั้งลงใน OS ที่เป็น Ubuntu Server 20.04 ที่ได้ติดตั้ง apache2 web server (เปิด port 80) พร้อม php ไว้แล้วด้วยคำสั่ง sudo apt install apache2 php php-xml

    ขั้นตอน

    1. ไปที่เครื่อง Ubuntu Desktop ของเรา เข้าเว็บเบราว์เซอร์ OpenNebula Sunstone และเปิด VM ที่เป็น Ubuntu Server (สมมติว่า VM มี IP 172.16.100.3)
    2. เปิดเพจของ CMSimple
    3. ดาวน์โหลด CMSimple_5-3.zip
    4. ใช้คำสั่ง scp คัดลอกไฟล์ไปไว้ใน VM
      scp CMSimple_5-3.zip  papa@172.16.100.3
      เสร็จแล้ว ssh เข้าไปใน VM
      ssh  papa@172.16.100.3
    5. แตกไฟล์ CMSimple_5-3.zip
    6. หากยังไม่ได้ติดตั้ง apache2 และ php ให้ใช้คำสั่ง sudo apt install apache2 php และคำสั่ง sudo apt  install  php-xml
    7. นำไปไว้ใน /var/www/html/cms/
      sudo  mv  CMSimple_5-3  /var/www/html/cms
      sudo  chown  -R  www-data:www-data  /var/www/html/cms
    8. ทำ restart apache2
      sudo su –
      service apache2 restart
    9. ไปที่หน้าเว็บ http://VM_IP/cms/
    10. ศึกษาวิธีตั้ง Password ครั้งแรกได้จากไฟล์ readme.php
    11. ทำขั้นตอน setup Password ของ CMSimple
      sudo su –
      cd /var/www/html/cms/
      cp  ./setup/setupControl.php  .
      chmod 666 setupControl.php
    12. ไปที่หน้า login ของเว็บ http://VM_IP/cms/ และใส่ Password 
    13. ไปเปลี่ยน Password ที่เมนู Settings > CMS
    14. ตั้ง Password และคลิก Save
    15. ลอง logout แล้ว login ใหม่
    16. ใส่ Password ที่ตั้งใหม่
    17. ตอนนี้ก็จัดการ Pages ต่าง ๆ ที่ให้มาเป็นตัวอย่าง ศึกษาวิธีทำเพจได้เอง 
    18. เมื่อ logout ทุกครั้ง จะมีแจ้งว่า ได้บันทึกเพจไว้ 2 ไฟล์ พร้อมวันที่บันทึกเป็นสำเนา

    จบ คิดว่า มันง่ายดีในการนำมาใช้ทดสอบ และ ใช้งานได้จริงสำหรับเว็บเพจง่าย ๆ