Mục lục:

FlowerCare và Nymea để giải cứu cây của tôi: 5 bước
FlowerCare và Nymea để giải cứu cây của tôi: 5 bước

Video: FlowerCare và Nymea để giải cứu cây của tôi: 5 bước

Video: FlowerCare và Nymea để giải cứu cây của tôi: 5 bước
Video: How to avoid Anthurium from dying tips and tricks 2024, Tháng bảy
Anonim
FlowerCare và Nymea để giải cứu cây của tôi
FlowerCare và Nymea để giải cứu cây của tôi

Bẩn tay vào việc kết nối các cảm biến chăm sóc cây trồng với ngôi nhà thông minh mã nguồn mở hiện có của tôi. Hướng dẫn về phát triển plugin cho nymea.

Câu chuyện

Cũng như nhiều người hay tin tặc và tin tặc khác, tôi cũng đang đau đầu với vấn đề rằng việc hack mọi thứ chiếm nhiều thời gian của tôi đến nỗi tôi thỉnh thoảng quên tưới cây. Sau khi Monstera Deliciosa của tôi một lần nữa phải chịu đựng đất khô, tôi quyết định xem liệu tôi có thể làm gì đó để nhắc nhở tôi khi nó khát.

Một nghiên cứu nhanh trên web đã thu hút sự chú ý của tôi đến Xiaomi FlowerCare, còn được gọi là MiCare hoặc PlantCare. Nó là một thiết bị Bluetooth Low Energy và một số nghiên cứu cơ bản đã tiết lộ rằng giao thức của nó có vẻ khá dễ hiểu. Mặc dù Xiaomi dường như không cung cấp bất kỳ thông số kỹ thuật công khai nào, nhưng đã có khá nhiều kỹ thuật đảo ngược trên internet cho thiết bị này. Vì vậy, tôi quyết định đặt một trong số đó.

Vài ngày sau nó được giao và tất nhiên tôi bắt đầu chơi với nó ngay lập tức. Tôi đã kiểm tra ngắn gọn ứng dụng đi kèm với nó nhưng như bạn có thể đoán, việc sử dụng nó trong thiết lập mặc định chưa bao giờ là kế hoạch của tôi. Tất nhiên điều này cần phải được tích hợp với thiết lập nhà thông minh hiện có của tôi. Như đã mô tả ở đây, tôi đang sử dụng nymea làm giải pháp nhà thông minh của mình (Có, bạn thậm chí có thể phát hiện ra Monstera trong một trong những hình ảnh ở đó:)). Đáng buồn thay, nymea chưa hỗ trợ cảm biến đó nên việc kích hoạt một số IDE là theo thứ tự.

Bước 1: Tải trang chứa plugin

Đang tải một tệp trình cắm thêm vào
Đang tải một tệp trình cắm thêm vào
Tải về một trình cắm plugin đã được tải
Tải về một trình cắm plugin đã được tải
Đang tải một tệp trình cắm thêm vào
Đang tải một tệp trình cắm thêm vào

Vì vậy, điều đầu tiên tôi làm là sao chép plugin Thẻ cảm biến Texas Instruments hiện có, nó có vẻ đủ giống với những gì tôi cho rằng cũng sẽ hoạt động cho thiết bị FlowerCare. Sau khi đổi tên cơ bản của mọi thứ trong plugininfo.json và nhận xét hầu hết mã của plugin sensortag, tôi đã sẵn sàng tải sơ khai plugin mới.

Đúng như dự đoán, khám phá sẽ hiển thị cảm biến ngay lập tức và cho phép tôi thêm nó vào hệ thống. Tất nhiên nó sẽ không tạo ra bất kỳ dữ liệu có ý nghĩa nào vào thời điểm này.

Bước 2: Tìm dữ liệu trên cảm biến

Tìm dữ liệu trên cảm biến
Tìm dữ liệu trên cảm biến

Như với bất kỳ thiết bị Bluetooth LE nào, điều đầu tiên bạn muốn làm là tìm hiểu về các dịch vụ mà nó cung cấp và đặc điểm của chúng. Ở đâu đó dữ liệu thực tế bị ẩn. Với một bản in gỡ lỗi nhanh lặp lại trên tất cả các dịch vụ được phát hiện và in ra các đặc điểm của chúng, tôi đã đến thời điểm mà tôi có thể so sánh thông tin tôi tìm thấy trên internet với những gì thiết bị thực sự báo cáo.

void FlowerCare:: onServiceDiscoveryFinishing () {BluetoothLowEnergyDevice * btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "có uuids dịch vụ" controller () -> createServiceObject (sensorServiceUuid, this); connect (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); connect (m_sensorService, & QLowEnergyService:: featureRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> exploreDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & đặc trưng, m_sensorService-> đặc điểm ()) {qCDebug (dcFlowerCare ()). nospace () <"<< đặc trưng.uuid (). toString () <<" ("<< đặc trưng.handle () << "Tên:" << đặc trưng.name () << "):" << đặc trưng.value () << "," << đặc trưng.value (). ToHex (); foreach (const QLowEnergyDescriptor & descriptor, đặc trưng.descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <<" Tên: "<< mô tả.name () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Phiên bản phần sụn và mức pin rất dễ dàng. Tôi đã có thể thấy các giá trị theo được in trong lần đầu tiên liệt kê dữ liệu này. Các giá trị cảm biến thực tế được ẩn sâu hơn một chút trong đó, nhưng kết hợp nó với dữ liệu từ internet ngay lập tức chỉ ra nơi để tìm nó và đặc biệt là cách đọc nó.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & đặc trưng, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Đặc điểm đọc" << QString:: số (đặc trưng.handle (), 16) temp; qint8 bỏ qua; luồng >> bỏ qua; tạ32 lux; luồng >> lux; độ ẩm qint8; suối >> độ ẩm; qint16 khả năng sinh sản; dòng >> khả năng sinh sản; phát ra thành phẩm (m_batteryLevel, 1.0 * temp / 10, lux, độ ẩm, khả năng sinh sản); }

Kết hợp điều này lại với nhau, plugin đã bắt đầu tạo ra dữ liệu có ý nghĩa.

Bước 3: Kết thúc các lần chạm

Kết thúc các lần chạm
Kết thúc các lần chạm

Vì vậy, về cơ bản nó đã hoạt động ngay bây giờ, tuy nhiên, một vấn đề vẫn còn ở đó. Cảm biến FlowerCare, trái ngược với Texas Instruments SensorTag, ngắt kết nối Bluetooth sau vài giây. Mặc dù vậy, xem xét trường hợp sử dụng, điều này dường như không phải là một vấn đề vì nó khá đáng tin cậy trong việc phản hồi các nỗ lực kết nối. Cho rằng bình thường một cái cây không hút hết một lít nước trong vòng vài phút, nhưng thay vào đó là vài ngày, dường như không cần thiết phải luôn kết nối với nhau. Ngoài ra, điều này sẽ làm hao pin khá nhiều. Vì vậy, tôi quyết định thêm một PluginTimer sẽ kết nối lại cảm biến sau mỗi 20 phút và tìm nạp dữ liệu từ nó. Nếu vì lý do nào đó, bộ cảm biến không phản hồi với nỗ lực kết nối, mã sẽ bắt đầu một bộ đếm thời gian khác cố gắng kết nối lại mỗi phút kể từ thời điểm đó cho đến khi nó quản lý để lấy dữ liệu. Sau đó, nó sẽ quay lại để tìm nạp dữ liệu trong khoảng thời gian 20 phút một lần nữa. Nếu thiết bị không kết nối được hai lần liên tiếp (nghĩa là sau 20 + 1 phút), thiết bị sẽ được đánh dấu là ngoại tuyến trong hệ thống và người dùng có thể được cảnh báo về điều đó.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Làm mới" địa chỉ (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Không làm mới" địa chỉ () << "Làm mới tiếp theo" << m_refreshMinutes [hoaCare] << "phút"; } // Nếu chúng tôi có từ 2 lần thử kết nối không thành công trở lên, hãy đánh dấu là đã ngắt kết nối nếu (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Không làm mới được cho" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

Với chiến lược này, giờ đây nymea dường như cung cấp dữ liệu hoàn toàn đáng tin cậy từ cảm biến này.

Bước 4: Sử dụng nó trong bối cảnh lớn hơn

Sử dụng nó trong bối cảnh lớn hơn
Sử dụng nó trong bối cảnh lớn hơn
Sử dụng nó trong bối cảnh lớn hơn
Sử dụng nó trong bối cảnh lớn hơn

Tuy nhiên, việc chỉ nhận các giá trị từ cảm biến không hữu ích lắm, tôi cũng có thể đã sử dụng ứng dụng gốc cho việc đó. Bây giờ chúng ta hãy làm một số điều thông minh với nó.

Nymea hỗ trợ gửi thông báo đẩy, đến điện thoại có cài đặt ứng dụng nymea hoặc qua PushBullet. Vì vậy, điều hiển nhiên cần làm là gửi cho mình một số thông báo đẩy bất cứ khi nào độ ẩm của đất giảm xuống dưới 15%. Thật dễ dàng để thiết lập điều đó trong ứng dụng. Điều kiện tiên quyết là bạn cần có tài khoản trong nymea: cloud hoặc trên PushBullet. Đối với nymea: thông báo đẩy dựa trên đám mây, chỉ cần bật nymea: cloud trên nymea: core và trong nymea: app là đủ. Ngay sau khi cả hai được kết nối, một thông báo sẽ tự động xuất hiện. Đối với PushBullet, hãy thêm một thứ mới vào hệ thống, bạn sẽ tìm thấy PushBullet trong danh sách ở đó. Nó sẽ yêu cầu bạn cung cấp khóa API mà bạn nhận được khi đăng ký với PushBullet. Khi bạn có thông báo đẩy trong nymea, bạn có thể tạo quy tắc.

Tất nhiên, bạn có thể làm bất cứ điều gì khác bạn muốn… Cũng có thể bật một số đèn để phản ánh các giá trị cảm biến hoặc sử dụng plugin chỉ huy HTTP để đăng các giá trị cảm biến lên máy chủ trên internet. Ví dụ: Tôi không có van nước có thể được kiểm soát bằng kỹ thuật số (chưa) nhưng tất nhiên, nếu bạn có một thứ như vậy và nó chưa được nymea hỗ trợ, thì việc thêm một plugin cho nó sẽ tương tự hơn cái này.

Bước 5: Đóng các từ

Chốt lời
Chốt lời

Hiện tại, plugin chăm sóc hoa đã được chấp nhận ngược dòng và nếu bạn có một trong những plugin đó, nó đã sẵn sàng để sử dụng với nymea ngay bây giờ. Tuy nhiên, tôi hy vọng bài viết này có thể được quan tâm nếu ai đó muốn thêm hỗ trợ cho các thiết bị khác. Nó sẽ là một hướng dẫn về cách xây dựng plugin của riêng bạn cho nymea.

Nếu bạn chỉ muốn xây dựng thiết lập này tại nhà của mình, tất cả những gì bạn cần là cảm biến FlowerCare, Raspberry Pi, hình ảnh cộng đồng nymea (tính đến thời điểm hiện tại nó bao gồm plugin chăm sóc hoa) và ứng dụng nymea: có sẵn trong các cửa hàng ứng dụng. Ngoài ra, cho đến nay Monstera Deliciosa của tôi đã vui trở lại và như bạn có thể đã thấy trong ảnh chụp màn hình, tôi đã có cho mình một cảm biến thứ hai trong số những cảm biến đó để theo dõi sức khỏe của cây chanh của tôi. Đối với vấn đề đó, tôi sẽ tự gửi thông báo đẩy cho mình bất cứ khi nào bên ngoài trời đóng băng để tôi có thể mang nó qua mùa đông một cách an toàn.

Đề xuất: