Hallo, durch die Überprüfung serieller Daten möchte ich gerne Befehle via SMS versenden. Sprich treten bestimmte Zeichenkombinationen in den zu untersuchenden Daten auf, soll eine Nachricht versendet werden. Diese Zeichenkombinationen können mehrmals nacheinander vorkommen. Allerdings will ich, dass dabei nur eine Nachricht versand wird und nicht bei jedem Auftreten der Zeichenkombination. Ich hab mir gedacht, das nach dem Versenden der Nachricht solange gewartet werden soll, bis an den zu untersuchenden Stellen Null sind. Wenn ich die Zeichen detektiere, springe ich in… if( sending_sms == 1 ) { send("DANGER ALARM:"); sending_sms = 0; } Wenn allerdings die gleichen Zeichen mehrmals nacheinander auftreten, versende ich jedes Mal eine SMS. Mit welchem Mech. kann ich das vermeiden? Wäre nett, wenn mir hier jemand weiterhelfen könnte. VG, Gustav
Ich bin mir nicht sicher ob ich dein Problem verstehe? Warum durchsuchst du nicht einfach alle Daten und merkst dir ob deine Schlüsselbegriffe vorgekommen sind. Erst am Ende entscheidest du dann welche SMS du senden musst. Ansonsten konkretes Beispiel der Daten mit Beschreibung was genau passieren soll.
die gleiche Grundidee wie mein Vorposter, nur anders umgesetzt: nach dem Senden der SMS Flag setzten und erst wieder löschen, wenn der gesamte Suchvorgang beendet wurde. Kurz: erst "sending_sms = 0;" ausführen, nachdem alles durchsucht wurde. gruß Chrizz
Hallo, wenn keine Alarmmeldung vorliegt, besteht der zu untersuchende Bereich aus Nullen. "0000000000" Dieser Teilstring repräsentiert eine Reihe an Alarmmeldungen. Ich untersuche diesen String auf diese möglichen Alarmmeldungen. "1000000000" heißt bspw. Batterie schwach. "3000000000" heißt Batterie Schwach und geringe Geschwindigkeit. "5000000000" heißt Batterie schwach, geringe Geschwindigkeit und das Gerät läuft im Backup-Modus. usw. Die jeweiligen Kombinationen habe ich herausgefunden. Ich möchte nun eine Nachricht versenden, wenn die Batterie schwach ist. Detektiere ich bspw. "1000000000" so soll eine Nachricht versand werden. Allerdings kann anschließend "3000000000" "5000000000" . . . detektiert werden, die ebenfalls "Batterie schwach" beinhalten. Auf der anderen Seite kann aber bspw. auch erst "5000000000", dann "1000000000", "3000000000", usw. auftreten. Erst wenn der String wieder Null ist, also "0000000000" soll es möglich sein, beim Auftreten einer neuen Alarmmeldung, eine SMS zu versenden Meine Frage ist nun, wie kann ich das softwaretechnisch am besten realisieren. VG
Wie schon die Vorposter schrieben: Alarm-Meldung wird erkannt, SMS senden und ein Flag setzen. Solange Flag gesetzt keine weitere SMS senden, auch wenn Alarm-Meldung erkannt wird. Werden die 0-en erkannt Flag rücksetzen und gut ist.
Wenn ich das richtig verstanden habe: - Erst mal garnichts senden, sondern alle Meldungen lesen - Für erste Meldung ein Flage setzen (alarm_sms = 1, wobei 1 hier der prioritätsstufe entspricht) - Wenn eine neue Meldung mit niedriger oder gleicher Priorität gefunden wird, ignorieren - Wenn eine neue Meldung mit höherer Priorität gefunden wird, alarm_sms = neue Stufe - Am Ende (wenn 000000 eingelesen) die SMS mit der Meldung entsprechend Flag schicken
Binäroperationen könnten dein Freund sein. Ein XOR ("^" in C) meldet Veränderungen, mit AND ("&" in C) kann man das mit Bitmasken vergleichen. Jörg
Hallo, danke für die Antworten. Also verkürzt ausgedrückt, meint ihr das so, oder? VG if(sms_send == 0) { if( (data[0] == '1') || (data[0] == '3') || (data[0] == '5') ) { send_sms("Low Battery"); sms_send = 1; } if( (data[1] == '1') || (data[1] == 'B') || (data[1] == '4') ) { send_sms("Time Base Fault"); sms_send = 2; } } if(sms_send == 1) { if(data[0] == '0'); sms_send = 0; } if(sms_send == 2) { if(data[1] == '0'); sms_send = 0; }
Hi zusammen, also ich habs jetzt mal nach dem oben beschrieben Ansatz probiert. Allerdings klappts immer noch nicht richtig...Kann mir vielleicht jemand ein Tipp geben, was ich falsch mache?Bin für jeden Hinweis dankbar.
Gustav schrieb: > Hi zusammen, > also ich habs jetzt mal nach dem oben beschrieben Ansatz probiert. > Allerdings klappts immer noch nicht richtig...Kann mir vielleicht jemand > ein Tipp geben, was ich falsch mache?Bin für jeden Hinweis dankbar. Du brauchst für JEDE Alarmmeldung ein Flag, welches dir sagt, ob die entsprechende Alarmierung schon verschickt wurde oder nicht Und du löscht sie, wenn die entsprechende Alarmierung in deiner Nachricht nicht mehr vorkommt
1 | if( (data[0] == '1') || |
2 | (data[0] == '3') || |
3 | (data[0] == '5') ) |
4 | {
|
5 | if( !BatteryLowSent ) |
6 | {
|
7 | send_sms("Low Battery"); |
8 | BatteryLowSent = 1; |
9 | }
|
10 | }
|
11 | else
|
12 | BatteryLowSent = 0; |
13 | |
14 | |
15 | if( (data[1] == '1') || |
16 | (data[1] == 'B') || |
17 | (data[1] == '4') ) |
18 | {
|
19 | if( !TimeBaseFaultSent ) |
20 | {
|
21 | send_sms("Time Base Fault"); |
22 | TimeBaseFaultSent = 1; |
23 | }
|
24 | }
|
25 | else
|
26 | TimeBaseFaultSent = 0; |
Sorry das ich euch nochmal mit meinen Anfängerproblemen nerve. Ich habe mal den Ausschnitt angefügt der immer noch nicht richtig will. Wenn die beiden Stellen wieder Null sind, bzw. die Alarmmeldungen verschwunden sind,, soll es wieder möglich sein eine Nachricht zu verschicken. Ich werde noch verrückt... VG
Wenn ich das jetzt richtig verstanden habe, willst du nach dem Versenden der Nachricht warten, bis die beobachteten Zustände wieder Null sind. Dann soll dein Prog. wieder sendebereit sein.
Hallo Marcel, richtig. Allerdings schlag ich mich immer noch damit herum, das nach dem erstmaligen detektieren das Programm wartet, bis der String wieder Null ist und ich komm nicht drauf.VG
hmmm, soweit ich das beurteilen kann passt das soweit...
ich komme nicht vorwärts...ich glaube das Problem liegt hier: if( ( alarm_data[0] == '2' ) || ( alarm_data[0] == '6' ) || ( alarm_data[0] == 'A' ) ) { send_sms("Low Battery"); low_battery_sent = 1; if(low_battery_sent == 1) { if( ( alarm_data[0] == '0' ) && ( alarm_data[0] == '0' ) && ( alarm_data[0] == '0' )) low_battery_sent = 0; } } Wenn ich jetzt nur mal den Zustand low battery betrachte und nur einmal das Senden der Nachricht "Low Battery" realiseren will, bis die Zustände wieder Null sind... wie muss ich das genau machen. ich hänge total in der Luft.
Das so nicht funktionieren. if( ( alarm_data[0] == '2' ) || ( alarm_data[0] == '6' ) || ( alarm_data[0] == 'A' ) ) <- Hier fehlt die Abfrage ob SMS gesendet { send_sms("Low Battery"); low_battery_sent = 1; if(low_battery_sent == 1) <- Dieses IF muss außerhalb stehen { if( ( alarm_data[0] == '0' ) && <- Dreimal das selbe ? ( alarm_data[0] == '0' ) && ( alarm_data[0] == '0' )) low_battery_sent = 0; } } So sollte es gehen. Wichtig Klammer um die Oder Bedingung if( (alarm_data[0] == '2' || alarm_data[0] == '6' || alarm_data[0] == 'A') && !low_battery_send ) { send_sms("Low Battery"); low_battery_send = 1; } if(low_battery_send) { if( alarm_data[0] == '0' ) low_battery_send = 0; } Viel Spaß
Hallo Reiner, vielen Dank für deine Hilfe! VG, Gustav
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.