สารบัญ:

กล้อง Raspberry PI และการควบคุมแสง Death Star: 5 ขั้นตอน (พร้อมรูปภาพ)
กล้อง Raspberry PI และการควบคุมแสง Death Star: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: กล้อง Raspberry PI และการควบคุมแสง Death Star: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: กล้อง Raspberry PI และการควบคุมแสง Death Star: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: How to create a spectacular time-lapse with the new Raspberry PI HQ Camera 2024, กรกฎาคม
Anonim
กล้อง Raspberry PI และการควบคุมแสง Death Star
กล้อง Raspberry PI และการควบคุมแสง Death Star
กล้อง Raspberry PI และการควบคุมแสง Death Star
กล้อง Raspberry PI และการควบคุมแสง Death Star
กล้อง Raspberry PI และการควบคุมแสง Death Star
กล้อง Raspberry PI และการควบคุมแสง Death Star

เช่นเคย ฉันต้องการสร้างอุปกรณ์ที่มีประโยชน์ ทำงานได้อย่างมีประสิทธิภาพ และมักจะได้รับการปรับปรุง เมื่อเทียบกับโซลูชันที่วางจำหน่ายในปัจจุบัน

นี่เป็นอีกหนึ่งโครงการที่ยอดเยี่ยมซึ่งเดิมมีชื่อว่า Shadow 0f Phoenix ซึ่งเป็นโล่ Raspberry PI ร่วมกับการตรวจจับการเคลื่อนไหวตาม Arduino และการควบคุมแสง

ขั้นตอนที่ 1: สถานะของกล้อง IP เชิงพาณิชย์

สถานะของกล้อง IP เชิงพาณิชย์
สถานะของกล้อง IP เชิงพาณิชย์
สถานะของกล้อง IP เชิงพาณิชย์
สถานะของกล้อง IP เชิงพาณิชย์
สถานะของกล้อง IP เชิงพาณิชย์
สถานะของกล้อง 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

ซอฟต์แวร์ Arduino
ซอฟต์แวร์ 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

ซอฟต์แวร์ Raspberry PI
ซอฟต์แวร์ Raspberry PI
ซอฟต์แวร์ Raspberry PI
ซอฟต์แวร์ Raspberry PI
ซอฟต์แวร์ Raspberry PI
ซอฟต์แวร์ 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 นั้นดีพอสำหรับฉัน แต่นี่เป็นแนวคิดที่ควรค่าแก่การสำรวจ:

  1. อย่าใช้การเคลื่อนไหว แต่ใช้สตรีมแบบ raspivid บนเครือข่าย และให้เซิร์ฟเวอร์ที่ทรงพลังทำการตรวจจับการเคลื่อนไหวและการเข้ารหัสวิดีโอ (เช่น iSpy) -> ปัญหา: มีการใช้แบนด์วิดท์เครือข่ายอย่างต่อเนื่อง
  2. ใช้การเคลื่อนไหวและให้ ffmpeg ทำการเข้ารหัสวิดีโอ -> ปัญหา: CPU ไม่สามารถจัดการความละเอียดสูงได้
  3. ใช้การเคลื่อนไหว บันทึกวิดีโอดิบ และให้เซิร์ฟเวอร์ที่ทรงพลังทำการเข้ารหัส -> การใช้งาน CPU บน RPi ต่ำและแบนด์วิดธ์ของเครือข่ายถูกจำกัดเมื่อมีการเคลื่อนไหวจริง สำหรับสถานการณ์นี้ เราสามารถเขียนไปยังการ์ด SD/ramdisk เพื่อให้ได้ปริมาณงานสูงสุด จากนั้น crontab คัดลอกวิดีโอไปยังเซิร์ฟเวอร์อื่น

ฉันจะทราบด้วยว่าการสร้างโครงการนี้สามารถสร้างได้โดยไม่ต้องใช้ Arduino ส่วนประกอบทั้งหมด (รีเลย์, LDR, PIR) สามารถเชื่อมต่อกับ raspberry pi ด้วยวิธีใดวิธีหนึ่ง แต่ฉันชอบไมโครคอนโทรลเลอร์แบบเรียลไทม์มากกว่าเพื่อโต้ตอบกับเซ็นเซอร์และอุปกรณ์ส่งออก ในกรณีที่ราสเบอร์รี่ pi ของฉันค้างหรือพัง การควบคุมแสงที่ดำเนินการโดย Arduino ก็ใช้ได้ดี

หากคุณชอบคำแนะนำนี้คอยติดตามในขณะที่ฉันจะทำซีรีส์ต่อด้วยกล้องโดมราสเบอร์รี่ pi Zero 360 องศากลางแจ้งในปีหน้า

แนะนำ: