úprava vykreslování grafu pomocí RRDtool

RRDtool nabízí spoustu možností jak vykreslování grafů upravit a proto jsem se rozhodl i ty svoje, které používám k vykreslování průběhu měřený teplot, upravit.

Takže jsem se z původního vzhledu: původní verze Dostal až k tomuto: upravená verze

Původní skript k vykreslování grafu lite.php, který se cronem pouští každých 5 minut a vykresluje grafy jen 2 poslední dny a 3 hodiny, vypadal takto:

<?
include ("config.php");
$commands_all = array("hour"=>"--start -10800", "day"=>"--start -160000");
foreach ($commands_all as $name=>$time)
{
$command = $rrdtool.' graph '.$rrdImgDir.'all_'.$name.'.png '.$time.' ';
foreach ($sensors as $n=>$str)
{
$command .= 'DEF:d'.$n.'='.$rrdDir.$n.'.rrd:temp:AVERAGE ';
}
foreach ($sensors as $n=>$str)
{
$command .= 'LINE1:d'.$n.$color[$n].':"'.$str.'" ';
}
$command .= '-h'.$y.' -w'.$x.' -y1:2 --color GRID#dddddd --color MGRID#aaaaaa';
shell_exec($command);
}
?>

Hlavní výhodou takto napsaného skriptu je, že se změnou počtu čidel netřeba nic měnit, stačí upravit jen config.php, pro úravy je lehce nepřehledný, ale dílo se povedlo a nová verze vypadá takhle:


<?
# Cooper Dale
include ("config.php");
$commands_all = array("hour"=>"--start -10800", "day"=>"--start -160000");
foreach ($commands_all as $name=>$time)
{
$command = $rrdtool.' graph '.$rrdImgDir.'all_'.$name.'.png '.$time.' -t "Teploty u Coopera" -v "teplota v °C" --watermark "by Cooper" ';
$command .= 'HRULE:0'.$ZeroTempColor.':"'.$ZeroTempText.' \\n" ';
foreach ($sensors as $n=>$str)
{
$command .= 'DEF:d'.$n.'='.$rrdDir.$n.'.rrd:temp:AVERAGE ';
}
foreach ($sensors as $n=>$str)
{
$command .= 'LINE1:d'.$n.$color[$n].':"'.$str.' \\t" ';
$command .= 'GPRINT:d'.$n.':MIN:"Min\: %5.2lf%s \\t" ';
$command .= 'GPRINT:d'.$n.':AVERAGE:"Avg\: %5.2lf%s \\t" ';
$command .= 'GPRINT:d'.$n.':MAX:"Max\: %5.2lf°C \\n" ';
}
$command .= 'LINE2:'.$CustomLine1.$CustomLine1Color.':'.$CustomLine1.'"'.$CustomLine1Text.'\\n" ';
$command .= '-h'.$y.' -w'.$x.' -y1:2 --color GRID#dddddd --color MGRID#aaaaaa';
shell_exec($command);
}
?>

A protože i já jsem na oficiálním webu RRDtool hodně tápal, vysvětlím pár důležitých řádků skriptu.

  • Přidání názvu grafu, popisky svislé osy a vodoznaku se povedlo takto:

    $command = $rrdtool.' graph '.$rrdImgDir.'all_'.$name.'.png '.$time.' -t "Teploty u Coopera" -v "teplota v °C" --watermark "by Cooper" ';

  • Přidání vodorovné čáry, která se zobrazí jen když je třeba se děje pomocí HRULE, hladina je 0°C s barvou a textem který se načítá z config.php.

    $command .= 'HRULE:0'.$ZeroTempColor.':"'.$ZeroTempText.' \\n" ';

  • Následně se pomocí DEF načítají data z databáze a vykreslují pomocí LINE s tloušťkou čáry 1, netřeba více vysvětlovat.
  • Pak se vkládá legenda grafu pomocí GPRINT , následuje opět název proměnné, co se má vypsat, zde MINimální hodnota z vykreslovaného průběhu, popisek hodnoty, 5 značí počet pozic před desetinou čárkou, 2 za ní. Zaokrouhlování ale není u teplot třeba, ale pro jistotu a omezení chyb nechávám. Dále ze pomocí l zarovná doleva a na závěr \\tabulátor pro mezeru, po MAX \\nový řádek. Shodně se děje i pro AVEARGE, MAX i případně LAST.

    $command .= 'GPRINT:d'.$n.':MIN:"Min\: %5.2lf%s \\t" ';
    $command .= 'GPRINT:d'.$n.':AVERAGE:"Avg\: %5.2lf%s \\t" ';
    $command .= 'GPRINT:d'.$n.':MAX:"Max\: %5.2lf°C \\n" ';

  • Dále vykresluji přes LINE povinnou a pevnou hladinu, s tloušťkou 2 body, ostatní parametry jsou uloženy v config.php, ta je na rozdíl od HRULE vidět vždy.

    $command .= 'LINE2:'.$CustomLine1.$CustomLine1Color.':'.$CustomLine1.'"'.$CustomLine1Text.'\\n" ';

  • Vlastní config.php se rozrostl o tyto řádky:

    $CustomLine1 = 24;
    $CustomLine1Color = "#0DC4F250";
    $CustomLine1Text = "°C ideál pro akvárko";
    $ZeroTempColor = "#0000ff";
    $ZeroTempText = "mrzlo!";

  • Jelikož lite.php generuji každých 5 minut a měsíční a roční graf jen jedou denně, je třeba v podobném duchu upravit i graphdata.php, kde jsem už řešil jen úpravu vykreslování společných grafů.
  • na závěr trochu opakování:
    • Řádek v /opt/etc/crontab vypadá následovně:

      01 01 * * * admin php /opt/etc/tempsensor/graphdata.php
      */5 * * * * admin /opt/etc/tempsensor/teplota

    • Skript /opt/etc/tempsensor/teplota který spouští celý proces měření, zapisování, vykreslování a zároveň ošetřuje dobu kdy je obrázek s grafem, kvůli jeho generování, nedostupný:

      #!/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
      cp /opt/share/www/lighttpd/temperature/all_hour.png /opt/share/www/lighttpd/temperature/all_hour_graph.png

    • Výsledek je k vidění zde: http://cz777cooper.no-ip.info/temperature/akt.php
    • Celý návod o tom jak měřím teplotu je zde – …/zprovozneni-mereni-teploty

Doufám že je tento jednoduchý návod srozumitelný a bude někomu ku prospěchu. Případné dotazy pište do komentářů.

Categories: Asus WL-500gP Tags: , , ,

ladění funkcí a příkaz tail -f

02.09.2009 Bez komentářů

Pokud, na linuxu obecně, cokoliv ladíte či upravujete, případně jen sledujete chování je velice užitečný příkaz tail.
Není třeba nic doinstalovávat, jedná se o obecný příkaz.

V případě, že potřebujete soubor průběžně sledovat (Follow) použijte jej s parametrem -f, pokud tedy chcete monitorovat hlavní log routeru – syslog, použijte následující příkaz:

tail -f /usr/tmp/syslog.log

Tail vypíše posledních 10 řádků souboru a bude je dále aktualizovat. Běh programu ukončíte stiskem Ctrl+C.
Tail je užitečné mít spuštěný v druhé konzoli a sledovat tak dopad vašich kroků v logu.
Logy které se vyplatí monitorovat:

  • tail -f /usr/tmp/syslog.log
  • tail -f /opt/var/log/lighttpd/error.log
  • tail -f /opt/var/log/lighttpd/access.log
  • a další …

Sledování lze dotáhnout k dokonalosti třeba pomocí doplňku pro PuTTY s názvem PuTTY Connection Manager. Mezi použitelné funkce patří spouštění příkazů ihned po připojení a více konzolí v jednom okně.

PuTTY Connection Manager screen
Ke stažení PuTTY Connection Manager 0.7.1.136beta .

Categories: Asus WL-500gP, Linux návody Tags:

Problém s USB HUBem – rozbočovačem

I přesto, že použit USB HUB s externím napájením, některá zařízení nejsou rozpoznána, nebo nefungují korektně. Řešením může být použití příkazu rmmod ehci-hcd , který z jádra odstraní modul ehci-hcd, pro lepší správu jej vložte do inicializačního skriptu /opt/init.usb

Categories: Asus WL-500gP Tags:

Interní USB a RS232 port

18.05.2009 Bez komentářů

Na desce routeru Asus WL-500g Premium je čip VIA VT6212L se čtyřportovým USB řadičem, ale pouze dva jsou vyvedeny na zadní stranu routeru. Pomocí dokumentace a jistou mírou zručnosti naleznete konektory USBP3+, USBP3- a USBP4+, USBP4- a napájení. Viz příloha.  Tímto způsobem lze do nitra routeru napevno zabudovat například pevný disk nebo zvukovou kartu při zachování volných vnějších USB portů.

Na desce se také nachází piny pro konektor RS232, ten je použitelný pouze pro řízení z konzole, viz příloha.


Categories: Asus WL-500gP Tags:

Přetaktování routeru

Router obsahuje procesor, který je možné přetaktovat a to velice jednoduše. Přetaktování se v praxi příliš neprojevilo a tak je zmíněno pouze pro testovací účely.

Po zadání příkazu cat /proc/cpuinfo zjistíme aktuální takt procesoru:

system type Broadcom BCM4704 chip rev 9 pkg 0
procesor 0
cpu model BCM3302 V0.6
BogoMIPS 263.78

Příkazem: nvram set clkfreq=300 && nvram commit && reboot router přetaktujete.

Zpět na původní takt příkazem: nvram set clkfreq=264 && nvram commit && reboot

Categories: Asus WL-500gP Tags:

Vývoj aplikací

17.05.2009 Bez komentářů

Balíčkem ipkg-opt -t /opt install optware-devel je možné nainstalovat podporu vývoje aplikací a balíčkem ipkg -t /opt install buildroot se nainstaluje gcc/g++[1]. Přepínač -t je nutný v případě, že používáte výchozí ipkg a ne ipkg-opt. Vzhledem k tomu, že router není nijak výkonné zařízení, instalace nějaký ten čas zabere. [16]

Pro překlad první ho kódu použijte příkaz gcc hello.c, který může obsahovat například:

#include
int main()
{
printf(„Hello World\n“);
return 0;
}


[1] GNU Compiler Collection (zkráceně GCC) je sada kompilátorů vytvořených v rámci projektu GNU. Původně překladač programovacího jazyka C později byly na stejném společném základě vytvořeny překladače jazyků C++, Fortran, Ada a dalších [1]

Categories: Asus WL-500gP Tags:

Ovládání routeru pomocí připojené USB klávesnice

17.05.2009 Bez komentářů

Pro jednoduché ovládání routeru pomocí připojené klávesnice[1] může být použita jakákoliv USB klávesnice, záleží pouze na počtu požadovaných příkazů. Je možné takto ovládat veškeré funkce routeru, jako zapínání wi-fi síťové karty, ovládání hudebního serveru, restartovat router a spousta dalších.

  • nakopírujete obsah archivu cmdpad-0.0.3 do složky /opt :
  • nastavte programu práva spuštění chmod +x /opt/bin/cmdpad
  • do souboru /opt/init.usb vložíme příkazy pro spuštění a restartujte router

    # Activace USB klavesnice
    cp /opt/etc/cmdpad.conf /etc
    insmod /opt/usr/lib/cmdpad/input.o
    insmod /opt/usr/lib/cmdpad/hid.o
    insmod /opt/usr/lib/cmdpad/evdev.o
    /opt/bin/cmdpad --quiet

  • přiřaďte funkce jednotlivým klávesám: zastavte skrytě běžící cmdpad killall odpad a spusťe jen s výstupem do konzole /opt/bin/cmdpad

při stisku tlačítek vidíte jejich kódy, které následně vyplňte do konfiguračního souboru /opt/etc/cmdpad.conf a přiřaďte cestu ke svým skriptům. Tlačítka mají tři režimy P, R a H = stisk, uvolnění a držení.
[1]Byla použita USB numerická klávesnice A4Tech TK-5

Categories: Asus WL-500gP Tags:

Webcamera

Router je již od výrobce připraven pro připojení USB kamery. Podporovány jsou pouze již nevyráběné kamery s ovladači PWC 9.0.2 a OV51x 1.65-1.12. Většina současných kamer včetně těch levných spolupracuje s ovladačem SPCA5xx.
1. vypněte podporu USB webových kamer v administraci: USB Application – Web Camera – Enable Web Camera? – Disabled

2. telnet my.router (192.168.1.1)

3. ipkg install palantir

4. cd /opt/usr/lib

5. wget http://koppel.cz/cdmawifi/postupy/USBwebcam/spca5xx.o

6. wget http://koppel.cz/cdmawifi/postupy/USBwebcam/spcadecoder.o

7. přidejte následující doinit.usb nano /opt/init.usb

insmod videodev
insmod /opt/usr/lib/spcadecoder.o
insmod /opt/usr/lib/spca5xx.o
sleep 5
/opt/bin/palantir -C /opt/etc/palantir.conf >/dev/null&

8. případně upravte konfigurační soubor kamery /opt/etc/palantir.conf a restartujte router: reboot

9. po restartu je steam videa dostupný na adrese my.router:8000

10. nahrajte do root složky www serveru /opt/share/www/lighttpd balíček[2] s nástroji pro zobrazení kamery ve www stránkách.

Možné problémy: pokud se dočkáte v systémovém logu chybového hlášení „…DEALLOC error on init_Isoc“ je problém s propustností sběrnice USB. Nejčastějším řešením je připojení kamery přímo do USB portu routeru, nikoliv přes USB rozbočovač. A to i přesto, že má externí napájení[3].

 


 

[1]Konkrétně byla použita webová kamera Logitech QuickCam Express podporována ovladačem SPCA561A. Aktualizovaný seznam podporovaných kamer je dostupný na internetové adrese http://mxhaard.free.fr/spca5xx.html

[2]HTML verze pohledu na kameru, Java applet a Win32 aplikace ke stažení na počítač http://koppel.cz/cdmawifi/postupy/USBwebcam/www.zip

[3]Odzkoušeno s rozbočovačem MAXXTRO/ GEMBIRD USB2.0 Hub UHB-C247

Categories: Linux návody, software Tags:

Připojení USB modemu

17.05.2009 Bez komentářů

Jedním z důvodů, proč uživatelé instalují modifikovaný firmware od Koppel.cz, je podpora USB modemů a následné sdílení takového připojení. Původně byly podporovány pouze CDMA modemy, v dnešní době je podporována většina modemů dostupných v České republice. Ve spojení s 12V napájením, lze modem a tedy internet provozovat mobilně či tzv. „na kolech“, takové řešení využívá většina dálkových autobusových dopravců.

Většinu modemů stačí připojit do USB portu a nastavit v příslušné sekci webového rozhraní přihlašovací údaje. Některé modemy vyžadují pokročilejší nastavení, pro které poskytuje fórum uživatelů firmware podporu.

Categories: Asus WL-500gP Tags:

Server pro přehrávání hudby

Vzhledem k tomu, že k routeru se dá připojit pomocí USB téměř cokoliv nic nebrání připojení USB zvukové karty. Hudba může být přehrávána z připojeného flashdisku, streamována z internetu, přímo generována routerem, případně nahrávána.[1]

  • zapněte podporu waveserveru ve webové administraci: System Setup – Services – Enable WaveServer: yes (funguje pouze v oleg firmware, v koppel byl odebrán kvůli úspoře místa na vnitřní flash)
  • proveďte následující příkazy pro instalací ovládání hudebního serveru a stažení potřebných knihoven: ipkg update && ipkg install mpd && ipkg install libiconv && ipkg install mpc
  • vytvořte konfigurační soubor pro mpd: nano /opt/etc/mpd.conf cesty jsou samozřejmě volitelné
  • port "6600"
    music_directory "/opt/MP3"
    playlist_directory "/opt/Mpd/Playlists"
    db_file "/opt/Mpd/mpddb"
    log_file "/opt/Mpd/mpd.log"
    error_file "/opt/Mpd/errors.log"
    state_file "/opt/Mpd/state"
    # pro pripad ze by nefungovalo volume
    mixer_type "software"

  • vytvořte potřebné adresáře podle konfiguračního souboru: mkdir /opt/MP3 && mkdir /opt/Mpd && mkdir /opt/Mpd/Playlists
  • spusťte Music Player Daemon-a /opt/bin/mpd /opt/etc/mpd.conf

Pokud chcete spouštět MPD po startu přidáme tento příkaz do souboru /opt/init.usb

K ovládání hudebního serveru můžete použít příkazovou řádku. Seznam příkazů je dostupný příkazem mpc help, nebo je ovládejte mnohem pohodlnější rozšířením Music Player Minion[2], případně lze doinstalovat webového PHP klienta do routeru.

cd /opt/tmp/
wget http://mercury.chem.pitt.edu/~shank/phpMp-0.11.0.tar.gz
tar -xvf /opt/tmp/phpMp-0.11.0.tar.gz -C /opt/share/www/lighttpd/

[1]Podporována je většina USB zvukových adaptérů. Konkrétně byl použit adaptér i-tec usb 5.1 audio.

[2]Doplněk Music Player Minion pro prohlížeč Mozilla Firefox https://addons.mozilla.org/

syslog.log pro audioadaptér i-tec usb 5.1 audio

pokud při startu MPD dostanete mpd: can't load library 'libssp.so.0' přihrajte si tuto knihovnu do adresáře /opt/lib libssp.so.0

cd /opt/lib
wget http://cooper.regionaliste.cz/wp-content/uploads/2009/05/libssp.so.0

Spoustu klientů můžete nalézt na stránce mpd.wikia.com/wiki/Clients, doporučuji začít s klasickým phpMP – phpMp-0.11.0.tar

Využití CRONu

Pokud se chcete nechat budit rádiem, není nic jednoduššího než využit CRON. Do něj vložte dva řádky, jeden pro spuštění přehrávání hudby v 6:35 a druhý pro zastavení v 7:00 a to jen v pracovní dny:

35 06 * * 1,2,3,4,5 admin /opt/etc/vstavat
00 07 * * 1,2,3,4,5 admin mpc stop

pro buzení jsem použil samostatný skript vstavat, kvůli jednodušší editaci, ten může vypadat takto:

#!/bin/sh
#vstávací skript co zapne rádia
#nastaví volume na 100%
mpc volume 100
#vyčistí playlist
mpc clear
#natáhne playlist Rádia (nebo cokoliv jiného)
mpc load radios
#začne hrát
mpc play

příkaz mpc load radios natáhne playlist radios.m3u uložený ve složce Playlists.

Pokud se dočkáte hlášky:

/opt/bin/mpd: can’t load library ‘libsqlite3.so.0′

je třeba dohrát nainstalovat ještě sqlite: ipkg install sqlite případně dohrát do /opt/lib soubor libsqlite3.so.0

Categories: Asus WL-500gP Tags: