สารบัญ:
- ขั้นตอนที่ 1: โหลดปลั๊กอิน Stub
- ขั้นตอนที่ 2: ค้นหาข้อมูลบนเซ็นเซอร์
- ขั้นตอนที่ 3: เสร็จสิ้นการสัมผัส
- ขั้นตอนที่ 4: ใช้ในบริบทที่ใหญ่ขึ้น
- ขั้นตอนที่ 5: การปิดคำ
วีดีโอ: FlowerCare และ Nymea เพื่อช่วยเหลือพืชของฉัน: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ทำให้มือสกปรกในการเชื่อมต่อเซ็นเซอร์การดูแลพืชกับโอเพ่นซอร์สสมาร์ทโฮมที่มีอยู่ของฉัน คำแนะนำในการพัฒนาปลั๊กอินสำหรับ nymea
เรื่องราว
เช่นเดียวกับคนจรจัดและแฮ็กเกอร์คนอื่นๆ ฉันก็ประสบปัญหาเช่นกันที่การแฮ็กสิ่งต่างๆ ต้องใช้เวลามากจนฉันลืมรดน้ำต้นไม้เป็นบางครั้ง หลังจากที่ Monstera Deliciosa ของฉันได้รับความทุกข์ทรมานจากดินแห้งอีกครั้ง ฉันตัดสินใจที่จะดูว่าฉันสามารถทำอะไรกับมันเพื่อเตือนฉันเมื่อมันกระหายน้ำได้หรือไม่
การวิจัยอย่างรวดเร็วบนเว็บทำให้ฉันสนใจ Xiaomi FlowerCare หรือที่เรียกว่า MiCare หรือ PlantCare เป็นอุปกรณ์ Bluetooth Low Energy และการวิจัยขั้นพื้นฐานพบว่าโปรโตคอลดูเหมือนจะเข้าใจได้ง่าย แม้ว่า Xiaomi จะไม่ได้ให้รายละเอียดสาธารณะใด ๆ แต่ก็ยังมีการทำวิศวกรรมย้อนกลับบนอินเทอร์เน็ตสำหรับอุปกรณ์นี้อยู่บ้าง ดังนั้นฉันจึงตัดสินใจสั่งซื้อหนึ่งในนั้น
ไม่กี่วันต่อมาก็มีการส่งมอบและแน่นอนว่าฉันเริ่มเล่นกับมันทันที ฉันตรวจสอบแอพที่มาพร้อมกับมันสั้น ๆ แต่อย่างที่คุณอาจเดาได้ การใช้มันในการตั้งค่าเริ่มต้นไม่ใช่แผนของฉัน แน่นอนว่าสิ่งนี้ต้องรวมเข้ากับการตั้งค่าบ้านอัจฉริยะที่มีอยู่ของฉัน ตามที่อธิบายไว้ที่นี่ ฉันใช้ nymea เป็นโซลูชันบ้านอัจฉริยะของฉัน (ใช่ คุณสามารถมองเห็น Monstera ได้จากรูปภาพใดรูปหนึ่งที่นั่น:)) น่าเศร้าที่ nymea ยังไม่รองรับเซ็นเซอร์นั้น ดังนั้นการเปิดใช้งาน IDE บางตัวจึงเป็นไปตามลำดับ
ขั้นตอนที่ 1: โหลดปลั๊กอิน Stub
สิ่งแรกที่ฉันทำคือคัดลอกปลั๊กอิน Texas Instruments Sensor Tag ที่มีอยู่ ดูเหมือนว่าจะคล้ายกับสิ่งที่ฉันคิดว่าน่าจะใช้ได้กับอุปกรณ์ FlowerCare เช่นกัน หลังจากการเปลี่ยนชื่อพื้นฐานของสิ่งต่าง ๆ ใน plugininfo.json และแสดงความคิดเห็นกับโค้ดของปลั๊กอิน sensortag ส่วนใหญ่ ฉันก็พร้อมที่จะโหลดต้นขั้วปลั๊กอินใหม่
ตามที่คาดไว้ การค้นพบจะแสดงเซ็นเซอร์ทันทีและอนุญาตให้ฉันเพิ่มลงในระบบ แน่นอนว่ามันจะไม่สร้างข้อมูลที่มีความหมายในตอนนี้
ขั้นตอนที่ 2: ค้นหาข้อมูลบนเซ็นเซอร์
เช่นเดียวกับอุปกรณ์ Bluetooth LE ใดๆ สิ่งแรกที่คุณต้องทำคือค้นหาบริการที่มีให้และคุณลักษณะ ข้อมูลจริงถูกซ่อนอยู่ที่ไหนสักแห่งในนั้น ด้วยการพิมพ์ดีบักอย่างรวดเร็ววนรอบบริการที่ค้นพบทั้งหมดและการพิมพ์คุณลักษณะของพวกเขา ฉันมาถึงจุดที่ฉันสามารถเปรียบเทียบข้อมูลที่ฉันพบบนอินเทอร์เน็ตกับสิ่งที่อุปกรณ์รายงานจริง
เป็นโมฆะ FlowerCare:: onServiceDiscoveryFinished () { BluetoothLowEnergyDevice * btDev = static_cast (ผู้ส่ง ()); qCDebug(dcFlowerCare()) << "มีบริการ uuids"
เวอร์ชั่นเฟิร์มแวร์และระดับแบตเตอรี่นั้นง่าย ฉันสามารถเห็นค่าตามที่พิมพ์ในความพยายามครั้งแรกในการแสดงรายการข้อมูลแล้ว ค่าเซ็นเซอร์ที่แท้จริงซ่อนอยู่ลึกลงไปเล็กน้อย แต่การรวมเข้ากับข้อมูลจากอินเทอร์เน็ตจะชี้ให้เห็นทันทีว่าจะหาได้จากที่ใดและโดยเฉพาะอย่างยิ่งวิธีการอ่าน
เป็นโมฆะ FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & ลักษณะ const QByteArray &value) { qCDebug (dcFlowerCare ()) << "ลักษณะการอ่าน" << QString:: หมายเลข (characteristic.handle (), 16) ชั่วคราว; qint8 ข้าม; สตรีม >> ข้าม; quint32 ลักซ์; สตรีม >> ลักซ์; qint8 ความชื้น; กระแส >> ความชื้น; ภาวะเจริญพันธุ์ qint16; กระแส >> เจริญพันธุ์; ปล่อยเสร็จแล้ว(m_batteryLevel, 1.0 * temp / 10, lux, moisture, fertility); }
เมื่อรวมเข้าด้วยกันแล้ว ปลั๊กอินก็เริ่มสร้างข้อมูลที่มีความหมายแล้ว
ขั้นตอนที่ 3: เสร็จสิ้นการสัมผัส
ดังนั้นมันจึงใช้งานได้โดยพื้นฐานแล้วในตอนนี้ อย่างไรก็ตาม ปัญหาหนึ่งยังเหลืออยู่ที่นั่น ตรงกันข้ามกับ Texas Instruments SensorTag เซ็นเซอร์ FlowerCare จะยกเลิกการเชื่อมต่อ Bluetooth หลังจากผ่านไปสองสามวินาที เมื่อพิจารณาถึงกรณีการใช้งาน ดูเหมือนว่าจะไม่เป็นปัญหาเนื่องจากค่อนข้างน่าเชื่อถือในการตอบสนองต่อความพยายามในการเชื่อมต่อ เนื่องจากโดยปกติพืชจะไม่ดูดน้ำสักลิตรภายในไม่กี่นาที แต่เป็นวัน ไม่จำเป็นต้องเชื่อมต่อตลอดเวลา นอกจากนี้ยังจะทำให้แบตเตอรี่หมดค่อนข้างมาก ดังนั้นฉันจึงตัดสินใจเพิ่ม PluginTimer ซึ่งจะเชื่อมต่อเซ็นเซอร์อีกครั้งทุกๆ 20 นาทีและดึงข้อมูลจากเซ็นเซอร์ หากด้วยเหตุผลบางอย่าง เซ็นเซอร์ไม่ตอบสนองต่อความพยายามในการเชื่อมต่อ รหัสจะเริ่มตัวจับเวลาอื่นซึ่งจะพยายามเชื่อมต่อใหม่ทุกนาทีนับจากจุดนั้นจนกว่าจะสามารถจัดการเพื่อรับข้อมูลได้ จากนั้นจะกลับไปดึงข้อมูลในช่วงเวลา 20 นาทีอีกครั้ง หากอุปกรณ์ไม่สามารถเชื่อมต่อสองครั้งติดต่อกัน (หมายถึงหลังจาก 20 + 1 นาที) อุปกรณ์จะถูกทำเครื่องหมายว่าออฟไลน์ในระบบและผู้ใช้จะได้รับการแจ้งเตือนเกี่ยวกับอุปกรณ์ดังกล่าว
ถือเป็นโมฆะ DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug (dcFlowerCare()) << ที่อยู่ "รีเฟรช" (); flowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << ที่อยู่ "ไม่รีเฟรช" () << " รีเฟรชครั้งต่อไปใน" << m_refreshMinutes[flowerCare] << "minutes"; } // หากเราพยายามเชื่อมต่อไม่สำเร็จ 2 ครั้งขึ้นไป ให้ทำเครื่องหมายว่าไม่ได้เชื่อมต่อหาก (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "ไม่สามารถรีเฟรชสำหรับ" << (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId เท็จ); } } }
ด้วยกลยุทธ์นี้ nymea ดูเหมือนว่าจะส่งข้อมูลที่เชื่อถือได้อย่างสมบูรณ์จากเซ็นเซอร์นี้
ขั้นตอนที่ 4: ใช้ในบริบทที่ใหญ่ขึ้น
การรับค่าจากเซ็นเซอร์นั้นไม่มีประโยชน์มากนัก แต่ฉันสามารถใช้แอพดั้งเดิมสำหรับสิ่งนั้นได้ ตอนนี้เรามาทำสิ่งที่ชาญฉลาดกับมันกันดีกว่า
Nymea รองรับการส่งการแจ้งเตือนแบบพุชไปยังโทรศัพท์ที่ติดตั้ง nymea:app หรือผ่าน PushBullet สิ่งที่ชัดเจนที่ต้องทำคือส่งการแจ้งเตือนแบบพุชให้ตัวเองทุกครั้งที่ความชื้นในดินลดลงต่ำกว่า 15% การตั้งค่าในแอปนั้นค่อนข้างง่าย ตามข้อกำหนดเบื้องต้น คุณต้องมีบัญชีใน nymea:cloud หรือบน PushBullet สำหรับการแจ้งเตือนแบบพุชที่ใช้ nymea:cloud ก็เพียงพอที่จะเปิดใช้งาน nymea:cloud บน nymea:core และใน nymea:app ทันทีที่ทั้งสองเชื่อมต่อกัน สิ่งแจ้งเตือนจะปรากฏขึ้นโดยอัตโนมัติ สำหรับ PushBullet เพิ่มสิ่งใหม่ในระบบ คุณจะพบ PushBullet ในรายการที่นั่น มันจะขอรหัส API ที่คุณได้รับเมื่อสมัครใช้งาน PushBullet เมื่อคุณมีสิ่งแจ้งเตือนแบบพุชใน nymea คุณสามารถสร้างกฎได้
แน่นอน คุณสามารถทำอย่างอื่นได้ตามใจชอบ… เปิดไฟบางส่วนเพื่อสะท้อนค่าเซ็นเซอร์ หรือใช้ปลั๊กอินคำสั่ง HTTP เพื่อโพสต์ค่าเซ็นเซอร์ไปยังเซิร์ฟเวอร์บนอินเทอร์เน็ต เป็นต้น ฉันไม่มีวาล์วน้ำ ซึ่งสามารถควบคุมได้แบบดิจิทัล (ยัง) แต่แน่นอน ถ้าคุณมีสิ่งนั้นและยังไม่รองรับโดย nymea การเพิ่มปลั๊กอินสำหรับสิ่งนั้นจะค่อนข้างคล้ายกันกว่านี้
ขั้นตอนที่ 5: การปิดคำ
ปลั๊กอิน flowercare ได้รับการยอมรับต้นน้ำแล้ว และถ้าคุณมีหนึ่งในนั้น ก็พร้อมที่จะใช้กับ nymea แล้ว อย่างไรก็ตาม ฉันหวังว่าบทความนี้อาจเป็นที่สนใจหากมีใครต้องการเพิ่มการสนับสนุนสำหรับอุปกรณ์อื่นๆ ควรเป็นคำแนะนำเกี่ยวกับวิธีการสร้างปลั๊กอินของคุณเองสำหรับ nymea
หากคุณต้องการเพียงแค่สร้างการตั้งค่านี้ที่บ้านของคุณ สิ่งที่คุณต้องมีคือเซ็นเซอร์ FlowerCare, Raspberry Pi, ภาพชุมชน nymea (ตอนนี้รวมปลั๊กอินการดูแลดอกไม้ด้วย) และ nymea:app ซึ่งมีอยู่ในร้านแอป นอกจากนี้ จนถึงตอนนี้ Monstera Deliciosa ของฉันมีความสุขอีกครั้ง และอย่างที่คุณอาจเคยเห็นในภาพหน้าจอ ฉันได้เซ็นเซอร์ตัวที่สองในตัวเองเพื่อติดตามสุขภาพของต้นมะนาวของฉันด้วย สำหรับตัวนั้น ฉันกำลังส่งการแจ้งเตือนแบบพุชให้ตัวเองทุกครั้งที่อากาศข้างนอกหนาว เพื่อให้ฉันสามารถผ่านฤดูหนาวได้อย่างปลอดภัย
แนะนำ:
ติดตาม: ศูนย์สื่อขั้นสูงพร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): 3 ขั้นตอน
ติดตาม: Advanced Media Center พร้อม Odroid N2 และ Kodi (รองรับ 4k และ HEVC): บทความนี้เป็นบทความต่อจากบทความก่อนหน้าของฉันที่ประสบความสำเร็จค่อนข้างมากเกี่ยวกับการสร้างศูนย์สื่ออเนกประสงค์ โดยอ้างอิงจาก Raspberry PI ที่ได้รับความนิยมมากในตอนแรก แต่ ในภายหลัง เนื่องจากไม่มีเอาต์พุตที่สอดคล้องกับ HEVC, H.265 และ HDMI 2.2 จึงมีสวิตช์
Blinds Control ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: 5 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมมู่ลี่ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันเพิ่มระบบอัตโนมัติให้กับมู่ลี่ของฉันอย่างไร ฉันต้องการเพิ่มและลบระบบอัตโนมัติได้ ดังนั้นการติดตั้งทั้งหมดจึงเป็นแบบหนีบ ส่วนหลักคือ: สเต็ปเปอร์มอเตอร์ ตัวขับสเต็ปควบคุม bij ESP-01 เกียร์และการติดตั้ง
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: 3 ขั้นตอน
DIY IBeacon และ Beacon Scanner ด้วย Raspberry Pi และ HM13: Story A beacon จะส่งสัญญาณอย่างต่อเนื่องเพื่อให้อุปกรณ์บลูทู ธ อื่น ๆ รู้ว่ามีอยู่ และฉันอยากได้บีคอนบลูทูธเพื่อติดตามกุญแจมาตลอด เพราะฉันลืมเอามันมาเหมือน 10 ครั้งในปีที่แล้ว และฉันก็เกิดขึ้น
RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
RuuviTag และ PiZero W และ Blinkt! เครื่องวัดอุณหภูมิที่ใช้ Bluetooth Beacon: คำแนะนำนี้อธิบายวิธีการอ่านข้อมูลอุณหภูมิและความชื้นจาก RuuviTag โดยใช้ Bluetooth กับ Raspberry Pi Zero W และเพื่อแสดงค่าเป็นเลขฐานสองบน Pimoroni กะพริบตา! pHAT.หรือเรียกสั้นๆ ว่า จะสร้างสถานะอย่างไร
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): 25 ขั้นตอน (พร้อมรูปภาพ)
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): นี่คือบทแนะนำเกี่ยวกับวิธีการสร้าง Quadcopter โดยใช้มอเตอร์ NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS & วิทยุ 3DR ฉันพยายามอธิบายแต่ละขั้นตอนด้วยรูปภาพจำนวนหนึ่ง หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดตอบกลับ