mirror of
				https://github.com/KevinMidboe/homeChecker.git
				synced 2025-10-29 17:40:26 +00:00 
			
		
		
		
	Created the logic for saving and fetching times.
This commit is contained in:
		
							
								
								
									
										102
									
								
								macLookup.py
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								macLookup.py
									
									
									
									
									
								
							| @@ -1,66 +1,66 @@ | ||||
| #!/usr/bin/env python3 | ||||
|  | ||||
| import subprocess | ||||
| from time import time, sleep | ||||
| import sqlite3 | ||||
| from subprocess import check_output | ||||
| from time import time | ||||
| from re import findall | ||||
|  | ||||
| def getOnlineClients(): | ||||
|     arpOutput = subprocess.check_output("sudo arp-scan -l", shell=True) | ||||
|     arpOutput = arpOutput.decode() | ||||
|  | ||||
|     macAdr = findall('(([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2}))', arpOutput) | ||||
|  | ||||
|     return [i[0] for i in macAdr] | ||||
|  | ||||
| def getAddr(): | ||||
|     c.execute('SELECT adr FROM clients') | ||||
|     for adr in c.fetchall(): | ||||
|         print(adr[0]) | ||||
|      | ||||
|     return [i[0] for i in c.fetchall()] | ||||
|  | ||||
| def getTimes(): | ||||
|     conn = sqlite3.connect('home.db') | ||||
|     c = conn.cursor() | ||||
|  | ||||
|     c.execute('SELECT c.name, l.timesince FROM lastonline AS l JOIN clients AS c WHERE l.clientadr=c.adr') | ||||
|     print(c.fetchall()) | ||||
|  | ||||
| def checkNameExistance(): | ||||
|     c.execute('SELECT name, addr FROM macAddr') | ||||
|     test = c.fetchall() | ||||
|     for name, addr in test: | ||||
|         print(name) | ||||
|     returnList = [] | ||||
|     for name, time in c.fetchall(): | ||||
|         returnList.append({"name": name, "time": convertTime(time)}) | ||||
|  | ||||
| # Define the users to lookup | ||||
| addr = { "elias": '38:ca:da:eb:3f:da', "kevin": '2c:33:61:aa:e6:a9', "nora": 'cc:29:f5:b8:2d:a2', | ||||
|     "inge": 'ac:5f:3e:28:2a:c0', "bazzinga": 'f0:79:59:70:a4:a6' } | ||||
|     conn.commit() | ||||
|     conn.close() | ||||
|  | ||||
| conn = sqlite3.connect('home.db') | ||||
| c = conn.cursor() | ||||
|     return returnList | ||||
|  | ||||
| getAddr() | ||||
| getTimes() | ||||
| # checkNameExistance() | ||||
|  | ||||
| # def whosHome(): | ||||
| # 	# Get the output of the command 'arp-scan -l' | ||||
| #     arpOutput = subprocess.check_output("sudo arp-scan -l", shell=True).split('\n') | ||||
| #     # Strip away first three lines and last 5 lines | ||||
| #     arpOutput = arpOutput[2:-4]  | ||||
|  | ||||
| #     # Open file times.txt and read lines to 'logFile' | ||||
| #     with open('/home/kevin/homeCheck/times.txt', 'r') as file: | ||||
| # 	    logFile = file.readlines() | ||||
|  | ||||
| #     i = 0 | ||||
| #     # Go through each element in list 'addr' | ||||
| #     for mac in addr: | ||||
| #     	# Then iterate through each line in arpOutput | ||||
| #     	for line in arpOutput: | ||||
| #     		line_mac = str(line.split('\t')[1]) | ||||
|  | ||||
| #     		# For each line we check after a matching mac addr | ||||
| #     		if (mac in line_mac): | ||||
| #     			logFile[i] = str(users[i]) + ':' + str(time()) + '\n' | ||||
| #     			# print mac | ||||
| #     			# print users[i] | ||||
| #     			# print str(i) + '\n' | ||||
| #     			# print logFile | ||||
|  | ||||
| #     	i+=1 | ||||
|  | ||||
| #     # Write changes to file | ||||
| #     with open('/home/kevin/homeCheck/times.txt', 'w') as file: | ||||
| #     	file.writelines(logFile) | ||||
| #     	print logFile | ||||
| def convertTime(seconds): | ||||
|     delta = time() - seconds | ||||
|     if delta >= 86400: | ||||
|         return str(delta//86400) + ' days' | ||||
|     elif delta >= 3600: | ||||
|         if delta//3600 < 10: | ||||
|             parent = str(delta//3600) | ||||
|             child = str((delta - (3600 * (delta//3600)))//60) | ||||
|             if len(child) == 1: | ||||
|                 child = '0' + child | ||||
|             return parent + ':' + child + ' hours' | ||||
|         else: | ||||
|             return str(delta//3600) + ' hours' | ||||
|     elif delta >= 60: | ||||
|         return str(delta//60) + ' minutes' | ||||
|     else: | ||||
|         return str(delta) + ' seconds' | ||||
|  | ||||
|  | ||||
| # whosHome() | ||||
| def updateTimes(): | ||||
|     curTime = time() | ||||
|     conn = sqlite3.connect('home.db') | ||||
|     c = conn.cursor() | ||||
|      | ||||
|     online = list(set(getOnlineClients()) & set(getAddr())) | ||||
|  | ||||
|     for adr in online: | ||||
|         c.execute('UPDATE lastonline SET timesince='+ str(curTime) +' WHERE clientadr="cc:29:f5:b8:2d:a2"') | ||||
|  | ||||
|     conn.commit() | ||||
|     conn.close() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user