Domanda

Con il dispositivo :: Gsm posso leggere l'sms ricevuto sul mio umts-modem. A volte uno messaggio viene diviso in due o più sms a causa della limitazione della lunghezza di uno sms. C'è un modo per scoprire se un gruppo di sms è una parte di un messaggio? Wammu per esempio me scarpe sms che appartengono insieme come un unico testo.

#!/usr/bin/perl  
use warnings; use strict;  
use Device::Gsm;  

my $modem = new Device::Gsm( port => '/dev/ttyUSB0' );  
if( $modem->connect() ) {  
    print "connected!\n";  
}   
else {  
    print "sorry, no connection with serial port!\n";  
}  

my @msg = $modem->messages;  
if( @msg ) {  
    my $n = 0;  
    for( @msg ) {  
    my $sms = $_;  
    next unless defined $sms;  
    print "\nMESSAGE N. $n\n";  
    print 'Text   [', $sms->text(), "]\n";  
    $n++;  
    }  
}  
else {   
    print "No message on SIM, or error during read!\n";   
}  

  

connected!

     

MESSAGE N. 0   Testo [Messaggio 1 Parte 1]

     

MESSAGE N. 1   Testo [Messaggio 1 Parte 2]

     

MESSAGE N. 2   Testo [Messaggio 1 Parte 3]

     

MESSAGE N. 3   Testo [Messaggio 2]

     

MESSAGE N. 4   Testo [Messaggio 3]

È stato utile?

Soluzione

Non credo che ci sia un modo con il dispositivo :: Gsm direttamente. Tuttavia, se si legge il messaggio in modalità PDU (vedi https://metacpan.org/pod/ dispositivo :: Gsm # modalità ) si può quindi interpretare l'intestazione in modo appropriato per leggere le bandiere più parti.

[A cura di aggiungere: questo riferimento è una grande panoramica delle intestazioni SMS PDU: http://www.spallared.com/old_nokia/nokia/smspdu/smspdu. htm ]

Altri suggerimenti

Questo funziona per lo più, ma non sempre.

#!/usr/bin/perl
use warnings; use strict; 
use 5.010;
binmode STDOUT, ':encoding(UTF-8)';
use Device::Gsm;

my $modem = new Device::Gsm( port => '/dev/ttyUSB0' );

if( $modem->connect() ) { 
    print "connected!\n"; 
} else { 
print "sorry, no connection with serial port!\n"; 
}

my @msg = $modem->messages( 'ME' );
if( @msg ) {
    print "You have messages!\n" ;
    my $n = 0;
    my $text;
    for my $sms ( @msg ) {
    next unless defined $sms;
    $text .= $sms->text;
    if ( $sms->{tokens}{PDUTYPE}{_MMS} ) {
        say "\nMESSAGE N. $n";
        say $text; 
        $text = '';
        $n++;
        <STDIN>;
    }
    }
} else { 
    print "No message or error during read!\n"; 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top