add temperature to log file
[vaillant-thermostat] / serial.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use Device::SerialPort;
5 use Data::Dump qw(dump);
6 use Time::HiRes qw(time);
7
8 my $read_len = 255;
9
10 my $path = shift @ARGV || '/dev/serial/by-path/platform-20980000.usb-usb-0:1.3.1:1.0-port0';
11
12 $|=1;
13
14 my $s = new Device::SerialPort( $path ) || die $!;
15 $s->baudrate(2400);
16 $s->databits(8); # 7
17 $s->parity('none');
18 $s->stopbits(1);
19 $s->handshake('none');
20 $s->read_char_time(2);
21 $s->read_const_time(3);
22
23 #$s->write('o');
24
25 my $t = time();
26
27 my $sym;
28 my $chr = 'A';
29
30 while (1) {
31         my ($len, $string) = $s->read($read_len);
32         my $ts = time();
33
34         if ( $len > 0 ) {
35                 my $hex = unpack('H*',$string);
36                 $hex =~ s/(..)/$1 /g;
37 =for later
38                 my $ascii;
39                 foreach ( split(/ /, $hex) ) {
40                         if ( ! exists $sym->{$_} ) {
41                                 $chr++;
42                         $ascii 
43 =cut
44
45                 my $temp = `curl localhost:3000/temp.txt`;
46                 $temp =~ s/\s+/ /gs;
47
48                 #printf "%s %2d  %s\n", time(), $len, $hex;
49                 printf "%8.4f %6.2f %2d  %s | %s\n", $ts, $ts - $t, $len, $hex, $temp;
50                 $t = time();
51         }
52 }
53
54 $s->close;