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
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
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
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.