gelöst - sms empfang über internes Modem

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
stacho
Beiträge: 32
Registriert: Do 26. Nov 2009, 22:29

gelöst - sms empfang über internes Modem

Beitrag von stacho »

Hallo in dir Runde,

ich möchte gerade zur Konfiguration von Gateways über sms ein programm schreibenwelches mein internes Modem in meinem DELL-Notebook (Win10) nutzt.

Die Modem-Demo von synapse hat schon für den Anfang geholfen. Das senden ist kein Problem (Auszug):

Code: Alles auswählen

  memo1.lines.Clear;
  ser:=TBlockSerial.Create;
  ser.config(StrToIntDef(Edit2.Text, 9600),8,'N',1,false,true);
  ser.RaiseExcept:=True;
  try
    ser.Connect(Edit1.Text); 
    memo1.lines.add(ser.ATCommand('AT+CMGF=0'));        //<-- Text Mode
    ser.SendString('AT+CMGS="' + 'Hier die Ziel-Mobilnummer' + '"'+ #$0D);

    sleep(100);
    ser.SendString('Das ist die zu sendende Nachricht' + #$1A);  //<-- Send SMS
    memo1.lines.Add('SMS gesendet!');
  finally  
    ser.free;       


Beim Empfang bekomme ich aber keine Nachrichten. Die entsprechenden AT-Befehle werden wohl mit OK quittiert aber er holt keine Nachrichten.
AT+CNMI=? zeigt folgendes an:

+CNMI: (0,1,2),(0,1,2,3),(0,2),(0,1,2),(0,1)

OK
AT+CNMI? zeigt folgendes an:

+CNMI: 0,0,0,0,0

OK
Das heißt doch, das das Modem auf jeden Fall versucht die Nachricht zu speichern.

Alle Abfragen mit AT+CMGL=1 (bis 4) bringen aber keine Nachricht sondern nur das OK
at+cpms? liefert

+CPMS: "ME",0,23,"ME",0,23,"SM",0,20

OK
Demnach sollten ankommende Nachrichten auf der SIM-Karte liegen.

Abfrage mit at+cmgr=0 (und 1 und 2) liefert aber nur OK oder Time-Out aber keine Nachricht, weder im Pu noch im Text-Mode

Wenn ich in Windows die Nachrichten-App öffne. Laufen die eingegangenen Nachrichten da auf. Dort kann ich mit ihnen aber nichts anfangen.

Habt Ihr ideen? Ich habe schon überlegt ob Windows sich die SMS bei Eingang schon wegholt ohne das das Modem sie speichert.

Schöne Grüße
Zuletzt geändert von stacho am Do 5. Nov 2020, 11:17, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: sms empfang über internes Modem

Beitrag von mschnell »

ich habe ungefähr 2000 Zeilen C code, den ich vor knapp 100 Jahren mal gemacht habe, um auf SMS zuzugreifen, die aus einem bestimmten Modem (mit AT-Befehlen) ausgelesen werden konnten :)
-Michael

stacho
Beiträge: 32
Registriert: Do 26. Nov 2009, 22:29

Re: sms empfang über internes Modem

Beitrag von stacho »

Hallo Michael,

das ist schön aber was hilft mir das?

Schöne Grüße

Stefan

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: sms empfang über internes Modem

Beitrag von Socke »

Musst du nicht vor dem Lesen per AT+CPMR den Message Storage per AT+CPMS auswählen?
Quelle:
https://www.developershome.com/sms/cmgrCommand.asp hat geschrieben:The message storage area from which SMS messages are read is specified by the +CPMS AT command (command name in text: Preferred Message Storage).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: sms empfang über internes Modem

Beitrag von mschnell »

stacho hat geschrieben:
Fr 30. Okt 2020, 13:42
das ist schön aber was hilft mir das?
Nicht viel, aber ich erinnere mich, dass es doch ganz schön komplex ist.
Und wer braucht heute noch SMS...
-Michael

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: sms empfang über internes Modem

Beitrag von PascalDragon »

mschnell hat geschrieben:
Fr 30. Okt 2020, 14:13
Und wer braucht heute noch SMS...
Ich nutze sie standardmäßig für Leute, die weder Signal noch Wire verwenden (und deren Smartphone auch kein RCS beherrscht), da ich kein WhatsApp einsetze.

Auch manche Benachrichtigungen kommen nach wie vor per SMS (zum Beispiel die Rechnungsbenachrichtigung bei T-Mobile oder auch für manche 2-Faktor Authentifizierungen).
FPC Compiler Entwickler

stacho
Beiträge: 32
Registriert: Do 26. Nov 2009, 22:29

Re: sms empfang über internes Modem

Beitrag von stacho »

Hallo Socke,

das hatte ich auch schon probiert.

Code: Alles auswählen

    memo1.lines.add(ser.ATCommand('AT+CPMS="ME"')); //Oder SIM-Karte "SM"
    sleep(100);
    memo1.lines.add(ser.ATCommand('AT+CMGR=1')); // 1. Nachricht
Das Ergebnis:
+CPMS: 0,23,0,23,0,20

OK


OK
SMS ist gut um Gateways direkt zu konfigurieren ohne das diese aufgrund fehlender fester IP über zentrale Server kommunizieren.
In meinem Fall verschicken die Gateways anschließend Mails mit Zählerdaten.

stacho
Beiträge: 32
Registriert: Do 26. Nov 2009, 22:29

Re: sms empfang über internes Modem

Beitrag von stacho »

Ich habe die SIM-Karte in ein altes Handy gesteckt und SMS gesendet und empfangen.
Diese wurden vom Handy auf der Karte abgelegt.

Wieder im Pc konnte ich diese Abfragen. Das funktioniert also.

Wenn ich jetzt wieder sms sende kann ich sie nicht abfragen.

In der Nachrichten-App von Win10 laufen sie aber auf.

Es ärgert mich das Windows mehr kann als ich ich. 😩

stacho
Beiträge: 32
Registriert: Do 26. Nov 2009, 22:29

Re: sms empfang über internes Modem

Beitrag von stacho »

Ich weis nicht warum aber jetzt funktioniert es

Textauszug:

Code: Alles auswählen

  try

    ser.Connect(Edit1.Text);
    sleep(200);
    //Setze Text-Mode
    ser.ATCommand('AT+CMGF=1');
    sleep(200);
    //Setzt den bevorzugten Speicher auf SIM-Karte.
    //mem1 ist der Speicher, aus dem Nachrichten gelesen und gelöscht werden,
    //mem2 ist der Speicher, in den geschrieben und aus dem heraus gesendet wird,
    //mem3 ist der Speicher, in dem ankommende Nachrichten abgelegt werden
    memo1.lines.add(ser.ATCommand('AT+CPMS="SM","SM","SM"'));
    sleep(200);
    //Abfrage des Speichers
    memo1.lines.add(ser.ATCommand('AT+CPMS?'));
    sleep(200);
    //Abrufen der Nachrichten
    // - Alle
    //memo1.lines.add(ser.ATCommand('AT+CMGL="ALL"'));
    //sleep(200);
    // - ungelesene
    memo1.lines.add(ser.ATCommand('AT+CMGL="REC UNREAD"'));
    sleep(200);
    // - gelesene    ( Bei mir sind auch neue Nachrichten im Speicher gelesen )
    memo1.lines.add(ser.ATCommand('AT+CMGL="REC READ"'));
    sleep(200);
  finally
    ser.free;
  end;                                
  
Demo für SMS-senden und empfangen ist in der Anlage. Es wird synapse http://www.ararat.cz/synapse/doku.php/download verwendet. Die Sourcen müsstet ihr in den Suchpfad einbinden.

Für mich also gelöst. :D
Dateianhänge
smsDemo.zip
(3.24 KiB) 86-mal heruntergeladen

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: sms empfang über internes Modem

Beitrag von sstvmaster »

Vielen Dank für dein Demo.

Nachtrag:
stacho hat geschrieben:
Do 5. Nov 2020, 11:14
...
Es wird synapse http://www.ararat.cz/synapse/doku.php/download verwendet. Die Sourcen müsstet ihr in den Suchpfad einbinden.
...
Ich würde hier aber eher auf den Online Package Manager (OPM) verweisen und da gibt es das Package Synapse 40.1.

Das Package heisst dann laz_synapse was ins Projekt eingebunden werden muss.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Antworten