Реализация:
Так как ранее описанная система Сеть температурных датчиков по квартире (умнеющий дом)viewtopic.php?f=3&t=5 прекратила долго жить из-за залитого водой сервера, но сейчас в моем распоряжении был неплохой роутер ASUS WL-500gP в котором был линукс и на нем планировалось собирать температуру с датчиков.
Железячная часть:
Без распайки роутера у него было два USB разъема, один был занять флешкой под FTP сервер, второй был свободен. Для свободного разъема USB был собран переходник для 1-Wire. Сам переходник представлял собой USB2COM адаптер для телефона Siemens C65/S65 с функцией зарядки, собран переходник на всем известной PL2303.
Упаковка от него выглядит так:
Для согласования уровней и превращения двух проводной rs232 в 1-Wire после USB2COM переходника, была собрана простейшая схема:
Резисторы можно в схеме заменить на 5.6к, питание подавалось от +питания переходника, с включенной зарядкой. RX и TX нужно перевернуть, т.е. RX по этой схеме подключается к TX на USB2COM переходнике.
Если функцию зарядка на USB2COM переходнике выключить, то устройство не работает, это я использовал для выключения всей системы сбора температуры.
Схема согласования была распаяно навесным монтажом прямо в коробке с переходником:
Получилось в результате вот такой девайс:
Датчики температуры были взяты, как и ранее DS18B20, только для работы по двум проводам (паразитное питание) было грамотно соединен VDD датчика с GND, после этого ошибки в работе датчика в виде +85 градусов или +127 градусов перестали появляться вообще или крайне редко.
Датчики для улицы и холодильника были замурованы в колпачках от шариковых ручек, сначала датчик распаивался, потом выводы обжимались термоусадкой, далее сам датчик обильно обмазывался термопастой КПТ-8 и все это помещалось в колпачек и заливалось, либо герметиком для ремонта прокладок автомобиля (сохнет 1 сутки), либо эпоксидкой.
Получилось вот это с герметиком:
Или вот это с эпоксидкой:
Соединялось датчики и переходник через небольшие разъемы:
Всего сейчас работает 3 датчика, до каждого 7 метров витой пары, но четырехжильной и все работает без ошибок.
На это железячная часть конструкции закончено.
Программная часть:
На роутере была сразу установлена прошивка от Олега, взять ее можно вот здесьhttp://wl500g.info/
Код: Выделить всё
[admin@WL-002215534079 root]$ tail /.version
1.9.2.7-10
[admin@WL-002215534079 root]$
Код: Выделить всё
mkdir -p /usr/local/etc/dropbear
dropbearkey -t dss -f /usr/local/etc/dropbear/dropbear_dss_host_key
dropbearkey -t rsa -f /usr/local/etc/dropbear/dropbear_rsa_host_key
mkdir -p /usr/local/sbin/
echo "#!/bin/sh" >> /usr/local/sbin/post-boot
echo "dropbear -p 2002 > /dev/null 2>&1" >> /usr/local/sbin/post-boot
chmod +x /usr/local/sbin/post-boot
echo "#!/bin/sh" >> /usr/local/sbin/post-firewall
echo "iptables -I INPUT 1 -p tcp --dport 2002 -j ACCEPT" >> /usr/local/sbin/post-firewall
chmod +x /usr/local/sbin/post-firewall
flashfs save && flashfs commit && flashfs enable
reboot
Код: Выделить всё
echo " insmod usbserial.o" >> /usr/local/sbin/post-boot
echo " insmod pl2303.o" >> /usr/local/sbin/post-boot
flashfs save && flashfs commit && flashfs enable
reboot
Код: Выделить всё
Apr 13 22:32:05 kernel: usbserial.c: PL-2303 converter detected
Apr 13 22:32:05 kernel: usbserial.c: PL-2303 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
Заливаем на роутер бинарник files/digitemp_DS9097.rar для программы Digitemp, она собственно и будет опрашивать датчики и сохранять полученные результаты в файл.
Настраиваем crontab:
Код: Выделить всё
mkdir -p /var/spool/cron/crontabs
crontab -e
#Edit crontab file. See tutorials on crontab and vi (text editor)
#Ex. Press "a" for append-mode. Enter cron-command ex "00 1 * * *
reboot"
#to reboot everyday at 1 am. Press "Esc", ":wq" and "Enter" to save and
quit.
mkdir -p /usr/local/sbin
echo "/var/spool/cron/crontabs/admin" >> /usr/local/.files
if [ ! -f /usr/local/sbin/post-boot ] ; then
echo "#!/bin/sh" > /usr/local/sbin/post-boot
fi
echo "/usr/sbin/crond" >> /usr/local/sbin/post-boot
chmod +x /usr/local/sbin/post-boot
flashfs save
flashfs commit
#If not already enabled:
flashfs enable
reboot
В файл scan.cmd помещаем в него команды
Код: Выделить всё
./digitemp_DS9097 -s /dev/usb/tts/0 –i
Код: Выделить всё
./digitemp_DS9097 -q -a -o"%d-%m-%Y %H:%M:%S %R %.2C" -c ~/.digitemprc >>temperature.log
В результате в файле temperature.log сохраняются все измерения температуры, например у меня это примерно вот так:
Код: Выделить всё
13-04-2010 22:05:13 28B04B6D01000026 8.50
13-04-2010 22:05:15 28F04A2402000009 24.94
13-04-2010 22:05:16 28F2602402000022 -19.50
13-04-2010 22:10:14 28B04B6D01000026 8.50
13-04-2010 22:10:15 28F04A2402000009 24.88
13-04-2010 22:10:16 28F2602402000022 -19.81
Ссылки на используемый в работе материал:
http://www.lecad.si/~leon/other/wlan/wrt54ow/
http://siemensdca.ucoz.ru/photo/2-0-7-3