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....
Problem beim import von Objekten?
Hoi,
hast Du denn auch den Import des Moduls in Deinem Code?
Gruss,
Christian
PS Bitte dies berücksichtigen! Und bei so viel Code besser gleich in ein pastebin auslagern, z. B. http://paste.pocoo.org/
hast Du denn auch den Import des Moduls in Deinem Code?
Gruss,
Christian
PS Bitte dies berücksichtigen! Und bei so viel Code besser gleich in ein pastebin auslagern, z. B. http://paste.pocoo.org/
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Demzufolge solltepeter85 hat geschrieben:... Das ich unter dem Namen light_d.py gespeichert ...
Code: Alles auswählen
from security_monitor import *
Code: Alles auswählen
from light_d import *
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
cofi hat geschrieben:wie folgt heissen (und Sternchen sollte man loswerden, sonst sieht man u.U. selbst bald Sternchen):Code: Alles auswählen
from light_d import *
Code: Alles auswählen
from light_d import SecurityMonitor
Danke aber leider funktioniert beides nicht, habe es nun so wie vorgeschlegen importiert.
from light_d import *
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)
allerdings erhalte ich in diesem Fall die Fehlermeldung:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
File "WEB/python/light_d.py", line 2, in ?
security_monitor=SecurityMonitor()
NameError: name 'SecurityMonitor' is not defined
im Fall: from light_d import SecurityMonitor
erhalte ich:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
File "WEB/python/light_d.py", line 1, in ?
frim light_d import SecurityMonitor
ImportError: cannot import name Security Monitor
muss ich das vllt noch irgendwo ablegen???
from light_d import *
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)
allerdings erhalte ich in diesem Fall die Fehlermeldung:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
File "WEB/python/light_d.py", line 2, in ?
security_monitor=SecurityMonitor()
NameError: name 'SecurityMonitor' is not defined
im Fall: from light_d import SecurityMonitor
erhalte ich:
#>py light_d.py
Traceback<most recent call last>:
File "<string>", line 1, in ?
File "WEB/python/light_d.py", line 1, in ?
frim light_d import SecurityMonitor
ImportError: cannot import name Security Monitor
muss ich das vllt noch irgendwo ablegen???
Das kann niemals die exakte Fehlermeldung gewesen sein. Du machst das Antworten nicht einfacher, wenn du Fehlermeldungen statt mit copy&paste manuell überträgst.peter85 hat geschrieben: File "WEB/python/light_d.py", line 1, in ?
frim light_d import SecurityMonitor
ImportError: cannot import name Security Monitor
Wenn ich jetzt auch noch davon ausgehen muss, dass nicht nur die Fehlermeldungen sondern auch dein Code nicht in der Form vorliegt wie du ihn hier postest, dann habe ich keinen richtigen Ansatzpunkt für die Hilfe. Bitte kopiere Code und Fehlermeldungen hierhin statt sie abzuschreiben und setze Code in Code-Tags um ihn leserlich zu gestalten.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Du solltest mal praeziser werden wie die Dateien heissen. Deine eigene heisst wohl `light_d.py` und wie heisst die, auf die du zugreifen willst? und wo liegt die?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ich würd mal sagen, du hast folgenden Schritt der Anleitung nicht (vollständig) gemacht.
Außerdem ist die Version von ``light_d.py`` auf dieser Seite in dem Archiv anders als deine, du solltest diese nehmen, bzw. Teile davon in deine Version übernehmen. In der steht auf jeden Fall, wie die Importe richtig auszusehen haben.To set up the ConnectPort X, please follow these instructions:
* Upload all neccessary Python modules:
o Python.zip
o DigiXBeeDrivers.zip
o security_monitor.zip
o zigbee.py
o xbee_sensor.py
o light_d.py