zabsalahid / serialport-gsm

SerialPort-GSM is a simplified plugin for communicating with gsm modems. (Primarily for sms) (Focused in PDU mode)
MIT License
88 stars 46 forks source link

Not receiving messages in inbox #124

Open sts-ryan-holton opened 1 year ago

sts-ryan-holton commented 1 year ago

I'm using the provided example JS file for my USB modem with mostly default config, I've got all of the console logs in my JS file, but when I send a text message to my sim card that is on the USB modem, I never see the event pop up, here's my JS file and the output when I run node index.js, it says the inbox is empty

const serialportgsm = require('serialport-gsm');

var gsmModem = serialportgsm.Modem()
let options = {
  baudRate: 9600,
  dataBits: 8,
  stopBits: 1,
  parity: 'none',
  rtscts: false,
  xon: false,
  xoff: false,
  xany: false,
  autoDeleteOnReceive: true,
  enableConcatenation: true,
  incomingCallIndication: true,
  incomingSMSIndication: true,
  pin: '',
  customInitCommand: '',
  cnmiCommand: 'AT+CNMI=2,1,0,2,1',
  logger: console
}

// Port is opened
gsmModem.on('open', () => {
  console.log(`Modem Sucessfully Opened`);

  // now we initialize the GSM Modem
  gsmModem.initializeModem((msg, err) => {
    if (err) {
      console.log(`Error Initializing Modem - ${err}`);
    } else {

      gsmModem.setOwnNumber('+447562567063', (result, err) => {
        if (err) {
          console.log(`Error setting number - ${err}`);
        }
      });

      gsmModem.getOwnNumber((result, err) => {
        if (err) {
          console.log(`Error retrieving Signal Strength - ${err}`);
        } else {
          console.log(`MY NUMBER: ${result}`)
        }
      });

      // set mode to PDU mode to handle SMS
      gsmModem.setModemMode((msg,err) => {
        if (err) {
          console.log(`Error Setting Modem Mode - ${err}`);
        } else {
          console.log('RUN')

          // get the Network signal strength
          gsmModem.getNetworkSignal((result, err) => {
            if (err) {
              console.log(`Error retrieving Signal Strength - ${err}`);
            }
          });

          // get Modem Serial Number
          gsmModem.getModemSerial((result, err) => {
            if (err) {
              console.log(`Error retrieving ModemSerial - ${err}`);
            }
          });

          // get the Own Number of the Modem
          gsmModem.getOwnNumber((result, err) => {
            if (err) {
              console.log(`Error retrieving own Number - ${err}`);
            }
          });

          // execute a custom command - one line response normally is handled automatically
          gsmModem.executeCommand('AT^GETPORTMODE', (result, err) => {
            if (err) {
              console.log(`Error - ${err}`);
            }
          });

          // execute a complex custom command - multi line responses needs own parsing logic
          const commandParser = gsmModem.executeCommand('AT^SETPORT=?', (result, err) => {
            if (err) {
              console.log(`Error - ${err}`);
            }
          });
          const portList = {};
          commandParser.logic = (dataLine) => {
            if (dataLine.startsWith('^SETPORT:')) {
              const arr = dataLine.split(':');
              portList[arr[1]] = arr[2].trim();
            }
            else if (dataLine.includes('OK')) {
              return {
                resultData: {
                  status: 'success',
                  request: 'executeCommand',
                  data: { 'result': portList }
                },
                returnResult: true
              }
            }
            else if (dataLine.includes('ERROR') || dataLine.includes('COMMAND NOT SUPPORT')) {
              return {
                resultData: {
                  status: 'ERROR',
                  request: 'executeCommand',
                  data: `Execute Command returned Error: ${dataLine}`
                },
                returnResult: true
              }
            }
          };
        }
      }, 'PDU');

      // get info about stored Messages on SIM card
      gsmModem.checkSimMemory((result, err) => {
        if(err) {
          console.log(`Failed to get SimMemory ${err}`);
        } else {

          // read the whole SIM card inbox
          gsmModem.getSimInbox((result, err) => {
            if(err) {
              console.log(`Failed to get SimInbox ${err}`);
            }

            // Finally send an SMS
            console.log(`INBOX IS: ${JSON.stringify(result)}`)
            console.log('SEND SMS NOW')

          });

        }
      });

    }
  });

  gsmModem.on('onNewMessageIndicator', data => {
    //indicator for new message only (sender, timeSent)
    console.log(`Event New Message Indication: ` + JSON.stringify(data));
  });

  gsmModem.on('onNewMessage', data => {
    //whole message data
    console.log(`Event New Message: ` + JSON.stringify(data));
  });

  gsmModem.on('onSendingMessage', data => {
    //whole message data
    console.log(`Event Sending Message: ` + JSON.stringify(data));
  });

  gsmModem.on('onNewIncomingCall', data => {
    //whole message data
    console.log(`Event Incoming Call: ` + JSON.stringify(data));
  });

  gsmModem.on('onMemoryFull', data => {
    //whole message data
    console.log(`Event Memory Full: ` + JSON.stringify(data));
  });

  gsmModem.on('close', data => {
    //whole message data
    console.log(`Event Close: ` + JSON.stringify(data));
  });

});

gsmModem.open('/dev/ttyUSB0', options);

setTimeout(() => {
  gsmModem.close(() => process.exit);
}, 90000);

And the output of this is:

Modem Sucessfully Opened
Modem Write: ATZ
Modem Received: ATZ
Activate Message Processing for: ATZ
Modem Received:
Modem Received: OK
Call callback for: ATZ
Modem Write: ATE1
Modem Received: ATE1
Activate Message Processing for: ATE1
Modem Received:
Modem Received: OK
Call callback for: ATE1
Modem Write: AT+CPIN?
Modem Received: AT+CPIN?
Activate Message Processing for: AT+CPIN?
Modem Received:
Modem Received: +CPIN: READY
Call callback for: AT+CPIN?
Modem Received:
Modem Received: OK
Modem Write: AT+CMEE=1;+CREG=2
Modem Received: AT+CMEE=1;+CREG=2
Activate Message Processing for: AT+CMEE=1;+CREG=2
Modem Received:
Modem Received: OK
Call callback for: AT+CMEE=1;+CREG=2
Modem Write: AT+CLIP=1
Modem Received: AT+CLIP=1
Activate Message Processing for: AT+CLIP=1
Modem Received:
Modem Received: OK
Call callback for: AT+CLIP=1
Modem Write: AT+CPBS="ON"
Modem Received: AT+CPBS="ON"
Activate Message Processing for: AT+CPBS="ON"
Modem Received:
Modem Received: OK
Call callback for: AT+CPBS="ON"
Modem Write: AT+CNUM
Modem Received: AT+CNUM
Activate Message Processing for: AT+CNUM
Modem Received:
Modem Received: +CNUM: "OwnNumber","+447562567063",145
Call callback for: AT+CNUM
Modem Write: AT+CMGF=0
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
MY NUMBER: [object Object]
Modem Received: AT+CMGF=0
Activate Message Processing for: AT+CMGF=0
Modem Received:
Modem Received: OK
Call callback for: AT+CMGF=0
Modem Write: AT+CPMS="SM"
RUN
Modem Received: AT+CPMS="SM"
Activate Message Processing for: AT+CPMS="SM"
Modem Received:
Modem Received: +CPMS: 0,0,0,0,0,0
Call callback for: AT+CPMS="SM"
Modem Write: AT+CPBW=1,"+447562567063",129,"OwnNumber"
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
Event Memory Full: {"status":"Memory Full","data":{"used":0,"total":0}}
Modem Received: AT+CPBW=1,"+447562567063",129,"OwnNumber"
Activate Message Processing for: AT+CPBW=1,"+447562567063",129,"OwnNumber"
Modem Received:
Modem Received: OK
Call callback for: AT+CPBW=1,"+447562567063",129,"OwnNumber"
Modem Write: AT+CNMI=2,1,0,2,1
Modem Received: AT+CNMI=2,1,0,2,1
Activate Message Processing for: AT+CNMI=2,1,0,2,1
Modem Received:
Modem Received: OK
Call callback for: AT+CNMI=2,1,0,2,1
Modem Write: AT+CSQ
Modem Received: AT+CSQ
Activate Message Processing for: AT+CSQ
Modem Received:
Modem Received: +CSQ: 13,99
Call callback for: AT+CSQ
Modem Write: AT+CGSN
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
Modem Received: AT+CGSN
Activate Message Processing for: AT+CGSN
Modem Received:
Modem Received: 860528000422211
Call callback for: AT+CGSN
Modem Write: AT+CNUM
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
Modem Received: AT+CNUM
Activate Message Processing for: AT+CNUM
Modem Received:
Modem Received: +CNUM: "OwnNumber","+447562567063",145
Call callback for: AT+CNUM
Modem Write: AT^GETPORTMODE
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
Modem Received: AT^GETPORTMODE
Activate Message Processing for: AT^GETPORTMODE
Modem Received:
Modem Received: ^GETPORTMODE: TYPE: WCDMA: huawei,NDIS:0,DIAG:1,PCUI:2
Call callback for: AT^GETPORTMODE
Modem Write: AT^SETPORT=?
Modem Received:
Ignore Data:
Modem Received: OK
Ignore Data: OK
Modem Received: AT^SETPORT=?
Activate Message Processing for: AT^SETPORT=?
Modem Received:
Modem Received: COMMAND NOT SUPPORT
Call callback for: AT^SETPORT=?
Modem Write: AT+CMGL=4
Modem Received: AT+CMGL=4
Activate Message Processing for: AT+CMGL=4
Modem Received:
Modem Received: OK
Call callback for: AT+CMGL=4
INBOX IS: {"status":"success","request":"getSimInbox","data":[]}
SEND SMS NOW

Am I missing something?

Apollon77 commented 1 year ago

I think you need to select the corect SIM storage to read ... maybe https://www.developershome.com/sms/cpmsCommand.asp hlps? Maybe try "ME" as storage?

sts-ryan-holton commented 1 year ago

I tried modifying this block of code:

// get info about stored Messages on SIM card
gsmModem.checkSimMemory((result, err) => {
  if(err) {
    console.log(`Failed to get SimMemory ${err}`);
  } else {

    console.log('== SET STORAGE NOW ==')
    gsmModem.executeCommand(`AT+CPMS=\"ME\",\"ME\",\"ME\"`, ((data, err) => {
      if (err) {
        console.log('Exec Error: ', err)
      } else {

        console.log("Result from execute command: ", data)
        gsmModem.getSimInbox((result, err) => {
          if (err) {
            console.log(`Failed to get SimInbox ${err}`);
          }

          // Finally send an SMS
          console.log(`INBOX IS: ${JSON.stringify(result)}`)
          console.log('SEND SMS NOW')

        });
      }

    }))
  }
});

I get

Execute Command returned Error: +CMS ERROR: 302

UPDATE 18:36

Changing the execute command to AT+CPMS=\"SM\",\"SM\",\"SM\" gives me a success with the following result:

0,0,0,0,0,0

When sending an SMS now, I still don't see it in the inbox?

Apollon77 commented 1 year ago

WHy you escape quotes when you do not use quotes around it? the command is wrong.

gsmModem.executeCommand(AT+CPMS="ME","ME","ME", ((data, err) => {

sts-ryan-holton commented 1 year ago

UPDATE 18:36 Changing the execute command to AT+CPMS=\"SM\",\"SM\",\"SM\" gives me a success with the following result:

0,0,0,0,0,0

When sending an SMS now, I still don't see it in the inbox?

Apollon77 commented 1 year ago

It was set to SM before, so why you choose SM? Try ME ...

sts-ryan-holton commented 1 year ago

AT+CPMS="ME","ME","ME" gives me:

Execute Command returned Error: +CMS ERROR: 302

Apollon77 commented 1 year ago

Honestly this is all very specific to your device ... in general have a read in e.g. https://www.manualsdir.com/manuals/281328/rainbow-electronics-fargo-maestro-100-with-tcp_ip.html?page=421 or google for CPMS and your device type