คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ในปัจจุบัน ต้องขอบคุณการพัฒนาอย่างรวดเร็วของไมโครอิเล็กทรอนิกส์ ช่องทางการสื่อสาร เทคโนโลยีอินเทอร์เน็ต และปัญญาประดิษฐ์ หัวข้อเรื่องบ้านอัจฉริยะจึงมีความเกี่ยวข้องมากขึ้นเรื่อยๆ ที่อยู่อาศัยของมนุษย์ได้รับการเปลี่ยนแปลงที่สำคัญนับตั้งแต่ยุคหินและในยุคการปฏิวัติอุตสาหกรรม 4.0 และอินเทอร์เน็ตของสรรพสิ่ง ที่อยู่อาศัยได้กลายเป็นความสะดวกสบาย ใช้งานได้จริง และปลอดภัย โซลูชันกำลังออกสู่ตลาดโดยเปลี่ยนอพาร์ทเมนต์หรือบ้านในชนบทให้กลายเป็นระบบข้อมูลที่ซับซ้อนซึ่งควบคุมได้จากทุกที่ในโลกโดยใช้สมาร์ทโฟน ยิ่งไปกว่านั้น การโต้ตอบระหว่างมนุษย์กับเครื่องจักรไม่จำเป็นต้องมีความรู้เกี่ยวกับภาษาการเขียนโปรแกรมอีกต่อไป - ต้องขอบคุณอัลกอริธึมการรู้จำเสียงและการสังเคราะห์คำพูดที่ทำให้ผู้คนพูดกับบ้านอัจฉริยะในภาษาแม่ของตนได้

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

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

อุปกรณ์บ้านอัจฉริยะ

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

  1. เซ็นเซอร์ที่วัดพารามิเตอร์ด้านสิ่งแวดล้อมต่างๆ
  2. แอคทูเอเตอร์ที่กระทำต่อวัตถุภายนอก
  3. ตัวควบคุมที่ทำการคำนวณตามการวัดเซ็นเซอร์และลอจิกแบบฝัง และออกคำสั่งไปยังแอคชูเอเตอร์

รูปต่อไปนี้แสดงแผนภาพของบ้านอัจฉริยะ ซึ่งมีเซ็นเซอร์สำหรับน้ำรั่ว (1) ในห้องน้ำ อุณหภูมิ (2) และแสงสว่าง (3) ในห้องนอน ปลั๊กไฟอัจฉริยะ (4) ในห้องครัว และ กล้องวงจรปิด (5) ในโถงทางเดิน

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ปัจจุบันมีการใช้เซ็นเซอร์ไร้สายที่ทำงานโดยใช้โปรโตคอล RF433, Z-Wave, ZigBee, Bluetooth และ WiFi กันอย่างแพร่หลาย ข้อได้เปรียบหลักคือความง่ายในการติดตั้งและใช้งานตลอดจนต้นทุนและความน่าเชื่อถือต่ำเพราะว่า ผู้ผลิตมุ่งมั่นที่จะนำอุปกรณ์ของตนออกสู่ตลาดมวลชนและทำให้ผู้ใช้ทั่วไปสามารถเข้าถึงได้

ตามกฎแล้วเซ็นเซอร์และแอคทูเอเตอร์จะเชื่อมต่อผ่านอินเทอร์เฟซไร้สายกับตัวควบคุมบ้านอัจฉริยะ (6) ซึ่งเป็นไมโครคอมพิวเตอร์เฉพาะที่รวมอุปกรณ์เหล่านี้ทั้งหมดไว้ในเครือข่ายเดียวและควบคุมอุปกรณ์เหล่านั้น

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

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

ตัวควบคุมบ้านอัจฉริยะ

ตัวควบคุมสำหรับระบบคลาวด์สมาร์ทโฮมที่กล่าวถึงในบทความนี้ได้รับการพัฒนาโดยใช้ไมโครคอมพิวเตอร์บอร์ดเดี่ยว ราสเบอร์รี่ Pi 3 รุ่น B+ซึ่งเปิดตัวในเดือนมีนาคม 2018 และมีทรัพยากรและประสิทธิภาพเพียงพอสำหรับงานบ้านอัจฉริยะ ประกอบด้วยโปรเซสเซอร์ Quad-Core Cortex-A53 ที่ใช้สถาปัตยกรรม ARMv64-A 8 บิต โอเวอร์คล็อกที่ 1.4 GHz รวมถึง RAM 1 GB, Wi-Fi 802.11ac, Bluetooth 4.2 และอะแดปเตอร์ gigabit Ethernet ที่ทำงานผ่าน USB 2.0 .

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

การประกอบคอนโทรลเลอร์นั้นง่ายมาก - ติดตั้งไมโครคอมพิวเตอร์ (1) ในกล่องพลาสติก (2) จากนั้นการ์ดหน่วยความจำ 8 GB ในรูปแบบ microSD พร้อมซอฟต์แวร์ (3) และติดตั้งตัวควบคุมเครือข่าย USB Z-Wave (4) ช่องที่สอดคล้องกัน ตัวควบคุมบ้านอัจฉริยะเชื่อมต่อกับแหล่งจ่ายไฟผ่านอะแดปเตอร์จ่ายไฟ 5V, 2.1A (5) และสาย USB - micro-USB (6) ตัวควบคุมแต่ละตัวมีหมายเลขประจำตัวที่ไม่ซ้ำกัน ซึ่งเขียนไว้ในไฟล์การกำหนดค่าเมื่อเปิดตัวครั้งแรก และจำเป็นสำหรับการโต้ตอบกับบริการบ้านอัจฉริยะบนคลาวด์

ซอฟต์แวร์ตัวควบคุมบ้านอัจฉริยะได้รับการพัฒนาโดยผู้เขียนบทความนี้ตามระบบปฏิบัติการ Linux Raspbian ยืด. ประกอบด้วยระบบย่อยหลักดังต่อไปนี้:

  • กระบวนการเซิร์ฟเวอร์สำหรับการโต้ตอบกับอุปกรณ์สมาร์ทโฮมและระบบคลาวด์
  • ส่วนต่อประสานกราฟิกกับผู้ใช้สำหรับการตั้งค่าการกำหนดค่าและพารามิเตอร์การทำงานของคอนโทรลเลอร์
  • ฐานข้อมูลสำหรับจัดเก็บการกำหนดค่าคอนโทรลเลอร์

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ฐานข้อมูล ตัวควบคุมบ้านอัจฉริยะมีการใช้งานตาม DBMS ที่ฝังอยู่ SQLite และเป็นไฟล์ในการ์ด SD พร้อมซอฟต์แวร์ระบบ โดยทำหน้าที่เป็นที่จัดเก็บข้อมูลสำหรับการกำหนดค่าคอนโทรลเลอร์ - ข้อมูลเกี่ยวกับอุปกรณ์ที่เชื่อมต่อและสถานะปัจจุบัน บล็อกของกฎการผลิตเชิงตรรกะ ตลอดจนข้อมูลที่ต้องมีการสร้างดัชนี (เช่น ชื่อไฟล์ของไฟล์วิดีโอในเครื่อง) เมื่อรีบูตคอนโทรลเลอร์ ข้อมูลนี้จะถูกบันทึกไว้ ทำให้สามารถกู้คืนคอนโทรลเลอร์ได้ในกรณีที่ไฟฟ้าขัดข้อง

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

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)

หน้าที่หลักของอินเทอร์เฟซแบบกราฟิกคือการเชื่อมต่ออุปกรณ์สมาร์ทโฮม (กล้องวงจรปิดและเซ็นเซอร์ IP) เข้ากับคอนโทรลเลอร์ เว็บแอปพลิเคชันจะอ่านการกำหนดค่าและสถานะปัจจุบันของคอนโทรลเลอร์และอุปกรณ์ที่เชื่อมต่อจากฐานข้อมูล SQLite หากต้องการเปลี่ยนการกำหนดค่าคอนโทรลเลอร์ จะส่งคำสั่งควบคุมในรูปแบบ JSON ผ่านอินเทอร์เฟซ RESTful API ของกระบวนการเซิร์ฟเวอร์

กระบวนการเซิร์ฟเวอร์

กระบวนการเซิร์ฟเวอร์ - องค์ประกอบสำคัญที่ดำเนินงานหลักทั้งหมดเกี่ยวกับกระบวนการข้อมูลอัตโนมัติที่เป็นพื้นฐานของสมาร์ทโฮม: การรับและประมวลผลข้อมูลทางประสาทสัมผัส การออกการดำเนินการควบคุมขึ้นอยู่กับตรรกะที่ฝังตัว วัตถุประสงค์ของกระบวนการเซิร์ฟเวอร์คือการโต้ตอบกับอุปกรณ์สมาร์ทโฮม ดำเนินการกฎลอจิคัลการผลิต รับและประมวลผลคำสั่งจากอินเทอร์เฟซแบบกราฟิกและคลาวด์ กระบวนการเซิร์ฟเวอร์ในตัวควบคุมบ้านอัจฉริยะที่อยู่ระหว่างการพิจารณานั้นถูกนำไปใช้เป็นแอปพลิเคชันแบบมัลติเธรดที่พัฒนาใน C ++ และเปิดตัวเป็นบริการแยกต่างหาก systemd ระบบปฏิบัติการ ลินุกซ์ ราสเบียน.

บล็อกหลักของกระบวนการเซิร์ฟเวอร์คือ:

  1. ผู้จัดการข้อความ;
  2. เซิร์ฟเวอร์กล้อง IP;
  3. เซิร์ฟเวอร์อุปกรณ์ Z-Wave;
  4. เซิร์ฟเวอร์ของกฎตรรกะการผลิต
  5. ฐานข้อมูลการกำหนดค่าตัวควบคุมและบล็อกของกฎตรรกะ
  6. เซิร์ฟเวอร์ RESTful API สำหรับการโต้ตอบกับส่วนต่อประสานกราฟิก
  7. ไคลเอนต์ MQTT สำหรับการโต้ตอบกับคลาวด์

บล็อกกระบวนการเซิร์ฟเวอร์ถูกนำมาใช้เป็นเธรดแยกกัน ข้อมูลระหว่างนั้นจะถูกถ่ายโอนในรูปแบบของข้อความในรูปแบบ JSON (หรือโครงสร้างข้อมูลที่แสดงถึงรูปแบบนี้ในหน่วยความจำกระบวนการ)

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

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

ประเภทอุปกรณ์
โปรโตคอล
ประเภทข้อความ
สถานะอุปกรณ์
คำสั่ง

ห้อง
ออนวิฟ
เซ็นเซอร์ข้อมูล
on
สตรีมมิ่ง (เปิด/ปิด)

เซ็นเซอร์
ซเวฟ
คำสั่ง
ปิด
การบันทึก (เปิด/ปิด)

effector
mqt
ธุรกิจLogicRule
สตรีมมิ่ง (เปิด/ปิด)
อุปกรณ์(เพิ่ม/ลบ)

ธุรกิจลอจิก
configurationData
การบันทึก (เปิด/ปิด)

บลูทู ธ
สถานะอุปกรณ์
ความผิดพลาด

อินเตอร์เน็ตไร้สาย

rf

ตัวอย่างเช่น ข้อความจากตัวตรวจจับความเคลื่อนไหวของกล้องจะมีลักษณะดังนี้:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566293475475",
	"clientType": "gateway",
	"deviceId": "1616453d-30cd-44b7-9bf0-************",
	"deviceType": "camera",
	"protocol": "onvif",
	"messageType": "sensorData",
	"sensorType": "camera",
	"label": "motionDetector",
	"sensorData": "on"
}

ตรรกะการผลิต

ในการรับหรือส่งข้อความจากผู้ส่ง บล็อกกระบวนการของเซิร์ฟเวอร์จะสมัครรับข้อความบางประเภท การสมัครสมาชิกเป็นกฎตรรกะการใช้งานจริงของประเภท “ถ้า...ถ้าอย่างนั้น...”นำเสนอในรูปแบบ JSON และลิงก์ไปยังตัวจัดการข้อความภายในบล็อกกระบวนการเซิร์ฟเวอร์ ตัวอย่างเช่น หากต้องการอนุญาตให้เซิร์ฟเวอร์กล้อง IP รับคำสั่งจาก GUI และคลาวด์ คุณต้องเพิ่มกฎต่อไปนี้:

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

หากเป็นไปตามเงื่อนไขที่กำหนดไว้ใน มาก่อน (ด้านซ้าย) กฎเป็นจริงก็พอใจแล้ว ผลที่ตามมา (ด้านขวา) และตัวจัดการจะเข้าถึงเนื้อหาของข้อความ JSON ได้ ก่อนหน้านี้รองรับตัวดำเนินการเชิงตรรกะที่เปรียบเทียบคู่คีย์-ค่า JSON:

  1. เท่ากับ "เท่ากัน";
  2. ไม่เท่ากับ "not_equal";
  3. น้อยกว่า "น้อยกว่า";
  4. มากขึ้น "มากขึ้น";
  5. น้อยกว่าหรือเท่ากับ "less_or_equal";
  6. มากกว่าหรือเท่ากับ "greater_or_equal"

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

  1. และ "และ"
  2. หรือ "หรือ";
  3. ไม่ใช่ "ไม่"

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

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

เมื่อใช้แอปพลิเคชันบนมือถือ ผู้ใช้จะสร้างสถานการณ์ตามที่สมาร์ทโฮมควรทำงาน ตัวอย่างเช่น: “หากเซ็นเซอร์เปิดประตูหน้าทำงานให้เปิดไฟบริเวณโถงทางเดิน”. แอปพลิเคชันอ่านตัวระบุของเซ็นเซอร์ (เซ็นเซอร์เปิด) และแอคทูเอเตอร์ (ซ็อกเก็ตอัจฉริยะหรือหลอดไฟอัจฉริยะ) จากฐานข้อมูลและสร้างกฎตรรกะในรูปแบบ JSON ซึ่งถูกส่งไปยังตัวควบคุมบ้านอัจฉริยะ กลไกนี้จะกล่าวถึงรายละเอียดเพิ่มเติมในบทความที่สามของซีรี่ส์ของเรา ซึ่งเราจะพูดถึงแอปพลิเคชันไคลเอนต์สำหรับการจัดการบ้านอัจฉริยะ

กลไกลอจิกการผลิตที่กล่าวถึงข้างต้นถูกนำไปใช้โดยใช้ไลบรารี RapidJSON — ตัวแยกวิเคราะห์ SAX สำหรับรูปแบบ JSON ในภาษา C++ การอ่านและการแยกวิเคราะห์อาร์เรย์ของกฎการผลิตตามลำดับทำให้คุณสามารถใช้ฟังก์ชันการเปรียบเทียบข้อมูลภายในสิ่งที่กล่าวมาก่อนหน้านี้ได้อย่างง่ายดาย:

void CRuleEngine::Process(PProperties pFact)
{
    m_pActions->clear();

    rapidjson::Reader   reader;
    for(TStringMap::value_type& rRule : m_Rules)
    {
        std::string sRuleId   = rRule.first;
        std::string sRuleBody = rRule.second;

        CRuleHandler            ruleHandler(pFact);
        rapidjson::StringStream ruleStream(sRuleBody.c_str());
        rapidjson::ParseResult  parseResult = reader.Parse(ruleStream, ruleHandler);
        if(!parseResult)
        {
            m_Logger.LogMessage(
                        NLogger2::ePriorityLevelError,
                        std::string("JSON parse error"),
                        "CRuleEngine::Process()",
                        std::string("RuleId: ") + sRuleId);
        }

        PProperties pAction = ruleHandler.GetAction();
        if(pAction)
        {
            pAction->Set("ruleId", sRuleId);
            m_pActions->push_back(pAction);
        }
    }
}

ที่นี่ pFact - โครงสร้างที่มีคู่คีย์-ค่าจากข้อความ JSON m_กฎ — อาร์เรย์สตริงของกฎการผลิต การเปรียบเทียบข้อความขาเข้าและกฎการผลิตจะดำเนินการในฟังก์ชัน reader.Parse (ruleStream, RuleHandler)ที่ไหน กฎHandler เป็นอ็อบเจ็กต์ที่มีตรรกะของบูลีนและตัวดำเนินการเปรียบเทียบ sRuleId — ตัวระบุกฎเฉพาะ ซึ่งทำให้สามารถจัดเก็บและแก้ไขกฎภายในฐานข้อมูลตัวควบคุมบ้านอัจฉริยะได้ m_pการดำเนินการ — อาร์เรย์ที่มีผลลัพธ์ของการอนุมานเชิงตรรกะ: ข้อความ JSON ที่มีผลสืบเนื่องจากฐานกฎและส่งเพิ่มเติมไปยังตัวจัดการข้อความเพื่อให้เธรดสมาชิกสามารถประมวลผลได้

ประสิทธิภาพของ RapidJSON เทียบได้กับฟังก์ชันนี้ สเตรเลน()และข้อกำหนดทรัพยากรระบบขั้นต่ำอนุญาตให้ใช้ไลบรารีนี้ในอุปกรณ์ฝังตัว การใช้ข้อความและกฎเชิงตรรกะในรูปแบบ JSON ช่วยให้คุณใช้ระบบการแลกเปลี่ยนข้อมูลที่ยืดหยุ่นระหว่างส่วนประกอบทั้งหมดของตัวควบคุมบ้านอัจฉริยะ

เซ็นเซอร์ Z-Wave และแอคชูเอเตอร์

ข้อได้เปรียบหลักของบ้านอัจฉริยะคือสามารถวัดพารามิเตอร์ต่างๆ ของสภาพแวดล้อมภายนอกได้อย่างอิสระและทำหน้าที่ที่มีประโยชน์ขึ้นอยู่กับสถานการณ์ ในการดำเนินการนี้ เซ็นเซอร์และแอคทูเอเตอร์จะเชื่อมต่อกับตัวควบคุมบ้านอัจฉริยะ ในเวอร์ชันปัจจุบัน อุปกรณ์เหล่านี้เป็นอุปกรณ์ไร้สายที่ทำงานโดยใช้โปรโตคอล Z-คลื่น บนความถี่ที่จัดสรรเป็นพิเศษ 869 MHz สำหรับรัสเซีย ในการใช้งาน พวกมันจะรวมกันเป็นเครือข่ายแบบตาข่ายซึ่งมีตัวทวนสัญญาณเพื่อเพิ่มพื้นที่ครอบคลุม อุปกรณ์ยังมีโหมดประหยัดพลังงานพิเศษ - ใช้เวลาส่วนใหญ่ในโหมดสลีปและส่งข้อมูลเฉพาะเมื่อสถานะเปลี่ยนแปลงซึ่งสามารถยืดอายุการใช้งานของแบตเตอรี่ในตัวได้อย่างมาก

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ขณะนี้คุณสามารถค้นหาอุปกรณ์ Z-Wave ที่แตกต่างกันได้จำนวนมากในตลาด ลองมาดูตัวอย่างบางส่วน:

  1. ซ็อกเก็ตอัจฉริยะ Zipato PAN16 สามารถวัดพารามิเตอร์ต่อไปนี้: ปริมาณการใช้ไฟฟ้า (kWh) กำลัง (W) แรงดันไฟฟ้า (V) และกระแส (A) ในเครือข่ายไฟฟ้า นอกจากนี้ยังมีสวิตช์ในตัวซึ่งคุณสามารถควบคุมเครื่องใช้ไฟฟ้าที่เชื่อมต่ออยู่
  2. เซ็นเซอร์ตรวจจับการรั่วของ Neo Coolcam ตรวจจับว่ามีของเหลวที่หกรั่วไหลโดยการปิดหน้าสัมผัสของโพรบระยะไกล
  3. เซ็นเซอร์ควัน Zipato PH-PSG01 จะทำงานเมื่ออนุภาคควันเข้าไปในห้องวิเคราะห์ก๊าซ
  4. เซ็นเซอร์ตรวจจับความเคลื่อนไหว Neo Coolcam วิเคราะห์รังสีอินฟราเรดของร่างกายมนุษย์ นอกจากนี้ยังมีเซ็นเซอร์วัดแสง (Lx);
  5. มัลติเซนเซอร์ Philio PST02-A วัดอุณหภูมิ (°C), แสง (%), การเปิดประตู, การมีคนอยู่ในห้อง;
  6. Z-Wave USB Stick ตัวควบคุมเครือข่าย ZME E UZB1 ซึ่งเชื่อมต่อกับเซ็นเซอร์

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

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ในกระบวนการเซิร์ฟเวอร์ตัวควบคุมบ้านอัจฉริยะที่กล่าวถึงในย่อหน้าก่อนหน้า เซิร์ฟเวอร์ Z-Wave มีหน้าที่รับผิดชอบในการโต้ตอบกับอุปกรณ์ Z-Wave ใช้ไลบรารีเพื่อรับข้อมูลจากเซ็นเซอร์ OpenZWave ใน C++ ซึ่งมีอินเทอร์เฟซสำหรับการโต้ตอบกับคอนโทรลเลอร์ USB เครือข่าย Z-Wave และทำงานร่วมกับเซ็นเซอร์และแอคทูเอเตอร์ที่หลากหลาย ค่าของพารามิเตอร์สภาพแวดล้อมที่วัดโดยเซ็นเซอร์จะถูกบันทึกโดยเซิร์ฟเวอร์ Z-Wave ในรูปแบบของข้อความ JSON:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566479791290",
	"clientType": "gateway",
	"deviceId": "20873eb0-dd5e-4213-a175-************",
	"deviceType": "sensor",
	"protocol": "zwave",
	"messageType": "sensorData",
	"homeId": "0xefa0cfa7",
	"nodeId": "20",
	"sensorType": "METER",
	"label": "Voltage",
	"sensorData": "229.3",
	"units": "V"
}

จากนั้นจะถูกส่งต่อไปยังตัวจัดการข้อความของกระบวนการเซิร์ฟเวอร์เพื่อให้เธรดสมาชิกสามารถรับได้ ผู้สมัครสมาชิกหลักคือเซิร์ฟเวอร์ตรรกะที่ใช้งานจริงซึ่งตรงกับค่าฟิลด์ข้อความในส่วนก่อนหน้าของกฎตรรกะ ผลลัพธ์การอนุมานที่มีคำสั่งควบคุมจะถูกส่งกลับไปยังตัวจัดการข้อความ จากนั้นไปที่เซิร์ฟเวอร์ Z-Wave ซึ่งจะถอดรหัสและส่งไปยังตัวควบคุม USB เครือข่าย Z-Wave จากนั้นพวกเขาก็เข้าไปในแอคชูเอเตอร์ซึ่งเปลี่ยนสถานะของวัตถุด้านสิ่งแวดล้อมและบ้านอัจฉริยะจึงทำงานที่เป็นประโยชน์

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)

การเชื่อมต่ออุปกรณ์ Z-Wave ทำได้ในส่วนต่อประสานกราฟิกของตัวควบคุมบ้านอัจฉริยะ ในการดำเนินการนี้ให้ไปที่หน้ารายการอุปกรณ์แล้วคลิกปุ่ม "เพิ่ม" คำสั่ง add ผ่านอินเทอร์เฟซ RESTful API จะเข้าสู่กระบวนการเซิร์ฟเวอร์ จากนั้นตัวจัดการข้อความจะส่งไปยังเซิร์ฟเวอร์ Z-Wave ซึ่งทำให้ตัวควบคุม USB เครือข่าย Z-Wave เข้าสู่โหมดพิเศษสำหรับการเพิ่มอุปกรณ์ ถัดไปบนอุปกรณ์ Z-Wave คุณต้องกดปุ่มบริการอย่างรวดเร็วหลายครั้ง (กด 3 ครั้งภายใน 1,5 วินาที) คอนโทรลเลอร์ USB เชื่อมต่ออุปกรณ์กับเครือข่ายและส่งข้อมูลเกี่ยวกับอุปกรณ์ไปยังเซิร์ฟเวอร์ Z-Wave ในทางกลับกันจะสร้างรายการใหม่ในฐานข้อมูล SQLite พร้อมพารามิเตอร์ของอุปกรณ์ใหม่ หลังจากช่วงเวลาที่กำหนด อินเทอร์เฟซแบบกราฟิกจะกลับไปที่หน้ารายการอุปกรณ์ Z-Wave อ่านข้อมูลจากฐานข้อมูล และแสดงอุปกรณ์ใหม่ในรายการ อุปกรณ์แต่ละชิ้นจะได้รับตัวระบุเฉพาะของตัวเอง ซึ่งใช้ในกฎการอนุมานการผลิตและเมื่อทำงานในระบบคลาวด์ การทำงานของอัลกอริทึมนี้แสดงในแผนภาพ UML:

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)

การเชื่อมต่อกล้อง IP

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

สำหรับระบบกล้องวงจรปิดวิดีโอบนคลาวด์ ปัญหาเฉียบพลันประการหนึ่งคือการมีอุปกรณ์ให้เลือกอย่างจำกัดซึ่งสามารถดำเนินการบูรณาการได้ ซอฟต์แวร์ที่รับผิดชอบในการเชื่อมต่อกับคลาวด์ได้รับการติดตั้งภายในกล้องวิดีโอ ซึ่งทำให้มีความต้องการฮาร์ดแวร์อย่างจริงจังในทันที - โปรเซสเซอร์และจำนวนหน่วยความจำว่าง สิ่งนี้อธิบายราคากล้องวงจรปิดระบบคลาวด์ที่สูงกว่าเป็นหลักเมื่อเปรียบเทียบกับกล้อง IP ทั่วไป นอกจากนี้ จำเป็นต้องมีการเจรจากับบริษัทผู้ผลิตกล้องวงจรปิดเป็นระยะเวลานานเพื่อเข้าถึงระบบไฟล์ของกล้องและเครื่องมือในการพัฒนาที่จำเป็นทั้งหมด

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

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

โปรโตคอลที่ได้รับความนิยมมากที่สุดสำหรับระบบกล้องวงจรปิดแบบ IP ซึ่งได้รับการสนับสนุนโดยผู้ผลิตกล้อง IP ทุกรายโดยไม่มีข้อยกเว้นคือ ONVIF โปรไฟล์ Sซึ่งมีข้อกำหนดอยู่ในภาษาคำอธิบายบริการเว็บ wsdl. การใช้ยูทิลิตี้จากชุดเครื่องมือ gSOAP เป็นไปได้ที่จะสร้างซอร์สโค้ดสำหรับบริการที่ทำงานร่วมกับกล้อง IP:

$ wsdl2h -o onvif.h 
	https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 
	https://www.onvif.org/ver10/events/wsdl/event.wsdl 
	https://www.onvif.org/ver10/media/wsdl/media.wsdl 
	https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h

ด้วยเหตุนี้ เราจึงได้รับชุดส่วนหัว “*.h” และไฟล์ต้นฉบับ “*.cpp” ในภาษา C++ ซึ่งสามารถวางลงในแอปพลิเคชันหรือไลบรารีแยกต่างหากได้โดยตรง และคอมไพล์โดยใช้คอมไพเลอร์ GCC เนื่องจากมีฟังก์ชันมากมาย โค้ดจึงมีขนาดใหญ่และต้องมีการปรับให้เหมาะสมเพิ่มเติม ไมโครคอมพิวเตอร์ Raspberry Pi 3 รุ่น B+ มีประสิทธิภาพเพียงพอในการรันโค้ดนี้ แต่หากจำเป็นต้องย้ายโค้ดไปยังแพลตฟอร์มอื่น จำเป็นต้องเลือกสถาปัตยกรรมโปรเซสเซอร์และทรัพยากรระบบที่ถูกต้อง

กล้อง IP ที่รองรับมาตรฐาน ONVIF เมื่อใช้งานบนเครือข่ายท้องถิ่นจะเชื่อมต่อกับกลุ่มมัลติคาสต์พิเศษพร้อมที่อยู่ 239.255.255.250. มีระเบียบการ WS- การค้นพบซึ่งช่วยให้คุณค้นหาอุปกรณ์บนเครือข่ายท้องถิ่นได้โดยอัตโนมัติ

อินเทอร์เฟซแบบกราฟิกของตัวควบคุมบ้านอัจฉริยะใช้ฟังก์ชันค้นหากล้อง IP ใน PHP ซึ่งสะดวกมากเมื่อโต้ตอบกับบริการเว็บผ่านข้อความ XML เมื่อเลือกรายการเมนู อุปกรณ์ > กล้อง IP > การสแกน เปิดตัวอัลกอริธึมการค้นหากล้อง IP โดยแสดงผลลัพธ์ในรูปแบบตาราง:

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)

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

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

จากนั้น ข้อความจะถูกสร้างขึ้นในรูปแบบ JSON ซึ่งมีพารามิเตอร์ทั้งหมดของกล้องที่เพิ่ม และส่งไปยังกระบวนการเซิร์ฟเวอร์ของตัวควบคุมสมาร์ทโฮมผ่านคำสั่ง RESTful API โดยที่พารามิเตอร์ของกล้องจะถูกถอดรหัสและบันทึกในฐานข้อมูล SQLite ภายใน และ ยังใช้เพื่อเรียกใช้เธรดการประมวลผลต่อไปนี้:

  1. การสร้างการเชื่อมต่อ RTSP เพื่อรับสตรีมวิดีโอและเสียง
  2. การแปลงรหัสเสียงจากรูปแบบ G.711 mu-Law, G.711 A-Law, G.723 ฯลฯ เป็นรูปแบบ AAC;
  3. แปลงรหัสสตรีมวิดีโอในรูปแบบ H.264 และเสียงในรูปแบบ AAC ลงในคอนเทนเนอร์ FLV และส่งไปยังคลาวด์ผ่านโปรโตคอล RTMP
  4. สร้างการเชื่อมต่อกับจุดสิ้นสุดของเครื่องตรวจจับความเคลื่อนไหวของกล้อง IP ผ่านโปรโตคอล ONVIF และทำการสำรวจเป็นระยะ
  5. สร้างภาพตัวอย่างขนาดย่อเป็นระยะและส่งไปยังคลาวด์ผ่านโปรโตคอล MQTT
  6. การบันทึกวิดีโอและเสียงสตรีมในเครื่องในรูปแบบไฟล์แยกกันในรูปแบบ MP4 ลงในการ์ด SD หรือ Flash ของตัวควบคุมบ้านอัจฉริยะ

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ในการสร้างการเชื่อมต่อกับกล้อง แปลงรหัส ประมวลผลและบันทึกวิดีโอสตรีมในกระบวนการเซิร์ฟเวอร์ จะใช้ฟังก์ชันจากไลบรารี FFmpeg 4.1.0.

ในการทดลองทดสอบประสิทธิภาพ กล้อง 3 ตัวเชื่อมต่อกับคอนโทรลเลอร์:

  1. HiWatch DS-I114W (ความละเอียด - 720p, รูปแบบการบีบอัด - H.264, บิตเรต - 1 Mb/s, เสียง G.711 mu-Law);
  2. ไมโครดิจิทัล MDC-M6290FTD-1 (ความละเอียด - 1080p, รูปแบบการบีบอัด - H.264, บิตเรต - 1 Mb/s, ไม่มีเสียง);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (ความละเอียด - 1080p, รูปแบบการบีบอัด - H.264, บิตเรต - 1.5 Mb/s, เสียง AAC)

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

สตรีมทั้งสามถูกส่งออกไปยังคลาวด์พร้อมกัน การแปลงรหัสเสียงดำเนินการจากกล้องเพียงตัวเดียว และการบันทึกไฟล์เก็บถาวรในเครื่องถูกปิดใช้งาน โหลด CPU อยู่ที่ประมาณ 5% การใช้งาน RAM อยู่ที่ 32 MB (ต่อกระบวนการ) 56 MB (ทั้งหมดรวมระบบปฏิบัติการ)

ดังนั้นจึงสามารถเชื่อมต่อกล้องประมาณ 20 - 30 ตัวกับตัวควบคุมบ้านอัจฉริยะ (ขึ้นอยู่กับความละเอียดและบิตเรต) ซึ่งเพียงพอสำหรับระบบกล้องวงจรปิดสำหรับกระท่อมสามชั้นหรือโกดังขนาดเล็ก สำหรับงานที่ต้องการประสิทธิภาพที่สูงกว่า คุณสามารถใช้เน็ตท็อปที่มีโปรเซสเซอร์ Intel แบบมัลติคอร์และ Linux Debian Sarge OS ขณะนี้คอนโทรลเลอร์อยู่ระหว่างการดำเนินการทดลองใช้งาน และข้อมูลเกี่ยวกับประสิทธิภาพของคอนโทรลเลอร์จะได้รับการอัปเดต

การโต้ตอบกับคลาวด์

บ้านอัจฉริยะบนคลาวด์จัดเก็บข้อมูลผู้ใช้ (การวัดวิดีโอและเซ็นเซอร์) ไว้ในคลาวด์ สถาปัตยกรรมของที่เก็บข้อมูลบนคลาวด์จะมีการกล่าวถึงโดยละเอียดในบทความถัดไปในชุดของเรา ตอนนี้เรามาพูดถึงอินเทอร์เฟซสำหรับการส่งข้อความข้อมูลจากตัวควบคุมสมาร์ทโฮมไปยังคลาวด์

สถานะของอุปกรณ์ที่เชื่อมต่อและการวัดเซ็นเซอร์จะถูกส่งผ่านโปรโตคอล MQTTซึ่งมักใช้ในโครงการ Internet of Things เนื่องจากความเรียบง่ายและประสิทธิภาพการใช้พลังงาน MQTT ใช้โมเดลไคลเอนต์-เซิร์ฟเวอร์ โดยที่ลูกค้าสมัครรับหัวข้อเฉพาะภายในโบรกเกอร์และเผยแพร่ข้อความของพวกเขา นายหน้าส่งข้อความถึงสมาชิกทุกคนตามกฎที่กำหนดโดยระดับ QoS (คุณภาพการบริการ):

  • QoS 0 - สูงสุดหนึ่งครั้ง (ไม่มีการรับประกันการจัดส่ง);
  • QoS 1 - อย่างน้อยหนึ่งครั้ง (พร้อมการยืนยันการจัดส่ง)
  • QoS 2 - หนึ่งครั้ง (พร้อมการยืนยันการจัดส่งเพิ่มเติม)

ในกรณีของเราเราใช้ ยุงคราส. ชื่อหัวข้อคือตัวระบุเฉพาะของตัวควบคุมบ้านอัจฉริยะ ไคลเอนต์ MQTT ภายในกระบวนการเซิร์ฟเวอร์สมัครรับหัวข้อนี้และแปลข้อความ JSON ที่มาจากตัวจัดการข้อความไปเป็นหัวข้อนี้ ในทางกลับกัน ข้อความจากนายหน้า MQTT จะถูกส่งต่อไปยังตัวจัดการข้อความ ซึ่งจะมัลติเพล็กซ์ไปยังสมาชิกภายในกระบวนการเซิร์ฟเวอร์:

คลาวด์สมาร์ทโฮม ส่วนที่ 1: ตัวควบคุมและเซ็นเซอร์

ในการส่งข้อความเกี่ยวกับสถานะของตัวควบคุมบ้านอัจฉริยะ จะใช้กลไกของข้อความที่บันทึกไว้ ข้อความที่เก็บไว้ โปรโตคอล MQTT สิ่งนี้ช่วยให้คุณตรวจสอบเวลาของการเชื่อมต่อใหม่ได้อย่างถูกต้องระหว่างไฟฟ้าขัดข้อง

ไคลเอนต์ MQTT ได้รับการพัฒนาตามการใช้งานห้องสมุด คราสพาโฮ ในภาษา C++

สตรีมสื่อ H.264 + AAC จะถูกส่งไปยังคลาวด์ผ่านโปรโตคอล RTMP โดยที่คลัสเตอร์ของเซิร์ฟเวอร์สื่อมีหน้าที่ในการประมวลผลและจัดเก็บสตรีมสื่อเหล่านั้น เพื่อกระจายโหลดในคลัสเตอร์อย่างเหมาะสมและเลือกเซิร์ฟเวอร์สื่อที่โหลดน้อยที่สุด ตัวควบคุมบ้านอัจฉริยะจะส่งคำขอเบื้องต้นไปยังโหลดบาลานเซอร์บนคลาวด์ และหลังจากนั้นจะส่งสตรีมสื่อเท่านั้น

ข้อสรุป

บทความนี้ตรวจสอบการใช้งานตัวควบคุมบ้านอัจฉริยะโดยเฉพาะอย่างหนึ่งโดยใช้ไมโครคอมพิวเตอร์ Raspberry Pi 3 B+ ซึ่งสามารถรับ ประมวลผลข้อมูล และอุปกรณ์ควบคุมผ่านโปรโตคอล Z-Wave โต้ตอบกับกล้อง IP ผ่านโปรโตคอล ONVIF และยังแลกเปลี่ยนข้อมูลและ คำสั่งด้วยบริการคลาวด์ผ่านโปรโตคอล MQTT และ RTMP กลไกลอจิกการผลิตได้รับการพัฒนาโดยอิงจากการเปรียบเทียบกฎตรรกะและข้อเท็จจริงที่นำเสนอในรูปแบบ JSON

ขณะนี้ตัวควบคุมสมาร์ทโฮมอยู่ระหว่างการทดลองใช้ที่สถานที่ต่างๆ ในมอสโกและภูมิภาคมอสโก

คอนโทรลเลอร์เวอร์ชันถัดไปวางแผนที่จะเชื่อมต่ออุปกรณ์ประเภทอื่น (RF, Bluetooth, WiFi, แบบมีสาย) เพื่อความสะดวกของผู้ใช้ ขั้นตอนการเชื่อมต่อเซ็นเซอร์และกล้อง IP จะถูกถ่ายโอนไปยังแอปพลิเคชันมือถือ นอกจากนี้ยังมีแนวคิดในการเพิ่มประสิทธิภาพโค้ดกระบวนการเซิร์ฟเวอร์และการย้ายซอฟต์แวร์ไปยังระบบปฏิบัติการ OpenWrt. วิธีนี้จะช่วยให้คุณประหยัดคอนโทรลเลอร์แยกต่างหากและถ่ายโอนฟังก์ชันการทำงานของบ้านอัจฉริยะไปยังเราเตอร์ในครัวเรือนทั่วไป

ที่มา: will.com

เพิ่มความคิดเห็น