इसलिए मैं लगभग एक साल से इसी मुद्दे पर काम कर रहा हूं। मुझे अपने मैक पर काम करने के लिए काफी जल्दी मिल गया, लेकिन अपने पीसी पर सही काम करने में बहुत परेशानी हुई। मैंने कई अलग-अलग तरीकों की कोशिश की है। मेरे पास एक होम ऑटोमेशन सिस्टम है जो हीटिंग या गर्म पानी (एक अरुडिनो और आरएफ मॉड्यूल के माध्यम से) को चालू करता है जब मैं या मेरा साथी घर पर होते हैं (जो कि हमारे आईफ़ोन होम वाईफाई पर पता लगाने योग्य हैं)। अंत में मैंने iPhones के लिए IP पता खोजने के लिए 'nslookup' का उपयोग किया (यदि IP पता डायनामिक होने के कारण बदल गया था, लेकिन iPhone है तो यह पता लगाने के लिए) और 'nmap' जाल। अगर iPhone बहुत गहरी नींद में है, तो 'nmap' हमेशा फोन नहीं ढूंढता है, इसलिए मैंने इसे 10 बार चेक करने से पहले कहा कि फोन घर पर नहीं है। नीचे अजगर में मेरे घर स्वचालन कोड का हिस्सा है। मैंने थ्रेडिंग का इस्तेमाल किया है। नीचे दिए गए कोड के साथ कोई भी प्रश्न मुझे बताएं।
# Dictionary to store variables to reuse on program restart
v = {
'boilerControlCH' : 'HIH', # 'scheduled' or 'HIH' (Honey I'm Home)
'boilerControlHW' : 'scheduled',
'thermostatSetPoint' : 20.8,
'thermostatVariance' : 0.1,
'morningTime' : datetime(1970,1,1,6,0,0),
'nightTime' : datetime(1970,1,1,23,0,0),
'someOneHome' : False,
'guest' : False,
'minimumTemperatureOO' : False,
'minimumTemperature' : 4.0,
'iPhoneMark' : {'iPhoneHostname' : 'marks-iphone', 'home' : False},
'iPhoneJessica' : {'iPhoneHostname' :'jessicaesiphone', 'home' : False}
}
तथा
# Check if anyone at home
def occupancyStatus(person, Bol = False):
with lockOccupancyStatus:
someOneHome = False
if 'iPhone' in person:
v[person]['home'] = Bol
elif 'retest' in person:
pass
else:
v[person] = Bol
if v['guest'] == True:
someOneHome = True
for key in v:
if 'iPhone' in key:
if v[key]['home'] == True:
someOneHome = True
v['someOneHome'] = someOneHome
variablesToFile()
return
और मुख्य कोड
# iPhone home status threading code
class nmapClass(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global exitCounter
nmapThread()
msg.log('Exited nmapThread')
waitEvent.set()
waitEventAdjustable.set()
serialDataWaiting.set()
exitCounter += 1
def nmapThread():
iPhone = {}
maxCounts = 10
for phone in v:
if 'iPhone' in phone:
iPhone[phone] = {}
iPhone[phone]['hostname'] = v[phone]['iPhoneHostname']
iPhone[phone]['count'] = maxCounts
#msg.log(iPhone)
while exitFlag[0] == 0:
for phone in iPhone:
if iPhone[phone]['count'] > 0:
phoneFound = False
IPAddress = '0.0.0.0'
# Find iPhones IP address using its hostname
commandNsloolup = 'nslookup %s' %iPhone[phone]['hostname']
childNslookup = pexpect.popen_spawn.PopenSpawn(commandNsloolup, timeout = None)
output = childNslookup.readline()
while '\r\n' in output:
#msg.log(output)
if 'Name:' in output:
output = childNslookup.readline()
if 'Address:' in output:
tempStr = output
startPoint = tempStr.find('192')
tempStr = tempStr[startPoint:]
IPAddress = tempStr.replace('\r\n', '')
#msg.log(IPAddress)
output = childNslookup.readline()
if IPAddress == '0.0.0.0':
pass
#msg.error('Error finding IP address for %s' %iPhone[phone]['hostname'], GFI(CF()).lineno)
else:
#commandNmap = 'nmap -PR -sn %s' %IPAddress
#commandNmap = 'nmap -p 62078 -Pn %s' %IPAddress # -p specifies ports to try and access, -Pn removes pinging
commandNmap = 'nmap -p 62078 --max-rate 100 %s' %IPAddress
childNmap = pexpect.popen_spawn.PopenSpawn(commandNmap, timeout = None)
output = childNmap.readline()
while '\r\n' in output:
if 'Host is up' in output:
phoneFound = True
break
output = childNmap.readline()
#if phoneFound:
# break
if phoneFound:
iPhone[phone]['count'] = 0
if v[phone]['home'] == False:
msg.log('%s\'s iPhone has returned home' %phone)
occupancyStatus(phone, True)
waitEventAdjustable.set()
#else:
#msg.log('%s\'s iPhone still at home' %phone)
else:
iPhone[phone]['count'] -= 1
if v[phone]['home'] == True and iPhone[phone]['count'] == 0:
msg.log('%s\'s iPhone has left home' %phone)
occupancyStatus(phone, False)
waitEventAdjustable.set()
#else:
#msg.log('%s\'s iPhone still away from home' %phone)
elif iPhone[phone]['count'] < 0:
msg.error('Error with count variable in iPhone dictionary', GFI(CF()).lineno)
longWait = True
for phone in iPhone:
if iPhone[phone]['count'] > 0:
longWait = False
#msg.log('%s: %s' %(phone, iPhone[phone]['count']))
if longWait:
#msg.log('wait long')
# 600 = run every 10 minutes
waitEvent.wait(timeout=600)
for phone in iPhone:
iPhone[phone]['count'] = maxCounts
else:
#msg.log('wait short')
waitEvent.wait(timeout=60)
return
यदि आप इसे सीधे अपनी लिपि में कॉपी करते हैं तो कोड काम नहीं कर सकता है, क्योंकि कुछ ऐसे भाग गायब हैं जिन्हें मैंने कॉपी करने की कोशिश नहीं की है और चीजों को सरल और आसानी से पढ़ने के लिए रखा है, लेकिन उम्मीद है कि उपरोक्त कोड सभी को यह एहसास दिलाता है कि मैंने कैसे किया बातें।
hcitool ...
। हालाँकि, आपको ऊपर दिए गए उदाहरण की तरह कमांड को चेन करना होगा। कनेक्शन केवल बहुत कम समय के लिए सक्रिय है। आप कर में मिश्रण में निकटता जोड़ सकते हैंhcitool rssi ...
।