rrdtool create ted.rrd \
--step 1 \
DS:kw:GAUGE:600:0:U \
DS:volt:GAUGE:600:0:U \
RRA:MAX:0.5:1:2016
[1389227239]RRA[MAX][1]DS[kw] = 3.2961160800e+00
[1389227239]RRA[MAX][1]DS[volt] = 1.2502335490e+02
1/8/2014 18:27:19, KW 3.298, Voltage 125.021
return_value = 0
[1389227240]RRA[MAX][1]DS[kw] = 3.3001158360e+00
[1389227240]RRA[MAX][1]DS[volt] = 1.2501359457e+02
1/8/2014 18:27:20, KW 3.302, Voltage 125.007
return_value = 0
[1389227241]RRA[MAX][1]DS[kw] = 3.3153133500e+00
[1389227241]RRA[MAX][1]DS[volt] = 1.2501072774e+02
1/8/2014 18:27:21, KW 3.327, Voltage 125.014
return_value = 0
[1389227242]RRA[MAX][1]DS[kw] = 3.3270000000e+00
[1389227242]RRA[MAX][1]DS[volt] = 1.2503423641e+02
1/8/2014 18:27:22, KW 3.327, Voltage 125.052
return_value = 0
[1389227243]RRA[MAX][1]DS[kw] = 3.3248697600e+00
[1389227243]RRA[MAX][1]DS[volt] = 1.2506797680e+02
1/8/2014 18:27:23, KW 3.323, Voltage 125.082
return_value = 0
[1389227244]RRA[MAX][1]DS[kw] = 3.3251334400e+00
[1389227244]RRA[MAX][1]DS[volt] = 1.2507826648e+02
1/8/2014 18:27:24, KW 3.327, Voltage 125.075
return_value = 0
[1389227245]RRA[MAX][1]DS[kw] = 3.3334023240e+00
[1389227245]RRA[MAX][1]DS[volt] = 1.2506753062e+02
1/8/2014 18:27:25, KW 3.339, Voltage 125.061
return_value = 0
[1389227246]RRA[MAX][1]DS[kw] = 3.3390000000e+00
[1389227246]RRA[MAX][1]DS[volt] = 1.2507489885e+02
#!/usr/bin/perl -w -s
system("stty -F /dev/ttyUSB0 1200 cs8 raw");
open INFILE, "/dev/ttyUSB0"
or die "\nCannot open /dev/ttyUSB0!\n";
@data = ();
$buf = "";
# $cnt = 0;
$started = 0;
sub processPacket($);
while (read(INFILE, $buf, 1)) {
$d = ord($buf) ^ 0xff;
if ($d == 0x55 && $started == 0) {
$started = 1;
$a = 0;
}
if ($started == 1) {
$data[$a] = $d;
$sum += $data[$a];
printf("0x%02X ", $data[$a]);
$a++;
if ($a >= 11) {
$sum -= $data[9];
$sum &= 0xff;
if ($sum == 0) { processPacket($data); }
$started=1;
$a = 0;
}
}
}
# Working sub process packet stuff
sub processPacket($) {
local($data) = @_;
$mtu = $data[1];
# the $mtu equals your mtu number put in a Decimal to Hexadecimal Converter )
if ($mtu == 0xCE ) {
# If the power reading is way off, uncomment the other power line
$p = (($data[5]^0xff)<<8) + ($data[4]^0xff);
print "$p ";
$pa = ($data[5]<<8) + $data[4];
print "$pa ";
if ($p <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$p = sprintf("%.3f",(1.19 + 0.84 * (($p - 288.0) / 204.0)));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Hydro $p, Voltage $voltage\n";
system("rrdtool updatev ted.rrd N:$p:$voltage");
}
if ($pa <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$pa = sprintf("%.3f",(0 - (1.19 + 0.84 * (($pa - 288.0) / 204.0))));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Hydro $pa, Voltage $voltage\n";
system("rrdtool updatev ted.rrd N:$pa:$voltage");
}
}
if ($mtu == 0xA0 ) {
# If the power reading is way off, uncomment the other power line
$w = (($data[5]^0xff)<<8) + ($data[4]^0xff);
print "$w ";
$wa = ($data[5]<<8) + $data[4];
print "$wa ";
if ($w <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$w = sprintf("%.3f",(1.19 + 0.84 * (($w - 288.0) / 204.0)));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Wind $w, Voltage $voltage\n";
system("rrdtool updatev ted2.rrd N:$w:$voltage");
}
if ($wa <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$wa = sprintf("%.3f",(0 - (1.19 + 0.84 * (($wa - 288.0) / 204.0))));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Wind $wa, Voltage $voltage\n";
system("rrdtool updatev ted2.rrd N:$wa:$voltage");
}
}
if ($mtu == 0xB1 ) {
# If the power reading is way off, uncomment the other power line
$s = (($data[5]^0xff)<<8) + ($data[4]^0xff);
print "$s ";
$sa = ($data[5]<<8) + $data[4];
print "$sa ";
if ($s <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$s = sprintf("%.3f",(1.19 + 0.84 * (($s - 288.0) / 204.0)));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Solar $s, Voltage $voltage\n";
system("rrdtool updatev ted1.rrd N:$s:$voltage");
}
if ($sa <= 5000) {
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.2);
$sa = sprintf("%.3f",(0 - (1.19 + 0.84 * (($sa - 288.0) / 204.0))));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, Solar $sa, Voltage $voltage\n";
system("rrdtool updatev ted1.rrd N:$sa:$voltage");
}
}
}
close INFILE;
sash said:I can probably put +10 mtu. ie one on each breaker. monitor them all from one with one hacked ted 1001