Ná základě diskuze viewtopic.php?f=7&t=1721&p=10209&hilit=m%C4%9B%C5%99en%C3%AD+teploty#p10209
nasměrování od kamarádů se mě podařilo udělat funkční řešení, jak dostat do grafu průběh teplot z teploměru pro seriový port http://www.papouch.com/shop/scripts/_de ... cislo=0038
Netvrdím, že moje řešení je nějaké ideální, ale funguje. Tak předem prosím rýpaly, co tu začnou vykřikovat, že je to blbě napsaný, ať buď ukáží svoji funkční verzi, nebo mlčí. Vyčítání funguje pouze z PC, z rb133 nefunguje viz diskuze uvedená výše a jinde jsme to zatím nezkoušel.
Pro vyčítání budete potřebovat linuxovej stroj s nainstalovaným expect, rrdtool, librrds-perl a 2 skripty:
hafi_temp_dw.sh
#!/usr/bin/expect
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet [lindex $argv 0]
expect "Login:"
send "$username\r"
expect "Password:"
send "$password\r"
expect "> "
send "/system serial-terminal serial0\r"
expect "+"
set timeout 5000
send \001
expect " "
send \0121
a rrd_logger.pl (co dělá tento soubor se mě neptejte, ten je staženej někde z netu a lehce upravenej)
#!/usr/bin/perl
#
use RRDs;
sub CreateGraph
{
my $rrd = $_[1];
my $img = $_[2];
RRDs::graph "$img/logger-$_[0].png",
"--lazy",
"-s -1$_[0]",
"-t Leiden temperature ",
"-h", "200", "-w", "600",
"-a", "PNG",
"-v degrees C",
"DEF:intemp=$rrd/logger.rrd:in-temp:AVERAGE",
"LINE2:intemp#FF0000:Room Temperature",
"GPRINT:intemp:MIN: Min\\: %2.lf",
"GPRINT:intemp:MAX: Max\\: %2.lf",
"GPRINT:intemp:AVERAGE: Avg\\: %4.1lf",
"GPRINT:intemp:LAST: Current\\: %2.lf degrees C\\n";
if ($ERROR = RRDs::error) { print "$0: unable to generate $_[0] graph: $ERROR\n"; }
}
# location of rrdtool databases
my $rrd = '/var/www/temp';
# location where the images should go
my $img = '/var/www/temp';
my $tempIN = `/usr/local/bin/hafi_temp_dw.sh ip_adresa username heslo | grep + | cut -d C -f 1`;
print $tempIN;
chop($tempIN);
# if rrdtool database doesn't exist, create it
if (! -e "$rrd/logger.rrd")
{
print "creating rrd database ...\n";
RRDs::create "$rrd/logger.rrd",
"-s 300",
"DS:in-temp:GAUGE:600:-20:100",
# "DS:out-temp:GAUGE:600:-20:100",
"RRA:AVERAGE:0.5:1:576",
"RRA:AVERAGE:0.5:6:672",
"RRA:AVERAGE:0.5:24:732",
"RRA:AVERAGE:0.5:144:1460";
}
# insert value into rrd
RRDs::update "$rrd/logger.rrd", "-t", "in-temp", "N:$tempIN";
if ($ERROR = RRDs::error) { print "$0: unable to update $rrd/logger.rrd: $ERROR\n"; }
# create graphs
&CreateGraph("day",$rrd,$img);
&CreateGraph("week",$rrd,$img);
&CreateGraph("month",$rrd,$img);
&CreateGraph("year",$rrd,$img);
# Aktualni teplota se bude zapisovat do /tmp/neco.txt
my $teplota = $tempIN; $teplota = 0 + $teplota; `echo $teplota°C > /tmp/motyl.txt` ;
# print $teplota;
První skript slouží pro vytažení teploty, druhý ho spustí a vygeneruje grafy. V druhém si upravte cesty k adresáři pro ukládání obrázků a rrd databáze a pak doplňte ip adresu, jméno a heslo pro přihlášení k mikrotiku.
Ještě je třeba zajistit pravidelné spouštění rrd_logger.pl třeba zapsáním řádku do cronu
*/5 * * * * root /usr/local/bin/rrd_logger.pl >> /var/log/temp.log 2>&1
A teď kdyby se do toho pustil někdo znalejší a upravil skripty tak, aby existoval konfigurační soubor, kam by se psaly ip adresy mikrotiku v siti a grafy by se generovaly pro více mikrotiku za použití jednoho skriptu.
Pro ty co se s linuxem perou, tak vytvořeným skriptům musíte přiřadit atribut pro spouštění třeba
chmod +x soubor