Оглавление:
- Шаг 1. Загрузка заглушки плагина
- Шаг 2: поиск данных на датчике
- Шаг 3: завершающие штрихи
- Шаг 4: Использование в более широком контексте
- Шаг 5: заключительные слова
Видео: FlowerCare и Nymea спасают мои растения: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Запачкал руки при подключении датчиков ухода за растениями к моему существующему умному дому с открытым исходным кодом. Пошаговое руководство по разработке плагина для nymea.
История
Как и многие другие мастерицы и хакеры, я тоже страдаю от того, что хакерство отнимает у меня столько времени, что я иногда забываю поливать растения. После того, как моя Monstera Deliciosa снова пострадала от сухой почвы, я решил посмотреть, могу ли я что-нибудь с этим сделать, чтобы напомнить мне, когда она хочет пить.
Быстрое исследование в Интернете привлекло мое внимание к Xiaomi FlowerCare, также известному как MiCare или PlantCare. Это устройство Bluetooth с низким энергопотреблением, и некоторые фундаментальные исследования показали, что его протокол довольно прост для понимания. Хотя Xiaomi, похоже, не предоставляет каких-либо общедоступных спецификаций, в Интернете для этого устройства было проведено довольно много реверс-инжиниринга. Поэтому я решил заказать один из них.
Через несколько дней он был доставлен, и, конечно же, я сразу же начал с ним экспериментировать. Я вкратце проверил прилагаемое к нему приложение, но, как вы, наверное, догадались, использование его в настройках по умолчанию никогда не входило в мои планы. Конечно, это должно быть интегрировано с моей существующей настройкой умного дома. Как также описано здесь, я использую nymea в качестве своего решения для умного дома (да, вы даже можете увидеть Monstera на одной из картинок там:)). К сожалению, nymea еще не поддерживает этот датчик, поэтому нужно было запустить IDE.
Шаг 1. Загрузка заглушки плагина
Итак, первым делом я скопировал существующий плагин Texas Instruments Sensor Tag, он выглядел достаточно похожим на то, что, как я предполагал, должно работать и для устройства FlowerCare. После простого переименования вещей в plugininfo.json и комментирования большей части кода плагина sensortag я был готов загрузить новую заглушку плагина.
Как и ожидалось, обнаружение уже сразу покажет датчик и позволит мне добавить его в систему. Конечно, на данный момент это не даст никаких значимых данных.
Шаг 2: поиск данных на датчике
Как и в случае с любым другим устройством Bluetooth LE, первое, что вам нужно сделать, это узнать об услугах, которые оно предлагает, и их характеристиках. Где-то там спрятаны фактические данные. Благодаря быстрой отладочной печати, перебирающей все обнаруженные службы и распечатке их характеристик, я был в той точке, где я мог сравнить информацию, которую я нашел в Интернете, с тем, что фактически сообщает устройство.
void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice * btDev = static_cast (sender ()); qCDebug (dcFlowerCare ()) << "иметь служебные uuid"
Версия прошивки и уровень заряда батареи были легкими. Я уже мог видеть соответствующие значения, напечатанные при этой самой первой попытке перечисления данных. Фактические значения датчиков скрыты там немного глубже, но объединение их с данными из Интернета сразу же указывает на то, где их найти и особенно как их читать.
void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & характеристика, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "Считывание характеристики" << QString:: number (характеристика.handle (), 16) temp; qint8 skip; поток >> пропустить; quint32 lux; поток >> люкс; qint8 влаги; поток >> влага; qint16 плодородие; поток >> плодородие; излучение завершено (m_batteryLevel, 1.0 * temp / 10, люкс, влажность, плодородие); }
Собирая все вместе, плагин уже начал производить значимые данные.
Шаг 3: завершающие штрихи
Так что сейчас это в основном сработало, однако одна проблема все еще оставалась там. Датчик FlowerCare, в отличие от Texas Instruments SensorTag, разорвет соединение Bluetooth через несколько секунд. Однако, учитывая вариант использования, это не кажется проблемой, так как он довольно надежно реагирует на попытки подключения. Учитывая, что обычно растение впитывает литр воды не за минуты, а за дни, нет необходимости постоянно оставаться на связи. Также это сильно разряжает батарею. Поэтому я решил добавить PluginTimer, который будет повторно подключать датчик каждые 20 минут и извлекать из него данные. Если по какой-то причине датчик не реагирует на попытку подключения, код запускает другой таймер, который пытается повторно подключиться каждую минуту с этого момента, пока ему не удастся получить данные. Затем он вернется, чтобы снова получить данные за 20-минутный интервал. Если устройству не удается подключиться дважды подряд (то есть через 20 + 1 минут), оно будет помечено в системе как отключенное, и пользователь может быть предупрежден об этом.
void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare * flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "Обновляющий" адрес (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "Не обновляется" адрес () << "Следующее обновление через" << m_refreshMinutes [flowerCare] << "минут"; } // Если у нас было 2 или более неудачных попытки подключения, пометьте это как отключенное if (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "Не удалось обновить для" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, ложь); }}}
С этой стратегией теперь казалось, что nymea предоставляет совершенно надежные данные с этого датчика.
Шаг 4: Использование в более широком контексте
Хотя просто получение значений с датчика не так уж и полезно, я также мог бы использовать для этого оригинальное приложение. Теперь давайте поработаем с ним по-умному.
Nymea поддерживает отправку push-уведомлений на телефоны с установленным приложением nymea: или через PushBullet. Таким образом, очевидная вещь, которую нужно сделать, - это отправить мне несколько push-уведомлений, когда влажность почвы упадет ниже 15%. Это довольно просто настроить в приложении. В качестве предварительного условия вам понадобится учетная запись в nymea: cloud или в PushBullet. Для push-уведомлений на основе nymea: cloud достаточно включить nymea: cloud в ядре nymea: и в приложении nymea: app. Как только оба подключатся, автоматически появится уведомление. Для PushBullet добавьте новую вещь в систему, вы найдете PushBullet в списке там. Он запросит у вас ключ API, который вы получите при регистрации в PushBullet. Если у вас есть push-уведомление в nymea, вы можете создать правило.
Конечно, вы можете делать все, что захотите … Можно также включить свет, чтобы отразить значения датчиков, или использовать плагин HTTP commander для отправки значений датчиков, например, на сервер в Интернете. У меня нет водяного клапана. которым можно управлять в цифровом виде (пока), но, конечно, если у вас есть такая вещь, и она еще не поддерживается nymea, добавление плагина для этого было бы скорее похожим, чем это.
Шаг 5: заключительные слова
Плагин flowercare уже принят в апстриме, и если у вас есть один из них, он готов к использованию с nymea. Однако я надеюсь, что эта статья может быть интересна, если кто-то захочет добавить поддержку других устройств. Это должно быть пошаговое руководство по созданию собственного плагина для nymea.
Если вы хотите просто построить эту установку у себя дома, все, что вам нужно, это датчик FlowerCare, Raspberry Pi, образ сообщества nymea (на данный момент он включает плагин для ухода за цветами) и приложение nymea:, которое доступно в магазинах приложений. Кроме того, пока моя Monstera Deliciosa снова счастлива, и, как вы могли видеть на скриншотах, я купил себе второй из этих датчиков, чтобы отслеживать состояние моего лимонного дерева. Для этого я отправляю себе push-уведомление, когда на улице холодно, чтобы я мог безопасно перенести его на зиму.
Рекомендуемые:
Система оповещения о низкой влажности почвы для вашего растения: 5 шагов
Система оповещения о низкой влажности почвы для вашего растения: в нескольких домах часто можно найти банки с разными типами растений. И из-за большого количества повседневных занятий люди забывают поливать свои растения, и в конечном итоге они умирают из-за нехватки воды. Чтобы избежать этой проблемы, мы решили
Вы знаете, как себя чувствуют ваши растения? [Частица + Убидоты]: 6 шагов
Вы знаете, как себя чувствуют ваши растения? [Частица + Убидоты]: Ничто не заменит вам прогулки и работу с почвой, но сегодняшние технологии сделали возможным удаленный мониторинг почвы и отслеживание параметров, которые невозможно измерить моим человеческим чувствам. Датчики почвы, такие как SHT10, теперь чрезвычайно точны и предлагают
Космические растения: 5 шагов
Космические растения: Здравствуйте! Спасибо, что прочитали мою инструкцию. Этот сад был представлен на конкурс мастеров Growing Beyond the Earth на уровне старшей школы. Сад может сам поливать, нагревать, охлаждать и освещать. Сюда включен весь код, так что вы можете отредактировать его на m
Алекса, где мои ключи?: 4 шага
Alexa, где мои ключи ?: Alexa особенно хорошо подходит для задач поиска информации и мониторинга активов с использованием беспроводных домашних сетей. Естественно подумать о размещении ценных вещей в сетке для быстрого поиска. Мы взламываем дешевые bluetooth-маяки с низким энергопотреблением для сети
Моя клавиатура Мои руки: 8 шагов (с изображениями)
Моя клавиатура Мои руки: Я использовал новый лазерный резак Epilog, который недавно получил от Instructables, для лазерной гравировки изображения моих рук на клавиатуре моего ноутбука … постоянно. Это аннулирует вашу гарантию в стиле «сделай сам»! С тех пор как я помогаю