Home Assistant กับ Tuya Integration

หลังจากใช้งาน Home Assistant (HA) กับ Tuya มาได้พักใหญ่ คิดว่าตกผลึกประมาณนึงละ เลยอยากเล่าหน่อย

Tuya เป็นบริษัทที่ขายอุปกรณ์ Iot + platform ของจีนเจ้าใหญ่ ที่มีบริษัทเอาไปผลิต device ออกมาเยอะมากที่ใช้งานบน platform ของ Tuya มีทั้งแบบที่เป็น Wi-Fi และ Zigbee

ก่อนจะไปต่อ ต้องบอกความคิดเบื้องหลังใช้งาน Tuya กับ Home Assistant ของตัวเอง ซึ่งก็คือ

  • แอพ Tuya ต้องยังใช้งานกับอุปกรณ์ได้ปกติ
  • ไม่อยากลง custom firmware – อยากให้สามารถใช้งานได้ปกติ ไม่อยากต้องตามข่าวของ library / breaking changes ต่างๆ ของแต่ละ component
  • สามารถใช้งานกับ Google Assistant ได้ (เพื่อทำ voice commands)
  • ถ้าสามารถไม่ต้องพึ่งพา internet ได้ก็จะดี (optional)

ในการ Integrate Tuya เข้ากับ Home Assistant นั้นมีด้วยการ 2 ท่า คือ

  1. Official Tuya Integration – https://www.home-assistant.io/integrations/tuya/
    อันนี้ก็ตามตัว อันหลักของ Tuya built-in มาในระบบของ HA เอง มีข้อควรทราบคือ
    • ต้องการ Tuya Iot platform account คือเราต้องไปสมัคร developer platform เพื่อให้ได้ client detail มากรอกใน Home Assistant
    • ในการใช้งาน developer platform จะมีสิ่งที่เรียกว่า subscription อยู่ ซึ่งที่ผ่านมาจนถึงตอนนี้ ยังฟรีอยู่ (โดยเรียกว่า trial) ซึ่งเมื่อหมดอายุก็เข้ามากด ขอต่ออายุได้ … แต่แน่นอนว่าเราต้องขยันเข้ามากดขอต่ออายุนะ ไม่งั้นก็ใช้ไม่ได้
    • การต่อกับ official add-on นั้น มี mechanism ที่เป็น messaging queue (MQTT) เพื่อส่งข้อมูลของ sensor / สถานะสวิตช์ และค่าต่างๆจาก server Tuya กลับมาให้เรา ซึ่ง add-on ปัจจุบันทำสิ่งนี้ได้แย่มาก กล่าวคือ ทุกๆ 2 ชม. ตัว messaging queue credential จะหมดอายุ และ add-on เองไม่สามารถขอ token ใหม่ได้ เลยต้องมีวิธี workaround (ทีเดี๋ยวจะเขียนไว้ด้านล่าง) เพื่อให้มันใช้งานได้อย่างต่อเนื่อง
    • จากการอ่านค่าต่างๆจากตัว messaging queue ที่ว่า ทำให้ add-on ต้องพึ่งพา internet (ในการรับค่าสถานะ) ตลอดเวลา ส่วนการสั่งงานนั้น น่าจะสามารถสั่งตรงไปยัง Gateway/Hub ได้เลยโดยไม่ต้องออกอินเตอร์เน็ต

ว่าด้วยเรื่อง Cloudflare tunnel และ configuration ของมัน

ตอนนี้ที่บ้านมีใช้ Cloudflare tunnel สำหรับทำให้ Home Assistant เข้าถึงได้จากนอกบ้าน (ถ้าเป็นสมัยก่อนเราจะใช้การทำ dynamic dns + forward port จาก router) แต่ท่า Cloudflare tunnel นี้ทำอะไรได้มากกว่า แถมไม่ต้องไปพึ่งพาทั้ง dynamic dns และ configuration ของ router ที่ดีบ้างไม่ดีบ้างด้วย

ที่ผ่านมามีการใช้งานตัว tunnel ผ่าน cloudflared (ของแท้ต้องมี -ed) ที่เป็น docker image ของทาง Cloudflare เอามาทำสองอย่างคือ ทำตัว DNS ร่วมกับ Pi-hole กับเอามาทำ Tunnel เนี่ยแหล่ะ

ภาพอธิบายการทำงานของ cloudflare tunnel

ที่จะเล่าวันนี้คือ อยู่ ๆ ตัว cloudflared container (ที่รันอยู่บน k3s) ที่ทำหน้าที่ tunnel พออัพเกรด version ก็ใช้งานไม่ได้ ฟ้องว่าไม่ได้มีการ set ingress ผืด( ingress คือตัวที่บอกว่า ต้นทาง host หนึ่งๆ จะให้ forward request ไปที่ local server ตัวไหน) พยายามทำเท่าไหร่ก็ไม่สำเร็จ แก้ ingress ที่เป็น config.yaml ของมันยังไงก็ไม่เวิร์ค

สลับภาษาคีย์บอร์ดบน Windows ด้วย Caps Lock

เรื่องที่คิดว่าไม่น่าจะเกิดก็เกิดขึ้นแล้ว … ก็คือตอนนี้ย้ายมาทำงานที่ใหม่ที่ต้องใช้ Mac เป็นหลัก

ทุกอย่างก็ดำเนินไปได้ด้วยดี เพราะส่วนใหญ่แล้วเราก็ใช้ Web based application กันหมดแล้ว (เค้ายังใช้คำนี้กันมั๊ยนะ) … ตัวแอพอื่นๆบนเครื่องก็ไม่ได้มีปัญหามากนัก เดี๋ยวจะทยอยมาเล่าเรื่องแอพที่ใช้บนแมค จากคนที่ข้ามมาจาก Windows / Surface อีกทีนึง (อีกทีตลอดๆ)

อ่ะ กลับมาเข้าเรื่อง

ปัญหาที่เจอกับตัวเองคือ บน Windows นั้น ทุกวันนี้ใช้ Alt + Shift ในการเปลี่ยนภาษา ด้วยเหตุผลหลักๆสองข้อคือ

  1. มันเป็นค่าเริ่มต้น ไปจับ Windows ไหนๆ เปลี่ยนภาษาด้วยวิธีนี้ก็น่าจะเวิร์ค (ไม่ก็ใช้ Win + Space bar แต่รู้สึกว่านิ้วพันกัน)
  2. ตัว Grave Accent ( ` ) ที่เรานิยมใช้ในสมัยก่อนนั้น ทุกวันนี้เราใช้ตัวนี้มากขึ้นมาก ในการเขียน blog/wiki ด้วยภาษา markdown

ปัญหาก็เลยเกิด เมื่อ Alt + Shift จาก Windows ไปเจอกับปุ่มเปลี่ยนภาษาบน Mac ที่ใช้ Caps Lock

ความจำกัดบน Windows คือ Windows นั้น (แม้จะเป็น Windows 11 แล้วก็ตาม) ให้เลือกปุ่มเปลี่ยนภาษาได้จำกัดมาก เลยต้องหาทางแก้ด้วยทางอื่น เมื่อตัว OS ทำไม่ได้

Phishing: ไปรษณีย์ไทย

วันนี้ได้รับอีเมลฉบับนึง บอกว่ามีพัสดุมาส่งถึงเราเมื่อวาน แล้วไม่สามารถจัดส่งได้เพราะว่าไม่มีผู้รับ แล้วจะจัดส่งให้ใหม่ในวันที่พรุ่งนี้ โดยมีค่าใช้จ่าย 48 บาท แล้วมีปุ่มให้เลือกว่าเราต้องการให้จัดส่งเวลาไหน

แต่ด้วยความเอะใจว่าช่วงนี้ไม่มีของที่สั่งเลย ไม่น่าจะมีอะไรส่งมา เลยลองอ่านอีเมลละเอียดๆก็พบว่า มันคือ Email phishing ที่ตั้งใจจะขโมยข้อมูลบัตรเครดิตของเรานั่นเอง

จุดตั้งข้อสังเกตบนอีเมล

มาลองดูกันว่ามีรายละเอียดอะไรบ้าง

  • หน้าตาอีเมลเมื่อเปิดบนมือถือ ค่อนข้างสมจริง เพราะ email address ผู้ส่งถูกซ่อนเอาไว้ แสดงแค่ POST TH แต่เมื่อลองกดเข้าไปดูดีๆจะพบว่า email ถูกส่งมาจาก [email protected] ซึ่งไม่ได้เป็น email official ของไปรษณีย์ไทย
  • ในหัวข้ออีเมล มีรหัส tracking no. ที่ไม่มีอยู่จริง (จริงๆดูจำนวนหลักก็พอจะเดาออก)
  • ด้านล่างของอีเมลที่ปกติจะมี link ให้ unsubscribe, ในกรณีนี้คือไม่มี link เลย น่าจะทำให้แค่เพิ่มความสมจริง
  • นอกจากนั้น เมื่อลองกด link ไปต่อ ก็จะพบว่ามันจะส่งเราไปที่เว็บไซต์ https://thailandpost-online-service.com/ เพื่อทำการจ่ายเงิน 48 บาท ที่อ้างว่าเป็นค่าธรรมเนียมในการจัดส่งอีกครั้ง ซึ่งปกติไปรษณีย์ไทยจะจัดส่งใหม่ให้เราฟรี เมื่อสังเกตดีๆจะพบว่า เว็บไซต์เองก็ไม่ใช่เว็บของไปรษณีย์ไทย
  • ตัวอีเมลเอง ยังมีการเร่งเร้าให้เราจ่ายเงินภายในเที่ยงคืนของวันนี้ เพื่อให้เหยื่อรีบทำแล้วไม่ได้ดูให้ถี่ถ้วน
  • ถ้าเรายังหลงกลไปต่ออีก ก็จะจุดจบ นั่นก็คือ ให้เรากรอกข้อมูลบัตรเครดิตเพื่อหักค่าธรรมเนียม เหมือนจะใช้ Payment gateway ของ Redsys เป็นบริษัทใน spain
เมื่อเปิด email บนมือถือที่ไม่แสดง from email address
หน้าให้เลือกวิธีจ่ายเงินบนมือถือ
หน้ากรอก credit card บนมือถือ

กรณีนี้ email จะดูว่าปลอดภัย เพราะส่งออกมาจากเจ้าของ domain ที่แท้จริง เพราะอีเมลส่งมาจาก kajabimail.net ถ้าลองไปแงะๆดูก็เหมือนจะมีการใส่ reply-to email address ไว้เป็น [email protected]

ตัวเว็บไซต์ปลอมเองก็มี TSL ที่ดูเหมือนว่าจะเพิ่งสร้างขึ้นมาวันนี้เอง (3 Oct 2021) ส่วน domain name ก็เพิ่งจดทะเบียนเมื่อวาน (2 Oct 2021) ตัว website host ที่ websitewelcome.com

ต้องบอกว่ารายละเอียดบางอย่างสมจริงระดับนึงเลย เราก็คงป้องกันด้วยการระวังตัวเองให้ดีต่อไป

ถ้าดูในเว็บไปรษณีย์ไทย จะพบว่ามีการเตือน phishing อย่างจริงจัง และมีข้อมูลการพยายามหลอกลวงอย่างมากมาย https://www.thailandpost.co.th/un/article_detail/article/11/20752

End.

วิธีการแก้ NAS Buffalo Linkstation Duo ให้รองรับ SMB2

ใช่แล้วครับ Buffalo LinkStation Duo ตัวที่ซื้อมาเมื่อ 10 ปีก่อนนั่นแหล่ะ พักหลังนี่เอามาเป็น NAS สำหรับเก็บ Video จากกล้องวงจรปิด (Xiaomi)

ปกติพวกกล้องวงจรปิดพวกนี้มันเก็บ SD Card ไว้ในตัวเอง แปลว่าถ้าใครซักคนขโมยกล้องไปด้วย เราก็เสียวิดีโอทีอัดไว้ไปด้วย เราเลยให้มันส่ง video มาเก็บไว้บน NAS ด้วย นอกเหนือจากเก็บไว้บนตัวเอง … แต่วันนี้ไม่ได้มาแชร์เรื่องนี้

เรื่องที่ตั้งใจจะแชร์คือ ตั้งแต่ปี 2016, Microsoft แนะนำให้เลิกใช้โปรโตคอล SMB1 พูดง่ายๆก็คือโปรโตคอลที่ Windows ใช้ในการ Share file บน Network นั่นแหล่ะ เพราะมีปัญหาเรื่องความปลอดภัย .. หลายปีผ่านไป Windows 10 เลยปิดการใช้งาน SMB1 เป็นค่าเริ่มต้น

ซึ่งนั่นทำให้เกิดปัญหา เพราะว่าตัว LinkStation ดันมีแค่ SMB1 พอฝั่ง Windows ปิด เลยทำให้เข้า Sharepath ไปหา NAS ไม่ได้ ความยุ่งก็เลยเกิด … หลายๆคนเลยไปเปิด SMB1 กลับมาแทน ซึ่งส่วนตัวไม่ค่อยเห็นด้วย เลยลองไปหาข้อมูล เพื่อจะ Enable SMB2 บนตัว NAS แล้วก็พบว่าจริงๆ SMB engine บนตัว NAS (ซึ่งเป็น unix based) เนี่ย รองรับ SMB2 นะ แต่มีค่า configuration ที่ไม่ได้ใส่ไว้ เราเลยต้องมาเพิ่มมันเอง

ขั้นตอนที่จำเป็นจริงๆในการทำให้มันใช้ได้ คือ เพิ่ม code 4 บรรทัด สำหรับเพิ่ม configuration ให้กับตัว SMB Engine บน NAS … แต่มันจะก็ใช่ว่าใครๆจะเข้าไปแก้โคดได้นี่นา นั่นคือขั้นตอนที่ทำให้มันยุ่งขึ้น มาลองดูกัน

* หมายเหตุ การแก้ไขระบบนี้อาจจะทำให้ NAS มีปัญหาจนไม่สามารถใช้งานได้ หรืออาจจะทำให้ NAS มีความปลอดภัยลดลง

1. เปิดสิทธิการเข้าไปแก้ไขไฟล์ในระบบ (Enable root access)

  • ดาวโหลดเครื่องมือ

    มีเครื่องมือที่นักพัฒนาทำไว้ สำหรับเปิดให้เราสามารถ remote access (ssh/telnet) เข้าไปที่ NAS ได้ ตัว tool มีการนำมาพัฒนาต่ออีกหลายอัน ตัวที่ผมใช้แล้วสำเร็จคือตัวนี้ ACP Commander (gry.ch) ผมใช้ตัว EXE for Microsoft Windows ทั้งนี้ตัว tool ต้องการ Java Runtime ด้วย อาจจะต้องดาวโหลดถ้ายังไม่มี

    เมื่อดาวโหลดมาแล้ว คลาย zip แล้วสามารถรันโปรแกรมได้เลย acp_commander_gui_156.exe
  • Enable SSH และ ตั้งรหัสผ่าน root
    โดยปกติตัว acp_commander_gui จะสามารถหา NAS ของเราเจอ ถ้าทั้งคู่ต่ออยู่ใน network เดียวกัน สิ่งที่เราต้องทำก็คือ กรอกรหัสของ admin user ซึ่งเป็นตัวเดียวกับ user ที่เราล็อกอินเข้าไป manage NAS นั่นแหล่ะ

    ถ้าสำเร็จ ปุ่ม Enable SSH และ ปุ่ม Set Root PW จะ Enable ขึ้นมาให้เรากด เราก็กดตามนั้นเลย เริ่มจาก Enable SSH แล้วตามด้วย Set Root PW ซึ่งจะมีหน้าต่างขึ้นมาให้เราใส่รหัส root

    เราสามารถทดสอบได้ด้วยการเปิด powershell หรือ cmd แล้วใช้คำสั่ง ssh -l root {ip address ของ NAS} ถ้าเราเข้าได้ก็แสดงว่าเราพร้อมจะแก้ไขไฟล์ล่ะ ถ้ายังไม่ได้ก็ต้องแก้ไขก่อน keyword น่าจะเป็นการ enable root access บน Buffalo LinkStation LS-WXL

2. แก้ไขไฟล์ smb.sh

เมื่อเราพร้อมแล้ว เราก็ ssh เข้าไปที่ NAS ของเรา โดยแนะนำดังนี้

  • backup file เก่า
    เมื่อเรา ssh เข้าไป ปกติเราจะอยู่ที่ home directory ของ user เราก็ควรจะก๊อปไฟล์มาเก็บไว้ กันเหนียวเผื่อเราแก้ผิด ใช้คำสั่งประมาณ cp /etc/init.d/smb.sh .
  • เริ่มแก้ไฟล์
    บน NAS ไม่มี Editor หรูๆอย่าง nano เราก็ต้องใช้ของที่มีคือ vi ที่ติดมากับ NAS (ส่วนตัวจะไม่พยายามลงอะไรไปนอกเหนือจากที่มีอยู่) วิธีการใช้ vi คงต้องไปหาเพิ่มเติมนะครับ อยู่นอกเหนือจากโพสต์นี้

    เริ่มโดย vi  /etc/init.d/smb.sh
    เมื่อเปิดไฟล์มาแล้ว หา function configure() ซึ่งในนั้นจะมีบรรทัดที่เรียก
        /usr/local/sbin/nas_configgen -c samba
        if [ $? -ne 0 ]; then
                echo "$0 configure fail"
                exit 1
        fi

เราต้องแก้ให้เป็นแบบนี้

        /usr/local/sbin/nas_configgen -c samba
        if [ $? -ne 0 ]; then
                echo "$0 configure fail"
                exit 1
        fi

        /bin/sed -i '3i\\
       min protocol = SMB2\\
       max protocol = SMB2\\
       ' /etc/samba/smb.conf

หลักๆคือเพิ่มด้านล่างลงไป ให้มันไปแก้ configuration ของ SMB ทุกครั้งที่มัน start เมื่อเราแก้ไฟล์แล้ว save ออกมาแล้ว เราก็ให้คำสั่ง /etc/init.d/smb.sh reload ให้มัน reload ใหม่ เสร็จแล้วก็ทดสอบว่าเข้า Sharepath จาก Windows ได้มั๊ย

เป็นอันจบสิ้นกระบวนการ ใครมีอะไรสงสัยลองถามมาได้ครับ

Ref:

Scroll to top