สารบัญ:

[15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta): 4 Steps (มีรูปภาพ)
[15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta): 4 Steps (มีรูปภาพ)

วีดีโอ: [15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta): 4 Steps (มีรูปภาพ)

วีดีโอ: [15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta): 4 Steps (มีรูปภาพ)
วีดีโอ: ประวัติศาสตร์โลกเวทมนตร์ Harry Potter 5000 ปี | Point of View 2024, กรกฎาคม
Anonim
Image
Image
[15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta)
[15 นาที] Weasley Clock / Who Is Home Indicator - Based on TR-064 (beta)

UPDATE: ดูขั้นตอนที่ 3

เรื่องยาว (TL;DR ด้านล่าง):เมื่อไม่นานมานี้ฉันเขียน bash-script ขนาดเล็กบนคอมพิวเตอร์ของฉันซึ่งจะสแกนเครือข่ายสำหรับอุปกรณ์ที่ลงทะเบียนและเปรียบเทียบชื่อโฮสต์กับรายการที่มีชื่อที่เกี่ยวข้อง ทุกครั้งที่อุปกรณ์เข้าสู่ระบบหรือออกจากเครือข่าย ฉันจะได้รับการแจ้งเตือน แบบนี้ฉันคงมีความคิดว่าใครอยู่บ้าน (ไม่เพียงแต่จะเป็นเรื่องดีที่รู้ว่าใครอยู่บ้านเพื่อถามพวกเขาว่าต้องการร่วมรับประทานอาหารหรืออะไรทำนองนั้น แต่อาจช่วยให้คุณหลีกเลี่ยงสถานการณ์ที่น่าอึดอัดใจได้เช่นกัน) ปัญหาคือว่าวิธีนี้ไม่น่าเชื่อถือมาก น่าเสียดายที่อุปกรณ์บางอย่างไม่ตอบกลับ ping (เช่น สมาร์ทโฟน) และดูเหมือนว่าจะเข้าสู่โหมดประหยัดพลังงานบางโหมดจึงไม่สามารถตรวจจับได้ด้วยคำสั่งอย่าง nmap อย่างน่าเชื่อถือ ฉันพยายามเอาชนะสิ่งนี้โดยกำหนดให้ติดเนกาทีฟอย่างน้อย 10 รายการก่อนที่จะประกาศว่าอุปกรณ์ออกจากเครือข่ายในที่สุด โดยรวมแล้วใช้งานได้ แต่ช้า ไม่น่าเชื่อถือและไม่ค่อยดีนัก นอกจากนี้ ฉันต้องการตรวจสอบได้ว่าใครอยู่บ้านโดยไม่ต้องเปิดคอมพิวเตอร์ ดังนั้นฉันจึงมี ESP8266 วางอยู่รอบๆ และต้องการเล่นกับพวกเขา แต่ฉันไม่ต้องการสร้างสถานีตรวจอากาศที่ใช้ ESP 10.120.124.812 หรือเช่นนั้น (ทำไมคุณถึงต้องการติดตามสภาพอากาศด้วยเทอร์โมมิเตอร์ ±2°C ที่ห่วยแตก ในเมื่อคุณสามารถเยี่ยมชมเว็บไซต์บางแห่งได้) แผนจึงเกิดขึ้น น่าเสียดายที่ดูเหมือนว่า ESP ไม่ได้ติดตั้ง ping อย่างถูกต้อง (ซึ่งเริ่มต้นไม่ดี จำได้ไหม) นับประสาทำการสแกนเครือข่ายแบบเต็มรูปแบบ ฉันคิดว่าจะเขียนไลบรารีสำหรับสิ่งนั้น - แต่เนื่องจาก C ++ ของฉันมี จำกัด มาก นี่เป็นโครงการ ESP แรกของฉันและฉันไม่ใช่อัจฉริยะด้านเครือข่ายฉันก็ทิ้งความคิดนั้น หลังจากทำวิจัยบางอย่าง ฉันพบว่า เราเตอร์ (แบรนด์ Fritz!Box) มี API! เย้!!!! โปรโตคอลนี้เรียกว่า TR-064 เป็นชื่อที่สร้างแรงบันดาลใจใช่ไหม เมื่อทำการค้นคว้าเกี่ยวกับเรื่องนี้ ฉันพบเอกสาร (ค่อนข้างเส็งเคร็ง) ทางออนไลน์ ฉันต้องใช้เวลาพอสมควรในการทำงาน ฉันอาจโพสต์คำแนะนำเชิงปฏิบัติเพิ่มเติมในวันถัดไป (และวิธีสื่อสาร/ทดสอบ API นี้โดยใช้ส่วนเสริมของเบราว์เซอร์) เมื่อฉันเข้าใจ API ฉันก็เริ่มใช้งานจาก ESP เรื่องสั้นสั้น: ฉันได้ใช้โซลูชัน duck-tape-and-wd40 และทำในสิ่งที่ฉันต้องการ (สอบถาม API สำหรับอุปกรณ์ที่เชื่อมต่อ เปรียบเทียบกับรายการที่อยู่ MAC และเปลี่ยน LED ตามนั้น) แต่ฉันต้องการประสิทธิภาพที่มากขึ้น และโซลูชันที่ยืดหยุ่น และ API นี้มีอีกมากมายที่จะนำเสนอ (คุณสามารถเปลี่ยนการตั้งค่า (เปิด/ปิด wifi, เปลี่ยนรหัสผ่าน, เปิด/ปิด wifi สำหรับแขก, เปลี่ยนพลังงานสัญญาณ), รีสตาร์ทเราเตอร์, ค้นหาความเร็วการเชื่อมต่อ, …) - ดังนั้นฉันจึงตัดสินใจสร้างห้องสมุดสากล TR-064!TL;DR;อุปกรณ์ที่ระบุผ่าน LED ที่ขณะนี้อยู่ที่บ้าน ใช้งานได้ดี ยังไม่มีที่อยู่อาศัยที่ดี (เฮ้ - สังเกตเห็นเบต้าในชื่อหรือไม่) ใช้โปรโตคอล SOAP เพื่อสื่อสารกับเราเตอร์ เขียนไลบรารี Arduino เพื่อทำให้สิ่งนั้นเกิดขึ้น ความรู้ที่จำเป็น• ความรู้พื้นฐานเกี่ยวกับ Arduino/ESP• หากคุณประกอบตัวอย่าง Blink กับ ESP คุณจะไม่เป็นไร!• ถ้าไม่ คุณสามารถทำตามสองขั้นตอนแรกของคำแนะนำนี้ได้• การบัดกรีอาจ มีประโยชน์ถ้าคุณต้องการออกจากเวทีเขียงหั่นขนม•การออกแบบ 3D และ / หรืองานไม้บางอย่างอาจมีประโยชน์สำหรับลิงค์โครงการที่อยู่อาศัย Github [https://github.com/Aypac/Arduino-TR-064-SOAP-Library] เพื่อการอ้างอิงอย่างรวดเร็ว

เสบียง

  • ESP8266 หรือ ESP32 บน Development-Board หรือกับโปรแกรมเมอร์อื่นๆ (2~6€)
  • สาย USB พอดีกับโปรแกรมเมอร์
  • อะแดปเตอร์ไฟ (เช่น USB หรือแบตเตอรี่ ~2€)
  • ไฟ LED และตัวต้านทานสองสามตัว (~ 1 €)
  • (ปลอก)

=> ประมาณ 4-6 ยูโรสำหรับการออกแบบที่เรียบง่าย นั่นหมายถึงสำหรับฉัน ฉันสามารถแขวนไว้รอบบ้านได้ง่ายๆ หากคุณขี้เกียจ คุณสามารถใช้บอร์ดพัฒนาที่มีไฟ LED ในตัว (ดูรายละเอียดเพิ่มเติมในขั้นตอนที่ 4)

ขั้นตอนที่ 1: ตั้งค่าเราเตอร์ของคุณ (ไม่บังคับ แต่แนะนำ)

ตั้งค่าเราเตอร์ของคุณ (ไม่บังคับ แต่แนะนำ)
ตั้งค่าเราเตอร์ของคุณ (ไม่บังคับ แต่แนะนำ)
ตั้งค่าเราเตอร์ของคุณ (ไม่บังคับ แต่แนะนำ)
ตั้งค่าเราเตอร์ของคุณ (ไม่บังคับ แต่แนะนำ)

โปรโตคอลนี้ได้รับการออกแบบให้เป็นโปรโตคอลทั่วไปสำหรับเราเตอร์ แต่ฉันรู้เพียงว่า (ส่วนใหญ่) เราเตอร์ Fritz!Box (อย่างน้อยที่สุดในยุโรป) ใช้โปรโตคอลนี้ ยี่ห้ออื่นไม่รู้ ฉันจะถือว่าคุณกำลังใช้ Fritz!Box หากคุณสามารถทำงานได้ (หรือไม่สามารถทำได้) บนเราเตอร์อื่น ๆ ฉันยินดีที่จะเพิ่มลงในคำแนะนำนี้ (อาจเริ่มต้นรายการความเข้ากันได้แบบสั้น ๆ ก็ได้)

ขั้นตอนนี้ไม่จำเป็น คุณสามารถใช้บัญชีผู้ดูแลระบบของคุณได้ แต่ไม่แนะนำให้ใช้ด้วยเหตุผลที่ชัดเจน (อาจถูกสกัดกั้นหรือดึงออกจาก ESP คุณอาจเปลี่ยนสิ่งที่คุณไม่ต้องการโดยไม่ได้ตั้งใจ …) - ดังนั้นฉัน แนะนำให้คุณทำ

อย่างไรก็ตามเราไปกันเถอะ:

  1. เข้าสู่ระบบ Fritz!Box โดยพิมพ์ fritz.box ในแถบ URL ของเบราว์เซอร์ที่คุณชื่นชอบ
  2. ค้นหาหน้าสำหรับสร้างผู้ใช้ FRITZ!Box ใหม่ (คุณต้องมีขั้นสูงซึ่งควรอยู่ในระบบ หากคุณหาไม่พบ ให้ลองอัปเดตอุปกรณ์ของคุณ)
  3. สร้างบัญชีใหม่ตามที่คุณเห็นในภาพ (โดยใช้ชื่อผู้ใช้/รหัสผ่านอื่น!)
  4. ออกจากระบบ.

ขั้นตอนที่ 2: รหัส

Image
Image
ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)
  1. คุณสามารถรับไลบรารีจาก Github
  2. ในตัวอย่าง คุณจะพบไฟล์ชื่อ home-indicator.ino ซึ่งเป็นรหัสสำหรับโครงการนี้ วางโฟลเดอร์ตัวอย่างในโฟลเดอร์โฮมโปรเจ็กต์ arduino IDE ของคุณและโฟลเดอร์อื่นลงในโฟลเดอร์ไลบรารีในโฟลเดอร์โฮมโปรเจ็กต์เดียวกัน

  3. (Re) เริ่ม IDE ของคุณ
  4. เปิด home-indicator.ino ใน IDE แล้วป้อนการตั้งค่าของคุณ มันควรจะค่อนข้างชัดเจนว่าจะไปที่ไหน หากคุณมีคำถามใด ๆ แจ้งให้เราทราบ!
  5. ตอนนี้คุณสามารถคอมไพล์และโอนไปยัง ESP ของคุณได้!

ขั้นตอนที่ 3: ฮาร์ดแวร์ (เบต้า)

ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)
ฮาร์ดแวร์ (เบต้า)

ใช่… นี่คือขั้นตอนที่ฉันยังต้องทำงานเพิ่มเติม แต่ฉันเดาว่ามีเนื้อหาในเว็บเพียงพอที่จะคิดออก:) การตั้งค่าดังในภาพเป็นเพียงไดโอดที่มีตัวต้านทาน ~100Ohm ต่อสายกับ GPIO{5, 4, 0, 2} ซึ่งเป็น D1 หมุด D2, D3, D4 (ตามลำดับ) ของบอร์ด MCU ESP8266 ของฉัน และสายเคเบิลสีส้มเล็กๆ ที่นำแคโทดไปที่ GND (ทำเครื่องหมาย G บนกระดานของฉัน) หากคุณขี้เกียจ คุณสามารถทำสิ่งที่เห็นในภาพที่สองได้ เพียงใช้บอร์ดพัฒนาที่มีไฟ LED (เช่น "ESP-202" ดูรูป - ประมาณ 3.50-5.00€ รวมค่าจัดส่ง) จากนั้นคุณก็สามารถต่อเข้ากับไฟ USB หรือใช้ชุดแบตเตอรี่ที่ให้มา วาดอินเทอร์เฟซบนแผ่นกระดาษแล้วติดไว้กับผนัง เสร็จสิ้น สำหรับบอร์ดนี้ พอร์ตต่างๆ ได้แก่:

int userPins [numUser] = {5, 4, 2, 14, 16};

จากบนลงล่าง.

ขั้นตอนที่ 4: Outlook/ข้อมูลอ้างอิง

นี่คือสิ่งที่ฉันยังวางแผนอยู่: 1. การสร้างที่อยู่อาศัยที่ดี (ชัดเจน) 2. การเพิ่ม GUI ที่ดีสำหรับการจัดการผู้ใช้/LEDs/MACs/อุปกรณ์ที่รู้จัก 3. การปรับปรุงไลบรารี (ดู Github สำหรับเรื่องนั้น) 4. แก้ไข: บางครั้ง LEDs ตอบสนองอย่างเชื่องช้า (ใช้เวลาเล็กน้อยจนกว่าอุปกรณ์จะปิด) โดยไม่มีเหตุผลชัดเจน 5. ขอสิ่งของที่โถงทางเดินและอาจจะอีกสองสามรอบบ้าน อยากขอความคิดเห็นจากพวกคุณบ้าง! และเช่นเคย ฉันมีความสุขมากที่เห็นคนอื่นคิดเรื่องไร้สาระ ดังนั้นโปรดสละเวลาสักครู่เพื่อแสดงความคิดเห็นและโพสต์รูปภาพ!:):) ข้อมูลอ้างอิงเพิ่มเติมฉันจะลิงก์บางสิ่งที่นี่ ซึ่งอาจช่วยคุณได้: • ข้อมูลอ้างอิง TR-064 • ผู้ชายบางคนยุ่งกับเชลล์และ TR-064 (ดีที่จะเข้าใจ API) • วิกิพีเดีย Harry Potter: รายการนาฬิกาวีสลีย์ • ผู้ชายบางคนสร้างนาฬิกาวีสลีย์ที่สวยงามแต่ซับซ้อน*_ *มันอิงจากแอปสำหรับโทรศัพท์ของคุณซึ่งใช้ตำแหน่งของคุณ หากคุณอยู่ในพื้นที่ที่กำหนดไว้ล่วงหน้า ไฟตามนาฬิกาจะเปิดขึ้น สำหรับฉันมันซับซ้อนเกินไปและต้องไปหลายๆ ที่ที่อาจพัง/พังได้: • แอปต้องอัปเดตอยู่เสมอ • ทุกคนต้องใช้แอปเหล่านี้ • และโอเคกับผลกระทบต่อความเป็นส่วนตัว • แอปใช้งานได้กับอินเทอร์เน็ตเท่านั้น การเชื่อมต่อ • คุณต้องใช้เซิร์ฟเวอร์ตัวกลางในการเชื่อมต่อการสื่อสาร (ยกเว้นกรณีที่คุณต้องการตั้งค่าให้คุณเป็นเซิร์ฟเวอร์โดยเฉพาะ และเปิดเครือข่ายภายในบ้านของคุณสำหรับการรับส่งข้อมูลภายนอก - ใช่ อุปกรณ์ IOT อื่นที่ไม่ปลอดภัยที่เชื่อมต่อโดยตรงกับอินเทอร์เน็ต!) • บริการระดับกลางอาจออฟไลน์ในวันหนึ่ง/เปลี่ยน API • …คุณต้องการซอฟต์แวร์เพิ่มเติม ซอฟต์แวร์มากขึ้นหมายถึงมีสถานที่ทำข้อผิดพลาดมากขึ้น;)แต่พวกเขาทำได้ดีมาก และหากคุณต้องการทำอะไรแบบนั้น ตรงไปที่ไซต์ของพวกเขา มันเยี่ยมมาก!

แนะนำ: