তাই আমি প্রায় এক বছর ধরে একই ইস্যুতে কাজ করছি। আমি এটিকে আমার ম্যাকের সাথে মোটামুটি দ্রুত কাজ করতে পেরেছি, তবে এটি আমার পিসিতে সঠিকভাবে কাজ করতে পেতে অনেক সমস্যা হয়েছিল। আমি অনেক বিভিন্ন পদ্ধতির চেষ্টা করেছি। আমার বা আমার সঙ্গী যখন ঘরে থাকে তখন আমার কাছে একটি হোম অটোমেশন সিস্টেম থাকে যা গরম এবং গরম জল (একটি আরডুইনো এবং আরএফ মডিউলের মাধ্যমে) চালু করে (এটি আমাদের আইফোনগুলি হোম ওয়াইফাইতে সনাক্তকরণযোগ্য)। শেষ পর্যন্ত আমি আইফোনের আইপি ঠিকানা খুঁজে পেতে 'এনস্লুকআপ' ব্যবহার করেছিলাম (আইপি ঠিকানাটি গতিশীল হওয়ার কারণে পরিবর্তিত হয়েছে (তবে তারা আসলে আমার রাউটারে আসলে কখনও করেন না)) এবং আইফোন চালু আছে কিনা তা সনাক্ত করতে 'এনএম্যাপ' ব্যবহার করেছি নেটওয়ার্ক. আইফোন যদি খুব গভীর ঘুমে থাকে তবে 'এনএম্যাপ' সবসময় ফোনটি খুঁজে না পায়, তাই ফোনটি ঘরে নেই বলে আমি এটি 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 ...
।