Коты, как обычно, относятся спустя рукава к своим обязанностям. Мира приносит пойманных грызунов домой для Кшиштика, они играют с ним в «охоту», потом забивают. Мышка приходит в себя и дальше живёт за холодильником или на кухне. Котов это волнует слабо, поспать и хорошо поесть важнее.
Периодически мышей приходится ловить и выпускать. Вручную это довольно сложно, иногда это приводит к печальным последствиям: недавно меня агрессивная крыса покусала и теперь колят уколы от бешенства. Так что надо этот вопрос автоматизировать. Недавно прочитал на Муське статью про гуманную мышеловку, которая ловит мышку живой. Но есть нюанс — их надо постоянно проверять, что бы не обрекать животное на мучительную гибель. Проверять вручную конечно же мы не будем (или забудем), поручим это умному дому. При срабатывании ловушки поступит сигнал, что ловушку надо проверить и выпустить животинку на свободу.
Собственно, делаем следующее: находим аналогичные мышеловки на Амазоне и дорабатываем их датчиками Zigbee, что бы сообщали в умный дом срабатывание. Сделать очень просто — это новенькие икеевские датчики окон/дверей Parasoll с минимальными доработками и логика уведомлений. Общая стоимость одной ловушки получается примерно 15€.
Ловушка
Сами ловушки нашёл на Amazon, стоимость 19 € за комплект из 4х штук. Ловушки довольно большие, длина около 20 сантиметров.
Принцип работы — в полу имеется педалька, которая держит подпруженную дверку, которая при нажатии срывается и надёжно закрывает ловушку.
С торца имеется сдвижная дверка, через которую можно положить приманку (причём там две мисочки — для еды и воды) а так же выпустить нашего пленника.
Получил посылку, поставил оригинальный девайс на кухне (у нас были подозрения что кто-то живёт за холодильником), попался такой вот симпатяш в первые же 30 минут.
Мышка была очень голодная, несмотря на страх поела. Ещё бы — она сидела за холодильником минимум три дня. Мы отнесли малыша в кусты за пару домов по улице и отпустили.
Доработка до умной мышеловки
Данный девайс очевидно работает хорошо, но есть нюанс. Если сохраняешь жизнь пленнику, то надо принимать за это ответственность. Следовательно надо сделать уведомления о срабатывании. Самый очевидный способ — это приделать датчики открытия окон / дверей для отслеживания и сигнализации статуса срабатывания ловушки, это позволит не забыть выпустить животное.
У меня имеется два новеньких датчика Ikea Parasoll. Хорошие устройства, рассчитанные на питание от одного ААА-аккумулятора, стоимость в оффлайне 10€. Изначально думал приделать датчик на бок ловушки и штатный магнит приделать на дверку, что бы сигнализировал закрытие.
Немного покумекав, понял что гораздо лучше сделать наоборот: датчик закрепить на крышу ловушки и детектировать именно взведённое положение:
- Геометрия ловушки нарушается меньше
- Если магнит оторвётся, отгрызут, или что-то случится, то это всё будет сигнализировать состояние что надо проверить ловушку
Отпиливаем кусок от ответчика (магнит там только где маркировка) и приклеиваем на штатный скотч датчик и ответчик. Важно что бы магнит остался снаружи при срабатывании ловушки (что бы не погрызли), поэтому его клеим на внешнюю сторону.
Настройка умного дома
Теперь надо настроить логику — что бы умный дом уведомлял в срабатывании, а так же мониторинг. Нам ведь не нужно пропустить события если батарейка разрядилась?
В OpenHab настраиваем создаём группу и правила для наших устройств:
Group:Contact:AND(CLOSED, OPEN) mouse_trap "Mouse traps [%s]" <siren>
Правила для отправки уведомлений:
rule "Mouse trap detected"
when
Member of mouse_trap changed from CLOSED to OPEN
then
logInfo("mouse", "Mouse trap: " + triggeringItem.getLabel())
global_message.sendCommand("MOUSE TRAP! " + triggeringItem.getLabel())
end
Мониторинг у меня осуществляется для всех Zigbee устройств на системном уровне. Генератор кода создаёт у каждого устройства специальный канал и устройство activity
, которое хранит в себя время последнего полученного статуса по MQTT. дальше правило проверяет все подобные устройства в группе и выдаёт предупреждения если статус не был получен в течении 24х часов.
// This rule send notifications if item was not updated within 24 hrs
rule "Test devices responce time"
when
Time cron "0 00 13 ? * *"
then
g_all_activity.members.forEach [s |
if (s.state != NULL) {
val date_item = ( s.state as DateTimeType).zonedDateTime
val date_now = ZonedDateTime.now
var double diff_hours = ChronoUnit.HOURS.between(date_item, date_now)
logInfo("activity", "Item " + s.label + " last update: " + diff_hours)
if (diff_hours > 24) {
global_message.sendCommand("Item " + s.label + " no activity for " + diff_hours + " h")
}
} else {
logInfo("activity", "Item " + s.label + " never updated")
}
]
end
Как результат, мы получим сообщения в телеграм и приложение, если:
- Любая ловушка сработала
- Любая ловушка не обновляла статус устройства в течении 24ч
Тестовые сообщения в телеграм:
В уведомление приходит так же название ловушки, которая сработала.
Таким образом следим за ситуацией и не паримся 🙂 Конфигурация, как обычно, доступна на Gihub.