Seite 1 von 1
Internetverbindung
Verfasst: Montag 27. Mai 2013, 10:17
von RudelGurken
Hi,
also ich betreibe eine Kombination zwischen Raspberry Pi und einem Arduino. Der Arduino sendet in regelmäßigen Abständen Sensordaten an mein RasPi, welcher diese Informationen an ein php Script auf meinem Server schicken soll. Dafür versuche ich ein Post-Request abzusetzen, was mir leider nicht so ganz gelingt. Die Fehlermeldung plobt leider nur kurz auf: irgendetwas mit Response und Ready.
Vielleicht fällt der Fehler ja auch schon beim Blick auf den Programmcode auf:
Code: Alles auswählen
import serial
import urllib
print "Sensorprogramm gestartet"
ser = serial.Serial('/dev/ttyUSB0',115200)
while True:
t1 = ser.readline()
t2 = ser.readline()
params = urllib.urlencode({'temp1':t1,'temp2':t2})
f = urllib.urlopen("www.example.com/input.php',params)
f.close()
Vielen Dank für eure Hilfbereitschaft
Georg
Re: Internetverbindung
Verfasst: Montag 27. Mai 2013, 11:37
von Sirius3
wenn Dein Port 443 ist, dann willst Du wahrscheinlich HTTPS??
Re: Internetverbindung
Verfasst: Montag 27. Mai 2013, 11:56
von EyDu
Wie startest du denn dein Programm, dass du den Fehler nur kurz siehst? Aus einem Terminal heraus sollte die nicht verschwinden. Ansonsten wird ein Programm spätestens in Zeile 7 abschmieren, da i nicht bekannt ist (Hinweis: itertools.count).
Re: Internetverbindung
Verfasst: Montag 27. Mai 2013, 12:04
von RudelGurken
Nein, "i" ist bekannt, sorry, habe lediglich vergessen diese Zeile abzutippen.
Ich starte das Programm über die Shell und versuche es gerade mit der IDLE-Umgebung. Da steht dann:
Code: Alles auswählen
Traceback (most recent call las)
File "..../sensor.py" line 29, in <module>
content = connection.getresponse()
File ".../httplib.py" line 1022, in getresponse
raise ResponseNotReady
ResponseNotReady
Der Fehler ist identisch, selbst wenn ich den Port weglasse.
vielen Dank
Re: Internetverbindung
Verfasst: Montag 27. Mai 2013, 12:25
von EyDu
Wie oft wird die Schleife denn durchlaufen, bzw. in welchem Durchlauf befindet sich die Schleife, wenn das Programm abgebrochen wird? Vielleicht machen die ungeschlossenen Verbindungen irgendwann Probleme.
Re: Internetverbindung
Verfasst: Montag 27. Mai 2013, 12:30
von RudelGurken
Gleich beim ersten Durchlauf, erst werden die Sensorwerte ausgegeben (obiger Quellcode ist jetzt absolut komplett) und dann kommt der Error.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 01:22
von Leonidas
Obriger Quelltext ist immer noch inkorrekt wie man am Syntax-Highlighting sieht. Warum kopierst du das nicht direkt vom Pi, statt das immer fehlerbehaftet abzuschreiben? Das ist doch Quatsch das so zu machen.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 06:41
von Drache
ersetze doch mal "
www.example.com" durch die ip Adresse des raspberry pi.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 08:09
von BlackJack
@Drache: Das würde keinen Sinn machen, denn das example.com steht ja für einen Server zu dem die Daten vom Raspi aus versendet werden sollen. Der hat die Messwerte ja schon und will sie nicht zu sich selbst senden.
@RudelGurken: Ich schliesse mich Leonidas an: Zeig den tatsächlichen Quelltext und schreib ihn nicht ab, sondern kopiere ihn.
Das der Quelltext im ersten Beitrag immer noch nicht der tatsächliche sein kann, sieht man doch ziemlich deutlich am Syntax-Highlighting. Nach der ``connection.request(…``-Zeile gehört alles zu einem Zeichenkettenliteral welches nicht beendet wird.
Anstelle von `httplib` und `urllib` würde ich das `requests`-Modul empfehlen. Das muss man zwar zusätzlich installieren, aber es stellt eine wesentlich schönere API zur Verfügung und hat ausser der Standardbibliothek keine weiteren Abhängigkeiten.
Ich verstehe den Umstand mit dem `i` in der Schleife auch nicht so wirklich. Wenn Du die beiden Werte nacheinande von der seriellen Verbindung lesen willst, dann mach das doch einfach. Also einfach zwei `readline()`-Aufrufe hintereinander ausführen. Nichts anderes passiert jetzt ja auch, nur halt deutlich umständlicher.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 10:39
von RudelGurken
Hi, vielen Dank für die Antwort.
Ich kann nicht ohne weiteres auf den RasPi zugreifen, wodurch ich den Quellcode nicht einfach kopieren kann. Ich arbeite nun lediglich mit urllib und habe es hinbekommen. Als nächstes schaue ich mir einfach mal die request-Bibliothek an, vielleicht ist das ja noch einfacher.
Zum i:
wenn i=1 dann ist das Sensor1
wenn i=2 dann ist das Sensor2
nur so kann ich die Werte als Einheit abschicken, sprich, wenn alle Werte zusammen sind (hier 2) kann der Request abgesendet werden.
mfg
RudelGurken
Ich habe meinen funktionstüchtigen Code jetzt oben eingetragen-wieder von Hand.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 11:14
von RudelGurken
Ich weiß es ist ätzend jemandem zu helfen, der sich mit Python nicht so richtig auskennt, dennoch würde ich gerne noch ein Image-File als Post mit übergeben. Wie realisiere ich das am besten, wonach muss ich da gezielt suchen?
mfg
Gurke
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 11:17
von BlackJack
@RudelGurken: Der Quelltext ist immer noch falsch, und zwar syntaktisch. Und TRUE würde immer noch zu einem `NameError` führen.
Offensichtlich hat der Raspi ja eine Internetverbindung, also musst Du doch da auch drauf zugreifen können, zum Beispiel mit SSH und/oder Daten kopieren mit SCP.
Zum `i`: Das verstehe ich nicht. Wieso kannst Du nicht erst den einen Wert abfragen und dann den anderen und dann beide schicken, ohne dieses unnötige zählen und testen mit dem `i`? Es gibt echt keinen Grund in dem Quelltext warum man das so kompliziert machen müsste.
Was meinst Du mit Image-File? Ein Bild? Das müsstest Du irgendwo anders hochladen wo man drauf verlinken kann, und dann einen Link darauf mit dem Img-Tag setzen.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 11:17
von Kebap
Anscheinend kann man i komplett weglassen, ohne die Logik zu verändern:
Code: Alles auswählen
while True:
x=ser.readline()
t1 = x
print t1
x=ser.readline()
t2 = x
print t2
params = urllib.urlencode({'temp1':t1,'temp2':t2})
f = urllib.urlopen("www.example.com/input.php',params)
f.close()
x könnte man auch noch weglassen, das überlasse ich dem geneigten Leser.
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 12:02
von RudelGurken
Okay, das mit dem i stimmt, habe ich behoben und es funktioniert super. Danke, kann ein jpeg-Bild nicht auch irgendwie per Post mitgeben? Indem ich diedatei einlese und das Objekt dann mit schicke?
mfg
Gurke
Re: Internetverbindung
Verfasst: Dienstag 28. Mai 2013, 12:16
von Leonidas
Nutz ``requests`` wie BlackJack sagte, dann funktioniert das übergeben von JPEG-Daten (oder irgendwelchen anderen) auch einfach.
Und wenn du keinen Zugriff auf den Raspberry Pi hast, wie programmierst du ihn dann? Ich glaube du übersiehst dass es durchaus Möglichkeiten gibt den Quelltext zu übertragen.