ในปัจจุบัน ต้องขอบคุณการพัฒนาอย่างรวดเร็วของไมโครอิเล็กทรอนิกส์ ช่องทางการสื่อสาร เทคโนโลยีอินเทอร์เน็ต และปัญญาประดิษฐ์ หัวข้อเรื่องบ้านอัจฉริยะจึงมีความเกี่ยวข้องมากขึ้นเรื่อยๆ ที่อยู่อาศัยของมนุษย์ได้รับการเปลี่ยนแปลงที่สำคัญนับตั้งแต่ยุคหินและในยุคการปฏิวัติอุตสาหกรรม 4.0 และอินเทอร์เน็ตของสรรพสิ่ง ที่อยู่อาศัยได้กลายเป็นความสะดวกสบาย ใช้งานได้จริง และปลอดภัย โซลูชันกำลังออกสู่ตลาดโดยเปลี่ยนอพาร์ทเมนต์หรือบ้านในชนบทให้กลายเป็นระบบข้อมูลที่ซับซ้อนซึ่งควบคุมได้จากทุกที่ในโลกโดยใช้สมาร์ทโฟน ยิ่งไปกว่านั้น การโต้ตอบระหว่างมนุษย์กับเครื่องจักรไม่จำเป็นต้องมีความรู้เกี่ยวกับภาษาการเขียนโปรแกรมอีกต่อไป - ต้องขอบคุณอัลกอริธึมการรู้จำเสียงและการสังเคราะห์คำพูดที่ทำให้ผู้คนพูดกับบ้านอัจฉริยะในภาษาแม่ของตนได้
ระบบสมาร์ทโฮมบางระบบที่มีอยู่ในตลาดในปัจจุบันเป็นการพัฒนาเชิงตรรกะของระบบกล้องวงจรปิดผ่านวิดีโอบนคลาวด์ ซึ่งนักพัฒนาตระหนักถึงความต้องการโซลูชันที่ครอบคลุมไม่เพียงแต่สำหรับการตรวจสอบเท่านั้น แต่ยังรวมถึงการจัดการวัตถุระยะไกลด้วย
เรานำเสนอบทความสามชุดให้คุณทราบซึ่งจะบอกคุณเกี่ยวกับองค์ประกอบหลักทั้งหมดของระบบสมาร์ทโฮมบนคลาวด์ซึ่งพัฒนาโดยผู้เขียนเป็นการส่วนตัวและนำไปปฏิบัติ บทความแรกกล่าวถึงอุปกรณ์เทอร์มินัลไคลเอนต์ที่ติดตั้งภายในบ้านอัจฉริยะ บทความที่สองเกี่ยวกับสถาปัตยกรรมของระบบจัดเก็บข้อมูลบนคลาวด์และระบบประมวลผลข้อมูล และสุดท้าย บทความที่สามเกี่ยวกับแอปพลิเคชันไคลเอนต์สำหรับการจัดการระบบบนอุปกรณ์เคลื่อนที่และอุปกรณ์ที่อยู่กับที่
อุปกรณ์บ้านอัจฉริยะ
ก่อนอื่นเรามาพูดถึงวิธีสร้างบ้านอัจฉริยะจากอพาร์ทเมนต์เดชาหรือกระท่อมธรรมดา ในการดำเนินการนี้ตามกฎแล้วจำเป็นต้องวางอุปกรณ์ต่อไปนี้ไว้ในบ้าน:
- เซ็นเซอร์ที่วัดพารามิเตอร์ด้านสิ่งแวดล้อมต่างๆ
- แอคทูเอเตอร์ที่กระทำต่อวัตถุภายนอก
- ตัวควบคุมที่ทำการคำนวณตามการวัดเซ็นเซอร์และลอจิกแบบฝัง และออกคำสั่งไปยังแอคชูเอเตอร์
รูปต่อไปนี้แสดงแผนภาพของบ้านอัจฉริยะ ซึ่งมีเซ็นเซอร์สำหรับน้ำรั่ว (1) ในห้องน้ำ อุณหภูมิ (2) และแสงสว่าง (3) ในห้องนอน ปลั๊กไฟอัจฉริยะ (4) ในห้องครัว และ กล้องวงจรปิด (5) ในโถงทางเดิน
ปัจจุบันมีการใช้เซ็นเซอร์ไร้สายที่ทำงานโดยใช้โปรโตคอล RF433, Z-Wave, ZigBee, Bluetooth และ WiFi กันอย่างแพร่หลาย ข้อได้เปรียบหลักคือความง่ายในการติดตั้งและใช้งานตลอดจนต้นทุนและความน่าเชื่อถือต่ำเพราะว่า ผู้ผลิตมุ่งมั่นที่จะนำอุปกรณ์ของตนออกสู่ตลาดมวลชนและทำให้ผู้ใช้ทั่วไปสามารถเข้าถึงได้
ตามกฎแล้วเซ็นเซอร์และแอคทูเอเตอร์จะเชื่อมต่อผ่านอินเทอร์เฟซไร้สายกับตัวควบคุมบ้านอัจฉริยะ (6) ซึ่งเป็นไมโครคอมพิวเตอร์เฉพาะที่รวมอุปกรณ์เหล่านี้ทั้งหมดไว้ในเครือข่ายเดียวและควบคุมอุปกรณ์เหล่านั้น
อย่างไรก็ตาม โซลูชันบางอย่างสามารถรวมเซ็นเซอร์ แอคชูเอเตอร์ และตัวควบคุมเข้าด้วยกันได้ในเวลาเดียวกัน ตัวอย่างเช่น สามารถตั้งโปรแกรมปลั๊กอัจฉริยะให้เปิดหรือปิดตามกำหนดเวลาได้ และกล้องวิดีโอวงจรปิดบนคลาวด์ก็สามารถบันทึกวิดีโอตามสัญญาณตรวจจับความเคลื่อนไหวได้ ในกรณีที่ง่ายที่สุด คุณสามารถทำได้โดยไม่ต้องใช้ตัวควบคุมแยกต่างหาก แต่จำเป็นต้องมีการสร้างระบบที่ยืดหยุ่นสำหรับหลายสถานการณ์
ในการเชื่อมต่อตัวควบคุมบ้านอัจฉริยะกับเครือข่ายทั่วโลก คุณสามารถใช้เราเตอร์อินเทอร์เน็ตปกติ (7) ซึ่งกลายเป็นเครื่องใช้ในครัวเรือนทั่วไปในบ้านทุกหลังมายาวนาน มีข้อโต้แย้งอีกประการหนึ่งที่สนับสนุนตัวควบคุมบ้านอัจฉริยะ - หากการเชื่อมต่อกับอินเทอร์เน็ตขาดหายไป บ้านอัจฉริยะจะยังคงทำงานตามปกติด้วยบล็อกลอจิกที่จัดเก็บไว้ในตัวควบคุม ไม่ใช่ในบริการคลาวด์
ตัวควบคุมบ้านอัจฉริยะ
ตัวควบคุมสำหรับระบบคลาวด์สมาร์ทโฮมที่กล่าวถึงในบทความนี้ได้รับการพัฒนาโดยใช้ไมโครคอมพิวเตอร์บอร์ดเดี่ยว
การประกอบคอนโทรลเลอร์นั้นง่ายมาก - ติดตั้งไมโครคอมพิวเตอร์ (1) ในกล่องพลาสติก (2) จากนั้นการ์ดหน่วยความจำ 8 GB ในรูปแบบ microSD พร้อมซอฟต์แวร์ (3) และติดตั้งตัวควบคุมเครือข่าย USB Z-Wave (4) ช่องที่สอดคล้องกัน ตัวควบคุมบ้านอัจฉริยะเชื่อมต่อกับแหล่งจ่ายไฟผ่านอะแดปเตอร์จ่ายไฟ 5V, 2.1A (5) และสาย USB - micro-USB (6) ตัวควบคุมแต่ละตัวมีหมายเลขประจำตัวที่ไม่ซ้ำกัน ซึ่งเขียนไว้ในไฟล์การกำหนดค่าเมื่อเปิดตัวครั้งแรก และจำเป็นสำหรับการโต้ตอบกับบริการบ้านอัจฉริยะบนคลาวด์
ซอฟต์แวร์ตัวควบคุมบ้านอัจฉริยะได้รับการพัฒนาโดยผู้เขียนบทความนี้ตามระบบปฏิบัติการ Linux Raspbian ยืด. ประกอบด้วยระบบย่อยหลักดังต่อไปนี้:
- กระบวนการเซิร์ฟเวอร์สำหรับการโต้ตอบกับอุปกรณ์สมาร์ทโฮมและระบบคลาวด์
- ส่วนต่อประสานกราฟิกกับผู้ใช้สำหรับการตั้งค่าการกำหนดค่าและพารามิเตอร์การทำงานของคอนโทรลเลอร์
- ฐานข้อมูลสำหรับจัดเก็บการกำหนดค่าคอนโทรลเลอร์
ฐานข้อมูล ตัวควบคุมบ้านอัจฉริยะมีการใช้งานตาม DBMS ที่ฝังอยู่
ส่วนต่อประสานกราฟิก ตัวควบคุมบ้านอัจฉริยะที่พัฒนาใน PHP 7 โดยใช้ไมโครเฟรมเวิร์ก
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)
หน้าที่หลักของอินเทอร์เฟซแบบกราฟิกคือการเชื่อมต่ออุปกรณ์สมาร์ทโฮม (กล้องวงจรปิดและเซ็นเซอร์ IP) เข้ากับคอนโทรลเลอร์ เว็บแอปพลิเคชันจะอ่านการกำหนดค่าและสถานะปัจจุบันของคอนโทรลเลอร์และอุปกรณ์ที่เชื่อมต่อจากฐานข้อมูล SQLite หากต้องการเปลี่ยนการกำหนดค่าคอนโทรลเลอร์ จะส่งคำสั่งควบคุมในรูปแบบ JSON ผ่านอินเทอร์เฟซ RESTful API ของกระบวนการเซิร์ฟเวอร์
กระบวนการเซิร์ฟเวอร์
กระบวนการเซิร์ฟเวอร์ - องค์ประกอบสำคัญที่ดำเนินงานหลักทั้งหมดเกี่ยวกับกระบวนการข้อมูลอัตโนมัติที่เป็นพื้นฐานของสมาร์ทโฮม: การรับและประมวลผลข้อมูลทางประสาทสัมผัส การออกการดำเนินการควบคุมขึ้นอยู่กับตรรกะที่ฝังตัว วัตถุประสงค์ของกระบวนการเซิร์ฟเวอร์คือการโต้ตอบกับอุปกรณ์สมาร์ทโฮม ดำเนินการกฎลอจิคัลการผลิต รับและประมวลผลคำสั่งจากอินเทอร์เฟซแบบกราฟิกและคลาวด์ กระบวนการเซิร์ฟเวอร์ในตัวควบคุมบ้านอัจฉริยะที่อยู่ระหว่างการพิจารณานั้นถูกนำไปใช้เป็นแอปพลิเคชันแบบมัลติเธรดที่พัฒนาใน C ++ และเปิดตัวเป็นบริการแยกต่างหาก systemd ระบบปฏิบัติการ ลินุกซ์ ราสเบียน.
บล็อกหลักของกระบวนการเซิร์ฟเวอร์คือ:
- ผู้จัดการข้อความ;
- เซิร์ฟเวอร์กล้อง IP;
- เซิร์ฟเวอร์อุปกรณ์ Z-Wave;
- เซิร์ฟเวอร์ของกฎตรรกะการผลิต
- ฐานข้อมูลการกำหนดค่าตัวควบคุมและบล็อกของกฎตรรกะ
- เซิร์ฟเวอร์ RESTful API สำหรับการโต้ตอบกับส่วนต่อประสานกราฟิก
- ไคลเอนต์ MQTT สำหรับการโต้ตอบกับคลาวด์
บล็อกกระบวนการเซิร์ฟเวอร์ถูกนำมาใช้เป็นเธรดแยกกัน ข้อมูลระหว่างนั้นจะถูกถ่ายโอนในรูปแบบของข้อความในรูปแบบ JSON (หรือโครงสร้างข้อมูลที่แสดงถึงรูปแบบนี้ในหน่วยความจำกระบวนการ)
ส่วนประกอบหลักของกระบวนการเซิร์ฟเวอร์คือ ผู้จัดการข้อความซึ่งกำหนดเส้นทางข้อความ 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:
- เท่ากับ "เท่ากัน";
- ไม่เท่ากับ "not_equal";
- น้อยกว่า "น้อยกว่า";
- มากขึ้น "มากขึ้น";
- น้อยกว่าหรือเท่ากับ "less_or_equal";
- มากกว่าหรือเท่ากับ "greater_or_equal"
ผลลัพธ์การเปรียบเทียบสามารถเชื่อมโยงซึ่งกันและกันได้โดยใช้ตัวดำเนินการพีชคณิตแบบบูล:
- และ "และ"
- หรือ "หรือ";
- ไม่ใช่ "ไม่"
ดังนั้น ด้วยการเขียนตัวดำเนินการและตัวถูกดำเนินการในรูปแบบโปแลนด์ คุณสามารถสร้างเงื่อนไขที่ค่อนข้างซับซ้อนด้วยพารามิเตอร์จำนวนมากได้
กลไกเดียวกันทุกประการซึ่งอิงตามข้อความ JSON และกฎการผลิตในรูปแบบ JSON นั้นถูกใช้ในบล็อกเซิร์ฟเวอร์ลอจิกที่ใช้งานจริงเพื่อแสดงความรู้และดำเนินการอนุมานเชิงตรรกะโดยใช้ข้อมูลทางประสาทสัมผัสจากเซ็นเซอร์บ้านอัจฉริยะ
เมื่อใช้แอปพลิเคชันบนมือถือ ผู้ใช้จะสร้างสถานการณ์ตามที่สมาร์ทโฮมควรทำงาน ตัวอย่างเช่น: “หากเซ็นเซอร์เปิดประตูหน้าทำงานให้เปิดไฟบริเวณโถงทางเดิน”. แอปพลิเคชันอ่านตัวระบุของเซ็นเซอร์ (เซ็นเซอร์เปิด) และแอคทูเอเตอร์ (ซ็อกเก็ตอัจฉริยะหรือหลอดไฟอัจฉริยะ) จากฐานข้อมูลและสร้างกฎตรรกะในรูปแบบ JSON ซึ่งถูกส่งไปยังตัวควบคุมบ้านอัจฉริยะ กลไกนี้จะกล่าวถึงรายละเอียดเพิ่มเติมในบทความที่สามของซีรี่ส์ของเรา ซึ่งเราจะพูดถึงแอปพลิเคชันไคลเอนต์สำหรับการจัดการบ้านอัจฉริยะ
กลไกลอจิกการผลิตที่กล่าวถึงข้างต้นถูกนำไปใช้โดยใช้ไลบรารี
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-Wave ที่แตกต่างกันได้จำนวนมากในตลาด ลองมาดูตัวอย่างบางส่วน:
- ซ็อกเก็ตอัจฉริยะ Zipato PAN16 สามารถวัดพารามิเตอร์ต่อไปนี้: ปริมาณการใช้ไฟฟ้า (kWh) กำลัง (W) แรงดันไฟฟ้า (V) และกระแส (A) ในเครือข่ายไฟฟ้า นอกจากนี้ยังมีสวิตช์ในตัวซึ่งคุณสามารถควบคุมเครื่องใช้ไฟฟ้าที่เชื่อมต่ออยู่
- เซ็นเซอร์ตรวจจับการรั่วของ Neo Coolcam ตรวจจับว่ามีของเหลวที่หกรั่วไหลโดยการปิดหน้าสัมผัสของโพรบระยะไกล
- เซ็นเซอร์ควัน Zipato PH-PSG01 จะทำงานเมื่ออนุภาคควันเข้าไปในห้องวิเคราะห์ก๊าซ
- เซ็นเซอร์ตรวจจับความเคลื่อนไหว Neo Coolcam วิเคราะห์รังสีอินฟราเรดของร่างกายมนุษย์ นอกจากนี้ยังมีเซ็นเซอร์วัดแสง (Lx);
- มัลติเซนเซอร์ Philio PST02-A วัดอุณหภูมิ (°C), แสง (%), การเปิดประตู, การมีคนอยู่ในห้อง;
- Z-Wave USB Stick ตัวควบคุมเครือข่าย ZME E UZB1 ซึ่งเชื่อมต่อกับเซ็นเซอร์
มันสำคัญมากที่อุปกรณ์และคอนโทรลเลอร์ทำงานด้วยความถี่เดียวกัน มิฉะนั้นพวกเขาจะไม่เห็นกันในขณะที่ทำการเชื่อมต่อ สามารถเชื่อมต่ออุปกรณ์ได้สูงสุด 232 เครื่องกับตัวควบคุมเครือข่าย Z-Wave หนึ่งเครื่องซึ่งเพียงพอสำหรับอพาร์ทเมนต์หรือบ้านในชนบท เพื่อขยายพื้นที่ครอบคลุมเครือข่ายภายในอาคาร สามารถใช้ซ็อกเก็ตอัจฉริยะเป็นตัวทวนสัญญาณได้
ในกระบวนการเซิร์ฟเวอร์ตัวควบคุมบ้านอัจฉริยะที่กล่าวถึงในย่อหน้าก่อนหน้า เซิร์ฟเวอร์ Z-Wave มีหน้าที่รับผิดชอบในการโต้ตอบกับอุปกรณ์ Z-Wave ใช้ไลบรารีเพื่อรับข้อมูลจากเซ็นเซอร์
{
"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 จากนั้นพวกเขาก็เข้าไปในแอคชูเอเตอร์ซึ่งเปลี่ยนสถานะของวัตถุด้านสิ่งแวดล้อมและบ้านอัจฉริยะจึงทำงานที่เป็นประโยชน์
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)
การเชื่อมต่ออุปกรณ์ Z-Wave ทำได้ในส่วนต่อประสานกราฟิกของตัวควบคุมบ้านอัจฉริยะ ในการดำเนินการนี้ให้ไปที่หน้ารายการอุปกรณ์แล้วคลิกปุ่ม "เพิ่ม" คำสั่ง add ผ่านอินเทอร์เฟซ RESTful API จะเข้าสู่กระบวนการเซิร์ฟเวอร์ จากนั้นตัวจัดการข้อความจะส่งไปยังเซิร์ฟเวอร์ Z-Wave ซึ่งทำให้ตัวควบคุม USB เครือข่าย Z-Wave เข้าสู่โหมดพิเศษสำหรับการเพิ่มอุปกรณ์ ถัดไปบนอุปกรณ์ Z-Wave คุณต้องกดปุ่มบริการอย่างรวดเร็วหลายครั้ง (กด 3 ครั้งภายใน 1,5 วินาที) คอนโทรลเลอร์ USB เชื่อมต่ออุปกรณ์กับเครือข่ายและส่งข้อมูลเกี่ยวกับอุปกรณ์ไปยังเซิร์ฟเวอร์ Z-Wave ในทางกลับกันจะสร้างรายการใหม่ในฐานข้อมูล SQLite พร้อมพารามิเตอร์ของอุปกรณ์ใหม่ หลังจากช่วงเวลาที่กำหนด อินเทอร์เฟซแบบกราฟิกจะกลับไปที่หน้ารายการอุปกรณ์ Z-Wave อ่านข้อมูลจากฐานข้อมูล และแสดงอุปกรณ์ใหม่ในรายการ อุปกรณ์แต่ละชิ้นจะได้รับตัวระบุเฉพาะของตัวเอง ซึ่งใช้ในกฎการอนุมานการผลิตและเมื่อทำงานในระบบคลาวด์ การทำงานของอัลกอริทึมนี้แสดงในแผนภาพ UML:
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)
การเชื่อมต่อกล้อง IP
ระบบคลาวด์สมาร์ทโฮมที่กล่าวถึงในบทความนี้เป็นการอัปเกรดระบบกล้องวงจรปิดวิดีโอบนคลาวด์ซึ่งพัฒนาโดยผู้เขียนเช่นกันซึ่งอยู่ในตลาดมาหลายปีและมีการติดตั้งจำนวนมากในรัสเซีย
สำหรับระบบกล้องวงจรปิดวิดีโอบนคลาวด์ ปัญหาเฉียบพลันประการหนึ่งคือการมีอุปกรณ์ให้เลือกอย่างจำกัดซึ่งสามารถดำเนินการบูรณาการได้ ซอฟต์แวร์ที่รับผิดชอบในการเชื่อมต่อกับคลาวด์ได้รับการติดตั้งภายในกล้องวิดีโอ ซึ่งทำให้มีความต้องการฮาร์ดแวร์อย่างจริงจังในทันที - โปรเซสเซอร์และจำนวนหน่วยความจำว่าง สิ่งนี้อธิบายราคากล้องวงจรปิดระบบคลาวด์ที่สูงกว่าเป็นหลักเมื่อเปรียบเทียบกับกล้อง IP ทั่วไป นอกจากนี้ จำเป็นต้องมีการเจรจากับบริษัทผู้ผลิตกล้องวงจรปิดเป็นระยะเวลานานเพื่อเข้าถึงระบบไฟล์ของกล้องและเครื่องมือในการพัฒนาที่จำเป็นทั้งหมด
ในทางกลับกัน กล้อง IP สมัยใหม่ทั้งหมดมีโปรโตคอลมาตรฐานสำหรับการโต้ตอบกับอุปกรณ์อื่นๆ (โดยเฉพาะเครื่องบันทึกวิดีโอ) ดังนั้น การใช้ตัวควบคุมแยกต่างหากที่เชื่อมต่อผ่านโปรโตคอลมาตรฐานและถ่ายทอดสตรีมวิดีโอจากกล้อง IP ไปยังคลาวด์ ทำให้เกิดข้อได้เปรียบทางการแข่งขันที่สำคัญสำหรับระบบกล้องวงจรปิดบนคลาวด์ ยิ่งไปกว่านั้น หากลูกค้าได้ติดตั้งระบบกล้องวงจรปิดโดยใช้กล้อง IP แบบธรรมดาแล้ว ก็เป็นไปได้ที่จะขยายและเปลี่ยนให้เป็นบ้านอัจฉริยะบนคลาวด์เต็มรูปแบบ
โปรโตคอลที่ได้รับความนิยมมากที่สุดสำหรับระบบกล้องวงจรปิดแบบ IP ซึ่งได้รับการสนับสนุนโดยผู้ผลิตกล้อง 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. มีระเบียบการ
อินเทอร์เฟซแบบกราฟิกของตัวควบคุมบ้านอัจฉริยะใช้ฟังก์ชันค้นหากล้อง IP ใน PHP ซึ่งสะดวกมากเมื่อโต้ตอบกับบริการเว็บผ่านข้อความ XML เมื่อเลือกรายการเมนู อุปกรณ์ > กล้อง IP > การสแกน เปิดตัวอัลกอริธึมการค้นหากล้อง IP โดยแสดงผลลัพธ์ในรูปแบบตาราง:
(คลิกที่ภาพเพื่อเปิดในความละเอียดสูงขึ้น)
เมื่อคุณเพิ่มกล้องลงในคอนโทรลเลอร์ คุณสามารถระบุการตั้งค่าตามที่กล้องจะโต้ตอบกับคลาวด์ได้ นอกจากนี้ ในขั้นตอนนี้ อุปกรณ์จะได้รับการระบุตัวระบุอุปกรณ์ที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งสามารถระบุได้อย่างง่ายดายภายในคลาวด์ในภายหลัง
จากนั้น ข้อความจะถูกสร้างขึ้นในรูปแบบ JSON ซึ่งมีพารามิเตอร์ทั้งหมดของกล้องที่เพิ่ม และส่งไปยังกระบวนการเซิร์ฟเวอร์ของตัวควบคุมสมาร์ทโฮมผ่านคำสั่ง RESTful API โดยที่พารามิเตอร์ของกล้องจะถูกถอดรหัสและบันทึกในฐานข้อมูล SQLite ภายใน และ ยังใช้เพื่อเรียกใช้เธรดการประมวลผลต่อไปนี้:
- การสร้างการเชื่อมต่อ RTSP เพื่อรับสตรีมวิดีโอและเสียง
- การแปลงรหัสเสียงจากรูปแบบ G.711 mu-Law, G.711 A-Law, G.723 ฯลฯ เป็นรูปแบบ AAC;
- แปลงรหัสสตรีมวิดีโอในรูปแบบ H.264 และเสียงในรูปแบบ AAC ลงในคอนเทนเนอร์ FLV และส่งไปยังคลาวด์ผ่านโปรโตคอล RTMP
- สร้างการเชื่อมต่อกับจุดสิ้นสุดของเครื่องตรวจจับความเคลื่อนไหวของกล้อง IP ผ่านโปรโตคอล ONVIF และทำการสำรวจเป็นระยะ
- สร้างภาพตัวอย่างขนาดย่อเป็นระยะและส่งไปยังคลาวด์ผ่านโปรโตคอล MQTT
- การบันทึกวิดีโอและเสียงสตรีมในเครื่องในรูปแบบไฟล์แยกกันในรูปแบบ MP4 ลงในการ์ด SD หรือ Flash ของตัวควบคุมบ้านอัจฉริยะ
ในการสร้างการเชื่อมต่อกับกล้อง แปลงรหัส ประมวลผลและบันทึกวิดีโอสตรีมในกระบวนการเซิร์ฟเวอร์ จะใช้ฟังก์ชันจากไลบรารี
ในการทดลองทดสอบประสิทธิภาพ กล้อง 3 ตัวเชื่อมต่อกับคอนโทรลเลอร์:
- HiWatch DS-I114W (ความละเอียด - 720p, รูปแบบการบีบอัด - H.264, บิตเรต - 1 Mb/s, เสียง G.711 mu-Law);
- ไมโครดิจิทัล MDC-M6290FTD-1 (ความละเอียด - 1080p, รูปแบบการบีบอัด - H.264, บิตเรต - 1 Mb/s, ไม่มีเสียง);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (ความละเอียด - 1080p, รูปแบบการบีบอัด - H.264, บิตเรต - 1.5 Mb/s, เสียง AAC)
สตรีมทั้งสามถูกส่งออกไปยังคลาวด์พร้อมกัน การแปลงรหัสเสียงดำเนินการจากกล้องเพียงตัวเดียว และการบันทึกไฟล์เก็บถาวรในเครื่องถูกปิดใช้งาน โหลด CPU อยู่ที่ประมาณ 5% การใช้งาน RAM อยู่ที่ 32 MB (ต่อกระบวนการ) 56 MB (ทั้งหมดรวมระบบปฏิบัติการ)
ดังนั้นจึงสามารถเชื่อมต่อกล้องประมาณ 20 - 30 ตัวกับตัวควบคุมบ้านอัจฉริยะ (ขึ้นอยู่กับความละเอียดและบิตเรต) ซึ่งเพียงพอสำหรับระบบกล้องวงจรปิดสำหรับกระท่อมสามชั้นหรือโกดังขนาดเล็ก สำหรับงานที่ต้องการประสิทธิภาพที่สูงกว่า คุณสามารถใช้เน็ตท็อปที่มีโปรเซสเซอร์ Intel แบบมัลติคอร์และ Linux Debian Sarge OS ขณะนี้คอนโทรลเลอร์อยู่ระหว่างการดำเนินการทดลองใช้งาน และข้อมูลเกี่ยวกับประสิทธิภาพของคอนโทรลเลอร์จะได้รับการอัปเดต
การโต้ตอบกับคลาวด์
บ้านอัจฉริยะบนคลาวด์จัดเก็บข้อมูลผู้ใช้ (การวัดวิดีโอและเซ็นเซอร์) ไว้ในคลาวด์ สถาปัตยกรรมของที่เก็บข้อมูลบนคลาวด์จะมีการกล่าวถึงโดยละเอียดในบทความถัดไปในชุดของเรา ตอนนี้เรามาพูดถึงอินเทอร์เฟซสำหรับการส่งข้อความข้อมูลจากตัวควบคุมสมาร์ทโฮมไปยังคลาวด์
สถานะของอุปกรณ์ที่เชื่อมต่อและการวัดเซ็นเซอร์จะถูกส่งผ่านโปรโตคอล
- QoS 0 - สูงสุดหนึ่งครั้ง (ไม่มีการรับประกันการจัดส่ง);
- QoS 1 - อย่างน้อยหนึ่งครั้ง (พร้อมการยืนยันการจัดส่ง)
- QoS 2 - หนึ่งครั้ง (พร้อมการยืนยันการจัดส่งเพิ่มเติม)
ในกรณีของเราเราใช้
ในการส่งข้อความเกี่ยวกับสถานะของตัวควบคุมบ้านอัจฉริยะ จะใช้กลไกของข้อความที่บันทึกไว้
ไคลเอนต์ MQTT ได้รับการพัฒนาตามการใช้งานห้องสมุด
สตรีมสื่อ H.264 + AAC จะถูกส่งไปยังคลาวด์ผ่านโปรโตคอล RTMP โดยที่คลัสเตอร์ของเซิร์ฟเวอร์สื่อมีหน้าที่ในการประมวลผลและจัดเก็บสตรีมสื่อเหล่านั้น เพื่อกระจายโหลดในคลัสเตอร์อย่างเหมาะสมและเลือกเซิร์ฟเวอร์สื่อที่โหลดน้อยที่สุด ตัวควบคุมบ้านอัจฉริยะจะส่งคำขอเบื้องต้นไปยังโหลดบาลานเซอร์บนคลาวด์ และหลังจากนั้นจะส่งสตรีมสื่อเท่านั้น
ข้อสรุป
บทความนี้ตรวจสอบการใช้งานตัวควบคุมบ้านอัจฉริยะโดยเฉพาะอย่างหนึ่งโดยใช้ไมโครคอมพิวเตอร์ Raspberry Pi 3 B+ ซึ่งสามารถรับ ประมวลผลข้อมูล และอุปกรณ์ควบคุมผ่านโปรโตคอล Z-Wave โต้ตอบกับกล้อง IP ผ่านโปรโตคอล ONVIF และยังแลกเปลี่ยนข้อมูลและ คำสั่งด้วยบริการคลาวด์ผ่านโปรโตคอล MQTT และ RTMP กลไกลอจิกการผลิตได้รับการพัฒนาโดยอิงจากการเปรียบเทียบกฎตรรกะและข้อเท็จจริงที่นำเสนอในรูปแบบ JSON
ขณะนี้ตัวควบคุมสมาร์ทโฮมอยู่ระหว่างการทดลองใช้ที่สถานที่ต่างๆ ในมอสโกและภูมิภาคมอสโก
คอนโทรลเลอร์เวอร์ชันถัดไปวางแผนที่จะเชื่อมต่ออุปกรณ์ประเภทอื่น (RF, Bluetooth, WiFi, แบบมีสาย) เพื่อความสะดวกของผู้ใช้ ขั้นตอนการเชื่อมต่อเซ็นเซอร์และกล้อง IP จะถูกถ่ายโอนไปยังแอปพลิเคชันมือถือ นอกจากนี้ยังมีแนวคิดในการเพิ่มประสิทธิภาพโค้ดกระบวนการเซิร์ฟเวอร์และการย้ายซอฟต์แวร์ไปยังระบบปฏิบัติการ
ที่มา: will.com