IncompleteRead:

  • Hallo zusammen.

    Da ich neu bin, hier eine kurze Vorstellung:
    Ich möchte mit meinem RPi B+ einen Datenlogger für meine Photovoltaikanlage bauten.
    Programmiert habe ich schon in ANSI-C, also schon eine gewisse Erfahrung. Jetzt habe ich mich soweit in Python 3.2 eingearbeitet und mein Projekt begonnen.
    Dazu habe ich den RaPi ans Heimnetz angeschlossen und habe vollen Zugriff über Remote-Desktop. (PC hat Win 7.) Linux-Kenntnisse habe ich kaum! (Wird aber noch, hoffentlich)
    Jetzt zu meinem Projekt:
    Die Daten von der Anlage bekomme ich über ein JSON-Text-Format aus SMART-Grid-Hubs die auf den Zählern montiert sind. Diese kann ich über LAN auslesen. Dies funktioniert auch soweit mit:
    resp = urllib.request.urlopen (url)
    json_txt = response.read()
    text = json_txt.decode("utf8")
    data = json.loads(text)

    ganz gut, aber nach einer unterschiedlichen Anzahl von Zugriffen (zw. 30 und 250mal) kommt die Fehlermeldung:

    - Zeile meines Programms -> json_txt = response.read()
    - Zeile in 'client.py' line 496 in read -> s=self._safe_read(self.length)
    - Zeile in 'client.py' line 592 in _safe_read -> raise IncompleteRead(b''.jion(s), amt)
    http.clinet.IncompleteRead: IncompleteRead(567 bytes read, 912 more expected)

    Die Zahlen in der letzten Meldung variieren.
    Habt Ihr irgendeine Idee?

    Viele Grüße an die Runde.
    Lutz

  • Hallo zusammen,

    damit die Runde es besser versteht hier der Source-Code:
    test_forum.py
    und die Fehlermeldung:
    FehlerMeldg.py

    Das Problem ist, ich möchte die Zähler (Smart Grid Hub von Fa. EFR) über den eingebauten Web-Server auslesen und (sollte es dauerhaft gelingen) grafisch darstellen. Das Auslesen funktioniert zischen 20 und 440-mal. Irgendwann bricht es mit der Fehlermeldung ab.
    Liegt es an der Deklaration der Variablen?

    Da ich wie oben schon gesagt bei Python ein Neuling bin, bin ich aufgeschlossen. Ich benutze Python 3.2.

    Viele Grüße
    Lutz

  • Hallo Lutz,

    Deine Fehlermeldungen referenzieren zwei Programme
    - haupt.py
    - client.py

    Dein bereitgestellter Quellcode ist keines der beiden Programme, da die angezeigte fehlerhafte Zeile in keinem der beiden bereitgestellten Quellcodes vorkommt. Somit wird Dir auch niemand sagen können, wo der Fehler herkommt - oder wie Du ihn lösen könntest.

    Ein beliebter Fehler in Python liegt in der Einrückung, durch die die Programmebene festgelegt wird.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (27. Dezember 2014 um 19:18)

  • Hallo Andreas,

    erstmal Danke für Deine Antwort.
    die beiden Programme

    haupt.py und client.py

    müssten aus der Library (urllib oder json) kommen.
    Ich werde mal versuchen die Herstellerfirma zu kontaktieren, vielleicht können die mir weiterhelfen. Sonst weiß ich mir keinen Rat mehr.

    Vielleicht hat ja irgendjemand anders noch einen Vorschlag?!

    Grüße
    Lutz

  • Ich geh eher davon aus, dass die URL falsch ist oder ggf. die Kodierung nicht passt bzw der Inhalt nicht gelesen werden kann.

    Code
    url = ('http://192.168.178.%d/json.txt?LogName=abcd&LogPSWD=efgh' % (arg))

    ``zaehler(31)`` ruft die URL 192.168.178.31 auf.

    Alternative und empfehlenswerte wäre das requests Modul

    Code
    payload = {'LogName': 'abcd', 'LogPSWD': 'efgh'}
    r = requests.get(http://192.168.178.31/json.txt?", params=payload)
    print(r.text)

    Edit:
    Was für eine Kodierung hat ``json.txt``? Und poste mal ein wenig Inhalt davon.

  • Hallo bootsmann,

    mit dem URL bekomme ich die Daten bzw. den JSON-String, sowohl unter Addr. 31 als auch unter 32. (s. Anhang, Beispiel)
    Mein Problem ist, irgendwann wird das Auslesen o. Übertragen nicht ganz durchgeführt. D.h. es fehlen Daten beim "request" oder beim Einsprung in der haupt.py oder client.py Routine passiert etwas.
    Die Schleife funktioniert zwischen 20 und 400mal, dann ist Schluss, und ich weiß nicht warum!

    Viele Grüße
    Lutz

  • Hallo zusammen,

    nachdem ich bei der Herstellerfirma nachgefragt habe, haben die zurückgeschrieben, dass Sie sporadisch Probleme mit der Datenübergabe haben. TOLL.
    Dieser Thread ist somit erledigt.
    Ich suche jetzt erstmal nach einer Gegenheit, um URLError zur reseten, damit das Programm nach dem Fehler (der im Grunde keiner ist) weiterläuft.
    Um genauer zu werden, melde ich mit Programmauszügen wieder.

    Dank für die Hilfe.
    Grüße
    Lutz

Jetzt mitmachen!

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