Forum

Abfrage Alarmstatus
 
Benachrichtigungen
Alles löschen

Abfrage Alarmstatus

5 Beiträge
2 Benutzer
0 Likes
1,307 Ansichten
New Member
Beigetreten: Vor 2 Jahren
Beiträge: 3
Themenstarter  

Hallo Forum,

ich bin hier ein Newbie, also erst einmal Guten Tag an alle.

Ich bin seit einigen Tagen Besitzer einer Bean mit Bewegungsmelder und mit der hier geladenen Version der Firmware funktioniert das soweit ganz gut (manchmal dauert es etwas mit der SMS).

Nach ein paar Fehlversuchen habe ich mir aber die Frage gestellt, woher weiß ich, dass mein Tasterdruck (2x zum Einschalten) richtig erkannt wurde und der Bewegungsmelder wirklich scharf ist? Daher ist meine Idee, nach Scharfstellung des Bewegungsalarms eine SMS zu erhalten, z.B. "Alarm ON". Mit copy & paste habe ich ein wenig rumgebastelt, aber es funktioniert mit meinen dürftigen Kenntnissen natürlich nicht. In der Hoffnung, es gibt für meine Idee eine Lösung, geht die Frage an das Forum mit der Bitte um Hilfe.

Vielen Dank und Gruß

Michael

 


Was soll mein Versuch können?

1. Alarmzähler auf Null setzen

2. bei zweimaligem Tasterdruck (=Bewegungsalarm scharf) Zähler auf 1 setzen

3. Wenn Zähler auf 1 und isaccelon = true, dann eine (!) SMS versenden und Zähler um 1 hochstellen, dass keine weitere SMS abgeht.

4. nach eventuellem Alarm oder Abschalten durch dreimaligen Tasterdruck Zähler wieder auf Null setzen

 

Und so habe ich es versucht, leider ohne Erfolg:

mit alsmscount eine Variable definiert als Zähler für Alarm Status Count

flushgsm(2000); 
  byte battpercent = getBattPercent();
  byte battpercent2 = 120;
  int batcounter = 0;
  int alsmscount = 0;

Dann habe ich einfach den Teil für die normale ALARM-SMS kopiert und meinen neuen Zähler verwendet, der eigentlich der Auslöser für die SMS sein soll.

   if(alarm==1 && mytelephonenumber != 0 && isaccelon==true){
    char *sendsmstext = sendsmstextarray; 
    memset(sendsmstextarray, NULL, 161);   
    strcat(sendsmstext, "ALARM"); 
    SendSMS(mytelephonenumber, sendsmstext); 
    isaccelon=false;
    alsmscount = 0;
  }

   if(alsmscount==1 && mytelephonenumber != 0 && isaccelon==true){
    char *sendsmstext = sendsmstextarray; 
    memset(sendsmstextarray, NULL, 161);   
    strcat(sendsmstext, "Alarm ON"); 
    SendSMS(mytelephonenumber, sendsmstext);
    alsmscount = alsmscount + 1;
  }

 

Weiter unten im Code habe ich auch noch meinen Zähler verewigt.

if(interrupt_time-last_interrupt_time > 400){ //debouncing button
    if(interrupt_time-last_interrupt_time > 5000){ //checks button presses within the last 5 seconds
      buttoncount=1;  
    }else{
      buttoncount++;
      if(buttoncount == 2){
        isaccelon = true;
        alsmscount=1;
      }else
      if(buttoncount == 3){
        isaccelon = false; 
        buttoncount=0;
        alsmscount=0;
      }
    }

 

 


   
Zitat
Schlagwörter für Thema
Mitglied
Beigetreten: Vor 5 Jahren
Beiträge: 44
 

Hi Michael,

 

das sieht doch ganz gut aus.

Deine neue alsmscount muss eine globale variable sein. Dazu musst du sie in die Region schieben wo z.B. auch die variable isaccelon definiert ist. 

Außerdem Schau mal wieviel RAM beim kompilieren noch übrig ist. Das zeigt die Arduino Software nach dem kompilieren an. es sollten 350 Bytes sein sonst gibt's Probleme.

 

Beste Grüße,

Dattel


   
AntwortZitat
New Member
Beigetreten: Vor 2 Jahren
Beiträge: 3
Themenstarter  

Hi Dattel,

danke für den Hinweis. Die Variable an der falschen Stelle war's. Jetzt funktioniert es. 2x Taster drücken um den Alarm einzuschalten und dann kommt die SMS automatisch mit der Meldung "Alarm ON". Nur die  Zeit bis zum Empfang der SMS schwankt immer. Das gilt auch für alle anderen Meldungen.

RAM ist genug da, da ich einige Sachen auskommentiert habe. Z. B. "wapp" brauche ich mit iOS nicht.

Vielen Dank nochmals.

Gruß Michael


   
AntwortZitat
New Member
Beigetreten: Vor 2 Jahren
Beiträge: 3
Themenstarter  

Hallo an alle,

hier noch ein Nachtrag für alle, die es interessiert. Ich hatte am 06.11.2021 geschrieben, dass die Zeit bis zur "Alarm ON"-SMS immer schwankt. Das lag daran, dass bei Drücken des Tasters zwar mein oben beschriebener Zähler auf 1 gesetzt wird, aber es wird nie der Tiefschlaf der Bean verlassen, um die SMS zu versenden.

Es muss also im Tiefschlaf der Zähler (buttoncount2) geprüft werden und bei Wert = 1, muss der Tiefschlaf verlassen werden, um die SMS sofort zu versenden und nicht erst nach Ablauf des eingestellten Intervalls (interval * (3600 / 2)).

      if (abs(X_out - X_out_new) > sensitivity && X_out != 0 || abs(Y_out - Y_out_new) >      sensitivity && Y_out != 0 || abs(Z_out - Z_out_new) > sensitivity && Z_out != 0) {
        alarm = 1;
        break;
      }
      if (buttoncount2 == 1) {
        break;
      }

Nach Versenden der SMS wird der Zähler um 1 hochgesetzt, dass nicht noch eine SMS versendet wird.

Gruß Michael


   
AntwortZitat
Mitglied
Beigetreten: Vor 5 Jahren
Beiträge: 44
 

Ah ok! mit zeitversetzt habe ich an Minuten und nicht Stunden gedacht 😀


   
AntwortZitat