Xysten Posted June 19, 2018 Share Posted June 19, 2018 Greetings! Scroll-down to *Problem if you want to skip the mumbo-jumbo and see the actual problem. I am about a week into Auto-it and I have had a blast using it trying to solve a unique situation. Due to circumstances of my job, I am not always able to get to a PC or remember to use my phone when trying to clock in. Here are my objectives 1. Listen for device to hit network ( WiFi or BLE beacon ) 2. When beacon is detected, sign into clock-in website and enter my hard coded employee code to clock in 3. Periodically check if device is still connected to network 4. If not seen for 15 minutes, sign into website and use employee code to clock out. Now, I was able to get this working using ping and WiFi for my phone. However, I would like to be able to use this for other applications and people in the future, and since phones like to turn off WiFi during idle (and I don't think forcing WiFi on all the time is the best), I don't think this is reliable as using a BLE beacon. Here is my code for the WiFi version that works, but ultimately fails due to device specific WiFi issues. expandcollapse popup#include <IE.au3> #include <Inet.au3> //* False means Im not clocked in, true means I am Global $statusFlag = False Call ("listenForCI") //*Listens for my device until it is seen then //calls the sign in function Func listenForCI () Local $sf = $statusFlag While $sf = False Local $iPing = Ping("172.16.8.97",10000) If $iPing Then Call ("signIn") ContinueLoop EndIf WEnd EndFunc //*Listens for my device until it is no longer seen // then calls the signout function Func listenForCO () Local $sf = $statusFlag While $sf = True Local $iPing = Ping("172.16.8.97",10000) If $iPing Then ContinueLoop Else Call ("signOutCountdown") EndIf WEnd EndFunc //* Timer/failsafe that gives me a chance to get my //device back online if there is connectivity issues Func signOutCountdown () Local $iPing = Ping("172.16.8.97",10000) Sleep ( 300000 ) If $iPing Then Call ("listenForCO") Else Sleep ( 300000 ) EndIf If $iPing Then Call ("listenForCO") Else Call ("signOut") EndIf EndFunc //*this signs me into the website, submits my employee id //to clock me in then goes to a logout page, enters a password // to logout then closes IE. After IE is closed it sets a flag //that tells if Im clocked in on the website or not and calls the //function that listens if my device is still here. Func signIn () Local $oIE = _IECreate ("https://checkinwebsite/",0,1,1,1) Local $username = _IEGetObjByName ($oIE,"txtUserName") Local $password = _IEGetObjByName ($oIE,"txtPassword") Local $button = _IEGetObjByName ($oIE,"btnSubmit") _IEFormElementSetValue ($username, "myusername") _IEFormElementSetValue ($password,"mypassword") _IEAction ($button,"click") sleep (5000) Local $employeeId = _IEGetObjByName ($oIE,"tbEmployeeID") _IEFormElementSetValue ($employeeId,"myemployeeid") Send ("{ENTER}") sleep (5000) _IEFormImageClick($oIE, "btn-back.jpg", "srC") Sleep (5000) Local $fsProtpass = _IEGetObjByName ($oIE, "tbPassword") Local $doneBtn = _IEGetObjByName ($oIE, "btnDone") _IEFormElementSetValue ($fsProtpass,"mypassword") _IEAction ($doneBtn,"click") _IEQuit($oIE) Global $statusFlag = True Call ("listenForCO") EndFunc //*Similar to the signIn function but calls the //listener to wait for my device to come back online instead Func signOut () Local $oIE = _IECreate ("https://checkinwebsite/",0,1,1,1) Local $username = _IEGetObjByName ($oIE,"txtUserName") Local $password = _IEGetObjByName ($oIE,"txtPassword") Local $button = _IEGetObjByName ($oIE,"btnSubmit") _IEFormElementSetValue ($username, "myusername") _IEFormElementSetValue ($password,"mypassword") _IEAction ($button,"click") sleep (5000) Local $employeeId = _IEGetObjByName ($oIE,"tbEmployeeID") _IEFormElementSetValue ($employeeId,"myemployeeID") Send ("{ENTER}") sleep (5000) _IEFormImageClick($oIE, "btn-back.jpg", "srC") Sleep (5000) Local $fsProtpass = _IEGetObjByName ($oIE, "tbPassword") Local $doneBtn = _IEGetObjByName ($oIE, "btnDone") _IEFormElementSetValue ($fsProtpass,"mypassword") _IEAction ($doneBtn,"click") Global $statusFlag = False _IEQuit($oIE) Call ("listenForCI") EndFunc Now, this works great other than the fact that my Google Pixel likes to turn off its WiFi during lock to conserve power. I can changed this with android SDK but I will have to re-do this probably after every update and it may be different for other phone brands so ultimately I can't call this efficient for that reason. My other option, BLUETOOTH BEACONS So we are a full Meraki Stack network that is managed in house and my access points can search and see low energy Bluetooth beacons. The data is presented in a dynamic table : So the data that is important to me is "Status" ,the name of the device in "description" and for the future, the "last seen by" . My plan is to run a script to get this data every 5 minutes and keep an updated excel database. After data is pulled, I plan to one-to-many search until I find the device "LE-reserved_S" and take the "status" into account on whether or not to sign in or sign out. ***PROBLEM*** I need suggestions on the best way to get the data from the status column and shoot it to an excel spreadsheet or simple database. Why database and not just run from memory? Future proofing where more data can be kept here and presented in a different way. I'm open to all suggestions, best practices, use cases, etc and I appreciate your time. Below is more info if needed on the table. The table populates based on any device that has been sensed in a certain time period instead of just showing what devices are currently being detected (this cannot be filtered to only show detected devices). This gives me a mix of all devices but creates a possible two hour play in getting clock in or clock out times as accurate as possible. If you haven't noticed yet, Meraki Devs decided to use an image instead text for status which creates a problem when trying to write the entire table by array to an excel sheet. Just shows up blank. Here is the function for the table pull : Func signIn () Local $oIE = _IECreate ("https://mymerakidashboard/bluetoothclients",0,1,1,1) Local $username = _IEGetObjByName ($oIE,"email") Local $password = _IEGetObjByName ($oIE,"password") Local $button = _IEGetObjByName ($oIE,"commit") _IEFormElementSetValue ($username, "myusername") _IEFormElementSetValue ($password,"mypassword") _IEAction ($button,"click") sleep ( 5000 ) Local $oExcel = _Excel_Open() Local $oWorkbook = _Excel_BookNew($oExcel) Local $tables = _IETableGetCollection ( $oIE ) For $table In $tables If StringCompare ( $table.className, "filter compact fill" ) = 0 Then $tabledata = _IETableWriteToArray($table, True) _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $tableData, "A1") Else ContinueLoop EndIf Next EndFunc Which gives me See, no status data showing the cells under the status collumn. Here is the code for the dynamic table I'm pulling from expandcollapse popup<table class="filter compact fill"> <colgroup> <col /> <col width="0*" /> <col /> <col /> <col /> <col /> <col /> <col /> </colgroup> <thead> <tr class="ft_head"> <th class="ft ftl checkbox nodrag checknum checkbox ftlegend c1"><input type= "checkbox" class="check_all" /></th> <th class="ft ftl status ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend">Status</td> <td class="c2"></td> </tr> </tbody> </table> </th> <th class="ft ftl description ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend">Description</td> <td class="c5"><img src="/images/icon_arrow_down_10x10.png" title= "Toggle sort order" alt="[Sorting down]" class="c4" /></td> </tr> </tbody> </table> </th> <th class="ft ftl ftnowrap last_seen ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend">Last seen</td> <td class="c2"></td> </tr> </tbody> </table> </th> <th class="ft ftl ftnowrap last_seen_by ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend"><span class="c6">Last seen by</span></td> <td class="c2"></td> </tr> </tbody> </table> </th> <th class="ft ftl oui ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend">Manufacturer</td> <td class="c2"></td> </tr> </tbody> </table> </th> <th class="ft ftc outage_graph ftsortable"> <table class="lean c8"> <tbody> <tr class="c3"> <td class="c7"></td> <td class="ftlegend">Connectivity</td> <td class="c7"></td> </tr> </tbody> </table> </th> <th class="ft ftl tags ftsortable"> <table class="lean"> <tbody> <tr class="c3"> <td class="ftlegend">Tags</td> <td class="c2"></td> </tr> </tbody> </table> </th> </tr> </thead> <tbody class="flex-table-body"> <tr class="ftp0" data-idx="0"> <td class="ft notranslate checkbox nodrag checknum"><input type="checkbox" class= "row_check" /> 1</td> <td class="ft notranslate status mks-cli-wireless-on c9"> </td> <td class="ft notranslate description"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/bluetooth_clients/574771902443332083">LE-reserved_S</a></td> <td class="ft notranslate ftnowrap">Jun 18 17:05</td> <td class="ft notranslate ftnowrap"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/nodes/list#n=149624928557424">RM15</a></td> <td class="ft notranslate oui">Bose</td> <td class="ft notranslate outage_graph ftc"> <div class="bt_connectivity_graph fill-graph c10" data-mac="2c:41:a1:59:8d:81"> </div> </td> <td class="ft notranslate tags"></td> </tr> <tr class="ftp1" data-idx="1"> <td class="ft notranslate checkbox nodrag checknum"><input type="checkbox" class= "row_check" /> 2</td> <td class="ft notranslate status mks-cli-wireless-on c9"> </td> <td class="ft notranslate description"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/bluetooth_clients/574771902443332085">LE-Robbie's Bose Free</a></td> <td class="ft notranslate ftnowrap">Jun 18 17:06</td> <td class="ft notranslate ftnowrap"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/nodes/list#n=149624928612960">RM11</a></td> <td class="ft notranslate oui">Bose</td> <td class="ft notranslate outage_graph ftc"> <div class="bt_connectivity_graph fill-graph c10" data-mac="2c:41:a1:59:8f:af"> </div> </td> <td class="ft notranslate tags"></td> </tr> <tr class="ftp0" data-idx="2"> <td class="ft notranslate checkbox nodrag checknum"><input type="checkbox" class= "row_check" /> 3</td> <td class="ft notranslate status mks-cli-wireless-off c9"> </td> <td class="ft notranslate description"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/bluetooth_clients/574771902443303080">Flex</a></td> <td class="ft notranslate ftnowrap">Jun 18 16:07</td> <td class="ft notranslate ftnowrap"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/nodes/list#n=13803411384454">Gym-AP</a></td> <td class="ft notranslate oui"></td> <td class="ft notranslate outage_graph ftc"> <div class="bt_connectivity_graph fill-graph c10" data-mac="d3:7b:dd:d3:4e:f3"> </div> </td> <td class="ft notranslate tags"></td> </tr> <tr class="ftp1" data-idx="3"> <td class="ft notranslate checkbox nodrag checknum"><input type="checkbox" class= "row_check" /> 4</td> <td class="ft notranslate status mks-cli-wireless-on c9"> </td> <td class="ft notranslate description"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/bluetooth_clients/574771902443407785">Alta</a></td> <td class="ft notranslate ftnowrap">Jun 18 17:06</td> <td class="ft notranslate ftnowrap"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/nodes/list#n=13803411385997">Front Office - AP</a></td> <td class="ft notranslate oui"></td> <td class="ft notranslate outage_graph ftc"> <div class="bt_connectivity_graph fill-graph c10" data-mac="fa:36:e3:06:4b:98"> </div> </td> <td class="ft notranslate tags"></td> </tr> <tr class="ftp0" data-idx="4"> <td class="ft notranslate checkbox nodrag checknum"><input type="checkbox" class= "row_check" /> 5</td> <td class="ft notranslate status mks-cli-wireless-on c9"> </td> <td class="ft notranslate description"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/bluetooth_clients/574771902443302716">18:93:d7:1c:09:75</a></td> <td class="ft notranslate ftnowrap">Jun 18 17:06</td> <td class="ft notranslate ftnowrap"><a href= "/ABC-Main-Campus/n/GjBDmcv/manage/nodes/list#n=149624928612960">RM11</a></td> <td class="ft notranslate oui">Texas Instruments</td> <td class="ft notranslate outage_graph ftc"> <div class="bt_connectivity_graph fill-graph c10" data-mac="18:93:d7:1c:09:75"> </div> </td> <td class="ft notranslate tags"></td> </tr> </tbody> </table> Status cell html contains either <i style="width: 50px;" class="mks-cli-wireless-on" title="online wireless client"> </i> Which shows the device as currently detected or <i style="width: 50px;" class="mks-cli-wireless-off" title="offline wireless client"> </i> Which shows that we have seen you in the last two hours, but don't currently see you now. Thanks for your time! Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 19, 2018 Moderators Share Posted June 19, 2018 Xysten, Quote Due to circumstances of my job, I am not always able to get to a PC or remember to use my phone when trying to clock in So why not approach your employer and get them to provide a proper solution rather than try to work up some Heath Robinson (or Rube Goldberg if you prefer) code? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Xysten Posted June 19, 2018 Author Share Posted June 19, 2018 3 minutes ago, Melba23 said: Xysten, So why not approach your employer and get them to provide a proper solution rather than try to work up some Heath Robinson (or Rube Goldberg if you prefer) code? M23 Good Question! 1. I work in public education where it is difficult to commit a development budget to something like this. The currency saved (time) for this stage is very minimal and lives on the bottom of a spending priority list. 2. This is something I am doing on my time to make my life easier and would love to pass that on to other staff in the future if I can polish my procedural "Rube Goldberg" code. 3. This is fun. I honestly enjoy learning about Autoit and using IE as an API is something I wish I had thought of a long time ago! Any hints on how to maybe separate that data before writing it to excel?. As I'm searching, I am not finding much on actually passing that image into excel or the class. Is there anyway to manipulate _IETableWritetoArray to say something like, where x.class in "status" column = mks-cli-wireless-on , write data to array ...? Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted June 19, 2018 Moderators Share Posted June 19, 2018 My question would be, does your employer (school) think this is okay? It sounds like you are seeking to circumvent a policy or process they have in place by not having to "clock in". "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
Xysten Posted June 19, 2018 Author Share Posted June 19, 2018 2 minutes ago, JLogan3o13 said: My question would be, does your employer (school) think this is okay? It sounds like you are seeking to circumvent a policy or process they have in place by not having to "clock in". Absolutely, I write the policies for the most part being the IT Director. For salaried employees, the clock-in system is used as a means to seeing who is on campus. The only policy in place regarding clocking in is when an employee, salaried or hourly are on campus, they must be signed in. Myself, the principal, and a few other administrative staff will benefit from this since we are often "caught" by other staff and students with issues to resolve in hallways and classrooms (and get sidetracked before we can clock in). For security purposes, if there is an incident that requires a staff and student count (fire, etc) we are able to pull a list of signed in employees from this system. I am thrilled with the level of scrutiny my small problem is getting from your moderation staff concerning the ethics of the request! This along side other threads I have browsed while on my quest truly shows the mod team are looking to keep the forums within spec of high ethical standards. Hats off! Back to my issue, Here is where I am, I am trying to use StringRegExpReplace to replace the bit of HTML that calls the image with a '<p>Online</p>'. After this can pull the table into an array and export to excel. Anyone see any issues going about it this way? If not, I'll report back when I have news. Thanks again! Link to comment Share on other sites More sharing options...
iamtheky Posted June 20, 2018 Share Posted June 20, 2018 (edited) That sounds easy enough, can you mask the sensitive strings and provide a sample of the target html? larger architectural question: When you say "signed in" are you talking active directory, and when you say "clock in" is this also automated via a popular timekeeping application? Do you have a central repo for domain controller logs and/or for endpoint System event logs? Could you just capture the 4624 type 2 (local logon) events and/or the 4624 type 3's from your IP space (network logon, but from on campus)? I ask because it looks like you are grabbing names off a controller that probably has some human readable output or syslog that would be much cleaner and not subject to the whims of a UI dev. And I can game beacons all day, if the WAP closest to my desk is the sole source of truth there may be more due diligence to be had. Edited June 20, 2018 by iamtheky ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
Xysten Posted June 20, 2018 Author Share Posted June 20, 2018 4 minutes ago, iamtheky said: Do you have a central repo for domain controller logs and/or for endpoint System event logs? Could you just capture the 4624 type 2 (local logon) events and/or the 4624 type 3's from your IP space (network logon, but from on campus)? The point of the project is to be detected by mobile device, be it phone or BLE beacon. Successful logons to the domain won't do much good since the objective is to not have to touch a domain associated device. I could potentially use my laptop for this, then again we return back to telling the PC that it cannot turn off Wifi while on battery which I would like to avoid. Beacon sounds like the best way to go, I will eventually move more towards the Meraki CMX (location analytics now) API where the information will be pushed towards be via HTTP POST via plain text without the hassle of images. I will still use AutoIT to automate the "clock-in/sign-in" process based on which BLE beacons are present. 12 minutes ago, iamtheky said: When you say "signed in" are you talking active directory, and when you say "clock in" is this also automated via a popular timekeeping application. I use the term interchangeably where Salaried employees, vendors and visitors "Sign-In" and hourly employees "clock-in" 14 minutes ago, iamtheky said: That sounds easy enough, can you mask the sensitive strings and provide a sample of the target html? Using _IEBodyReadHTML I am able to pull the full html into a variable. What I would like to do is be able to search for Quote <i title="online wireless client" class="mks-cli-wireless-on" style="width: 50px;"> </i> and replace with Quote "Online" then write that back with _IEBodyWriteHTML. Here is what I have that is failing, Local $doc = _IEBodyReadHTML($oIE) StringRegExpReplace( $doc, '<i title="online wireless client" class="mks-cli-wireless-on" style="width: 50px;"> </i>', "Online" ) _IEBodyWriteHTML($oIE, $doc) I know I probably need to loop this but I cannot get this to change anything at all. I have written $doc to .txt just to see if any changes and there is no go. The more and more I chase this ghost with trying to write back to IE, the more it just makes sense to parse the data from the raw HTML itself instead of trying to use _IETableWriteToArray Link to comment Share on other sites More sharing options...
Xysten Posted June 20, 2018 Author Share Posted June 20, 2018 3 hours ago, iamtheky said: I ask because it looks like you are grabbing names off a controller that probably has some human readable output or syslog that would be much cleaner and not subject to the whims of a UI dev. And I can game beacons all day, if the WAP closest to my desk is the sole source of truth there may be more due diligence to be had. No direct controller, syslog, API for this current version. I'm going around my elbow this time as an excuse to familiarize myself with Autoit and its ability to use IE as an API with ease (or so I thought). I displayed the Meraki Dashboard and the output of my Autoit code into excel and that's pretty much it. As far as gaming beacons goes, the purpose of the beacons for my case is not for auditing or accountability, but automation for now. As the technology grows and matures, new security protocols will come into play to minimize your gaming. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 20, 2018 Moderators Share Posted June 20, 2018 Xysten, 10 hours ago, Xysten said: I am thrilled with the level of scrutiny my small problem is getting from your moderation staff concerning the ethics of the request! This along side other threads I have browsed while on my quest truly shows the mod team are looking to keep the forums within spec of high ethical standards. Hats off! That makes a change from the normal response we get when asking those sorts of questions! Thanks for the compliments. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
iamtheky Posted June 20, 2018 Share Posted June 20, 2018 9 hours ago, Xysten said: As the technology grows and matures, new security protocols will come into play to minimize your gaming. thats wishful, did AC add any security over N? I had to stop testing our environment with the Pineapple because it's too easy to render the WAP logs useless, and even top of the line aruba controllers really only have the ability to triangulate location and then pump up the gain and overpower rogue radios. But I digress. fysa, If you provided the syslog this could probably be knocked out in a one liner. ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
ViciousXUSMC Posted June 20, 2018 Share Posted June 20, 2018 I use presence detection at home for automation. I like to use more than one method and actually create a and function so that both must be true for a status change. Example: NMAP scanning the IP on the network AND Ubiquiti reporting the device as connected by its MAC. I was reading up on it and another presence detection used by others is OwnTracks, its a GPS app for Android and Iphone. I have not tried it yet, but thats a 3rd way to cross reference and something you may be able to implement. People like me keep Wifi off on their work phone, and my personal phone only connects to my home network. Bluetooth is promising since you have an array of sensors, else the issue is the range. Figured I would just give you the heads up for the GPS option as well. iamtheky 1 Link to comment Share on other sites More sharing options...
iamtheky Posted June 20, 2018 Share Posted June 20, 2018 near field geotags would be the sexy way to do ingress/egress. We are still on prox cards. ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now