Zur automatischen Aktivierung/Scharfschaltung einer Alarmanlage benutze ich die im Codeausschnitt befindliche Abfrage, die auch funktioniert.
Um kurzzeitiges unnötiges Scharfschalten bei kurzfristigem Ausbuchen des Smartphones zu vermeiden hätte ich gern eine doppelte Abfrage, die z.B. nach 1-2 Minuten nochmals prüft ob sich das Smartphone im WLAN-Netz befindet und erst dann die Scharfschaltung erfolgt.
Wichtig, das Ganze muss ohne delay realisiert werden, da das Programm weiterlaufen muss.
combie:
Du möchtest einen "endlichen Automaten" bauen.
Eine Ablaufsteuerung.
Ich möchte eine automatische Aktivierung der Alarmanlage sobald man sich mit dem Smartphone außerhalb des WLAN Netzes befindet.
Wie schon erwähnt, soll aber eine doppelte Abfrage eingebaut werden, damit sich die Anlage nicht sofort scharfschaltet. Als Beispiel, ich bringe den Müll raus und bin nur mal 2 Minuten aus der Reichweite. Dann soll also keine Scharfschaltung erfolgen.
"Delay" geht nicht, weil dieses im Programmablauf stört, bzw. dann die Auslösung des Alarms verspäten würde.
uint32_t zeit;
if (Ping.ping(remote_ip)) zeit = millis();
if (!Ping.ping(remote_ip) && (millis() - zeit > 120000))
{
Serial.println("Smartphone ist nicht im WLAN");
digitalWrite(12, 0);
} else
{
Serial.println("Smartphone ist im WLAN");
digitalWrite(12, 1);
}
uwefed:
Ein essenzielles Problem der heutigen Zeit: Mann muß während des Müllraustragens telefonisch und über Sozialnetzwerke erreichbar sei.
Was ist wenn der Müll sich mal streubt und Du 2,02 Minuten Brauchst?
grüße Uwe
Hallo Uwe,
ich erlaube mir zu bemerken, dass Dein Kommentar nicht sehr zielführend ist.
Wenn Du nicht erkannt hast worum es geht, erkläre ich es hier nochmal.
Es geht nicht um "Erreichbarkeit in sozialen Netzwerken" sondern darum, dass die Scharfschaltung der Alarmanlage über die Erkennung/Nichterkennung des Smartphones im heimischen WLAN Netz realisiert werden soll.
Als anderes Beispiel nun folgendes Szenario, ich gehe auf meiner riesigen Terrasse spazieren (Smartphone am Mann, weil ich Musik über Kopfhörer höre) und in der hintersten Ecke ist kein WLAN. Zur Durchquerung der nicht abgedeckten Stelle brauche ich immer nur 1,95 Minuten.
In diesem Fall soll aber die Alarmanlage nicht scharf sein.
Besser? Problem erkannt?
Oder anderes Beispiel, ich starte mein Smartphone neu weil es sich aufgehangen hat. Dieses dauert 1,85 Minuten. In der Zeit ist es auch nicht durchgängig mit dem WLAN verbunden.
Die 2 Minuten stellen nur einen Bespielwert dar. Ich hätte also auch 3 oder 4 oder 5 Minuten schreiben können. Bei manchen wird ja die Mülltonne auch weiter weg stehen...
Bei manchen wird ja die Mülltonne auch weiter weg stehen...
Die werden es begrüßen, wenn während des Müll-Raustragens jemand auf das Haus aufpasst.
Hauptsache, die Alarmanlage wird schnell genug wieder deaktiviert, wenn das Handy zurückkommt.
Und es gibt eine Möglichkeit, die Alarmanlage auch ohne Handy abzuschalten.
soluman:
Ich möchte eine automatische Aktivierung der Alarmanlage sobald man sich mit dem Smartphone außerhalb des WLAN Netzes befindet.
Wie schon erwähnt, soll aber eine doppelte Abfrage eingebaut werden, damit sich die Anlage nicht sofort scharfschaltet. Als Beispiel, ich bringe den Müll raus und bin nur mal 2 Minuten aus der Reichweite. Dann soll also keine Scharfschaltung erfolgen.
"Delay" geht nicht, weil dieses im Programmablauf stört, bzw. dann die Auslösung des Alarms verspäten würde.
Du möchtest einen "endlichen Automaten" bauen.
Eine Ablaufsteuerung.
Falls der "endliche Automat"merkt, dass das Handy nach 1 Minute wieder zurück war, und 45 sek danach schon wieder weg, soll er natürlich dann neu anfangen zu zählen. (Egal wie du solch einen Zähler nennst)
"Doppelte Abfrage" (im Titel) führt dich in die Irre, @soluman. Es reicht, wenn du in jedem loop Durchlauf einmal ping machst. Du musst dir nur merken (über mehrere loop Durchläufe hinweg), seit wann das Handy schon weg ist.
Solche Zustandsinformation zu merken, wird hier gern mal "endlicher Automat" genannt, weil es nur eine begrenzte ("endliche") Anzahl solcher Zustände gibt.
Wenn du den Namen blöde findest, behalt das für dich
combie:
Du möchtest einen "endlichen Automaten" bauen.
Eine Ablaufsteuerung.
combie:
Du möchtest einen "endlichen Automaten" bauen.
Eine Ablaufsteuerung.
Du wiederholst Dich, muß ich mir Sorgen machen?
Es ginge auch retriggerbares Monoflop oder Totmannschaltung. Solange der Lokführer regelmäßig eine Taste drückt und losläßt, fährt der Zug weiter, sonst gibt es eine automtische Notbremsung.
ardubu:
versuch es mal so
Der Prozessor zwischen meinen Ohren vermutet ein Ausrufezeichen zu viel. Oder Du verschiebst die Zeitauffrischung nach else.
agmue:
Es ginge auch retriggerbares Monoflop oder Totmannschaltung. Solange der Lokführer regelmäßig eine Taste drückt und losläßt, fährt der Zug weiter, sonst gibt es eine automtische Notbremsung.
Früher war die Totmannschaltung ein Pedal. Viele Lockführer haben nachts im Schlaf das Pedal weiter getreten, was manches Mal nicht gut für den Bettgiebel war.
So ganz verstehe ich den Sinn hinter der Alarm-Scharf-Schalterei noch nicht - wobei ich davon ausgehe, daß im späteren Ausbau durchaus mehrere Handys angepingt werden - wäre ja blöd, wenn die Frau plötzlich zum Einbrecher degradiert wird ...
Du merkst Dir, wann Du ZULETZT das Handy 'gesehen' hast.
Wenn die Zeit zwischen Zuletzt und Jetzt größer der Wartezeit ist, Alarm aktivieren (sofern extern gestattet - ich würde Da noch eine 'Arduino Not-Abschaltung' vorsehen).
Was ist, wenn Dir in der Nacht der Akku ausgeht?
Weck-Dienst Grün/Weiß??
Aber: Ja, Alles, was man machen kann, kann man machen - warum also nicht?
Genau dafür ist der Arduino da - also ran an den Speck.
if (!Ping.ping(remote_ip)) zeit = millis();
if (!Ping.ping(remote_ip) && (millis() - zeit > 120000))
{
Serial.println("Smartphone ist nicht im WLAN");
digitalWrite(12, 0);
} else
{
Serial.println("Smartphone ist im WLAN");
digitalWrite(12, 1);
}
Edit: habe meine Fehler korrigiert
So geht es leider nicht. Die Zeit läuft auf und dann funktioniert es nicht. Da muss doch noch irgendwo die abgelaufene Zeit wieder genullt werden, oder irre ich?