Pull to refresh

Comments 50

Нечто похожее сделано и на моем роутере для народного мониторинга. Только вот вебсервер стал часто отваливаться. Какой ваш датчик?
На хостинге порой «колбасит» одного из 2х провайдеров, F5 помогает ибо нагрузка балансируется меж ними.
Если Вы передаете данные на IP, а не на DNS имя, то выберете другой IP из тех что вам nslookup вернет.
Однако по своему опыту скажу, что чаще это локальные проблемы РТК.
Мне помогла замена/добавление DNS провайдера на гугловские.
Я имел ввиду отваливается на роутере :)
Полезное уточнение, ато я уж начал «копать»…
Спасибо!
Сегодня попробую свой WR703N подключить к народному мониторингу
Я вам так скажу — в свете роста интереса общества к бескорыстной помощи, имеет смысл готовить почву к стандартным USB-датчикам, который каждый желающий сможет (если захочет) воткнуть к себе в комп. Ну и софт, само собой.

Температура, влажность, скорость ветра — да метеорологи будут счастливы.

Плюс туда же — радиоактивный фон, загазованность, шум и т.п.

Мегасеть с мегавозможностями, которые принесут реальную пользу.

Смысл моего шаманства — обойтись без включенного компа.
Да, Ваше «шаманство» безусловно нужно и полезно.

Но если проэкстраполировать ситуацию на несколько лет вперед, то, думаю, что наличие в условном городе Эн 1000 компов со стандартными датчиками, которые то включаются, то выключаются, но в любой момент времени какие-то работают — более вероятно, чем наличие 100 постоянно работающих роутеров с Вашими или схожими устройствами.

Тем не менее: «Пусть расцветают все цветы» (с) Мао Цзе-дун
Не могу не согласиться, таким образом мы стимулируем трудолюбивых китайцев на создание подобных датчиков.
Согласно информации «О проекте» сервис не предназначен для прогнозирования. Нашей целью не является конкурирование с гисметео и прочими службами с оборудованием за 30-50килоруб и более(хотя и его можно подключить к проекту).
Ориентир на частное использование и мониторинг множества объектов или множества точек одного объекта на карте/схеме для наглядности, а публичная карта — демонстрация возможностей. Приватных датчиков(скрытых от публичного просмотра) в разы больше.
вот вам замена send.php на bash

#!/bin/bash
exec 3<>/dev/tcp/narodmon.ru/8283
printf "#01-23-45-67-89-AF\n#0123456789ABCDEF#" >&3
cat "/home/pi/temperature/temp_out" >&3
printf "\n#0123456789ABCDEF#" >&3
cat "/home/pi/temperature/temp_in" >&3
printf "\n##" >&3
Спасибо, вечером обязательно попробую
На малинке отлично работает, а вот на роутере не хочет
«line 2: can't create /dev/tcp/narodmon.ru/8283: nonexistent directory»
еще вариант?
#!/bin/bash
digitemp_DS9097 -i -s /dev/ttyATH0
sleep 1s
RES=`./digitemp_DS9097 -a`
rqstr="ID=xxxxx&yyyyy="
echo $rqstr$RES
wget --post-data "$rqstr$RES" http://narodmon.ru/post.php
POST порой проще в реализации и универсальнее, но за это приходится расплачиваться скоростью обработки и нарушением балансировки нагрузки на прием/отображение/вывод данных ибо еще и с Сosm HTTP POST поток данных идет постоянно.
/dev/ttyATH0 это опечатка? работает только на ttyUSB0. Переменной RES ничего не присваивается — line 4: ./digitemp_DS9097: not found и в ECHO соответственно отсутствует. И я не понял что делает последняя строка — wget: can't open 'post.php': File exists
digitemp_DS9097 -i -s /dev/ttyATH0
sleep 1s
RES=`digitemp_DS9097 -a`
rqstr="ID=xxxxx&yyyyy="
echo $rqstr$RES
wget --post-data "$rqstr$RES" http://narodmon.ru/post.php -O /dev/null

/dev/ttyATH0 — досадная опечатка;
RES=`digitemp_DS9097 -a` убрать "./" слеш для случая когда digitemp_DS9097 и скрипт в одной папке
wget --post-data "$rqstr$RES" narodmon.ru/post.php -O /dev/null — тут опция -O /dev/null не создавать файл post.php — скорее всего нет прав его перезаписать
Что-то куда-то отправляется, но не принимается сервером. Возможно из-за не правильного формата данных, т.к. вывод команды digitemp_DS9097 -a -A -l /temperatura/1wire_log такой Jan 22 19:25:45 Sensor 0 C: -8.63 F: 16.48. Здесь необходимо вырезать числовое значение температуры по типу как у меня сделано и запихивать в RES. А дальше смотреть что получилось.
В этот скрипт явно надо добавить построение списка датчиков и их опрос.
Переписывать скрипт при добавлении/выходе из строя очередного датчика не есть хорошо.
/dev/tcp/narodmon.ru/8283

На plan9 работает?
Я совсем не понимаю о чем речь.
Вроде бы в стандартном линуксе нет устройства /dev/tcp.
Если Вы про этот пост, то я не знаю как, но оно работает на Raspberry Pi
Автору статьи огромное спасибо за обзор и проделанную работу, к тому же у самого на полочке лежит MR3020 и ожидает своей участи по еще более бюджетному(без малинки, ардуино, внешних контроллеров) варианту подключения к проекту используя лишь простейший мост UART->1-wire выведенный наружу используя audio jack и герметизированный вариант термодатчика.

Быть может кто сможет придумать как аккуратно вывести и подключить I2C сенсоры DHT22(влажность) и BMP085(атм.давление) былоб просто замечательно, а также трансформатор тока SCT-013 для замера потребления энергии. А также с возможностью передачи данных через USB 3G модем, подключаемый к роутеру.

Для читателей и будущих пользователей сервиса — оставляю тут ссылку на сам проект narodmon.ru, на сообщество vk.com/narodmon и на десктопную утилиту (описание, загрузка) под win/wine(nix ожидается), Android-клиент на подходе, будем рады и разработчикам для других платформ.

Спасибо Вам за сервис, по поводу I2C здесь есть немного про подключение без ардуины.
DHT22/AM2302 не по I2C передаёт данные, там какой-то самопальный 1-wire протокол.
Да, есть такое, похожа на 1-wire но асинхронная для dht22.
Это в общем относилось, что нужна поддержка i2c датчиков.
Так и не нашел спецификации на протокол, можно прямую ссылку?
DHT11 брат близнец DHT22, у роутера есть GPIO. На него и посадить датчик. В статье Исследование Wi-Fi-роутера TP-LINK TL-MR3020 написано как его использовать и как написать программу. Протокол — есть, коза процедуры — есть, как скомпилировать — есть осталось соединить.
У DHT11 просто ужасные техданные, особенно в плане точности измерений. Не рекомендую тратить на него время зазря.
это комнатный термометр, график в сравнении с LM и DS тут
сравнивать лучше при отрицательных температурах, где погрешность выше, а не в условиях близких к идеальным
DHT11 не меряет отрицательные температуры (datashit) еще раз повторюсь это дешевый комнатный термометр, с округлением до целых градусов (влажность до целых процента). График показывает что в диапазоне комнатных температур он округляет довольно неплохо…
Зато DHT22 имея тот же протокол меряет отрицательные и точность до десятых
ох… Честно говоря, как-то не охота регистрироваться, только для того чтобы посмотреть нужно ли оно мне.
после регистрации лишь протокол, а вот просто смотреть — ничего не нужно кроме как по ссылке перейти.
Ну я думал, прикручивать ли протокол к своим железкам или нет.
бОльшую часть уже тут расписали, а так неахти какая сложность указать 1 раз адрес любой своей электронки.
хороший проект! готов поучаствовать, но хотелось бы увидеть еще и расширенный вариант например для удаленного контроля котельными, температура, давление в системе отопления, давление холодной воды и т.п возможно ли это? готов внести свой вклад!
Спасибо за отзыв!
Расширенный вариант как водится врядли будет бесплатным ибо трудозатраты возрастают, а вот простые триггеры-уведомления по email по превышении/понижении установленных пределов — ожидаются в ближайшее время.
PS SMS-шлюзов бесплатных в Инете не нашлось, но для желающих по тарифам раза в 2 ниже розничных операторских можно сорганизовать. Пока SMS-уведомлений/регистраций нет ибо желающих маловато… но все может измениться КТТС.
Трудозатраты на такие серьезные вещи, всегда есть, поэтому и предложил посильную помощь
Спасибо. Буду иметь ввиду. Мои контакты есть в профиле.
Хотя сами понимаете, тут больше вопрос в востребованности реализации и окупаемости.
В процессе поиска оптимального варианта передачи данных на narodmon.ru c минимумом используемых пакетов в OpenWRT родился такой вот скриптец: /usr/narodmon.sh

#!/bin/sh
# run every 10 min
ifconfig | grep HWaddr | awk '{FS=" "; if(NR==1) {print "#"$5}};' > /var/log/narodmon
digitemp_DS9097 -q -i -a -s /dev/ttyUSB0 | awk '{FS=" "; if($2==":") { mac[NR-1]=$1;}; if($4=="Sensor") { print "#"mac[$5]"#"$7;}}' >> /var/log/narodmon
echo "##" >> /var/log/narodmon
cat /var/log/narodmon | nc narodmon.ru NNNN > /var/log/narodmon.log

NNNN — TCP порт листенера, последний пакет отправленных данных и результат его отправки пишутся в /var/log и перекрываются в целях экономии места на роутере.
также не забывает создать файлик /etc/crontabs/root с содержимым:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * /bin/sh /usr/narodmon.sh > /var/log/cron.log
А еще для того, чтобы не ждат 10-15 мин пока сработает cron желательно прописать в /etc/rc.local запуск скрипта отправки показаний сразу же после включения и инициализации роутера:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
/bin/sh /usr/narodmon.sh > /var/log/autorun.log
exit 0
Дабы не скидывать на сервер неполные данные(например когда digitemp дал сбой), то желательно встроить проверку, заменив последнюю строку скрипта с отправкой данных на сервер на проверку кол-ва строк в сформированном пакете данных(должно быть >2 строк в случае одного датчика):

LC=`cat /var/log/narodmon | wc -l`
if [ $LC -gt 2 ]
 then cat /var/log/narodmon | nc narodmon.ru 8283 > /var/log/narodmon.log
fi
На надо писать свой драйвер, он есть в стандартных репозиториях OpenWRT.
Sign up to leave a comment.

Articles