Socket Fehlermeldung bei Umstellung von Python auf Micropython

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
holgie
User
Beiträge: 12
Registriert: Sonntag 18. Januar 2015, 16:55

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()
Benutzeravatar
sparrow
User
Beiträge: 4394
Registriert: Freitag 17. April 2009, 10:28

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.
holgie
User
Beiträge: 12
Registriert: Sonntag 18. Januar 2015, 16:55

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Laut Doku soll man getaddrinfo benutzen. https://docs.micropython.org/en/latest/ ... s-format-s
Benutzeravatar
__blackjack__
User
Beiträge: 13680
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
    )
„Incorrect documentation is often worse than no documentation.“ — Bertrand Meyer
Antworten