Problem beim import von Objekten?
Verfasst: Montag 16. November 2009, 20:06
hab wieder ein Problem. Und zwar versuche ich gerade ein xbee Modul anzusteuern (LED auf der Platine) dazu habe ich das folgende Programm gefunden. Das ich unter dem Namen light_d.py gespeichert und auf den Port gezogen habe. Das Programm mit Anleitung findet ihr hier http://www.digi.com/wiki/developer/inde ... Relay_Demo
security_monitor = SecurityMonitor()
security_monitor.start()
security_monitor.add_monitor(light_off_timer, SCAN_DELAY)
# ensure that distance sensor is powered properly from adapter:
if (watchportD_exists == True):
print "activate watchportD sensor"
zigbee.ddo_set_param(watchportD_addr, 'D2', 5)
zigbee.ddo_set_param(watchportD_addr, 'AC', '')
security_monitor.add_monitor(check_range, SCAN_DELAY)
print "Application ready"
while 1:
if (devboard_exists == True):
check_keys()
if (sw2_pressed == True):
print "light on for 30 sec"
light_on()
lightCnt = 30
elif (sw4_pressed == True):
light_on()
elif (sw3_pressed == True):
light_off()
else:
sleep (1)
dieses ist aus dem digi wiki kopiert.
Ich habe alles nach Ankleitung dort gemacht. Also die entsprechenden Module auf den Connectport geladen, wie dort beschrieben.
Allerdings bekomme ich wenn ich das Programm dann mittels Telnet ausführen will folgende Fehlermeldung:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
NameError: name 'SecurityMonitor' is not defined
Wie gesagt ich habe alles so gemacht wie es dort steht. Das Modul security_monitor.py ist das folgende:
from time import sleep
import threading
class SecurityMonitor(threading.Thread):
def __init__(self):
self._object_lock = threading.RLock()
self._masterevent = threading.Event()
self._monitorevent = threading.Event()
self._stopevent = threading.Event()
self._cb_list = [ ]
self._monitor_list = [ ]
self._monitor_thread_list = [ ]
threading.Thread.__init__(self, name="Security Monitor")
def _dispatch(self):
for cb in self._cb_list:
cb()
def _set_event(self, event):
event.set()
self._masterevent.set()
def run(self):
while 1:
self._masterevent.wait()
self._masterevent.clear()
if self._stopevent.isSet():
break
elif self._monitorevent.isSet():
self._monitorevent.clear()
self._dispatch()
def kill(self, timeout=None):
"""
Kill the thread
"""
self._set_event(self._stopevent)
threading.thread.join(self, timeout)
def add_cb(self, f):
if not f in self._cb_list:
self._object_lock.acquire()
self._cb_list.append(f)
self._object_lock.release()
return True
return False
def remove_cb(self, f):
try:
idx = self._cb_list.index(f)
self._object_lock.acquire()
self._cb_list.remove(idx)
self._object_lock.release()
except:
return False
return True
class _MonitorThread(threading.Thread):
def __init__(self, f, poll_rate, notify_f):
self._f = f
self._poll_rate = poll_rate
self._notify_f = notify_f
self._stopevent = threading.Event()
threading.Thread.__init__(self, name="_MonitorThread")
def run(self):
while 1:
self._stopevent.wait(self._poll_rate)
sleep(0) # will not yield otherwise
if self._stopevent.isSet():
break
if self._f():
self._notify_f()
def kill(self, timeout=None):
"""
Kill the thread
"""
self._stopevent.set()
threading.thread.join(self, timeout)
def add_monitor(self, f, poll_rate):
"""
Will start a thread that will call f at poll_rate.
If f returns true, the call-backs for this
SecurityMonitor object will be called.
"""
if not f in self._monitor_list:
self._object_lock.acquire()
self._monitor_list.append(f)
new_thread = self._MonitorThread(f, poll_rate,
lambda: self._set_event(self._monitorevent))
self._monitor_thread_list.append(new_thread)
self._object_lock.release()
new_thread.start()
return True
return False
def remove_monitor(self, f):
"""
Will stop a thread which calls f.
"""
kill_thread = None
try:
idx = self._monitor_list.index(f)
kill_thread = self._monitor_thread_list[idx]
self._object_lock.acquire()
self._monitor_list.remove(idx)
self._monitor_thread_list.remove(idx)
self._object_lock.release()
except:
return False
kill_thread.kill()
return True
Da ich neu in python bin, weiß ich nicht wie ich es hinbekomme das SecurtiyMonitor im oberen Programm bekannt ist.
Ich hoffe ihr könnt mir dabei auch helfen. Danke....
security_monitor = SecurityMonitor()
security_monitor.start()
security_monitor.add_monitor(light_off_timer, SCAN_DELAY)
# ensure that distance sensor is powered properly from adapter:
if (watchportD_exists == True):
print "activate watchportD sensor"
zigbee.ddo_set_param(watchportD_addr, 'D2', 5)
zigbee.ddo_set_param(watchportD_addr, 'AC', '')
security_monitor.add_monitor(check_range, SCAN_DELAY)
print "Application ready"
while 1:
if (devboard_exists == True):
check_keys()
if (sw2_pressed == True):
print "light on for 30 sec"
light_on()
lightCnt = 30
elif (sw4_pressed == True):
light_on()
elif (sw3_pressed == True):
light_off()
else:
sleep (1)
dieses ist aus dem digi wiki kopiert.
Ich habe alles nach Ankleitung dort gemacht. Also die entsprechenden Module auf den Connectport geladen, wie dort beschrieben.
Allerdings bekomme ich wenn ich das Programm dann mittels Telnet ausführen will folgende Fehlermeldung:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
NameError: name 'SecurityMonitor' is not defined
Wie gesagt ich habe alles so gemacht wie es dort steht. Das Modul security_monitor.py ist das folgende:
from time import sleep
import threading
class SecurityMonitor(threading.Thread):
def __init__(self):
self._object_lock = threading.RLock()
self._masterevent = threading.Event()
self._monitorevent = threading.Event()
self._stopevent = threading.Event()
self._cb_list = [ ]
self._monitor_list = [ ]
self._monitor_thread_list = [ ]
threading.Thread.__init__(self, name="Security Monitor")
def _dispatch(self):
for cb in self._cb_list:
cb()
def _set_event(self, event):
event.set()
self._masterevent.set()
def run(self):
while 1:
self._masterevent.wait()
self._masterevent.clear()
if self._stopevent.isSet():
break
elif self._monitorevent.isSet():
self._monitorevent.clear()
self._dispatch()
def kill(self, timeout=None):
"""
Kill the thread
"""
self._set_event(self._stopevent)
threading.thread.join(self, timeout)
def add_cb(self, f):
if not f in self._cb_list:
self._object_lock.acquire()
self._cb_list.append(f)
self._object_lock.release()
return True
return False
def remove_cb(self, f):
try:
idx = self._cb_list.index(f)
self._object_lock.acquire()
self._cb_list.remove(idx)
self._object_lock.release()
except:
return False
return True
class _MonitorThread(threading.Thread):
def __init__(self, f, poll_rate, notify_f):
self._f = f
self._poll_rate = poll_rate
self._notify_f = notify_f
self._stopevent = threading.Event()
threading.Thread.__init__(self, name="_MonitorThread")
def run(self):
while 1:
self._stopevent.wait(self._poll_rate)
sleep(0) # will not yield otherwise
if self._stopevent.isSet():
break
if self._f():
self._notify_f()
def kill(self, timeout=None):
"""
Kill the thread
"""
self._stopevent.set()
threading.thread.join(self, timeout)
def add_monitor(self, f, poll_rate):
"""
Will start a thread that will call f at poll_rate.
If f returns true, the call-backs for this
SecurityMonitor object will be called.
"""
if not f in self._monitor_list:
self._object_lock.acquire()
self._monitor_list.append(f)
new_thread = self._MonitorThread(f, poll_rate,
lambda: self._set_event(self._monitorevent))
self._monitor_thread_list.append(new_thread)
self._object_lock.release()
new_thread.start()
return True
return False
def remove_monitor(self, f):
"""
Will stop a thread which calls f.
"""
kill_thread = None
try:
idx = self._monitor_list.index(f)
kill_thread = self._monitor_thread_list[idx]
self._object_lock.acquire()
self._monitor_list.remove(idx)
self._monitor_thread_list.remove(idx)
self._object_lock.release()
except:
return False
kill_thread.kill()
return True
Da ich neu in python bin, weiß ich nicht wie ich es hinbekomme das SecurtiyMonitor im oberen Programm bekannt ist.
Ich hoffe ihr könnt mir dabei auch helfen. Danke....