SIM800L Handling

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Zitronenfalter schrieb:

      Naja, innerhalb des SMS-Textes an sich nicht, da ist ein Zeilenvorschub nur ein Zeichen (entweder CD oder LF,
      es ist LF.

      Pluto25 schrieb:

      Soll es antworten/Statusmeldungen absetzen?
      Ja. Es soll so etwa wie ein SMS Modul für eine Alarmanlage sein. SMS oder Anruf absetzen wenn Alarm. Wenn eine Nummer nicht ran geht dann die Nächste... Konfigurieren möchte ich auch über SMS. Daran knabbre ich grad. Ein einzelnes "OK wird bei der Konfiguration nicht vorkommen aber wie Zitronenfalter es schon geschrieben hat...

      Zitronenfalter schrieb:

      Selbst wenn das aktuell vielleicht ausgeschlossen werden könnte, kann das ja in der Zukunft so sein und du fängst wieder zum Suchen an.
      ... und das möchte ich gerne vermeiden.

      Pluto25 schrieb:

      Wird es denn eine Foge von Befehlen ineiner SMS geben die mit CrLf abgestuft sind?
      Das wird nicht möglich sein da ein (CRLF) in der SMS als (LF) dargestellt wird. Ich stelle mit die Befehle so vor

      !,num1,+49172xxxxxxx 'speicher die Nummer als Nummer 1 ab
      ?,num1 'Abfrage welche die Nummer 1 ist

      wobei ! als Befehl ist und ? als Abfrage. Aber das erst wenn es soweit ist.


      Pluto25 schrieb:

      Passiert das Left(empfangene_daten , 2) = "OK" überhaupt irgendwann?
      Ja klar. wenn ich einen Speicherort abrufe kommt zuerst die Kennung, Nummer usw. und beginnt mit +CMGR: dann folgt der Text dann zwei (CRLF) dann OK(CRLF)

      Soweit so gut, aber SMS vom Provider dass mein Kontostand niedrig ist, das SMS zugestellt wurde usw. beginnen ebenfalls Mit +CMGR: dann folgt der Text aber kein OK mehr. Diese SMS möchte ich natürlich auch erkennen und behandeln.

      So sieht der Empfang aus


      Quellcode

      1. 61 74 2b 63 6d 67 72 3d 31 0d 0a 2b 43 4d 47 52 at+cmgr=1..+CMGR
      2. 3a 20 22 52 45 43 20 52 45 41 44 22 2c 22 2b 34 : "REC READ","+4
      3. 39 31 37 32 37 34 33 30 32 38 33 22 2c 22 22 2c 91727430283","",
      4. 22 32 30 2f 31 31 2f 30 35 2c 31 38 3a 31 36 3a "20/11/05,18:16:
      5. 33 37 2b 30 34 22 0d 0a 48 61 6c 6c 6f 0d 0a 0d 37+04"..Hallo...
      6. 0a 4f 4b 0d 0a .OK..
      Aktuell warte ich auf das OK (Ja, das Echo ist wieder an...). Wenn der Nachrichteninhalt allerdings OK ist dann ist er weg. Ich denke einen Weg gefunden zu haben kann es aber jetzt leider nicht testen.

      Wenn ich statt If Left(empfangene_daten , 2) = "OK" Then Exit Do

      Loop Until Left(empfangene_daten , 2) = "OK"

      nehme kriege ich auf jeden Fall ein OK. Das erste OK nach
      +CMGR: "REC READ","+49172xxxxxxx","","20/11/05,18:16:37+04

      werte ich aus. Ob danach noch eins kommt ignoriere ich.


      Pluto25 schrieb:

      PS Das 'If N < 2 müsste 'If N < 3 da das incr n ganz oben steht.
      Hab ich schon geändert. Ein <2 wirkt sich nicht aus. Danke.


      @ Zitronenfalter und Mitch64, Danke für eure Quellcodes. Leider ist mir das etwas zu hoch. Ich möchte es versuchen selbst zu kapieren sonst ist es nach einem Monat wieder weg. Selbstverständlich versuche ich es aber zu verstehen.

      Gruß
    • Pac-Man schrieb:

      kriege ich auf jeden Fall ein OK
      Das ist gesunder Optimismus :thumbsup: . Berichte bitte nach einem Testlauf.

      Pac-Man schrieb:

      Hab ich schon geändert. Ein <2 wirkt sich nicht aus
      Sorry aber vergiss es einfach. Das kann mit 13 nicht funktionieren da die 10 zu dem Zeitpunkt noch gar nicht angekommen ist a_71_f9c57bbe


      Zitronenfalter schrieb:

      LookupStr(pCommand , GSM_Commands)
      Leider fehlt die Liste GSM_Commands ;(

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Pluto25 ()

    • Pluto25 schrieb:

      Berichte bitte nach einem Testlauf.

      Quellcode

      1. Do
      2. If Flag_gefunden = 1 Then
      3. Flag_gefunden = 0
      4. 'If Left(empfangene_daten , 2) = "OK" Then Exit Do 'Nachricht mit OK abgeschlossen
      5. Sms_komplett = Sms_komplett + Empfangene_daten
      6. If Sekunden > 2 Then
      7. Flag_gefunden = 0
      8. Flag_fehler_aufgetreten = 1
      9. 'Print#2 , "Fehler"
      10. Call Sms_auswerten(empfangene_daten )
      11. Exit Do
      12. End If
      13. End If
      14. Loop Until Left(empfangene_daten , 2) = "OK"
      Alles anzeigen

      Jetzt verlasse ich die Do/Loop erst nach dem OK. Bedeutet ich kriege es noch mit. Die Nachrichten sehen jetzt so aus.

      >+CMGR: "REC READ","+491727430283","","20/11/05,18:16:37+04"
      Hallo
      OK
      <
      Mit "Hallo" als Inhalt und so mit "OK" als Inhalt

      >+CMGR: "REC READ","+491727430283","","20/11/05,18:16:37+04"
      OK

      <


      Alles nach dem (CRLF) der Nachricht ignoriere ich. So kriege ich auch das "OK" falls es Inhalt der SMS ist.

      Jetzt struggle ich allerdings mit Charpos


      Quellcode

      1. Sub Sms_auswerten(nachricht )
      2. Print#2 , ">" ; Nachricht ; "<"
      3. Pos_1 = Charpos(nachricht , "{013}")
      4. 'Incr Pos_1
      5. Pos_2 = Charpos(nachricht , "{013}" , Pos_1 )
      6. Print#2 , Pos_1 ; " " ; Pos_2
      7. Nachricht = ""
      8. End Sub

      Ich kann doch Charpos ein Offset geben. In meinem Fall ist das Pos_1. Wieso kriege ich dann als Pos_2 67 zurück?

      >+CMGR: "REC READ","+491727430283","","20/11/05,18:16:37+04"
      Hallo
      OK
      <
      60 67
    • Pluto25 schrieb:

      Leider fehlt die Liste GSM_Commands
      Reiche ich gerne nach, werden aber zum abfragen einer SMS nicht verwendet, weil die Funktion den Befehlsstring selbst zusammenstellt:
      cCMD = "+CMGR=" + Str(pPos)
      und die Funktion GSM_Send dies durch die übergebenen Parameter entsprechend auswertet und dann eben den String unverändert weiterverwendet.

      Das ganze ist übrigens aus einer Alarmanlage die den Vorzug hat, solange sie scharf ist, keinen Strom zu brauchen (die befindet sich an einer unversorgten Stelle mit nur einem Zugang). Auch deshalb habe ich eine Fernkonfiguration gar nicht weiter verfolgt. Durch einen einfachen Langzeittimer wird die auch noch alle vier Tage (und ein paar Stunden) geweckt und sendet eine Status-SMS. Der Langzeittimer wiederum braucht nur Strom im Microampere.Bereich. Die Anlage kann auch an zwei Ziele SMS senden wenn es denn sein muss,

      Die konfiguriere ich nicht von der ferne sondern entweder lokal per RS232, Bedienpult mit 20x4 LCD siehe Anhang (dazu muss man die Anlage aber öffnen) oder auch lokal über BlueTooth mit einer Handyapp was dann ohne öffnen möglich ist. Auch das entschärfen ist über BT möglich.
      Da hole ich mir auch das Logbuch und allfällig eingelangte SMS (wovon ich wiederum aus der Status-SMS erfahre).
      Die an diese Nummer gesendeten SMS sind aber meistens nur Erinnerungen des Providers das Guthaben aufzuladen oder ganz selten auch Werbe-SMS und daher auch nicht akut zu bearbeiten.
      LCD-KB-Alarm2.jpg

      BASCOM-Quellcode

      1. GSM_Init_SIM800: ' Grundinitialisierung GSM-Modul SIM 800
      2. Data "E0"
      3. Data "+CMGF=1"
      4. Data "V1"
      5. Data "+CNETLIGHT=0"
      6. Data "&W0"
      7. Data ""
      8. GSM_Init_A6: ' Grundinitialisierung GSM-Modul A6
      9. Data "E0"
      10. Data "+CMGF=1"
      11. Data "V1"
      12. Data "&W"
      13. Data ""
      14. GSM_Commands:
      15. Data "" ' IMMER LEER
      16. Data "" ' Frage ob OK
      17. Data "+CREG?" ' Abfrage Registrierungsstatus
      18. Data "+CPMS?" ' Abfrage Anzahl SMS/ SMS Menge
      19. Data "" ' SMS gesendet
      20. GSM_Results:
      21. Data "" ' IMMER LEER
      22. Data "OK" ' Ergebnis der Abfrage (OK)
      23. Data "+CREG: 1,1" ' Ergebnis Registrierungsstatus
      24. Data "" ' SMS-Speicher
      25. Data "+CMGS:" ' SMS gesendet
      Alles anzeigen
    • Pluto25 schrieb:

      Eher nach dem Timeout (2s)?
      Eigentlich nicht. Vorher bin ich beim OK raus und hab danach die Strings addiert.

      Quellcode

      1. If Left(empfangene_daten , 2) = "OK" Then Exit Do
      2. Sms_komplett = Sms_komplett + Empfangene_daten

      Jetzt addiere ich zuerst und prüfe dann auf OK.

      Pluto25 schrieb:

      Was sollte sonst kommen? 62 ist das H von Hallo, 66 das o. Somit 67 das Cr
      Ok, aber wozu dann das Offset (Pos_1)? Sollte dann nicht erst ab 60 weiter gesucht werden?

      Quellcode

      1. Pos_2 = Charpos(nachricht , 13 , Pos_1 )
    • Wirklich? Kostet soviel Zeit? Wäre da instr schneller? :?:
      Gerade getestet. Das ist aber jetzt wirklich blöd: X(
      Das macht das wirklich X(
      Instr braucht >dreimal soviel Zeit wie Charpos, ;( Würde jedoch wirklich ab dem Offset beginnen. :)
      Nun lohnt sich eine Charpos .. instr Kombination nur wenn der zweite Treffer nicht weit weg liegt. :|

      In dem Fall ist es nicht wirklich Tragisch Beide Charpos sind zusammen immer noch doppelt so schnell wie in Zeichen zum reinkommen braucht.
      Sollte mal Langeweile auf kommen könnte man vielleicht über eine Charpos"2.0" nachdenken :D

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Hab das Ding jetzt seit einiger Zeit am laufen. Lässt sich per SMS konfigurieren und Meldet per SMS. Weiß nicht ob Interesse besteht, ich hänge es mal an. Programmierstil ist wahrscheinlich miserabel und vieles zu kompliziert, unnütz und falsch gemacht. Viele Sachen sind nur angedacht aber mir ging es erstmal darum das Grundgerüst am laufen zu haben. Das Problem aus dem anderen Thread

      Minuten, Stunden, Tage

      bin ich aktuell noch nicht angegangen, ebenso diverse Sachen die hier schon besprochen wurden. Trotzdem wäre ich natürlich an Meinungen und Vorschlägen interessiert.
      Dateien
      • noname5.bas

        (36,31 kB, 21 mal heruntergeladen, zuletzt: )