Dispositivo :: Gsm: Come scoprire, se un gruppo di sms è uno messaggio?
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]
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";
}