pete_c
Guru
Changed the script a bit more:
#!/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) = @_;
# If the power reading is way off, uncomment the other power line
$power = (($data[5]^0xff)<<8) + ($data[4]^0xff);
# $power = ($data[5]<<8) + $data[4];
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.4);
$power = sprintf("%.3f",(1.19 + 0.84 * (($power - 288.0) / 204.0)));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, $power, $voltage\n";
}
#!/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) = @_;
# If the power reading is way off, uncomment the other power line
$power = (($data[5]^0xff)<<8) + ($data[4]^0xff);
# $power = ($data[5]<<8) + $data[4];
$voltage = ($data[8] << 8) | $data[7];
$voltage = sprintf("%.3f",123.6 + ($voltage - 27620) / 85 * 0.4);
$power = sprintf("%.3f",(1.19 + 0.84 * (($power - 288.0) / 204.0)));
@tda = localtime(time);
$td = ($tda[4]+1)."/$tda[3]/".(1900+$tda[5])." $tda[2]:$tda[1]:$tda[0]";
print "$td, $power, $voltage\n";
}
11/22/2013 23:46:43, 266.395, 122.447
11/22/2013 23:46:44, 266.408, 122.447
11/22/2013 23:46:45, 266.383, 122.447
11/22/2013 23:46:46, 266.379, 122.447
11/22/2013 23:46:47, 266.366, 122.447
11/22/2013 23:46:48, 266.404, 122.447
11/22/2013 23:46:49, 266.441, 122.447
11/22/2013 23:46:50, 266.420, 122.551
11/22/2013 23:46:51, 266.387, 122.447
11/22/2013 23:46:52, 266.362, 122.447
11/22/2013 23:46:53, 266.350, 122.447
11/22/2013 23:46:54, 266.387, 122.447
11/22/2013 23:46:55, 266.395, 122.447
11/22/2013 23:46:56, 266.375, 122.447
11/22/2013 23:46:57, 266.296, 122.447
11/22/2013 23:46:58, 266.309, 122.447
11/22/2013 23:46:59, 266.334, 122.447
11/22/2013 23:47:0, 266.354, 122.447
11/22/2013 23:47:1, 266.301, 122.339
11/22/2013 23:47:2, 266.325, 122.551
11/22/2013 23:47:3, 266.329, 122.551
11/22/2013 23:47:4, 266.338, 122.551
11/22/2013 23:47:5, 266.358, 122.447
11/22/2013 23:47:6, 266.317, 122.447
11/22/2013 23:47:7, 266.292, 122.447
11/22/2013 23:47:8, 266.313, 122.447
11/22/2013 23:47:9, 266.375, 122.447
11/22/2013 23:47:10, 266.395, 122.447
^C