חכם_חנוכה כתב:נושא הנוכחות הוא נושא קשה ליישום
iPhonelocator עבד לי מצוין אבל זולל סוללה וה ping sensor לא אמין, הטלפון לא תמיד עונה לפינג, כבוי, נגמרה סוללה וכו'
תוכל להרחיב קצת על ה geofence?
...
בנוגע לPing Sensor, על-מנת להגדיל את האמינות שלו ולהקטין את "אזעקות השווא", רצוי ליישם לוגיקה שנותנת "טווח בטחון".
למשל:
במקום לבדוק האם הטלפון "זמין" (הPing Sensor מוצא אותו) או "לא זמין" (הPing Sensor לא מוצא אותו), אפשר להגדיר שטלפון יחשב כ"עזב את הבית" רק אחרי 3 דקות שהוא "לא זמין", ומעכשיו לבדוק מתי הטלפון "עזב את הבית" ולא מתי הטלפון "זמין".
לדוגמה, אצלי זה מוגדר כך:
[left]
PhoneWasAccessed = Ping Sensor pinged phone successfuly
PhoneWasNotAccessed = Ping Sensor didn't succeed to ping phone
PhoneLeftHome = PhoneWasNotAccessed for 3 minutes
PhoneArrivedHome = PhoneWasAccessed while "PhoneLeftHome" is true.
[/left]
את כל הלוגיקה אני מיישם עם PLEG.
אחרי שהנ"ל מוגדר, ההחלטה אם מישהו הגיע הביתה או אם הבית התרוקן מבוססת אך ורק על PhoneLeftHome (אפשר לכבות את כל האורות, למשל) ועל PhoneArrivedHome (אפשר להדליק את האור בכניסה, למשל).
בשיטה זו, אם הPing Sensor מנסה למצוא את הטלפון כל חצי דקה, והוא לא הצליח עכשיו, באופן חד פעמי, אמנם PhoneWasAccessed יהיה שלילי ו-PhoneWasNotAccessed יהיה חיובי, אבל זה לכשעצמו לא גורם לשום פעולה, משום שPhoneLeftHome לא הפך לחיובי, כי עדין לא עברו 3 דקות שבהן PhoneWasNotAccessed היה חיובי.
זה נשמע קצת מסובך, אבל כשמבינים את הרעיון מאחורי זה, די קל להמשיך.
באופן דומה אני מבצע לוגיקה אשר משתמשת בGeoFencing.
אם אני אבסס את ההחלטה אם הגעתי הביתה או עזבתי את הבית על-סמך GeoFence יחיד, ברדיוס קטן סביב הבית שלי, אם במקרה תהיה בעיית קליטה, והטלפון יתחבר לאנטנה סלולרית קצת מרוחקת, זה יחשב כאילו עזבתי את הבית.
בשביל להגדיל את הדיוק ולמנוע "אזעקות שווא" הגדרתי 3 מעגלים:
אני משתמש ב3 "מתגים וירטואלים" אשר נדלקים ונכבים לפי המיקום האחרון שלי.
PLEG גם שומר את המועד שבו כל מתג נדלק ונכבה.
הלוגיקה:
[left]
InZone1 = Entered Zone 1
InZone2 = Left Zone 1 -OR- Entered Zone 2
InZone3 = Left Zone 2 -OR- Entered Zone 3
[/left]
שים לב שבגלל החפיפות בין האזורים, כאשר אני מתרחק מהבית (מהמרכז), אז יציאה מאזור 1 נחשבת שאני באזור 2 ויציאה מאזור 2 נחשבת שאני באזור 3.
בנוסף לכך:
[left]
ArrivingHome = InZone3 then InZone2 then InZone1
LeavingHome = InZone1 then InZone2 then InZone 3
[/left]
כמו עם הPing Sensor, כל שאר הלוגיקות מבוססות על ArrivingHome ועל LeavingHome ולא על כניסה ל- / יציאה מ- אזור בודד.
באופן כזה, הדוגמה שתארתי למעלה, שבו הטלפון התחבר לאנטנה סלולרית מרוחקת, תגרום לכך שהטלפון יחשב InZone2, אבל זה לא יגרום לLeavingHome לקרות, ולכן שום לוגיקה אחרת לא תתבצע.