[Perl] geen output in terminal venster

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Ik ben bezig mijn currentcost CC128 Envir via een pl2303 serial-USB kabel aan mijn Synology NAS te hangen. Alles lijkt goed te werken (cat /dev/ttyUSB0 levert prima output). Alleen krijg ik met het script dat ik hiervoor heb helemaal geen output te zien als ik deze via SSH start. Een simpele test via:

code:
1
2
3
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>Hello World !</BODY></HTML>\n";


Zorgt wel voor de juiste output. Wat doe ik nou fout? Script in kwestie staat hieronder:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
# Reads data from a Current Cost device via serial port.
use warnings;
use strict;
use Device::SerialPort qw( :PARAM :STAT 0.07 );

my $PORT = "/dev/ttyUSB0";

my $ob = Device::SerialPort->new($PORT);
$ob->baudrate(57600);
$ob->write_settings;

open(SERIAL, "+>$PORT");
while (my $line = <SERIAL>) {
    if ($line =~ m!<ch1><watts>0*(\d+)</watts></ch1>.*<tmpr> *([\-\d.]+)</tmpr>!) {
        my $watts = $1;
        my $temp = $2;
        print "$watts, $temp\n";
    }
}

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Komt je script wel tot aan regel 18? Ik bedoel, matched je if-statement op regel 15?

Kan je op e.g. regel 12 een print statement plaatsen?

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Yep, een print statement op regel 12 komt prima door. Als ik het volgende script draai, dan krijg ik wel output die ik verwacht:
code:
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl -w
# Reads data from a Current Cost device via serial port.
my $serial_port = "/dev/ttyUSB0";

while (1) {
open (SERIAL,"+<$serial_port") || die "can't open $serial_port";
while (<SERIAL>) {
my $line = $_;
print $line;
}
}


Ik snap dus niet precies waar het fout gaat.

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Kan je eens doen:
code:
1
2
3
while (my $line = <SERIAL>) {
    print $line;
}

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Dat werkt. Ik denk dus dat het foutgaat bij het formatten van de output. Sample output is:

code:
1
2
3
4
<msg><src>CC128-v1.48</src><dsb>00290</dsb><time>09:29:04</time><tmpr>19.0</tmpr><sensor>0</sensor><id>00959</id><type>1</type><ch1><watts>00000</watts></ch1></msg>
<msg><src>CC128-v1.48</src><dsb>00290</dsb><time>09:29:10</time><tmpr>19.0</tmpr><sensor>0</sensor><id>00959</id><type>1</type><ch1><watts>00000</watts></ch1></msg>
<msg><src>CC128-v1.48</src><dsb>00290</dsb><time>09:29:16</time><tmpr>19.0</tmpr><sensor>0</sensor><id>00959</id><type>1</type><ch1><watts>00000</watts></ch1></msg>
<msg><src>CC128-v1.48</src><dsb>00290</dsb><time>09:29:22</time><tmpr>19.0</tmpr><sensor>0</sensor><id>00959</id><type>1</type><ch1><watts>00000</watts></ch1></msg>

[ Voor 4% gewijzigd door Frankster op 01-05-2013 15:49 ]

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Het ziet eruit als XML, nu is het niet veel output dus een regex zou prima zijn, maar ik zou een XML parser er overheen gooien :P

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Ai, dat gaat me enigszins de pet te boven. Ben een ontzettende Perl noob en om de 1 of andere reden zijn alle standaard scripts voorzien van de bovenstaande code. Enig idee hoe ik dit zelf aan kan passen?

Edit: gelukt! Moet:

if ($line =~ m!<tmpr>\s*(-*[\d.]+)</tmpr>.*<ch1><watts>0*(\d+)</watts></ch1>!) zijn

Totale code wordt dan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
# Reads data from a Current Cost device via serial port.
use warnings;
use strict;
use Device::SerialPort qw( :PARAM :STAT 0.07 );

my $PORT = "/dev/ttyUSB0";

my $ob = Device::SerialPort->new($PORT);
$ob->baudrate(57600);
$ob->write_settings;

open(SERIAL, "+>$PORT");
while (my $line = <SERIAL>) {
    if ($line =~ m!<tmpr>\s*(-*[\d.]+)</tmpr>.*<ch1><watts>0*(\d+)</watts></ch1>!) {
        my $watts = $1;
        my $temp = $2;
        print "$watts, $temp\n";
    }
}

[ Voor 62% gewijzigd door Frankster op 01-05-2013 16:06 ]

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Geen idee of onderstaande nog accuraat is, maar je kan het proberen:

http://www.techrepublic.c...h-perls-xmlsimple/5363190

En anders met regex: http://perldoc.perl.org/perlrequick.html

edit:

Never mind, moet eerst refreshen voordat ik post :P Mooi dat het werkt, heb je toch snel opgelost :P

[ Voor 20% gewijzigd door webfreakz.nl op 01-05-2013 16:18 ]

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!

Pagina: 1