Заметки любителя экспериментов

Позднее Ctrl + ↑

Сборка новой метеостанции

Увы, после обновления движка блога картинки перестали вставляться. Забываю отписаться автору движка и узнать об этом. Сейчас прочитал у него на сайте, что да, был такой баг, но он исправляется изменением формирования адресов в настройках. Хотел вставить в эту заметку картинки, но придется обойтись без них. Если не забуду, позже добавлю. Но это все лирика, переходим к основному вопросу.
Вчера весь день почему-то было страшно начинать сборку новой метеостанции. Сегодня пересилил себя и засел ее собирать. Все датчики не стал паять сразу на плату, использовал разъемы. В дальнейшем это позволит мне быстро заменить вышедший из строя датчик. Нужно будет только перед тем, как размещать ее на улице, залить контакты «пистолетным» клеем.
В ходе сборки столкнулся с проблемой — не заработали датчики am2320 и bme280. Проблема со вторым оказалась в коротком замыкании между двумя контактами, устранил быстро. А вот первый так и не «завелся». Позже соберу его на беспаечной макетке, но думаю, что там он заработает нормально. Проверю.
Еще меня мучает один вопрос. Если со старым датчиком температуры я его решил, написав скрипт, который может накапливать данные при отсутствии связи с сервером, то как себя поведет новая станция, когда эта связь пропадет?
Пока же остается только протестировать работу новой схемы, попутно подбирая корпус для нее, упаковать ее в этот самый корпус и прикрепить снаружи. А также провести электричество на лоджию и постараться ее хоть немного утеплить.

Скрипт передачи данных на сервер narodmon.ru

Как и писал ранее, в какой-то момент надоело, что роутер периодически не может отправить данные на сервер, поэтому пришлось немного подредактировать его. После недельного тестирования отправил его администрации ресурса и, после некоторых уточнений, он был добавлен на сайт. Сейчас он находится в разделе «Справка» — «OpenWRT, OR-WRT» — «6. Скрипт для отправки показаний с отказоустойчивостью». Сам скрипт был размещен на github. Было добавлено краткое описание работы и кусок журнала его работы, из которого видно как он накапливает данные во время отсутствия связи с сервером, а затем, когда она появляется вновь, отправляет все недоставленные пакеты.
Самый «интересный» на мой взгляд момент состоит в том, что в моих планах заменить текущий датчик температуры на другие, которые будут передавать данные через домашний WiFi, что, в свою очередь, означает, что я не смогу воспользоваться пакетом owfs и скрипт будет бесполезен для меня. Хотя возможно, что я оставлю этот датчик в качестве «контрольной группы».

Подключение датчиков

Вчера купил пару bme280. Утром пришел на работу с большим желанием подключить его и посмотреть на показания. Достал из рюкзака пенал с паяльными принадлежностями... А он внутри залит спиртово-канифольным флюсом. Запах сильный, конечно. Пришлось потратить кучу времени на отмывание всего, что было в пенале. Как оказалось, лопнула крышка у банки с флюсом.
Дождавшись когда все просохнет, воткнул в макетку все датчики, которые у меня есть: am2302, am2320, DS18b20 и bme280. Затем отправился на сайт за прошивкой с поддержкой bme280. Эта функция оказалась платной, поэтому пришлось также заплатить за лицензию. Цена небольшая — всего 110 рублей, но есть привязка к устройству. Иными словами, вы не можете использовать одну лицензию для разных ESP8266. Ну да ладно, я пока не собираюсь массово их закупать.
Настроил все необходимые параметры в модуле и вернулся на главную страницу, где отображаются показания все датчиков. Показания меня несколько удивили. Так bme280 показывал температуру примерно на 1 градус выше, чем все остальные датчики. Влажность отличалась у всех трех: am2302, am2320 и bme280. И только температура через некоторое время стала примерно равной у всех. Так как давление у меня умеет измерять только один, пришлось сравнивать показания с ближайшими датчиками на сайте narodmon.
Итог:

am2320 am2302 bme280 ds18b20
Температура 27,6 27,5 28,6 27,6
Влажность 45,0% 43,2% 36,7%
Давление 743,30 mmHg

UPD. Уже ближе к вечеру наткнулся на датчик освещенности и углекислого газа. Последний, после коротких раздумий, решил не брать, а вот первый взял, не выдержал. Заодно приобрел пару коробочек для будущей метеостанции.
Остается решить только один теоретический вопрос. Для измерения некоторых вещей, таких как давление, влажность, освещенность, требуется создать в боксе отверстия. Но отверстия нужно создать так, чтобы в них не попадала вода, чтобы они не перекрывались льдом при наступлении зимы. Думаю, что нужно попробовать связаться с теми пользователями narodmon, которые уже сделали что-то подобное и выяснить у них этот вопрос.

Еще одна модификация скрипта

Сутки наблюдения за модифицированным скриптом отправки данных на narodmon.ru показали, что есть огрехи в выбранном алгоритме — данные отправляются, сервер отвечает с задержкой, которую скрипт воспринимает за «молчание» сервера. Спустя некоторое время, от 15 минут до одного часа, сервер все-таки отвечает за настолько короткий промежуток, что скрипт успевает его «поймать». Пришлось еще раз изменить скрипт. На этот раз был добавлен цикл, в котором данные отправляются, затем он ждет 5 секунд ответ от сервера и, если ответ не получен, повторяет отправку данных. После 5 попыток отправки цикл сбрасывается и начинает накапливать данные во временном файле. Анализ журнала отправки показал, что данные отправляются если не с первого, то со второго раза. Будем продолжать наблюдение.

Подключение датчиков к ESP8266

На прошлой неделе попробовал таки подключить датчики к ESP8266. Собрал схему на беспаечной макетке, залил бесплатную прошивку от WiFi-IoT, настроил ее на рабочий WiFi и начал подключать сами датчики. Для начала попробовал AM2302. В настройках прошивки указал пин, к которому подключил датчик и вернулся на главную страницу, где должны отображаться показания. Датчик отобразил температуру, а вот с влажностью вышел прокол — показывал 1%. Списав это на косяк датчика, подключил AM2320, практически такой же. Этот верно показал все данные: температуру, влажность. Дальше на очереди был DS18B20. Подключил его на другой пин, указал в прошивке нужные параметры и вуаля! На этот раз на странице были показания двух датчиков: AM2320 и DS18B20.
Дальнейшие опыты показали, что в бесплатной версии прошивки я не могу использовать более одного датчика типа AM2302. Также припомнил, что влажность у них отображается не сразу, а спустя некоторое время. И при этом данные отображаются с некоторым запозданием. С этим ничего не поделать, такая у них технология работы. Оба датчика AM2302 и AM2320 работают нормально, все показывают верно, но есть небольшое расхождение с DS18B20, в 1-2 градуса. Так как последний более точен, по сравнению с остальными, то и веры ему больше :-)
В планах приобрести еще один — BME280, у которого, помимо температуры и влажности, есть еще измерение давления. Тут главное не ошибиться при приобретении, потому что он выглядит аналогично BMP280, который, к сожалению, давление не измеряет.
Благодаря тому, что ESP8266 7-й версии имеет множество пинов, есть возможность подключения кучи датчиков и/или реле.
И, похоже, что придется ставить еще один температурный датчик в квартиру, а то и не один, в каждую комнату. В начале месяца скачал квитанцию с сайта ГУК «Жилфонд», посмотрел сколько начислили за май месяц. Среди прочих платежей было доначисление за отопление за последние 5 месяцев. Так как сумма вышла не маленькая, порядка 10 тысяч рублей, а температура в квартире в зимний период оставляла желать лучшего, придется, видимо, вызывать следующей зимой работников ЖЭКа, когда в квартире станет холодно. Поговорив с некоторыми соседями, узнал, что у них также были большие начисления за отопление — от 10 до 15 тысяч, а в квартире было холодно.

Отправка данных на narodmon.ru

Так как порой случались сбои в отправке данных на сервер narodmon (нет интернета, сервер занят либо ничего не отвечает и т. д.) принял решение немного модифицировать скрипт отправки. В идеале, в случае любого сбоя данные должны накапливаться и затем, когда все «устаканиться», скопом быть отправлены.
Скрипт был модифицирован, были внесены несколько дополнительных проверок и он ушел в работу. В ходе работы создается временный файл, куда пишутся все данные. Если сервер narodmon ответил, что данные приняты нормально, то содержимое файла удалялось. В противном случае данные добавляются в этот файл с отметкой времени, когда они были добавлены.
Но, как обычно, не обошлось без ложки дегтя. В случае, если сервер не отвечает достаточно долгое время, данных накапливается много (в обычном варианте замеры проводятся каждые 5 минут). Когда их размер превысит 4 Кб, сервер narodmon, насколько я понимаю, просто откажется принимать такое множество данных. Но тут ничего не попишешь, будем тестировать и смотреть что получится.

Первый опыт с ESP8266

Не так давно приобрел ESP8266-07 с адаптером под «гребенку» с шагом 2,54 мм. Давно была мысль попробовать что она из себя представляет, а тут просто вспомнил и прикупил. Обошлось мне все это буквально в 275 рублей. Думаю, что это не та сумма, которую было бы жалко за опыт.
До экспериментов несколько дней руки не доходили, пока не утащил на работу Там, когда выдалось свободное время, занялся платой. Для подключения использовал беспаечную плату, кабели для подключения и адаптер USB-TTL. Для начала система, как обычно, скачала и поставила драйверы на адаптер, затем уже я начал собирать схему.
Без приключений не обошлось. Поначалу компьютер ни в какую не хотел «общаться» с ESP. Не считывал данные, не мог перепрошить, вообще ничего не мог с ней сделать. Плюсом к этому всему была «любовь» Windows к работе с COM-портами. Здесь я подразумеваю тот момент, что если ты не освободил порт (например, программа зависла и ее пришлось завершать принудительно) или сделал еще какие-то его настройки, «несовместимые» с Windows — тебя ждет перезагрузка системы. Сколько я этого «накушался», когда занимался торгово-кассовым оборудованием!!!
И вот, ура! Адаптер определился программой, можно считать параметры и так далее. Первое, что я сделал — перепрошивка. Особой надобности в этом не было (по крайней мере, пока что), просто хотелось получить опыт в этом направлении. С перепрошивкой пришлось помучиться. В итоге, программа залила на плату другую прошивку, но в самом конце выдала сообщение о невозможности выхода из режима прошивки. Пока пытался что-то сделать с платой, привести ее в рабочее состояние, сложилось впечатление, что я получил «кирпич». В тоже самое время не покидала мысль, что ЭТО невозможно убить. Заменил программу прошивки. Поначалу смутило множество настроек — память подсказывала, что почти все они критичны для прошивки. Поменял те, которые, на мой взгляд, было нужно и перепрошил. Получил рабочую плату, которая перезагружалась в самый неожиданный момент. Снова битва с прошивальщиком... В конце концов я получил вполне работоспособную плату, которая адекватно реагировала на команды и не перезагружалась в самый неподходящий момент. В итоге, причиной всех перезагрузок платы оказался плохой контакт питания. Но это я понял уже в самом конце экспериментов.
Завтра возьму с собой на работу датчики, попробую подключить к плате, прошив перед этим NodeMCU — там есть возможность использовать скрипты на lua. Посмотрим что из этого всего получится...

Мой «сосед»

Как говорится, ничто не предвещало...
Вчера вечером раздается звонок в домофон. Я бы его вообще не услышал, потому что курил на лоджии, но у собаки есть дурацкая привычка заливаться лаем каждый раз, когда кто-то звонит в домофон или дверной звонок. Снимаю трубку, спрашиваю кто там. Меня в ответ спрашивают не проживает ли по данному адресу такой-то. Нет, говорю. После чего мне сообщают, что это милицию и они хотят мне задать несколько вопросов. Впускаю их и иду открывать входную дверь. На пороге стояли два молодых человека, один из которых предъявил мне удостоверение работника милиции. Хорошо, теперь я готов к разговору.
В ходе беседы оказалось, что по их данным в моей квартире прописан житель Кыргыстана. Я слегка удивился. Мне показали бумагу, в которой черным по белому в строке с ФИО этого гражданина был написан мой адрес. С учетом того, что я живу в этой квартире более 10 лет, это слегка, скажем так, не соответствует действительности. Сама же квартира была куплена еще перед поступлением сестры в ВУЗ, то есть более 20 лет.
В конце они записали мои данные, написали от руки заявление, что квартира принадлежит мне, проживаю я с женой и указанный гражданин здесь не числится и не проживает. После этого извинились и ушли.
Чуть позже я уехал по делам. Спустя некоторое время звонит мужчина с незнакомого номера, представляется моим участковым и спрашивает не приходили ли ко мне ребята. Подтверждаю, после чего он снова уточняет что со мной не проживает данный гражданин. Говорю, что нет такого и никогда не было. Он вздыхает и говорит, что будет разбираться с миграционной службой.
Потом я позвонил маме, рассказал эту историю. Она посоветовала мне проверить сколько человек прописано в квартире. Зашел на сайт «Жилфонда», распечатал квитанцию об оплате, проверил. Все верно, прописан только я. Хоть это успокаивает.
Ждем продолжения истории. Чувствую, что этим дело не закончится

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

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

Создание бота 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 оповещает меня об обнаружении движения, чуть позже присылает фото и ссылку на файл с записью. В планах еще добавить обнаружение лиц на фото, чтобы было видно кто пришел или ушел. Следующим шагом может стать, например, автоматическое включение моего компьютера когда прихожу домой.

Ранее Ctrl + ↓