Problem beim import von Objekten?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

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....
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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/
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

Import?
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

achso, nee der code ist so wie er dort steht. Wenn ichs über

from security_monitor import * mach dann bekomme ich den fehler das es dieses Modul nicht gibt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

peter85 hat geschrieben:... Das ich unter dem Namen light_d.py gespeichert ...
Demzufolge sollte

Code: Alles auswählen

from security_monitor import *
wie folgt heissen (und Sternchen sollte man loswerden, sonst sieht man u.U. selbst bald Sternchen):

Code: Alles auswählen

from light_d import *
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
;-)
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

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???
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

peter85 hat geschrieben: File "WEB/python/light_d.py", line 1, in ?
frim light_d import SecurityMonitor
ImportError: cannot import name Security Monitor
Das kann niemals die exakte Fehlermeldung gewesen sein. Du machst das Antworten nicht einfacher, wenn du Fehlermeldungen statt mit copy&paste manuell überträgst.

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

CM hat geschrieben:PS Bitte dies berücksichtigen! Und bei so viel Code besser gleich in ein pastebin auslagern, z. B. http://paste.pocoo.org/
Ist wohl übersehen oder ignoriert worden :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

Warum kann das net der fehler sein? gut bis auf das frim, soll nen from sein. aber ich hab das auf den webserver des connectports gezogen, daher wohl das web?!
Benutzeravatar
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?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Ich würd mal sagen, du hast folgenden Schritt der Anleitung nicht (vollständig) gemacht.
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
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.
peter85
User
Beiträge: 8
Registriert: Montag 9. November 2009, 11:57
Wohnort: Dortmund

Danke für die Hilfen, Hat sich inzwischen geklärt, das ganze funktioniert jetzt. :)
Antworten