DHT22 mit xively

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin zusammen,

    ich habe ein Python-Script zusammengebastelt um die Temperatur und die Luftfeuchtigkeit mit xively auszuwerten, ich bekomme aber immer folgenden Fehler beim Ablauf:

    Code
    Traceback (most recent call last):
      File "xively.py", line 4, in <module>
        import xively
      File "/home/pi/lol_dht22/xively.py", line 36, in <module>
        api = xively.XivelyAPIClient(API_KEY)
    AttributeError: 'module' object has no attribute 'XivelyAPIClient'

    Hier einmal der vollständige Code des Scripts:

    Ich konnte den Fehler leider nicht ausmachen.
    Ein User hatte auf stockoverflow.com einen Thread mit genau dem gleichen Fehler eröffnet, aber anscheinend wieder geschlossen. Die Seite zum Thread lässt sich nur noch per Google-Cache erreichen.
    Hier einmal der Link:
    Klick

    Gruß

  • Geh mal in die python shell (einfach python eingeben) und dann

    Code
    import xively
    print dir(xively)
    print help(xively)


    Es sieht so aus als wuerde es

    Code
    XivelyAPIClient


    nicht geben. (Sollte in der dir Ausgabe auftauchen).

  • Abend framp,

    ich habe einmal die python-Shell in dem Ordner, wo ich das Script liegen habe, ausgeführt und bekomme folgenden Fehler beim importieren von "xively":

    Wenn ich hingegen die Shell im Home-Ordner öffne und "xively" importiere bekomme ich keine Fehlermeldung:

    Code
    pi@raspberrypi ~ $ python
    Python 2.7.3 (default, Jan 13 2013, 11:20:46)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import xively
    >>> print dir(xively)
    ['Client', 'Datapoint', 'Datastream', 'Feed', 'Key', 'Location', 'Permission', 'Resource', 'Trigger', 'Unit', 'Waypoint', 'XivelyAPIClient', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__title__', '__version__', 'api', 'client', 'managers', 'models', 'setup_module', 'teardown_module']

    Davon ausgehend, dass es anscheinend im Home-Ordner funktioniert, habe ich das Script einmal dorthin kopiert, bearbeitet und ausgeführt. Ich bekomme aber weiterhin den Fehler:

    Code
    pi@raspberrypi ~ $ sudo python xively.py
    Temperature: 23.0 C
    Humidity:    47.8 %
    Traceback (most recent call last):
      File "xively.py", line 4, in <module>
        import xively
      File "/home/pi/xively.py", line 37, in <module>
        api = xively.XivelyAPIClient(API_KEY)
    AttributeError: 'module' object has no attribute 'XivelyAPIClient'


    Das ist ja sehr dubios... hast du noch eine Idee ?

  • Zitat

    Das ist ja sehr dubios... hast du noch eine Idee ?

    Deine Versuche in unterschiedlichen Verzeichnissen und deren Ausgabe ist hilfreich. So wie ich das sehe benutzt Du xively.py als Namen für Dein Script. Benenne es mal in bl4ckOut_xively.py um und versuche es noch mal.

  • Danke für deine Hilfe.
    Ich habe beide Dateien umbenannt, der Fehler existiert aber weiterhin:

    Code
    pi@raspberrypi ~ $ sudo python bl4ckOut_xively.py
    Temperature: 23.8 C
    Humidity:    44.5 %
    Traceback (most recent call last):
      File "bl4ckOut_xively.py", line 4, in <module>
        import xively
      File "/home/pi/xively.py", line 37, in <module>
    AttributeError: 'module' object has no attribute 'XivelyAPIClient'

    :huh:

  • 2 Möglichkeiten:

    • Entweder du kopierst das Python Modul ins richtige Verzeichnis damit ein normaler import auch funktioniert,
    • Oder du gibst vor dem import Aufruf den vollständigen Pfad an in dem danach gesucht wird

    1. Solltest du dir angewöhnen zu machen, 2. ist gepfuscht


    Zu 1.:

    Code
    python
    import sys
    print sys.path

    ...dort irgendwo hin kopieren... vorzugsweise ins erste

    Zu 2.:

    Code
    import sys
    sys.path.append('/home/pi')
    import xively
  • Abend meigraf,

    Das Modul wird ja über pip installiert mit "sudo pip install xively-python".

    Die Ausgabe von "print sys.path" gibt mir folgendes aus:

    Code
    >>> print sys.path
    ['', '/usr/local/lib/python2.7/dist-packages/gspread-0.1.0-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pushbullet.py-0.4.1-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/requests-2.2.1-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/pymodules/python2.7']

    Das Modul befindet sich aber schon in "/usr/local/lib/python2.7/dist-packages/", siehe Ausgabe von "ls":

    Code
    pi@raspberrypi ~/lol_dht22 $ ls /usr/local/lib/python2.7/dist-packages/
    easy-install.pth         pcd8544-0.1.0.egg-info         spidev-2.0.egg-info        wiringpi2.pyc
    gevent                   psutil                         spidev.so                  _wiringpi2.so
    gevent-1.0.egg-info      psutil-1.2.1.egg-info          SPI_Py-1.0.egg-info        wiringpi.py
    greenlet-0.4.2.egg-info  _psutil_linux.so               spi.so                     wiringpi.pyc
    greenlet.so              _psutil_posix.so               wiringpi-1.0.5.egg-info    _wiringpi.so
    gspread-0.1.0-py2.7.egg  pushbullet.py-0.4.1-py2.7.egg  wiringpi2-1.0.10.egg-info  xively
    pcd8544                  requests-2.2.1-py2.7.egg       wiringpi2.py               xively_python-0.1.0_rc1.egg-info


    Oder habe ich dich jetzt falsch verstanden ? :s

  • Naja anscheint hast du ein Verzeichnis "xively" in "/usr/local/lib/python2.7/dist-packages/" also liegt die xively.py nicht direkt in /usr/local/lib/python2.7/dist-packages/

    Probier es also mal über 2. Möglichkeit indem du den vollständigen Pfad nutzt:

    Code
    import sys
    sys.path.append('/usr/local/lib/python2.7/dist-packages/xively')
    import xively
  • Meine Initialisierung sieht jetzt folgendermaßen aus:

    Code
    #!/usr/bin/env python
    import sys
    import os
    import re
    import subprocess
    import requests
    import time
    sys.path.append('/usr/local/lib/python2.7/dist-packages/xively')
    import xively

    Der Fehler bleibt aber weiterhin bestehen:

    Code
    pi@raspberrypi ~/lol_dht22 $ sudo python xively.py
    Temperature: 20.5 C
    Humidity:    38.5 %
    Traceback (most recent call last):
      File "xively.py", line 9, in <module>
        import xively
      File "/home/pi/lol_dht22/xively.py", line 39, in <module>
        api = xively.XivelyAPIClient(API_KEY)
    AttributeError: 'module' object has no attribute 'XivelyAPIClient'

    :denker:
    Danke für die Geduld.... :D

    Einmal editiert, zuletzt von bl4ckOut (2. März 2014 um 21:37)

  • Hm bei mir kommt die Fehlermeldung nicht

    Vorgehensweise:

    Code
    apt-get update
    apt-get install python-pip -y
    pip install xively-python

    Dein Script als /tmp/t.py gespeichert

    /tmp/loldht erzeugt mit:

    Bash
    #!/bin/bash
    
    
    echo "Temperature = 20.5"
    echo "Humidity = 50.4"

    ..und ausführbar gemacht

    Anschließend:

    Code
    cd /tmp
    python t.py

    Und dann kommt zwar ein Fehler aber ein anderer:

    Dein Fehler trat aber schon in Zeile 36 auf, meiner geht darüber hinaus

    Zeile 36:

    Code
    api = xively.XivelyAPIClient(API_KEY)


    Zeile 37:

    Code
    feed = api.feeds.get(FEED_ID)


    /EDIT: Ach da fällt mir grad auf dass dein Script welches du ausführst ebenfalls xively.py heißt? :-/

    Code
    pi@raspberrypi ~/lol_dht22 $ sudo python xively.py

    Benenn das mal bitte um!

  • Kann das denn irgendwas mit meiner Python Version 2.7 zu tun haben ?
    Ich kenn mich jetzt auch nich so gut mit Python aus, aber alle meine anderen Skripte laufen perfekt.
    Aver egal was ich mache, ich bekomme immer den gleichen "AttributeError".
    Hast du noch irgendeine Idee, wie ich das behoben kriege ?

    Einmal editiert, zuletzt von bl4ckOut (2. März 2014 um 21:54)

  • Es funktioniert... es gab in meinem Home-Ordner eine verstecke Datei "xively.pyc". Nachdem ich diese gelöscht hatte ging es auf einmal. :D
    Man muss sicherstellen, dass sich keine Datei mit dem Wort "xively" im Dateinamen im gleichen Ordner des Scripts befindet.

    Einmal editiert, zuletzt von bl4ckOut (9. März 2014 um 22:10)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!