Позднее Ctrl + ↑

«ДНС» на Говорова

Понадобилась мне тут мышь взамен сломанной. Так как день был выходной, то решил зайти в ближайший компьютерный магазин «ДНС». Нашел мышки, начал рассматривать. Я, в принципе, не так уж часто заглядываю в упаковку — нет надобности. Но тут что-то нашло. Начал вскрывать упаковки. И ладно бы если только они были надорваны — это могли сделать покупатели. Но следы грязи на кнопках от пальцев (в процессе использования на них собирается грязь с рук) меня просто убили. Одна, вторая, третья, четвертая... Да вы что, издеваетесь? В общем, магазин, как говорится, «ни разу не палится», выкладывает мыши, которые явно не один месяц перед этим провели на стенде. И никто ничего бы не заметил, если бы их хотя бы протерли перед тем, как заново упаковать и выложить на продажу.

Создание бота Telegram

Для чего мне это понадобилось? Как писал ранее, телефон не всегда почему-то проверяет почту, несмотря на заданный минимальный интервал проверки. Более удобным показалось использовать telegram для срочных оповещений. Задавшись этой целью, установил на сервер telegram-cli, который, как оказалось позднее, не понадобился. Снесу, однако :-)
Для начала создаем бота при помощи @BotFather. Задаем ему имя и описание. Я также задал и юзерпик для красоты. Открываем чат с этим ботом, набрав в браузере ссылку https://t.me/<имя_вашего_бота>. Затем нужно узнать ваш идентификатор. Для этого я воспользовался ботом @userinfobot, вы можете использовать другие методы. В принципе, вся нужная информация у нас есть.
Следующей задачей стала отправка сообщений из скрипта linux. Здесь нам поможет стандартный curl. После серии опытов обрисовалось примерно вот такое тело скрипта:

ChatID=*****
BotToken=******
Text="Hello, world!"

curl -s -X POST "https://api.telegram.org/bot$BotToken/sendMessage" -F chat_id="$ChatID" -F text="$Text"

Здесь ChatID, BotToken и Text — ваш идентификатор в telegram, токен бота, который вам выдали при его создании, и текст сообщения, соответственно. Хочу обратить внимание на то, что переменные в строке curl взяты в двойные кавычки. Это сделано для того, чтобы избежать утери части текста, если в нем присутствуют пробелы.
С текстом разобрались, остается отправка фотографии. Здесь все чуть-чуть сложней:

curl -s -X POST "https://api.telegram.org/bot$BotToken/sendPhoto" -F chat_id="$ChatID" -F photo="@$1" -F caption="$Text"

Добавился еще один параметр photo, в который передается имя файла. Полный путь к файлу у меня передается самому скрипту, поэтому просто используем его. Также параметр text из предыдущего примера я заменил на необязательный caption — название фото.
На текущий момент motion оповещает меня об обнаружении движения, чуть позже присылает фото и ссылку на файл с записью. В планах еще добавить обнаружение лиц на фото, чтобы было видно кто пришел или ушел. Следующим шагом может стать, например, автоматическое включение моего компьютера когда прихожу домой.

Настройка motion

Так как незадолго до этого мой сервер «приказал жить» (оказалось, что проблема в кабеле питания камеры, но сейчас не об этом), то заодно заново установил систему и, соответственно, перенастраивал половину программ. В том числе и motion.
После настройки оказалось, что в кадре присутствуют помехи, на счет которых у меня была мысль. Но проверить ее удалось только вчера. И действительно, оказалось, что я подключил питание камеры к кабелю, на котором было расположено питание жесткого диска, который и создавал наводки в питании камеры. Переключение на другой кабель устранило эту проблему.
Затем вспомнил, что давно хотел ускорить получение сообщений о появлении движения в поле зрения камеры. Самым подходящим для этого показался Telegram. Поиск соответствующих пакетов в репозитории выдал результат в виде пакета telegram-cli. После его установки никак не получалось его активизировать. По идее, после запуска программы она должна выдать запрос на авторизацию, но ничего не происходило. Процесс висел достаточно продолжительное время, после чего просто выдавал сообщение о крахе. «Игры» с ключами ни к чему не привели, результат был таким же. Вопрос в чат разработчиков остался без ответа. Остается только оставить такой же вопрос на форуме и надеяться на то, что хоть кто-то ответит на него. И, конечно, гуглить, яндексить и так далее...

Перенос owfs

С учетом того, что сервер порой не работает по непонятным пока что причинам, было принято решение перенести owfs на роутер. Он, конечно, и так достаточно загружен, но с отправкой данных один раз в 5 минут, думаю, справится. Для чего нужен owfs? Для считывания данных с датчика температуры и отправки данных на другие серверы типа narodmon.ru.
Поначалу роутер не видел USB-TTL адаптер, пришлось установить еще один дополнительный пакет. После его установки и перезагрузки роутера в списке устройств появился адаптер. Дальше было делом техники: установить owserver, переконфигурировать файл ownet.php на сервере, чтобы он забирал данные с роутера и выдавал их на сайт. Затем просто проследить, что все это работает.
К сожалению, далеко не в первый раз, оказалось, что сервер narodmon периодически перестает отвечать на отправку данных и, по истечении указанного времени, шлет сообщения о том, что мой сервер ничего не присылает. Просмотр журналов работы показывает, что в период, когда narodmon не «получает» от моего сервера данные, последний вполне успешно их отсылает, но narodmon не подтверждает их получение. В общем, мутная достаточно ситуация... В тоже время WeatherUnderground вполне успешно сигнализирует о получении данных, что позволяет сделать заключение о том, что проблемы на стороне narodmon. От чего они, впрочем, вполне ожидаемо, открещиваются.

Новое «поступление»

Даже прямо не знаю какое из слов в названии взять в кавычки...
Забрал из приемной два принтера и монитор для видеонаблюдения. Монитор пусть пока постоит без дела (возможно, придумаю куда его приспособить), а вот принтеры решил сразу проверить. Один из них Canon e-Studio 203, достаточно тяжелый, кое-как поставил его на стол. А потом еще и спустил. Из обнаруженных проблем у него — заминает бумагу при печати. Либо на выходных, либо после праздников надо будет проверить почему он так делает. Было бы неплохо его починить.
Второй принтер Canon i-Sensys MF4018 оказался, можно сказать, в идеальном состоянии. Печатает нормально, недочеты есть только у сканера — немного осветляет картинку. Оставил его для себя, отказавшись от более громоздкого MF3200. Впрочем, последний недолго у меня продержался. С утра несколько раз застревала бумага у одного из работников. В итоге я плюнул и отдал ему этот MF3200, потому что у него стоял такой же, но уже наполовину «убитый»: передняя крышка держится на изоленте и на «одном крыле». И, видимо, нужно его перебрать и установить причину застревания бумаги.

Мысли вслух

Небольшой дайджест последних событий.

  1. Всю неделю хожу и поглядываю на конверторы в шкафу. С тех пор, как купил и установил для них шасси, сделал охлаждение, еще ни один не сгорел. До этого момента раз месяц-два хотя бы один, но сгорал. Такое положение дел не может не радовать. Остается только придумать как сделать активное охлаждение — лето не за горами.
  2. Один из арендаторов на заводе задолжал некоторую сумму и частично расплатился с заводом техникой. Наконец-то у меня появился запас мониторов. МФУ поставил взамен старой в отделе аренды — уж больно долго она разогревается да и вообще ей нужен небольшой ремонт.
  3. Проверил принтеры, которые стояли у меня в кабинете. До этого все как-то руки до них не доходили. Принтер карт потребовал чистящий набор. Покопавшись в шкафах нашел одну половину, что его не устроило, потребовал весь комплект. Поискав еще, нашел недостающую часть, провел полную чистку. Печатает нормально, но, как у всех, наверное, принтеров такого класса, есть отклонения в цвете. Не удержался, распечатал себе карту с логотипом Ingress и ником из игры. Затем завернул принтер в пакет, чтобы не пылился, и убрал в шкаф. Остальные принтеры (струйные) пожаловались на закончившиеся картриджи. Надеюсь, что головки не засохли и дело только в самих картриджах, потому что оба принтера достаточно высокого класса. Не хотелось бы их «потерять».
  4. Оля себе на день рождения заказала 5 бутылок алкоголя (коньяк, вино, чача). Так как заказывают обычно по 4 бутылки, то добавил еще 3 для себя (коньяк и вино). Все заказы дошли от Сочи до Красноярска менее, чем за 10 дней. Ехали они при этом через Москву. Треки отлично отслеживались в программе TrackChecker Mobile — она, как и ранее, работает отлично.
  5. Спустя черт знает сколько времени закончился тонер в домашней МФУ. Года два, наверное, прошло.
  6. Незадолго до этого сгорел ИБП, стоявший на сервере. Батарею раздуло так, что пришлось его разбирать, чтобы ее вытащить. Наводит на мысль о том, что ИБП неисправен. Благо, что у меня еще парочка есть. Но сначала придется покупать новую батарею.
  7. Сегодня позвонил главный бухгалтер. Нашла какой-то договор с «Красноярской сетью», они до сих пор платят по нему 500 рублей в месяц. Так как на заводе нет точек, которые к ним подключены, пришлось звонить им и разбираться. Оператор дала MAC-адрес устройства, куда был подключен кабель. Сильно смахивает на адрес роутера, который отвечает за видеонаблюдение. При этом точно знаю, что там сейчас используется Intertax. Чуть позже оператор перезвонила и ответила на заданный мною ранее вопрос по трафику. Оказалось, что с января месяца он равен нулю. Возможно, что и ранее было так же, но мне хватило и таких данных. Почему договор не был закрыт раньше — непонятно. Видимо, это никому нафиг не было нужно.

Перенос домена

Никогда не задавался такой целью, да и необходимости такой никогда не было. В процессе оплаты одного из сайтов СТМ выяснилось, что домен зарегистрирован у одного регистратора, а сам хостинг располагается у другого. Картина достаточно «печальная». Почитав правила, стало понятно, что без заявления, заверенного у нотариуса, перенос никто делать не будет. Так как владельцем домена является генеральный директор, то понятно, что времени у нее на посещение нотариуса нет. Печаль...
Вбиваем в поиск запрос на перенос домена от этого регистратора. И тут же натыкаемся на информацию о том, что никакие заявления уже не нужны. Идем в личный кабинет, выполняем все действия по инструкции. Тут меня ждал первый облом — для получения кода переноса требуется верифицировать персональные данные. Подаю заявку, мне отвечают «ждите сутки». Да не вопрос, подожду!
На следующий день приходит письмо, что аккаунт проверен, можно продолжать. Снова иду в личный кабинет, запрашиваю код. Второй облом — необходимо внести данные для смены регистратора. Указанные в профиле данные не годятся. Ладно, забиваю свой номер телефона и email. Подтверждаю оба, снова запрашиваю код. Среди прочих вариантов выбираю отправить его на электронную почту. Третий облом — состояние домена не позволяет получить код. Эт еще почему? Повторяю процедуру запроса, на этот раз все получается. Видимо, еще выполнялось сохранение данных для переноса. С кодом в зубах, а точней, в письме, иду в личный кабинет регистратора, к которому нужно перенести домен. Уже понимая, что сам не найду, сразу открываю справку, где процедура переноса, как оказалось, расписана очень подробно и даже с картинками (вот за это я его тоже люблю! в смысле регистратора). Снова действуем по инструкции, вбиваем код переноса и выполняем еще парочку подтверждений. В конце получаю письмо с уведомлением, что процесс переноса может занять до 5-ти рабочих дней. А мне что? Мне торопиться некуда.
В общем, вот такой вот маленький квест получился. Перенос домена от одного регистратора к другому — процедура хоть и простая, но в процессе у вас запрашивается куча подтверждений. Ну и, конечно, лучше всего 100 раз проверить что, куда и откуда. А то ведь бывало, что щелкнешь не туда, нажмешь не ту кнопочку и все, ты попал. Хорошо еще, если на небольшую сумму :-)

Ремонт сервера

В какой-то момент надоело, что сервер ведет себя неадекватно: перезагружается, становится недоступным извне, «повисает» и так далее. Поначалу грешил на жесткий диск, потому что он б/у и, хотя и прошел все проверки, но доверие к нему было подорвано. Заменил «шило на мыло» — поставил другой диск, тоже б/у. Накатил систему по новой. Ситуация не изменилась, сервер работал по прежнему неустойчиво. С новым, купленным в магазине диске, все было также. Стало очевидно, что проблема не в нем. Пришлось поскрести по сусекам и найти другое «железо». По итогу заменил практически все: материнскую плату, процессор, жесткий диск. Оно, конечно, не сильно новое, звезд с неба не хватает, но для консольной системы, которая нетребовательна к ресурсам компьютера, его вполне хватает. Да и нагрузка небольшая.
Систему решил также поставить заново, тем более, что появилась новая версия. Чтобы немного почистить уже имеющиеся настройки, все настраивал заново, только частично используя старые файлы конфигурации. Ну и потихоньку, когда есть время и желание, восстанавливаю тот набор программ, который был до этого: почта, сайт, видеонаблюдение, базы данных и так далее. Некоторые вещи не работают, но поскольку они не критичны в данном случае, то устранять их тоже буду неспешно.

Замена карты захвата

На аукционе нашел карту захвата для видеонаблюдения, которая поддерживает подключение 4 камер. Сегодня вытащил ТВ-тюнер из компьютера, установил эту карту, переделал штекера под нее и  подключил камеру обратно. Скажем так, ничего визуально не изменилось :-) Заодно решил проблему когда картинка по какой-то причине исчезала. Все дело было в замыкании контактов в штекере. Сделал изоляцию, проверил, все работает нормально, проблемы нет. Попутно заменил штекер на камере на более, на мой взгляд, надежный.
Пока все делал, наткнулся на еще одну «проблему» — нехватку места. Изначально все файлы создавались во временном каталоге. После 10 минут съемок место в нем просто заканчивалось. Изменил каталог на другой, с бОльшим свободным местом.
Можно считать, что установка, настройка и тестирование завершены и видеонаблюдение введено в эксплуатацию.

Установка видеонаблюдения

Первоначальные испытания

Все подготовительные работы завершены, камера установлена, программное обеспечение тоже. Все работает, все снимает, можно просматривать в «онлайн» режиме. А теперь как все это было.
Установка кронштейна для камеры никаких проблем не вызвала — пробурил три отверстия, два их них пришлось делать неглубокими, бур во что-то уперся и ни в какую не хотел идти дальше. Ладно, мне и половинной глубины хватит, камера легкая. После закрепления камеры проверил как она держится и остался вполне доволен результатом. Кабель для подключения со стоны камеры был распаян еще раньше, поэтому мне оставалось только осуществить подключение. Затем проложил его до сервера, обрезал лишнее, распаял второй конец и подключил к серверу. Во избежание лишних проблем сервер перед подключением выключил.
Затем настала очередь программного обеспечения. Поначалу был установлен ZoneMinder. Настроил его на использование сигнала с ТВ-тюнера, указал с какого входа его брать и... в принципе, на этом основная настройка была завершена. Но потом я несколько дней бился с проблемой отображения «живой» картинки с камеры — ее просто не было. И так подходил к проблеме, и этак — ни в какую. Общение на форуме с одним из разработчиков показало, что мне не хватает... видеокарты в сервере. Этот момент я слегка не понял, но, в любом случае, покупка и установка дополнительных плат в сервер меня не устраивала. К тому же в ZoneMinder обнаружился еще несколько моментов, которые меня тоже не устраивали:

  1. создание нескольких событий (и, соответственно, видеофайлов) в журнале, если в движении была пауза;
  2. всё событие сохранялось в куче jpeg-файлов (момент спорный, но все же);
  3. не было также нормального отображения события в формате видео;
  4. для выгрузки/создания видеофайла нужно было лезть достаточно далеко, чтобы нажать соответствующую кнопку;
  5. нет возможности создать свою реакцию на событие.

Через несколько дней опытов был установлен motion. Несмотря на всю свою аскетичность, эта программа мне понравилась намного больше.

  1. Есть возможность задать длительность паузы между двумя событиями. В этом случае два события считаются одним и записываются в один видеофайл;
  2. событие сохраняется в куче jpeg-файлов, которые, впрочем, затем можно удалить автоматически;
  3. есть «живой» просмотр камеры, наличие/отсутствие видеокарты не сказывается никак;
  4. видеофайл создается автоматически сразу по завершении события;
  5. на каждый «чих» можно задать свою реакцию.

С motion поначалу тоже пришлось поразбираться. Например, не мог понять почему jpeg-файлы создаются в максимальном качестве, а в видеофайле картинка в виде «квадратов». Решилось увеличением скорости потока видео. Размер видео оказался снова привязан к числу 16, но в файле конфигурации можно указать число кратное 8-ми. В этом случае программа изменит разрешение на ближайшее 16-тикратное. Были еще несколько моментов, но это были лично мои предпочтения, поэтому не буду их описывать.
Так как видео создается автоматически, оставалось только создать реакцию на конец создания видеофайла. В моем случае ей стало выполнение нескольких действий:

а) удаление «старых» файлов jpeg, из которых было создано видео;
б) отправка сообщения на электронную почту о событии с именем созданного файла.

Изначально сообщение «повесил» на одноименное событие, но оказалось, что оно происходит каждый кадр, поэтому писем было более сотни за раз.
Следующее, что мне захотелось, это просматривать камеру с телефона на android и с компьютера. Для телефона нашлась программа SimpleMjpegView. Единственным ее недостатком можно считать то, что показывать она может только одну камеру, для всех других придется переписывать путь подключения. Для Windows также нашлась «легкая» и простая в использовании программа SecurityCamViewer. Ее настройка, так же как и многих других подобных программ, производится в единственном конфигурационном файле, открыть который можно в обычном блокноте.
Еще одна «хотелка», которую я пока что не реализовал, остается выгрузка avi-файлов куда-нибудь в облако. Для пущей сохранности и увеличения доступности.

Ранее Ctrl + ↓