Seite 1 von 1

Socket Fehlermeldung bei Umstellung von Python auf Micropython

Verfasst: Sonntag 25. Februar 2024, 20:40
von holgie
Hallo zusammen,
ich habe mit meinem Raspberry Pi mit Python Daten eingelesen und diese in eine Datenbank ins Internet übertragen. Unten ein Codeausschnitt. Ich wollte dieses Programm, welches einwandfrei funktioniert, nun auf einen Raspberry Pico W in Micropython übernehmen. Leider bekomme ich in Micropython eine Fehlermeldung:
ValueError: invalid arguments bei s.connect ((host, port))
Ich verstehe nicht was da falsch ist.
Wäre super wenn jemand helfen könnte oder einen Beispielcode zur Verfügung stellen könnte.
Danke vorab!!
Gruß
Holger


import socket
host = "holgeris.atwebpages.com"
port = 80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
request = "GET /insert.php?x=" + str(x) + "&y=" + str(y) + "&spannung="+str(spannung) + "&drehzahlwindrad=" + str(drehzahlwindrad) +"&leistung="+str(leistung) + \
" HTTP/1.1\r\nHost: " + host + "\r\n\r\n"
s.send(request.encode())
s.shutdown(1)
s.close()

Re: Socket Fehlermeldung bei Umstellung von Python auf Micropython

Verfasst: Sonntag 25. Februar 2024, 20:50
von sparrow
MicroPython ist nicht Python. Und es behauptet auch nicht, dass es sich eben so verwenden lässt.
Was sagt denn die Dokumentation von MicroPython, wie der korrekte Aufruf von .connect() aussieht? Es scheint laut der Fehlermeldung ja kein Tuple aus Host und Port zu sein.

Re: Socket Fehlermeldung bei Umstellung von Python auf Micropython

Verfasst: Sonntag 25. Februar 2024, 22:47
von holgie
OK, das Format host="holgeris.atwebpages.com" akzeptiert Micropython nicht. Es muss als IP Adresse angegeben werden. Hoffe das ich die noch irgendwie herausfinde. Ansonsten melde ich mich wieder.
Danke erstmal.
Gruß
Holger

Re: Socket Fehlermeldung bei Umstellung von Python auf Micropython

Verfasst: Sonntag 25. Februar 2024, 23:13
von __deets__
Laut Doku soll man getaddrinfo benutzen. https://docs.micropython.org/en/latest/ ... s-format-s

Re: Socket Fehlermeldung bei Umstellung von Python auf Micropython

Verfasst: Mittwoch 28. Februar 2024, 13:40
von __blackjack__
Randbemerkung: MicroPython kann f-Zeichenkettenliterale. Das ist übersichtlicher und wahrscheinlich auch effizienter als da immer einzelne Zeichenketten und Werte mit `str()` und ``+`` zusammenzustückeln. Und literale Zeichenketten kann man einfach durch Zeilenumbrüche trennen, da braucht man keine \-Zeilenfortsetzung.

Code: Alles auswählen

    s.send(
        f"GET /insert.php?x={x}&y={y}&spannung={spannung}"
        f"&drehzahlwindrad={drehzahlwindrad}&leistung={leistung} HTTP/1.1\r\n"
        f"Host: {host}\r\n\r\n".encode()
    )