:: dispositivo GSM: ¿Cómo saber, si un grupo de SMS es un mensaje?
Pregunta
Con el dispositivo GSM :: puedo leer el SMS recibido en mi UMTS-módem. A veces, un mensaje se divide en dos o más SMS, debido a la limitación de la longitud de un SMS. ¿Hay una manera de saber si un grupo de SMS es una parte de un mensaje? Wammu por ejemplo me zapatos SMS que pertenecen juntos como un solo texto.
#!/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";
}
contacto!
MENSAJE N. 0 Texto [Mensaje 1 Parte 1]
N. MENSAJE 1 Texto [Mensaje 1 Parte 2]
N. MENSAJE 2 Texto [Mensaje 1 Parte 3]
N. MENSAJE 3 Texto [Mensaje 2]
N. MENSAJE 4 Texto [Mensaje 3]
Solución
No creo que hay una forma de dispositivo con GSM :: directamente. Sin embargo, si usted lee el mensaje en modo PDU (ver https://metacpan.org/pod/ dispositivo :: modalidad de GSM # ) se puede interpretar entonces la cabecera apropiada para leer las banderas de varias partes.
[Editado para agregar: esta referencia es una gran visión de conjunto de las cabeceras de SMS PDU: http://www.spallared.com/old_nokia/nokia/smspdu/smspdu. htm ]
Otros consejos
Esto funciona en su mayoría, pero no siempre.
#!/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";
}