OpenWrt 18.06.1 + TP-Link WR841N = Czujnik temperatury cz.1

Ostatnio wpadł mi pomysł do głowy na monitorowanie kilku lokalizacji. Chodziło głównie o temperaturę w pomieszczeniu, szafie serwerowej czy wewnątrz skrzyni powieszonej na ścianie czy maszcie. Przeglądając internet i szukając trafiłem na sondy temperatury odczytywanej po SNMP, jednak koszt 300zł był dla mnie mało atrakcyjny. Ilość jakiej potrzebowałem to kilkanaście sztuk, może i więcej. Zainteresowałem się tematem, zmalałem wiele opisów takich sond opartych o routery z wgranym OpenWrt i podpiętym pod USB konwerterem na RS232 i do tego czujnik DS18B20 1-wire. Gra warta świeczki bo koszt takiej czujki spadł nam już w okolice 100zł. Jest o co walczyć, w cenie jednej sondy mamy trzy. Ale dalej wgłębiałem się w temat. OpenWrt jest projektem o wielu możliwościach, może być nie tylko routerem ale też dyskiem sieciowym czy kontrolerem z podpiętymi przekaźnikami na liniach GPIO. Zgłębiając dalej temat znalazłem informację, że na linii GPIO mogę również podłączyć czujnik 1-wire. Zapaliła się lampka w mojej głowie, mam jeden wolny router w szufladzie, jest to wspomniany w temacie WR841N.

Pierwszą sprawą było przygotowanie sobie obrazu OpenWrt dla tego modelu routera. Można skorzystać z gotowego obrazu, jednak nie ma on w standardzie paczek 1-wire a ilość wolnego miejsca jest bardzo skromna. Router jaki posiadam to v9.1, 550MHz, 4MB FLASH oraz 32MB RAM.

Do stworzenia takiego obrazu potrzebujemy środowiska Linuksowego x64. Czy jest to fizyczna maszyna czy wirtualna nie ma znaczenia. Jak zapewnić sobie takie środowisko odsyłam do źródła: Image Builder

Przechodzimy do katalogu ze źródłami. Do budowania obrazów OpenWrt posiłkuję się skryptem:

make -j2 image PROFILE=tl-wr841-v9 PACKAGES="kmod-w1 kmod-w1-master-gpio kmod-w1-gpio-custom kmod-w1-slave-therm terminfo libnetsnmp snmpd libncurses nano base-files busybox dnsmasq dropbear -firewall fstools -ip6tables -iptables kernel kmod-ath9k kmod-gpio-button-hotplug libc libgcc logd mtd netifd -odhcp6c -odhcpd-ipv6only opkg -ppp -ppp-mod-pppoe swconfig uboot-envtools uci uclient-fetch wpad-mini"

Krótkie wyjaśnienie parametrów w skrypcie:

  • -j2 oznacza kompilowanie w dwóch wątkach jednocześnie, w zależności od ilości rdzeni/procesorów na maszynie gdzie budujemy obrazy
  • image PROFILE=tl-wr841-v9 oznacza pod jaki router budujemy obraz, bez tego parametru będziemy budować obrazy dla każdego rodzaju routera co znacząco wydłuży czas budowy i będzie marnotrawieniem czasu
  • lista PACKAGES zawiera jakie pakiety będą dodane lub usunięte (te z – na początku nazwy) z budowanego obrazu

W katalogu bin/targets/ar71xx/tiny/ znajdują się nasze obrazy:

marcin@openwrt:~/openwrt1806_wr841n$ ls -l bin/targets/ar71xx/tiny/
razem 22012
-rw-r--r-- 1 marcin users    1678 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-device-tl-wr841-v9.manifest
-rw-r--r-- 1 marcin users 2490368 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-root.squashfs
-rw-r--r-- 1 marcin users 3932160 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-tl-wr841-v9-squashfs-factory.bin
-rw-r--r-- 1 marcin users 3538948 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-tl-wr841-v9-squashfs-sysupgrade.bin
-rw-r--r-- 1 marcin users 1348203 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-uImage-lzma.bin
-rwxr-xr-x 1 marcin users 4234996 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.bin
-rwxr-xr-x 1 marcin users 4240120 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.elf
-rw-r--r-- 1 marcin users 1376256 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux.lzma
-rwxr-xr-x 1 marcin users 1358324 wrz 28 14:31 openwrt-18.06.1-ar71xx-tiny-vmlinux-lzma.elf
-rw-r--r-- 1 marcin users    1027 wrz 28 14:31 sha256sums

Jeżeli mamy router z fabrycznym oprogramowaniem to wybieramy obraz *-factory.bin, jeżeli mamy już wgranego OpenWrt to wybieramy obraz *-sysupgrade.bin. W nowych fabrycznych firmware jest ograniczenie ilości znaków w nazwie wgrywanego obrazu, przed wybraniem go trzeba sobie skrócić jego nazwę. Jeżeli dodajemy jakieś paczki do budowanego obrazu to przed wgrywaniem go na router należy sprawdzić jego rozmiar, powinien być zawsze 3932160, jeżeli jest więcej to przesadziliśmy z ilością pakietów i taki obraz nie wgra się poprawnie.

Jeżeli wszystko poszło ok to router rozdziela adresy IP na portach LAN, na porcie WAN jest klient DHCP czekający na adres. Po instalacji router ma aktywny telnet. Należy za jego pomocą zalogować się jako root do routera, nie ma hasła, i ustawić hasło poleceniem passwd. Jeżeli ustawimy hasło, serwer telnet zostanie wyłączony i zarządzamy naszym routerem poprzez klienta SSH.

Dla ww. wersji użycie pamięci FLASH ma się jak poniżej:

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    13.6M     60.0K     13.6M   0% /tmp
/dev/mtdblock3          512.0K    240.0K    272.0K  47% /overlay
overlayfs:/overlay      512.0K    240.0K    272.0K  47% /
tmpfs                   512.0K         0    512.0K   0% /dev

Mamy przygotowany system do pracy z sensorami na 1-wire, w tym czujnikiem temperatury DS18B20. W części drugiej będzie o tym jak podłączyć czujnik pod jedną diodę LED routera i wykorzystać GPIO do odczytu temperatury z czujnika.

Dodaj komentarz