Pull to refresh

Comments 52

Супер.
+

Особенно умиляет в таких публикациях «порывшись у себя в столе я обнаружил...»
А что не так? Лично мне малинку подарили для одного стороннего проекта, который давно закончился, а камерой обзавелся когда учил английский по скайпу. Я знаю очень много людей, которые заказали себе RaspberryPi когда они только появились из любопытства, наигрались и забросили в стол.
Ну вообще-то распи 3 появилась не настолько давно, чтобы успеть забыть про неё в столе. Вроде и двух лет не прошло. А впрочем направление правильное, лучше использовать, чем просто валяется
Давно. В начале 16-го.
Вы лукавите :) ничего Вы не забыли. Она лежала на краю памяти, напоминая о себе время от времени( когда же ты меня к чему-то приспособишь). Впрочем это уже оффтопик
У меня на столе тоже не мало и Малинок и Апельсинок, а также их производны в виде ТВБоксов. Я уже давно использую аналогичное оборудование в качестве рабочих мест в офисах.
Чего и вам всем советую.
Классное решение!
Постараюсь повторить.
Жаль нужно заказывать — в столе рыться бессмысленно)
Будут вопросы — обращайтесь.
В disclaimer так написано, как будто в статье использованы кадры из тяжелого гей-порно.))
Спасибо, коллега, повторю ваш опыт.

Примерно так её и воспринимают знающие про генераторы, ContextManager'ы и прочий синтаксический сахар люди, да.

Если токен, который вы указали настоящий, то лучше затереть его. Любой может нарушить стабильность работы бота
Нет конечно. Равно как и ID пользователей. Но всё равно спасибо за предостережение.
Как раз вчера подобным образом пристроил свою Orange Pi.
Была у меня xiaomi wifi camera, китайская версия. Связь через серваки китая часто была не радовала качеством, видео о сработке были короткими и не всегда удавалось разглядеть посетителя, да и программа их не всегда сообщала о сработке.
В итоге вчера решил разобраться с этим делом. На камере активировал rtsp, на Orange Pi установил motioneye (который использует motion) и имеет приятный интерфейс с различными настройками. Настроил детектор движения, с сохранением видео и фото. Также В этой программе есть возможность отсылать по сработке сообщение на почту либо webhok. Вот через него я и организовал с помощью POST запроса отсылку себе в телеграмм фото сработки и видеоролик движения. Теперь даже если малинку украдут, фото и видео останутся в телеграмме.
А у вас RTSP не падает? У меня на этой камере сервер раздающий поток отваливается спустя 1...10 часов после старта. Безо всяких на то причин. Т.е. работало работало раз и отпало. Именно что сервер останавливается в камере. Через интерфейс хака это видно. Можно перезапустить вручную. Но пока не знаю как это сделать извне автоматом.
Если речь про связку кубика и <какого-нибудь>PI с motion/motioneye, то в крон пишется простой скрипт, раз в минуту проверяющий вывод изображения службой. В случае невывода(неполучения) изображения нормального размера (размер устанавливается опытным путём) перезапускающий службу (могу подробнее). Белый кубик с хаком тоже имеется (приделан к ivideon), но не замечал чтобы он падал. Периодически падает motion (с ошибкой вида «Watchdog timeout» в логе).
Велосипед какой то, только еще и с деревянными колесами )))) А вот motion-project.github.io мне понравилось. Использую для других целей. А видео наблюдение в картинках не интересно. Есть давно круче видео наблюдение и не надо покупать дорогущие гаджеты. Полно экранное видео в hd качестве на любом устройстве и не важно где находишься!
1 Автор ссылается на тот же проект motion
2 У большинства людей скорости интернета наверх для HD -30 FPS не хватит если картинка динамическая, а если статическая, то она не интересна.

В каком веке живем? У кого не хватает? не поверю! Если только где то далеко за уральским хребтом и то думаю врятли!
У всех кто использует 3G свисток для интернета. А это значительная часть арендаторов в любом офиснике.
Может кто подскажет, можно ли в motion как-либо отключить сработку на движение в момент переключения камеры в ночной режим и обратно?

lightswitch


Type: Integer
Range / Valid values: 0 — 100
Default: 0 (disabled)
Ignore sudden massive light intensity changes given as a percentage of the picture area that changed intensity. The value defines the picture areas in percent that will trigger the lightswitch condition. When lightswitch is detected motion detection is disabled for 5 picture frames. This is to avoid false detection when light conditions change and when a camera changes sensitivity at low light.

1 У motion есть режим отправки фото и видео по движению чтоб не запускать скрипт с периодичностью.
2 камера умеет захватывать и звук который тоже интересен.
Перед отправкой конвертим ffmpeg'ом видео и звук в понятные телеграмму форматы.
На самом деле отдавать целую малину под такую фигню как то жирно.
Погугли всякие "умные дома" на малине плюсом к motion

Наличие дома гиперактивного котенка, увы, обесценивает идею )
Универсально решения конечно нет, но продукт очень гибкий — можно задать минимальное количество пикселей, которые должны измениться чтобы произошло срабатывание, можно задавать маски с мертвыми зонами или наоборот маски с зонами в которых должно произойти движение.итд итп
Действительно, как-то не подумал, кот, в любом случае, значительно меньше человека.
PS: а о том что он сорвал занавески или стянул со стола скатерть, со всем что на нем находилось, удобно знать заранее, до того как приехал домой.

Спасибо за статью, сейчас как раз подобное делаю для наблюдения за гаражом. В принципе у меня почти так же вышло, но всё равно интересно. Возьму себе supervisor :)

Ну вообще для этого правильнее sytemd использовать. supervisor это моё личное предпочтение
Больше года назад организовал себе на Rpi3 и совместимой шлейфовой ИК-камере видеоглазок на motion с отправкой скриншотов в я-диск по движению. Rpi встроен внутрь двери. Потом добавил ИК-диод (нужна длина 900+нм чтобы его не было видно вообще никак). Теперь видно в любое время дня и ночи происходящее за дверью вне зависимости от освещения. Сделал скрипт для автозачистки при переполнении хранилища.
Из последнего заметил и добавил motioneye. Полезно например для просмотра текущего скриншота (motion позволяет смотреть только текущее видео).
У меня в столе не нашлось камеры, но зато нашелся первый распберри и геркон (стоимость в магазине 50 р.). Геркон поставил на входную дверь, соединил с пинами GND и ближайшим GPIO. Далее слежу за состоянием GPIO. При изменении состояния отправляю сообщение почтой/телеграммой. Наверное последую вашему опыту и прикручу к этой связке камеру.
Занимался недавно похожим, правда без Motion просто с mjpg-streamer.
Платформы TL-WR902AC и Raspberry Pi 2 Model B, на которые установил LEDE (OpenWrt). Telegram bot (черновой, но работающий вариант) написал сам на LUA (+ uHTTPd). Кроме картинок с камеры бот умеет выполнять modbus команды и другие фокусы.

Рассказал бы про «modbus команды и другие фокусы». Многим наверное интересно.
Да, было бы интересно узнать поподробнее об этом в формате статьи.
Мне показалось удобнее писать в mp4 по движению и по оканчании файла слать в телеграм:
on_movie_end /usr/local/bin/message2telegram.sh file "#motion detected on DoorEye at %H:%M:%S %d-%m-%Y" "%f"

Плюсы: до 10Мб телеграмом расцениваются как gif. На видео лучше видно происходящее.
А можно попросить содержимое message2telegram.sh?
Доброго дня!
Большое спасибо за интересную статью.
Начал писать по вашей статье. Получается в несколько раз меньше строк. С удовольствием обсудил бы оптимизацию кода.
У меня сразу возник вопрос: как можно ботом отправлять сообщения непосредственно пользователю по его номеру а не в чат? У меня не получилось.
И вам!
Если Вы увидели какую-то реальную проблему в коде, которая может мешать стабильности или безопасности — я буду очень вам благодарен за эту информацию.

Нет, речь пока идет только про оптимизацию, я глубоко пока не анализировал.
Вот, например:


users = [123567890, 123567891]

def is_known(user):  # Функция проверки авторизации
    return user in config.users

def sendall(text):  # Функция массвой рассылки уведомлений
    for user in config.users:
        try:
            bot.send_message(user, text)
        except Exception as exc:
            print('%s Ошибка отправки сообщения %s пользователю %d: %s'
                  % (str(datetime.datetime.now()).split('.')[0], text, user, exc))

Идеологию мое преобразование не меняет, но вод код становится приятней 'на ощупь'.
Но это мое субъективное мнение.
Я тоже сисадмин, но в свое время окончил вуз на программиста-системщика.
Пайтон изучаю самостоятельно, но полюбил его и чувствую, что это взаимно.

Вдогонку (редактировать сообщение не дает):
т.е. себе я могу отправить сообщение, т.к. бота создал я, а кому то другому не могу. Получаю ошибку:
A request to the Telegram API was unsuccessful. The server returned HTTP 403 Forbidden.
Response body: [b'{«ok»:false,«error_code»:403,«description»:«Forbidden: bot can\'t initiate conversation with a user»}']
Всё так. Дело не в том что вы его создали а в том что сами инициировали с ним диалог. Человек которому вы хотите написать — должен так же сначала сам пообщаться с ботом.
Очень интересная статья, спасибо! Интересовался тем, чтобы сделать аналогичную штуку, но не знал с чего подступиться. Сейчас рассмотрел свои запасы. Малину у себя не нашёл (у меня её никогда не было, впрочем), зато нашёл аналогичную камеру и карточку, теперь осталось раздобыть платформу, на которой можно сделать то, что сделано у вас.
Делал аналогичное решение. У себя я дополнительно сделал анализ клиентов wi-fi, если устройств из списка нет охрана автоматом включается, если есть — бот ничего не шлёт. Правда у меня несколько комментариев проще все, ip-камера умеет сама складывать фотки на ftp при движении в зоне. Мне осталось лишь их отправить.

Спасибо за заметку.
У меня тут как раз Raspberry PI(правда, постарше, вторая ещё) висит, на которую заведены и видеонаблюдение, и сбор данных с нескольких датчиков температуры/влажности, раскиданных по дому, и скоро должен приехать пучок релюшек Sonoff для управления светом и прочими
Я как раз подумывал ко всему этому прикрутить телеграм-бота, а тут ваша статья.


Правда, касательно самого видеонаблюдения, у меня всё несколько сложнее, потому что частный дом, камера не одна, а уже 4(и будет больше), и все они смотрят на улицу. Через это в моем случае рациональнее оказалось ставить железный видеорегистратор, который сам умеет следить за движением и отправлять сообщения по почте.
Другое дело, что с учетом того, что камеры уличные, лог сработок на шкале времени выглядит примерно вот так:


множество сработок за день


И это ещё не самый "активный" день.
С одной стороны — все эти сработки неплохо иметь в архиве, чтобы, например, во время отпуска можно было вечером за небольшое время посмотреть "ретроспективу" за день. С другой стороны — если каждую сработку показывать в телеграме, то поток сообщений будет слишком густым и малополезным.


Поэтому я пока ещё работаю над всем этим и думаю, как сделать правильнее. Пока видятся два возможных пути — либо прикручивать второй слой анализа картинок(например, ZoneMinder), либо ставить дополнительные датчики движения, и заводит их на "тревожные" входы регистратора.


В общем, копать — не перекопать 8)

За статью спасибо.
На правах баг-репорта:
если не создать last.txt и не записать туда число, то sender.py не будет работать?
Если включить в motion web контроль
motion.conf
webcontrol_localhost on
webcontrol_port 8080
stream_localhost off
stream_port 8081

то возможно управлять motion сервисом через requests
примерные запросы
Остановить motion detection
http ://localhost:8080/1/detection/pause
Запустить moton detection
http ://localhost:8080/1/detection/start
Текущий статус
http ://localhost:8080/1/detection/status
Создать snapshot можно вызывать перед отправкой вместо того, чтобы создавать каждые 30 минут
http ://localhost:8080/1/action/snapshot
Добрый день!

Поясните пожалуйста, зачем это делать?
Гораздо удобнее управлять через Телеграм.
Так прямо через Телеграм и будет управляться, просто в скрипте выполняется requests.get(url) и когда система снята с охраны motion ничего сохранять на флешку не будет.
P.S. естественно правильнее будет stream_localhost on — я ошибся
Чего-то не детектирует он у меня движение. Фотки послать может, а движение слабовато как-то, надо пузо в обьектив сунуть, чтобы уверенно сработал. Да, знаю, что можно подстроить, но очень сильно загрублено по дефолту.
Ну и еще поворчу, а то автору счастья не будет — похоже, не пробовал никто повторить — одни критики.
Итак, в строчке:
command=/usr/bin/python3 /home/bigbro/botbot.py
слеша не хватает, догадайтесь, где
Motion запускать надо при загрузке, с sudo, сам по себе он в загрузку при инсталляции не пропишется. Да и инициализацию видеокамеры тоже бы неплохо, чтобы появилось /dev/video0, в случае RPI Camera Module sudo modprobe bcm2835-v4l2
И еще. sudo apt-get upgrade надо сделать в самом начале, после установки системы на карту. И не работать под рутом. И добавить настройку вайфай, провода сейчас все же в прошлое уходят.
Все остальное работает отлично, не к чему придраться. Спасибо огромное!
Мало у кого есть такой комплект. Мало кто пробовал поэтому. Я попробовал, что-то заработало (могу получать текущее изображение), что-то не доделал (сигнал при срабатывании детектора), но пока забросил ввиду не особо большой актуальности на сей момент (не NAT, в любой момент могу получить как текущую картинку так и результаты детекции в я.диске, кстати, не соглашусь про грубость срабатывания, threshold в 1500 изменённых пикселей по умолчанию это довольно хорошо, на уровне детекции даже не кошки за дверью а чего-то поменьше, летающих насекомых, вопрос в разрешении, норма — FULLHD с его ~2млн пикселей и, возможно, в частоте кадров, для снижения нагрузки у меня 1 кадр/c).
Куда хуже в моей связке(rpi3+csi-камера) периодическое зависание службы motion по непонятным причинам (в логе в этот момент фигурирует вотчдог) + часто рэндомно ставящаяся (часто недостаточная, с излишней справиться было проще) яркость, из-за чего может не срабатывать детекция, но тут уже дело скорее в V4L2. Пришлось писать несколько скриптов для определения наличия нормального изображения в кадре и его параметров (спасибо imagemagick) для передёргивания службы при её зависании либо при слишком тёмном/светлом изображении. Ну и motioneye помогает.
Плюс необходимые скрипты для очистки локального каталога с картинками motion и корзины я-диска. Без этого всё ломается через какое-то время.
Вот мой вариант бота для OpenWrt, работает из коробки, взять можно на GitHub.
Нужен только доступ в shell, а так-же curl + json парсер (в идеале, но можно и без него через grep/awk/sed сделать), т.е. будет работать практически на любых железках.
Команды оформлены в виде плагинов для примера, а в самом телеграме сразу кнопочки рисует.
Only those users with full accounts are able to leave comments. Log in, please.