SIM800L Handling

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Zitronenfalter wrote:

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

      Pluto25 wrote:

      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 wrote:

      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 wrote:

      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 wrote:

      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


      Source Code

      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 wrote:

      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 wrote:

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

      Pac-Man wrote:

      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 wrote:

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

      The post was edited 3 times, last by Pluto25 ().

    • Pluto25 wrote:

      Berichte bitte nach einem Testlauf.

      Source Code

      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"
      Display All

      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


      Source Code

      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 wrote:

      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 Source Code

      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
      Display All
    • Pluto25 wrote:

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

      Source Code

      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 wrote:

      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?

      Source Code

      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

      The post was edited 1 time, last by 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.
      Files
      • noname5.bas

        (36.31 kB, downloaded 11 times, last: )