Domů > Asus WL-500gP > Zprovoznění měření teploty

Zprovoznění měření teploty

Další z možností, jak využít router s OS Linux je například ke sledování teploty. Výborně použitelná jsou digitálních čidla DS18B20 připojená přes rozhraní RS232 a pomocí redukce USB/RS232 připojená k routeru. Čidla DS18B20 jsou jednoznačně adresovatelná a lze jich tak použít velké množství.

K sestavení měřícího řetězce budete potřebovat:

  • redukce USB/RS232 (vzhledem k tomu, že na routeru běží jádro / kernel 2.4.20 je důležité dát pozor při výběru této redukce, obecně jsou doporučovány redukce s čipem Prolific PL2303)
  • čidla DS18B20 (digitální teploměr Dallas 9-12bit +/-0,5°C -55/+125°C TO92 (rozlišení 0,5; 0,25; 0,125; 0,0625°C)) – lze použít i identické DS1820/DS18S20/DS1920
  • 2x zenerova dioda 5V1 (BZX83V005.1 – DO35 0.5W ZPD 5.1V)
  • 2x schottky BAT46 (schottky dioda 100V/150mA/6pF DO-35)
  • 1x odpor 1k5 (Rezistor s kovovou vrstvou 0,6W 1% 50ppm, velikost 0207)
  • 1x Canon konektor 9 pinů samice
  • 1x pouzdro velikosti krabičky od zápalek

Pořizovací cena součástek je při koupi 2 čidel cca 200Kč. Počet čidel je libovolný, další čidla se zapojují paralelně k prvnímu. Každé čidlo má vlastní sériové číslo a je ovladačem přímo adresováno. Schéma zapojení je v příloze.

zapojení

zapojení

Nezapomeňte spojit konektory čidla GND a V. Ukázka konkrétního zapojení je v galerii teploměr.

Připojte kabel USB/RS232 do routeru a zavedeme ovladače např. v telnetu: insmod usbserial a insmod pl2303

Překontrolujete log routeru /usr/tmp/syslog.log  , zda se v něm objevili následující řádky:

kernel: usb.c: registered new driver serial
kernel: usbserial.c: USB Serial support registered for Generic
kernel: usbserial.c: USB Serial Driver core v1.4
kernel: usbserial.c: USB Serial support registered for PL-2303
kernel: usbserial.c: PL-2303 converter detected
kernel: usbserial.c: PL-2303 attached to ttyUSB0 (or usb/tts/0 for devfs)
kernel: pl2303.c: Prolific PL2303 USB to serial adaptor driver v0.11

tímto se ubezpečíte, že adaptér byl bezpečně rozeznán a bude spolupracovat. V opačném případě adaptér obsahuje nerozpoznaný čip a je nepoužitelný.

Pokud chcete inicializovat adaptér ihned po startu, zapište do opt/init.usb následující:

insmod usbserial
insmod pl2303

Nainstalujte software, který umí komunikovat s čidly: ipkg install digitemp

Po instalaci se rovnou dotážeme čidel: /opt/bin/digitemp_DS9097 -i -s /dev/usb/tts/0 -o "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" -c /opt/etc/digitemp.conf

Pokud jsou čidla správně detekována, vygeneruje se konfigurační soubor s parametry měření a sériovými čísly čidel. Následné měření již může být podstatně rychlejší: /opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf

Program vrátí následující výsledek:
Aug 14 23:28:03 Sensor 0 C: 25.88 F: 78.57
Aug 14 23:28:04 Sensor 1 C: 18.44 F: 65.19
Aug 14 23:28:05 Sensor 2 C: 24.69 F: 76.44

Zabezpečte automatické měření pomocí CRONu, proto do souboru /opt/etc/crontab vložte řádek s úlohou, která každou minutu provede měření, výsledek uloží do souboru a ten přesune do jiného souboru. Přesouvá se z důvodu zpoždění zápisu hodnot do souboru a některé hodnoty mohou být nekompletní.

*/1 * * * * admin /opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf > /opt/var/log/temperature.log && mv /opt/var/log/temperature.log /opt/var/log/digitemp.txt

Vytvořte potřebné adresáře:

mkdir /opt/etc/tempsensor && mkdir /opt/share/www/lighttpd/temperature && mkdir /opt/var/log/digitemp_rrd && chmod 777 /opt/var/log/digitemp_rrd

Následně upravte konfigurační soubor /opt/etc/tempsensor/config.php dle průvodce, ukázkový soubor naleznete v příloze

Do souboru /opt/etc/crontab přidejte řádky pro načítání dat do databáze a vykreslení grafu každých 5 minut:

*/5 * * * * admin php /opt/etc/tempsensor/logdata.php
*/5 * * * * admin php /opt/etc/tempsensor/graphdata.php

Pro otestování a odladění můžeme spustit načtení dat ručně: php /opt/etc/tempsensor/logdata.php

Překontrolujte vytvoření souborů v adresáři /opt/share/www/lighttpd/temperature/. Tímto je ověřena funkčnost měření a zápisu do databáze. Grafy, nebo jiné výstupy jsou již na dalším vlastním vývoji.

Je nutné mít nainstalované obslužné nástroje rrdtool (API pro generování grafů),bc (balíček pro přesné výpočty) a bash (shell): ipkg install rrdtool && ipkg install bc && ipkg install bash

Soubory digitemp – ukázka načtení parametrů senzorů a lite.php, který používám jako osekaný graphdata.php aby se ulevilo procesoru a kreslil jen krátkodobé grafy, měsíční a roční se kreslí jen jednou denně.

Pokud nefunguje připojení RS232-USB převodníku, zkuste přidat příkaz rmmod ehci-hcd

Optimalizace CRONu:
Vzhledem k tomu, že měření, zápis a vykreslení nám zbytečně zaplňuje syslog -který můžeme průběžně sledovat příkazem tail -f /tmp/syslog.log, je dobré optimalizovat nastavení CRONu a to tak, že stávající pravidla přesuneme do samostatného skriptu a jeho celé spouštění zabezpečíme jedním řádkem v cronu a následně i v logu.
*/5 * * * * admin /opt/etc/tempsensor/teplota
skript /opt/etc/tempsensor/teplota s parametry 0755 (spustitelný chmod +x 0755 /opt/etc/tempsensor/teplota) pak obsahuje přenesené řádky:
#!/bin/sh
#merici skript na mereni teploty
#mereni
/opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf > /opt/var/log/temperature.log && mv /opt/var/log/temperature.log /opt/var/log/digitemp.txt
#zapsani do DB
php /opt/etc/tempsensor/logdata.php
#vykresleni jednoducheho grafu
php /opt/etc/tempsensor/lite.php
#kopie souboru s obrazkem
cp /opt/share/www/lighttpd/temperature/all_day.png /opt/share/www/lighttpd/temperature/all_day_graph.png

Kopii obrázku provádím kvůli zajištění jeho neustálé dostupnosti.

Jsou sice součástí instalace a v adresáři /opt/etc/tempsensor, ale pro jistotu uvádím graphdata.php a logdata.php. A po úpravách jejich současné verze jako zálohu komplet adresáře /opt/etc/tempsensor/.

  1. muto33
    30.11.2009 na 09:13 | #1

    Dobrý den.Neumím docílit toho aby se mi vytvořily soubory :
    */5 * * * * admin php /opt/etc/tempsensor/logdata.php
    */5 * * * * admin php /opt/etc/tempsensor/graphdata.php

    Soubor :
    /opt/var/log/digitemp.txt se mi pravidelně každou minutu aktualizuje ale dál s tím nehnu.
    Pravděpodobně budu mít problém v souboru : /opt/etc/tempsensor/config.php
    umí někdo poradit jak ho nakonfigurovat? Děkuji.

  2. admin
    04.12.2009 na 20:55 | #2

    @muto33
    soubory logdata.php a graphdata.php jsou součástí instalace v config.php není skoro co zkazit, ale pochlub se

  3. muto33
    07.12.2009 na 20:05 | #3

    @admin
    No ja tam vlastne ten soubor config.php vubec nemam.nNeco jsem tam nacpal ale vubec nevim jak ho nakonfigurovat.Jsem v tomto lama.Jestli muzes tak mi posli tvuj config.php at s tim nejak pohnu.nebo porad co a jak nastavit.Dik

  4. admin
    08.12.2009 na 20:53 | #4

    @muto33
    ukázku mého config.php najdeš zde http://www.sdilejkod.cz/627 je umístěn v /opt/etc/tempsensor

  5. tuto
    06.01.2010 na 19:18 | #5

    navod je dobry len subor logdata.php a graphdata.php nikde nieje mozes ich niekde hodit?

  6. admin
    07.01.2010 na 17:36 | #6

    Je sice součástí instalace a v adresáři /opt/etc/tempsensor, ale pro jistotu graphdata.php a logdata.php.

  7. tuto
    08.01.2010 na 14:14 | #7

    @admin

    dakujem ,skusim to, inak do navodu si asi zabudol dat odkaz na sobory tempsensora ,lebo jedine co som nasiel bol ten config.php a digitemp , lite.php (k digitemp a lite.php suborom nepises naco su)

  8. admin
    08.01.2010 na 17:32 | #8

    Jak nechat data vykreslovat, je na každém z vás. Já použil vygooglovaný kód, který si nechci přivlastňovat.

    soubor /opt/etc/digitemp.conf je zde jako ukázka toho co vygeneruje příkaz /opt/bin/digitemp_DS9097 -i -s /dev/usb/tts/0 -o "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" -c /opt/etc/digitemp.conf aby se pak dalo měřit s jednodušším a rychlejším příkazem /opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf

    soubor /opt/etc/tempsensor/lite.php je osekaný /opt/etc/tempsensor/graphdata.php a to proto, aby se ulevilo procesoru při výpočtech každých 5 minut. Roční a měsíční grafy generuj jen jednou denně.

    Jinak díky za upozornění, doplnil jsem.

  9. Tom
    06.03.2010 na 20:25 | #9

    Prosím o radu. Nevytvoří se mi usb/tts/0
    Log:
    Mar 6 20:13:50 kernel: usb.c: registered new driver serial
    Mar 6 20:13:50 kernel: usbserial.c: USB Serial support registered for Generic
    Mar 6 20:13:50 kernel: usbserial.c: USB Serial Driver core v1.4
    Mar 6 20:13:50 kernel: usbserial.c: USB Serial support registered for PL-2303
    Mar 6 20:13:50 kernel: pl2303.c: Prolific PL2303 USB to serial adaptor driver v0.10.1

    Chybí mi tam tyto dva řádky:
    kernel: usbserial.c: PL-2303 converter detected
    kernel: usbserial.c: PL-2303 attached to ttyUSB0 (or usb/tts/0 for devfs)

    Nevíte prosím někdo co s tím?

  10. Tom
    06.03.2010 na 21:05 | #10

    @Tom
    Tak pomohlo to přehodit do druhého USB a už se vytvořilo usb/tts/0.

    Ale zase mám jiný problém:
    [admin@WL-90E6BAF5B3C0 root]$ /opt/bin/digitemp_DS9097 -i -s /dev/usb/tts/0 -o „%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F“ -c /opt/etc/digitemp.conf
    DigiTemp v3.4.0 Copyright 1996-2005 by Brian C. Lane
    GNU Public License v2.0 – http://www.digitemp.com
    owAcquire: failed to open device: Protocol error
    Error 23: Failed to acquire a necessary system resource

  11. admin
    08.03.2010 na 21:09 | #11

    @Tom
    chce to projít log, proč je nedostatek zdrojů, takhle se těžko odpovídá.
    Jinak ověř zapojení teploměru, správně nadetekovaný a funkční sériový kabel a další …

  12. Podly
    12.05.2011 na 19:17 | #12

    @Tom
    Podařilo se ti na něco přijít. Mám stejný problém. Kabel jsem na PC pod Win odzkoušel a funguje.

  13. Podly
    12.05.2011 na 20:41 | #13

    @admin
    Jeste jedno zjisteni. Kolega ma fw WL500gpv2-1.9.2.7-9.trx a funguje mu to ja mam WL500gpv2-1.9.2.7-10.trx a je tu problem s Error 23: Failed to acquire a necessary system resource

  14. Tomas
    24.05.2011 na 01:06 | #14

    @admin
    Dobry den, podarilo se mi postupne vse zprovoznit dle navodu s jedinou vyjimkou – soubory logdata.php a graphdata.php mi hazi chyby:

    [admin@AsusRouter root]$ php /opt/etc/tempsensor/logdata.php
    PHP Parse error: syntax error, unexpected T_STRING in /opt/etc/tempsensor/logdata.php on line 46

    [admin@AsusRouter root]$ php /opt/etc/tempsensor/graphdata.php
    PHP Parse error: syntax error, unexpected T_STRING in /opt/etc/tempsensor/graphdata.php on line 75

    Poradite nekdo, kde delam chybu? Soubory jsem zkopiroval odsud z odkazu na sdilejkod.cz.

    Diky moc
    Tomas

  15. admin
    24.05.2011 na 07:31 | #15

    @Tomas Problém bude nejspíš v kopírování kódu, nebo nějaké úpravě. Tady to funguje jak má.
    Ale proč jsi nenechal ty původní logdata.php a graphdata.php?
    Pro jistotu jsem původní text doplnil o kompletní zálohu adresáře /opt/etc/tempsensor použij tedy tyto

  16. panda
    06.06.2011 na 23:00 | #16

    @admin
    Uz jsem byl zoufaly, ale nakonec jsem zjistil kde je chyba. Jak jinak, trapna a zacatecnicka (Linuxu jde mimo me, zvladam se v nem jen zakladne orientovat, jinak jsem 100% Windows user). Problem byl v tom, ze jsem soubory nekopiroval pomoci FTP ale kopiroval copy&paste z Windows. No a Windows jinak ukoncuje radky, misto LF tam dava CRLF. Stacilo preulozit v PSpadu pro UNIX, a nove copy&paste problem vyresilo.

    Diky moc za snahu pomoci, uz nejen merim, ale i kreslim grafy!

  17. Formis
    06.11.2011 na 22:19 | #17

    Zdravím, tak jsem si zprovoznil také měření teploty, zatím jen s dvěma čidly. Postupně to budu ladit, ale chci se zeptat, prosím, na jednu věc. Jde nějak udělat, aby se do systémového LOGu nezapisovaly informace o načtení teplot čidel a zápisu do grafu? Nebo k tomu slouží „optimalizace CRONu“, viz. výše? Předem děkuji za odpověď a chválím tento perfektní web!!!

  18. admin
    06.11.2011 na 22:29 | #18

    @Formis Přesně tak, optimalizoval jsem CRON tak aby mi zbytečně neplevelil systémový log. Protože to je právě smysl toho logu aby v něm vše bylo. Pokud log vyhodnocuješ ještě kvůli něčemu jinému, je na to vhodné použít třeba grephttp://www.abclinuxu.cz/faq/skripty/vyhledavani-v-linuxu
    Čidel je možné připojit opravdu hodně, jen doporučuji použít čidla ze stejné série, ale i mix DS1820/DS18S20/DS1920 je možný.
    Díky za pochvalu, kdyby ti nějaké téma chybělo, zeptej se.

  19. Formis
    07.11.2011 na 17:26 | #19

    @admin
    Aha, tak to jsem udělal asi něco špatně, protože mi systémový LOG stále vypisuje čtení a zápis. Do Cronu jsem napsal tento řádek „*/5 * * * * admin /opt/etc/tempsensor/teplota“ a vytvořil skrypt v „/opt/etc/tempsensor/teplota“ . Ale nevím, jestli jsem udělal dobře ten spustitelný – napsal jsem „chmod 0755 /opt/etc/tempsensor/teplota“ .
    Jinak používám čidla DS18B20, zatím mám dvě, ale mám objednané další 4. Jen nevím čím to je, ale jedno čidlo mě docela ustřeluje, někdys i o dost viz. obr. http://czshare.com/2211957/Vnit%C5%99n%C3%AD.PNG . To druhé ukazuje dobře http://czshare.com/2211956/Venkovn%C3%AD.PNG . Nemůže být nějaký špatný přepočet? Přemýšlel jsem, jestli by nepomohlo třeba vypisování do grafu každé dvě minuty. Nebo budu muste počkat, až mi příjdou další čidla a vyzkoušet jiný.
    A ještě jeden dotaz, soubor Lite.php je zaměnitelný s graphdata.php? Nebo musí být oba soubory?
    A ještě taková poznámka, jak psali Tom a Podly , tak mě se stalo, že moje první zapojení „DS18B20ky“, tak jsem zapojil pouze vývod DATA a GND a taky mi to nešlo, pak jsem spojil GND a Napájení a DATA zvlášt a už mi to frčelo(doufám že to mám zapojený dobře) – jestli by to nechtělo do návodu podotknout. 🙂

  20. admin
    20.11.2011 na 17:30 | #20

    @Formis Vezmu to postupně:

    1. spustitelný se stane až po chmod +x /opt/etc/tempsensor/teplota – viz předchozí kapitoly
    2. čidlo dle mého střílí samo do sebe, doporučuji výměnu. Měření po dvou minutách je dle mého zbytečné.
    3. Lite je „zaměnitelný“ jen nekreslí všechno. Velké kreslení používám jen jednou denně
    4. Ze schématu zapojení GND a V není patrné, ale je to tak. Doplnil jsem pár reálných forek zapojení – galerie teploměr
    5. Díky za podněty, text článku jsem na jejich základě ještě vylepšil.

  21. Formis
    24.11.2011 na 22:43 | #21

    @admin
    Zdravím, tak jsem dále laboroval s čidly. Zjistil jsem, že občas mi příjde od čidla teplota +85st.C. Nemůže to ustřelovat kůli tomu? Ale zajimavý, mám tam 5 čidel a minulou noc mě to jelo 3 hodiny úplně bez problémů.(viz. : http://czshare.com/2289360/all_day.png) Nesetkal jsi se s tím taky, popř. jak jsi to vyřeil? Trochu jsem Googlil a našel jsem jsem nějaký skript, kde bude asi něco jako, že když čidlo naměří 85st., tak to vyhodnotí jako špatné měření a měří znova. Nešel by ten skript pro načítání teploty upravit? Něco podobného je i ve skriptu u „Kratochvílovi“.
    Ještě mě napadlo, jestli nezkusit čidlo externě napájet 5V, ale nevím, jestli to je dobrý nápad.
    Jinak nevím, co mám špatně, ale stále se mě zapleveluje LOG – minutu co minutu mi to hlásí „Nov 24 14:39:01 /opt/sbin/cron[18131]: (admin) CMD (/opt/bin/digitemp_DS9097 -aq -r 2000 -c /opt/etc/digite…….“ Vše jsem udělal podle návodu, tak nevím.

  22. 11.07.2012 na 21:54 | #22

    Zdravím, tak jsem se také pustil do tohoto projektu.. vše ok, ale nenajde mi to čidla. Když nejsou zapojené, skončí to hned, když je zapojím, trvá to asi pět vteřin, ale nevrátí to nic víc. Přeměřil jsem snad už všechno, kromě těch čidel (ty snad nějak musí fungovat, ne?) a už netuším jak dál.. nějaký tipy?

    Předem děkuji, Martin

  23. admin
    17.07.2012 na 17:22 | #23

    @Martin Kopeček
    Předpokládám že zapojení jsi kontroloval několikrát, takže v tom problém nebude. Co převodník RS232>USB je detekován korektně?

  24. 18.07.2012 na 12:57 | #24

    Tak vyřešeno, problém byl ve verzi jádra (2.6.32) která se sice tváří, že s pl2303 pracuje bez problému, ale není to tak. Po upgrade na novější (3.3.8) je již vše ok.

  1. 06.04.2010 na 23:09 | #1
  2. 26.03.2012 na 09:46 | #2

 

%d bloggers like this: