Позднее Ctrl + ↑

Тестирование новое метеостанции

Вчера провел на лоджию электричество, только розетку пока что не закреплял. Собрал станцию, включил в розетку и выставил на улицу. К стене дома крепить не стал, закреплю когда она пройдет испытания. К сожалению, почему-то перестал работать один из датчиков — ds18b20. Думал, что где-то нет контакта, подергал все проводки, проверил разъем, но ничего не изменилось. Так как мультиметр остался на работе, то поиск неисправности, похоже, откладывается до понедельника.
Попробовал также настроить станцию на отправку показаний на сервер WeatherUnderground, но с этим вышла какая-то непонятка. В прошивке esp8266 есть только поля для ввода логина и пароля, в то время как в скрипте на роутере, который отправляет показания, надо также указывать ID станции, которая была создана при регистрации на сайте. Вчера ввел качестве логина ID станции, в качестве пароля указал ключ от нее. Потом смотреть журнал отправки было некогда, проверил только сейчас. Появились показания влажности воздуха, но с пропусками. Пока что непонятно, идет отправка или нет, буду наблюдать дальше.
Также в скрипте обнаружилась досадная ошибка, которую нужно исправлять, но я не совсем пока что понимаю как это реализовать. Суть ошибки состоит в том, что в какой-то момент скрипт перестает стирать содержимое временного файла с показаниями. При следующей отправке сервер отвечает не «ОК», а «ERROR NO CHANGES», так как в пакете присутствуют более ранние показания, которые сервер принял, а скрипт заново пытается их отправить. В результате данные начинают накапливаться и через примерно 4 часа размер файла начинает превышать 4 кБ — максимальный размер данных, которые можно отправить на сервер. Как результат данные, которые принимает сервер, обрезаются до 4 кБ. То есть появляется новая ошибка — отсутствует строка с закрывающими «##». По логике нужно начинать записывать данные в другой файл, но как потом искать все файлы с данными — непонятно. Буду думать.

Апгрейд видеонаблюдения

На позапрошлой неделе начальником охраны был поднят вопрос о модернизации компьютера, на котором операторы наблюдают за территорией завода. Так как количество камер увеличилось, то картинка стала поступать с задержками, около 4 секунд. Запросил в «Техномаксе» счет с новыми комплектующими, который, к некоторому моему удивлению (не тот сейчас период), подписали без вопросов. В прошедшую субботу приехал менять комплектующие. К сожалению, систему пришлось переустанавливать, потому что старая не могла использовать весь объем оперативной памяти. Во время переустановки выяснилось, что половина диска имеет неправильный формат структуры, так что диск тоже пришлось переразбивать.
По итогу мощность компьютера возросла в несколько раз, но, как показали эксперименты, картинка все равно поступает с запозданием в 1-2 секунды. Впрочем, это уже не так критично, запись все равно идет нормально. Процессор занят почти все время на 80-100%, сеть также загружена на 70-85%. Немного подумав, поняли, что в такой загрузке сети виноват старенький хаб, стоящий на посту. Переключили ради интереса напрямую, минуя этот самый хаб, — нагрузка на сеть упала до 7-8%. Сделал вывод, что его нужно будет поменять на другой с пропускной способностью в 1 Гб. С процессором пока что будет думать.
Также появился вариант установить на видеонаблюдение еще один компьютер, снизив таким образом нагрузку на существующий компьютер. Так как при установке программ наблюдения был найден вариант для Linux, то решили попробовать его. Новый компьютер хочу собрать на базе старых комплектующих, которые были сняты этого же.

Синхронизация времени в Windows

Возник тут вопрос о том, чтобы синхронизировать время на компьютере сразу после загрузки Windows. Поднял свои архивы, нашел один пакетный файл, который писал еще много лет назад. Он работал, но, как говорится, «время идет», появились новые пожелания. Поэтому файл был полностью переписан.
Для внесения изменений в параметры службы Windows нам нужно ее остановить, внести необходимые изменения и заново запустить. После всего этого выполнить синхронизацию времени. Что данный «батник» и делает.
Интервал обновления изменен на «один раз в сутки» против значения по умолчанию «один раз в неделю». Также убраны ограничения интервалов, дата на компьютере может быть любой, синхронизация все равно будет произведена. Тестировал на разнице в 7 лет. В качестве сервера времени выбран ru.pool.ntp.org.
Ниже код того, что у меня получилось. Можно, конечно, еще добавить команды для добавления задания в планировщик, но, на мой взгляд, это уже лишнее и лучше проделать это руками.

@echo off
net stop w32time

sc config w32time start= auto

reg add HKLM\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxNegPhaseCorrection /t REG_DWORD /d "4294967295" /f
reg add HKLM\SYSTEM\CurrentControlSet\services\W32Time\Config /v MaxPosPhaseCorrection /t REG_DWORD /d "4294967295" /f
reg add HKLM\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient /v SpecialPollInterval /t REG_DWORD /d "86400" /f

net start w32time

w32tm /config /syncfromflags:manual /manualpeerlist:ru.pool.ntp.org
w32tm /config /update
w32tm /resync

exit

Настройка VPN на OpenWrt

Доступ в домашнюю сеть

На фоне запретов на VPN и анонимайзеров, взбрело в голову прокинуть туннель в свою домашнюю сеть. Так сказать, пока это не стало противоправным действием :-) Все делал вот по этой статье. С первого раза ничего не заработало. После небольшого расследования оказалось, что клиентский сертификат неверно сгенерировался и получился файл нулевого размера. Пришлось переделывать все заново. После этого я смог подключиться к домашней сети, но у меня не было доступа ни к одному компьютеру в ней. Для доступа к ней пришлось выполнить еще одно действие из этой же статьи, из англоязычной ее части:

# uci add_list openvpn.myvpn.push='route 192.168.1.0 255.255.255.0'

Так как подсеть у меня такая же, то не пришлось править адрес и маску. После перезапуска OpnVPN на роутере все заработало: доступ в сеть есть, к компьютерам — тоже. Все работает, отлично!
Но, как обычно, показалось этого мало. Настроил OpenVPN и на смартфоне. Применение такого доступа нашлось сразу же: быстрый просмотр записей с камеры. VLC, конечно, на такой скорости плохо кэширует (надеюсь, это лечится), но снимки, которые создает motion из записанного видеофайла просмотреть можно. Уже, как говорится, хлеб.
Затем, ради интереса, заглянул на собранную метеостанцию, посмотрел как там дела обстоят. Затем зашел на роутер, проглядел папку с торрентами.
Из «минусов» подключения по VPN вижу только то, что работать приходится не с именами машин, а с их IP-адресами. Но это уже мелочи.

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

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

Ранее Ctrl + ↓