สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
เช่นเคย ฉันต้องการสร้างอุปกรณ์ที่มีประโยชน์ ทำงานได้อย่างมีประสิทธิภาพ และมักจะได้รับการปรับปรุง เมื่อเทียบกับโซลูชันที่วางจำหน่ายในปัจจุบัน
นี่เป็นอีกหนึ่งโครงการที่ยอดเยี่ยมซึ่งเดิมมีชื่อว่า Shadow 0f Phoenix ซึ่งเป็นโล่ Raspberry PI ร่วมกับการตรวจจับการเคลื่อนไหวตาม Arduino และการควบคุมแสง
ขั้นตอนที่ 1: สถานะของกล้อง IP เชิงพาณิชย์
นอกจากนี้ การสร้างกล้อง/ระบบการเฝ้าระวังของคุณเองยังเจ๋งกว่า มาดูกันว่าทำไมการปรับปรุงจากโซลูชันนอกชั้นวางจึงเป็นเช่นนี้
ฉันจะเปรียบเทียบกับกล้อง IP ไร้สาย NEO COOLCAM Full HD 1080P เนื่องจากฉันมีกล้อง neo coolcams (ONVIF) รุ่นต่างๆ มากมาย พวกมันมาในรูปทรงและขนาดต่าง ๆ ทั้งกลางแจ้งและในร่ม ส่วนใหญ่มีการสนับสนุน wifi ในตัว แต่มาดูคำเตือนกัน:
- ผู้ผลิตในจีนที่ขายกล้องเหล่านี้มักจะโกหกเรื่องความละเอียดของเซ็นเซอร์ภาพในตัว เมื่อคุณซื้อกล้อง 5MP/8MP บน Ebay คุณอาจได้กล้อง 2MP ราคาถูกที่มีภาพแย่ (ใช้งานได้ แต่คุณภาพก็แย่) เมื่อคุณซื้อกล้อง Raspberry PI v2 8MP จากร้านค้าปลีกดั้งเดิม คุณจะได้สิ่งที่คุณจ่ายไปและเซ็นเซอร์ 8MP จริงที่มีความละเอียด 3280 × 2464 พิกเซล =>
- จากมุมมองด้านความปลอดภัย กล้องเหล่านี้ (แม้แต่ Dlink และรุ่นอื่นๆ ที่มีราคาแพงกว่า) นั้นแย่มาก พวกเขาใช้รหัสผ่านเริ่มต้น เช่น 123456 หรือผู้ใช้ในตัว เช่น ผู้ดูแลระบบ/ผู้ดูแลระบบ/ผู้ดำเนินการ/ผู้ดำเนินการ ซึ่งคุณอาจไม่สามารถเปลี่ยนแปลงได้หรือ การเปลี่ยนแปลงจะหายไปหลังจากรีบูต ปิดท้ายด้วยโทรศัพท์บ้านที่มีกล้องหลายตัวเหล่านี้ (เชื่อมต่อกับเซิร์ฟเวอร์ของพวกเขาในจีน บางตัวอาจสตรีมวิดีโอ/รูปภาพกลับโดยไม่ขอให้คุณทำได้ง่ายขึ้นในกรณีที่คุณตัดสินใจติดตั้งแอป Android/Iphone วันหนึ่งเพื่อตรวจสอบ บ้าน). แม้ว่าคุณจะวางอุปกรณ์เหล่านี้ไว้ข้างหลังเราเตอร์ แต่ก็ยังไม่ดีพอ ที่ดีที่สุดคือถ้าคุณไม่ตั้งค่าเกตเวย์เริ่มต้นในอุปกรณ์เหล่านี้ ไฟร์วอลล์หรือใส่ไว้ใน VLAN เพื่อให้ไม่สามารถออกไปได้ อินเทอร์เน็ตหรือดีกว่านั้น: อย่าใช้เลย
- พวกเขาเชื่อถือได้มากขึ้นหรือไม่? ไม่เลย หลายๆ อันแม้แต่ DLINK ที่แพงกว่าก็มีตัวเลือกในการรีบูทกล้องทุกวัน/ทุกสัปดาห์ ฯลฯ ตัวเลือกนั้นมีเหตุผลเพราะหลังจาก X วัน การเชื่อมต่อ Wifi มักจะสูญเสียหรือทำงานผิดปกติในลักษณะอื่น แค่คิดว่ามันเป็นกล่อง Win95 แบบเก่าที่ดีซึ่งจำเป็นต้องรีบูตบ่อยกว่านั้น:) ฉันไม่ได้บอกว่าฮาร์ดแวร์ที่ใช้ Raspi นั้นแข็งแกร่งมากจนคุณสามารถสร้างมันในการควบคุมโรงไฟฟ้านิวเคลียร์ แต่ด้วยฮาร์ดแวร์ / ซอฟต์แวร์ที่เหมาะสม การกำหนดค่า, ฮีทซิงค์, พัดลมระบายความร้อนอัตโนมัติและการทำงาน RW ที่ลดลงบน SDCARD พวกเขาสามารถทำงานได้ถึง 100+ วันโดยไม่มีปัญหา ในขณะที่เขียน DeathStar ของฉันทำงานตั้งแต่ 34 วันเกิน 100 แต่บางครั้งฉันก็แฮ็คฟีดในแหล่งพลังงานซึ่งเปิดเครื่องวงจรอื่น ๆ ของฉันจึงต้องปิดตัวลง:(
- ฮาร์ดแวร์เป้าหมาย: สร้างขึ้นเพื่อวัตถุประสงค์เฉพาะ 1 ประการ มักมาพร้อมกับพื้นที่ nvram ขนาดเล็กและ busybox แต่บางรุ่นทำให้การเข้าถึงเชลล์นี้เป็นไปไม่ได้เช่นกัน ดังนั้นสิ่งที่คุณสามารถใช้ได้คือสิ่งที่พวกเขาตั้งใจจะใช้ในขณะที่คุณทำได้ ใช้กล้องที่ใช้ Raspi กับงานอื่นๆ: เซิร์ฟเวอร์ไฟล์, เซิร์ฟเวอร์ tftp/dhcp, เว็บเซิร์ฟเวอร์, เซิร์ฟเวอร์สั่นสะเทือน… ตัวเลือกมีไม่จำกัด
- พื้นที่เก็บข้อมูล: ไม่มีเลย หรือใช้การ์ด microsd ที่มีระบบไฟล์ FAT32 VS บนราสเบอร์รี่ pis คุณยังสามารถแนบฮาร์ดไดรฟ์ขนาด 2 TB ได้หากต้องการ
- ไฟควบคุม: บางตัวมีเอาต์พุต ALARM ซึ่งคุณอาจเชื่อมต่อรีเลย์ขนาดเล็กเพื่อให้ไฟทำงาน อย่างที่ฉันจะแสดงให้คุณเห็นในบทช่วยสอนนี้โดยใช้กล้องอินฟราเรดเป็นการเสียเวลาโดยเปล่าประโยชน์ เนื่องจากคุณจะไม่สามารถระบุใครในรูปภาพ IR ได้เนื่องจากคุณภาพไม่ดี หากคุณต้องการบันทึกวิดีโอในที่มืด วิธีที่ดีที่สุดคือเปิดไฟก่อนแล้วจึงบันทึกวิดีโอ
ดังนั้นคุณอาจถามว่ามีข้อดีใดบ้างในการใช้กล้องนอกชั้นวาง? ใช่สำหรับธุรกิจที่ชั่วโมงการทำงานในการตั้งค่าจะแพงกว่าการซ่อมแซม Raspberry pis (ไม่ใช่สำหรับฉัน:)) และใช่มีกล้องระดับแนวหน้า (500$+ ที่มีความละเอียดดีกว่ากล้อง pi ของ คอร์ส). ข้อดีอีกอย่างหนึ่ง ฉันสามารถพูดได้ว่ากล้องที่ปฏิบัติตามมาตรฐาน ONVIF ทำให้การจัดเตรียมแบบรวมศูนย์ทำได้ง่ายขึ้น นี่เป็นอินเทอร์เฟซมาตรฐานที่สามารถใช้ส่งคำสั่งไปยังกล้องเพื่อตั้งค่า IP/Network Mask/Gateway และอื่นๆ สำหรับสิ่งนี้ คุณสามารถดาวน์โหลดตัวจัดการอุปกรณ์ Onvif จาก Sourceforge อุปกรณ์เหล่านี้จำนวนมากมาพร้อมกับส่วนหน้าของเว็บที่ใช้งานไม่ได้ เช่น ไม่อนุญาตให้คุณตั้งค่า ip หรือ netmask อย่างถูกต้อง เนื่องจากจาวาสคริปต์ที่ตรวจสอบความถูกต้องของฟิลด์เหล่านี้ทำงานผิดปกติ และวิธีเดียวของคุณในการตั้งค่าพารามิเตอร์เหล่านี้อย่างถูกต้องคือผ่าน ONVIF
ขั้นตอนที่ 2: แผนของเดธสตาร์
คุณสามารถสร้างอุปกรณ์นี้ด้วย Raspberry PI ใดก็ได้ตั้งแต่ 1 ถึง 3B+ แม้แต่ศูนย์ก็มีพอร์ตกล้อง แต่เนื่องจากมี raspis มือสองจำนวนมากในตลาด คุณอาจสงสัยว่ารุ่นใดเหมาะที่สุดสำหรับโครงสร้างนี้
คำตอบขึ้นอยู่กับว่าคุณต้องการประมวลผลการสตรีมวิดีโอที่ใด
มีสองทางเลือก:
1, ประมวลผลวิดีโอในเครื่องด้วยการเคลื่อนไหวและส่งต่อสตรีมวิดีโอเมื่อตรวจพบการเคลื่อนไหว (หมายเหตุ: การเคลื่อนไหวส่งต่อสตรีมคงที่ที่ช้าไปยังเซิร์ฟเวอร์ไม่ว่าจะเกิดอะไรขึ้น ขึ้นอยู่กับความละเอียดและอัตราเฟรมที่คุณใช้จากสองสาม หลายร้อยเมกะไบต์ถึงหลายกิกะไบต์ต่อวัน เพียงแค่เตือนว่าคุณต้องการตั้งค่าการเชื่อมต่อแบบมิเตอร์) ที่นี่ CPU มีความสำคัญและน่าเสียดายที่การเคลื่อนไหว (ในขณะที่เขียน) ไม่ได้ใช้ประโยชน์จากหลายคอร์ แต่ระบบปฏิบัติการจะพยายามปรับสมดุลโหลดเล็กน้อย คุณจะมีหนึ่งในแกนหลักในการใช้งาน 100% เสมอ
2, ประมวลผลวิดีโอบนเซิร์ฟเวอร์กลาง: ที่นี่คุณเพียงแค่ส่งต่อสตรีมวิดีโอดิบจากกล้องไปยังเซิร์ฟเวอร์สตรีมมิ่งภายนอก (เช่น iSpy ที่ทำงานบนคอมพิวเตอร์ x86 หรือ MotionEyeOS ที่ทำงานบนมินิคอมพิวเตอร์เฉพาะเครื่องอื่น) เนื่องจากไม่มีการประมวลผลในเครื่อง รูปแบบของ PI ที่คุณใช้จึงไม่สำคัญ PI1 จะส่งสตรีมเดียวกันกับ PI3B+
ในบทช่วยสอนนี้ ฉันจะเลือกตัวเลือกแรก
หลักการง่ายๆ ก็คือ ยิ่ง CPU เร็วเท่าไหร่ คุณก็จะได้ผลลัพธ์ที่ดีขึ้นเท่านั้น ตัวอย่างเช่น กล้องที่ใช้ Raspi 2 ของฉันดูทางเดินในบางครั้งไม่รับเมื่อมีคนผ่านไปอย่างรวดเร็วและเมื่อบันทึก การบันทึกก็อืด เฟรมลดลงมากเมื่อเทียบกับรุ่น 3 รุ่น 3 ยังมี 802.11 abgn wifi ซึ่งสะดวกต่อการสตรีมวิดีโอคุณภาพสูงขึ้น มันใช้งานได้ดีและเชื่อถือได้ ในขณะที่เขียนว่ารุ่น 3B+ ออกแล้ว เราขอแนะนำให้คุณใช้ซีพียู Quad Core 1.4 Ghz
รายการวัสดุ
- เดธสตาร์พลาสติก 30 ซม.:)
- ราสเบอร์รี่ Pi 3 B+
- PicCam v2 (8MP)
- Arduino Pro Micro 5.5v
- 2x SIP-1A05 รีเลย์สวิตช์กก
- 1x PCS HC-SR501 IR อินฟราเรดแบบไพโรอิเล็กทริก IR PIR Motion เซนเซอร์ โมดูลตรวจจับ
- ตัวต้านทาน 1x 10kohm สำหรับ LDR
- 1x LDR
- อะแดปเตอร์ DC 1x12V 4A
- 1xWarm White LED 5050 SMD แถบไฟอ่อนแบบยืดหยุ่น 12V DC
- 1xBuck ตัวควบคุมแรงดันไฟฟ้า
อย่างที่คุณเห็นในแผนผัง เดิมทีโปรเจ็กต์นี้ออกแบบมาเพื่อควบคุมไฟดวงเดียวด้วยรีเลย์เดียว เพราะฉันไม่ได้วางแผนที่จะเพิ่มไฟภายใน (ซึ่งค่อนข้างเจ๋ง) ดังนั้นฉันจึงเดินสายรีเลย์ตัวที่สองไปยัง Arduino สิ่งที่ยอดเยี่ยมเกี่ยวกับ SIP-1A05 ก็คือมีไดโอดฟลายแบ็คภายในและการสิ้นเปลืองพลังงานเป็น mA อยู่ภายใต้ข้อจำกัดด้านกำลังต่อพินของ Arduino
เหตุผลที่ PIR อยู่บนโล่บนรูปภาพเพราะในตอนแรก S0P ถูกวางแผนให้ใส่ในกล่องพลาสติก IP แบบธรรมดาแทนที่จะเป็น DeathStar อย่างที่คุณอาจเดาได้ว่ากล้องอยู่ในปืนเลเซอร์โดยตรง PIR และ LDR จำเป็นต้องมีรูเจาะอีกรูหนึ่ง และพวกมันก็ใช้ปืนกาวเพราะผมไม่ได้ตั้งใจจะถอดออก
มีการเจาะรูที่ด้านล่างของ DeathStar โดยที่ฉันติดกาวในสลักเกลียวขนาดใหญ่ด้วยกาว 2 ส่วนประกอบที่แข็งแรง สามารถขันสกรูเข้ากับขาตั้ง Neo Coolcams ดั้งเดิมได้ (มันดีสำหรับบางสิ่งบางอย่าง:)) สำหรับการรองรับเพิ่มเติม ฉันใช้สายทองแดงแข็งเพื่อยึดดาวไว้บนสุด
หมายเหตุสำคัญเกี่ยวกับแหล่งจ่ายไฟ: เนื่องจากแหล่งจ่ายไฟเดียวกันจะจ่ายไฟให้กับทั้ง PI, Arduino และแถบ LED จึงต้องมีน้ำหนักมากพอที่จะรองรับได้ทั้งหมด ดังนั้นจึงต้องอิงตามแถบ LED ที่คุณเลือกสำหรับโครงการ แถบ LED ขนาด 5050 12v 3 เมตรในเชิงพาณิชย์ระบายน้ำได้ประมาณ 2A นั่นเป็นจำนวนมาก สำหรับ PI และ Arduino คุณต้องคำนวณเป็น +2A (แม้ว่าจะเกินขนาด แต่ก็ไม่เจ็บ) การใช้แถบ LED เหนือหลอดฮาโลเจนมาตรฐาน นีออนหรือไฟส่องสว่างกำลังสูงอื่นๆ ทำให้คุณสามารถใส่วงจรทั้งหมดนี้บนแบตเตอรี่ตะกั่วกรด 12V@10Ah ที่ดีเพื่อเป็นพลังงานสำรอง ดังนั้นจึงใช้งานได้แม้ในกรณีที่ไฟฟ้าดับ
เจ้าชู้จะลดแรงดันไฟฟ้าจาก 12-> 5V เพื่อจ่ายไฟให้กับ Arduino และ PI ในขณะที่ฟีด 12V โดยตรงนั้นต่อสายบนรีเลย์เพื่อเปิดแถบ LED
ขั้นตอนที่ 3: ซอฟต์แวร์ Arduino
คุณสามารถค้นหาซอร์สโค้ดแบบเต็มได้ด้านล่างซึ่งมีความคิดเห็นเป็นอย่างดี แต่นี่เป็นคำอธิบายสั้น ๆ ว่ามันทำงานอย่างไร: ที่จุดเริ่มต้นของแต่ละลูป ฟังก์ชัน xcomm() ปกติจะถูกเรียกเพื่อดูว่ามีคำสั่งที่มาจาก Raspberry PI หรือไม่ สามารถ LIGHT_ON/OFF เพื่อเปิดไฟทางเดินหรือ DS_ON/OFF เพื่อเปิด/ปิดไฟแบ็คไลท์ DeathStar ฉันได้ใช้สิ่งเหล่านี้เพื่อความสมบูรณ์แบบมากกว่าเพราะถ้ามีคนผ่าน PIR ควรหยิบมันขึ้นมาและเปิด ไฟ แต่บางทีคุณอาจต้องการดูสถานที่ด้วยเหตุผลบางอย่างแม้ว่าจะไม่มีใครอยู่ที่นั่น
หลังจากนี้ค่าโฟโตเซลล์จะอ่านและหมุดเคลื่อนไหวจะถูกตรวจสอบการเคลื่อนที่ หากมีการเคลื่อนไหว รหัสจะตรวจสอบว่ามืดเพียงพอหรือไม่ จากนั้นจะตรวจสอบว่าเราไม่ได้ถูกระงับหรือไม่ หากทั้งหมดนี้ผ่านไป ก็เพียงแค่เปิดไฟทางเดินแล้วส่ง PHOENIX_MOTION_DETECTED กลับไปยัง Raspberry PI หากไม่มืดเพียงพอ ไฟจะยังคงส่งสัญญาณกลับไปที่คอมพิวเตอร์แต่ไม่เปิดไฟ เมื่อตรวจพบการเคลื่อนไหว ตัวจับเวลาพักไว้ 5 นาทีจะเริ่มต้นขึ้น
หลังจากนี้ ส่วนโค้ดถัดไปจะตรวจสอบเพื่อดูว่าเราถูกระงับหรือไม่ (ซึ่งควรเป็นกรณีที่มีเพียงเหตุการณ์การเคลื่อนไหว สมมติว่าผ่านไป 5 นาทีเพื่อให้การตรวจสอบนี้สามารถยืนยันได้) รหัสจะตรวจสอบเพื่อดูว่ามีการเคลื่อนไหวอีกหรือไม่ ถ้าไม่ ให้ปิดไฟ อย่างที่คุณเห็นว่าไม่มีการเคลื่อนไหว ฟังก์ชันนี้จะทำซ้ำตัวเองซ้ำแล้วซ้ำอีก พยายามปิดไฟ ดังนั้นจึงไม่มีการตอบกลับไปยังพีซี
เรามีตัวจับเวลาการหน่วงเวลาสำหรับแสงภายในของ DeathStar ซึ่งขึ้นอยู่กับ photocellReading < dark_limit เท่านั้น
แม้ว่ากิจวัตรทั้ง 2 อย่างจะไม่รู้เกี่ยวกับกันและกัน แต่จะทำงานร่วมกันได้อย่างสมบูรณ์แบบ เนื่องจากเมื่อไฟทางเดินติดสว่างมากจน LDR จะคิดว่าเป็นเวลากลางวันอีกครั้งและจะปิดไฟภายในรถ อย่างไรก็ตาม มีข้อแม้บางประการเกี่ยวกับกระบวนการนี้ซึ่งอธิบายไว้ในโค้ดหากคุณสนใจ ถ้าไม่เช่นนั้น ให้ตอบ Nvidia ว่า "มันใช้งานได้!"
ขั้นตอนที่ 4: ซอฟต์แวร์ Raspberry PI
Raspbian ล่าสุดใช้งานได้สำหรับฉัน:
Raspbian GNU/Linux 9.4 (ยืด)
Linux Phoenix 4.9.35-v7+ #1014 SMP Fri 30 มิ.ย. 14:47:43 BST 2017 armv7l GNU/Linux ii motion 4.0-1 armhf V4L โปรแกรมจับภาพที่รองรับการตรวจจับการเคลื่อนไหว
แม้ว่าคุณจะสามารถใช้ distros อื่น ๆ ได้ แต่หากคุณพบปัญหาใดๆ กับกล้อง คุณจะได้รับการสนับสนุนจากทีมเฉพาะเมื่อคุณใช้ระบบปฏิบัติการอย่างเป็นทางการเท่านั้น ขอแนะนำให้ลบ bloatware ที่ไม่พึงประสงค์ เช่น systemd
การเคลื่อนไหวยังสามารถสร้างขึ้นจากแหล่งที่มาได้อย่างง่ายดาย:
apt-get -y ติดตั้ง autoconf automake pkgconf libtool libjpeg8-dev build-essential libzip-dev apt-get ติดตั้ง libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev
apt-get -y ติดตั้ง libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev apt-get -y ติดตั้ง git git clone https://github.com/Motion-Project/motion cd motion/ autoreconf -fiv /configure --prefix=/usr/motion make && make install /usr/motion/bin/motion -v
ฉันแนะนำ iSpy เป็นเซิร์ฟเวอร์บันทึก/รวบรวมวิดีโอ น่าเสียดายในขณะที่เขียนไม่มีทางเลือกที่ดีสำหรับ Linux สามารถเพิ่มกล้องได้ด้วย MJPEG url https://CAMERA_IP:8081 พอร์ตเริ่มต้น
การประมวลผลการเคลื่อนไหวจะมีประโยชน์ ตัวอย่างเช่น คุณไม่จำเป็นต้องคอยดูเซิร์ฟเวอร์ iSpy ของคุณตลอดทั้งวัน คุณสามารถรับอีเมลในกรณีที่มีการเคลื่อนไหว แม้ว่า iSpy จะมีฟังก์ชันนี้เพื่อแจ้งเตือนในอีเมลในกรณีที่มีการเคลื่อนไหว แต่จะเปิดการบันทึกเป็นครั้งคราวสำหรับเหตุการณ์เบ็ดเตล็ด เช่น แสงบางส่วนจะสะท้อนไปยังพื้นที่ ด้วยการตรวจจับการเคลื่อนไหวของ PIR ฉันไม่เคยมีสัญญาณเตือนที่ผิดพลาดแม้แต่ครั้งเดียว การแจ้งเตือนสามารถดำเนินการในเครื่องได้:
ตรวจพบเหตุการณ์การเคลื่อนไหว Pir บนเซ็นเซอร์ > การแจ้งเตือน Arduino > Raspberry pi ได้รับบนคอนโซล > โปรแกรมประมวลผล C > แอปพลิเคชันอีเมลภายนอก
อย่างไรก็ตาม ฉันชอบการประมวลผลทั้งบันทึกและวิดีโอจากระยะไกล ดังนั้นในกรณีนี้ฉันได้เพิ่มส่วนในโปรแกรมควบคุม C ในขณะที่มันบันทึกบันทึกในเครื่องเป็นไฟล์ข้อความธรรมดา บันทึกไปยัง syslog และที่ส่งต่อไปยัง SIEM สำหรับ การประมวลผลเพิ่มเติม
ตัวบันทึกโมฆะ (ถ่าน * ข้อความ) {
ไฟล์ *f = fopen("phoenix.log", "a"); if (f == NULL) { printf ("เกิดข้อผิดพลาดในการเปิดล็อกไฟล์!\n"); กลับ; } fprintf(f, "%s => %s\n", cur_time(0), ข้อความ); fclose(ฉ); #ifdef บันทึกถ่าน SYSLOG[500]; sprintf(logy, "%s => %s\n", cur_time(0), ข้อความ); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); //syslog (LOG_NOTICE, "โปรแกรมที่เริ่มต้นโดยผู้ใช้ %d", getuid ()); syslog (LOG_NOTICE, บันทึก); closelog (); #endif กลับมา; }
ที่จุดสิ้นสุดการรับ syslog-ng สามารถ demux เหตุการณ์เหล่านี้จากสตรีมบันทึกหลัก:
กรอง f_phx{
ตรงกัน ("เดธสตาร์"); }; d_phx ปลายทาง { ไฟล์ ("/var/log/phoenix/deathstar.log"); }; บันทึก { แหล่งที่มา (s_net); ตัวกรอง (f_phx); ปลายทาง (d_phx); };
และสามารถส่งผ่านไปยังเครื่องมืออื่นได้ (motion.php ดูที่แนบมา) เพื่อการวิเคราะห์และการแจ้งเตือน
ในสคริปต์นี้ คุณสามารถตั้งเวลาปกติระหว่างสัปดาห์เมื่อคุณไม่อยู่บ้าน:
$opt['alert_after']='09:00:00'; // Mornings$opt['alert_before']='17:00:00'; // ตอนเย็น
โปรแกรม php ใช้ยูทิลิตี้ logtail ที่ยอดเยี่ยมเพื่อแยกวิเคราะห์บันทึก
$cmd = "logtail -o".$offsetfile.' '.$logfile.'>'.$logfile2;
Logtail ติดตามตำแหน่งในไฟล์ออฟเซ็ตเพื่อให้โปรแกรมหลักไม่ต้องรู้ว่าจะเริ่มดูบันทึกจากเวลาใด โปรแกรมจะได้รับข้อมูลที่ยังไม่ได้ประมวลผลล่าสุด
Motion.php สามารถเรียกใช้จาก crontab ได้โดยใช้เคล็ดลับเล็กๆ น้อยๆ สำหรับวันหยุดสุดสัปดาห์ เมื่อมันจะต้องผ่านบันทึก แต่ไม่มีการประมวลผลเพิ่มเติม
*/5 * * * 1-5 /usr/local/bin/php ~/motion.php &>/dev/null*/5 * * * 6-7 /usr/local/bin/php ~/motion.php วันหยุดสุดสัปดาห์ &>/dev/null
ขั้นตอนที่ 5: ปัญหาและรายการสิ่งที่ต้องทำ
หากคุณใช้ Raspberry pi 3 หรือใหม่กว่า คุณสามารถข้ามส่วนนี้ไปได้ ส่วนใหญ่คุณจะไม่พบปัญหาเหล่านี้อีกต่อไป
ในช่วงหลายปีที่ผ่านมาฉันมีปัญหาบางอย่างกับบอร์ดที่ใช้ Raspberry pi 2 ซึ่งอาจเรียกใช้ซอฟต์แวร์สแต็กเดียวกัน แต่ถูกซื้อในเวลาที่ต่างกันจากที่ต่างกัน หลังจากช่วงเวลาหนึ่งซึ่งอาจเป็น 2 วันหรือ 20 วันเมื่อ SSHing บนอุปกรณ์ SSH จะหยุดทำงาน ดังนั้นทั้ง Motion daemon และโค้ด C ในพื้นที่ที่พูดคุยกับ Arduino ถูกโหลดขึ้นใน ram ดังนั้นอุปกรณ์จึงทำงานได้ แต่มันเป็นไปไม่ได้ที่จะทำอย่างอื่นกับมันอีกต่อไปในสภาพนี้
หลังจากแก้ไขปัญหาต่างๆ มากมาย ฉันพบวิธีแก้ปัญหา:
homesync.sh
#!/bin/sh -e
### BEGIN INIT INFO # จัดเตรียม: homesync # Required-Start: mountkernfs $local_fs # Required-Stop: camera phoenix # Default-Start: S # Default-Stop: 0 6 # คำอธิบายสั้น ๆ: Home synchronizer # คำอธิบาย: Home synchronizer โดย NLD ### END INIT INFO NAME=home DESC="Ramdisk Home Synchronizer" RAM="/home/" DISK="/realhome/" set -e case "$1" in start|forth) echo -n "Starting $ รายละเอียด: " rsync -az --numeric-ids --delete $DISK $RAM &> /dev/null echo "$NAME";; หยุด|ย้อนกลับ) echo -n "หยุด $DESC: " rsync -az --numeric-ids --delete $RAM $DISK &> /dev/null echo "$NAME";; *) echo "การใช้งาน: $0 {start|stop}" exit 1;; esac ทางออก 0
สคริปต์ไปพร้อมกับการปรับเปลี่ยน fstab:
tmpfs /home tmpfs rw, size=80%, nosuid, nodev 0 0
พาร์ติชันหลักถูกติดตั้งเป็น ramdisk ซึ่งจะให้พื้นที่ว่างประมาณ 600MB บน Raspberry pi 2 ซึ่งมากเกินพอที่จะจัดเก็บไบนารีและไฟล์บันทึกขนาดเล็ก:
tmpfs 690M 8.6M 682M 2% /บ้าน
ปรากฎว่า PI แฮงค์เกิดจากการดำเนินการเขียนบน SDcard แม้ว่าฉันจะลองใช้การ์ดอื่น (Samsung EVO, Sandisk) ซึ่งสแกนหาข้อผิดพลาดหลายครั้งก่อนและหลัง และไม่มีปัญหาในแล็ปท็อปเครื่องอื่น นี่เป็นเพียง ขึ้นมา ฉันไม่มีปัญหาเดียวกัน (ยัง) กับ Raspberry PI 3s และฮาร์ดแวร์ที่สูงกว่า นั่นคือเหตุผลที่ฉันแนะนำพวกเขาในบทช่วยสอนนี้
แม้ว่าการเคลื่อนไหวในปัจจุบันของ Raspberry PI 3 นั้นดีพอสำหรับฉัน แต่นี่เป็นแนวคิดที่ควรค่าแก่การสำรวจ:
- อย่าใช้การเคลื่อนไหว แต่ใช้สตรีมแบบ raspivid บนเครือข่าย และให้เซิร์ฟเวอร์ที่ทรงพลังทำการตรวจจับการเคลื่อนไหวและการเข้ารหัสวิดีโอ (เช่น iSpy) -> ปัญหา: มีการใช้แบนด์วิดท์เครือข่ายอย่างต่อเนื่อง
- ใช้การเคลื่อนไหวและให้ ffmpeg ทำการเข้ารหัสวิดีโอ -> ปัญหา: CPU ไม่สามารถจัดการความละเอียดสูงได้
- ใช้การเคลื่อนไหว บันทึกวิดีโอดิบ และให้เซิร์ฟเวอร์ที่ทรงพลังทำการเข้ารหัส -> การใช้งาน CPU บน RPi ต่ำและแบนด์วิดธ์ของเครือข่ายถูกจำกัดเมื่อมีการเคลื่อนไหวจริง สำหรับสถานการณ์นี้ เราสามารถเขียนไปยังการ์ด SD/ramdisk เพื่อให้ได้ปริมาณงานสูงสุด จากนั้น crontab คัดลอกวิดีโอไปยังเซิร์ฟเวอร์อื่น
ฉันจะทราบด้วยว่าการสร้างโครงการนี้สามารถสร้างได้โดยไม่ต้องใช้ Arduino ส่วนประกอบทั้งหมด (รีเลย์, LDR, PIR) สามารถเชื่อมต่อกับ raspberry pi ด้วยวิธีใดวิธีหนึ่ง แต่ฉันชอบไมโครคอนโทรลเลอร์แบบเรียลไทม์มากกว่าเพื่อโต้ตอบกับเซ็นเซอร์และอุปกรณ์ส่งออก ในกรณีที่ราสเบอร์รี่ pi ของฉันค้างหรือพัง การควบคุมแสงที่ดำเนินการโดย Arduino ก็ใช้ได้ดี
หากคุณชอบคำแนะนำนี้คอยติดตามในขณะที่ฉันจะทำซีรีส์ต่อด้วยกล้องโดมราสเบอร์รี่ pi Zero 360 องศากลางแจ้งในปีหน้า