6 заметок с тегом

narodmon

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

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

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

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

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

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

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

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

Перенос owfs

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

Датчик температуры

Добавил на сайт показания от своего уличного датчика температуры. К сожалению, пока что показания не изменяются в реальном времени, для их обновления необходимо обновить страницу. Надеюсь в будущем это исправить.
До наступления Нового года также хочу немного изменить способ передачи показаний на сторонние погодные серверы, такие как Narodmon, OpenWeatherMap и WeatherUnderground. Сейчас они формируются и передаются bash-скриптом на сервере, планирую переделать их на PHP. Это даст мне возможность заносить их в базу MySQL на моем сервере и уже оттуда передаваться на другие. Также это позволит, в свою очередь, сделать мне страницу на сайте с историей показаний.
В общем, планов много, остается только найти время когда их все осуществить :-)