Aus Oxoscript wird NanoPy - mehr Infos

Netzwerk-Funktionen

postRequest

  postRequest(url:byte[], body:byte[])->bool

Für diese Funktion muss die Karte mit dem Internet verbunden sein.

Sendet eine POST-Anfrage an die definierte URL.
Die Funktion gibt true zurück, falls die Anfrage erfolgreich war (200 OK).

Beispiel:

# Toggle Shelly relay
url = "http://192.168.42.146/relay/0"
body = "turn=toggle"
def onDraw():
    if getButton():
        postRequest(url, body)
        while(getButton()): delay(50)
    delay(50)

readRequestJSON

  readRequestJSON(jsonPath:byte[])->byte[128]

Gibt den Inhalt einer JSON-Antwort als Text (max. 128 Bytes) der vorher mit getRequest() angeforderten Anfrage zurück.

Mit jsonPath kann der zu lesende Key definiert werden.
Mit ‘.’ oder ‘/’ können auch verschachtelte JSON Objekte ausgewählt werden.

Beispiel1:

url = "http://api.nanopy.io/v1/utc"
getRequest(url) # {"utc":1667912328}
drawText(10, 10, readRequestJSON("utc"))
update()

Beispiel2:

# {
#   "myObj": {
#     "mySubObj": {
#       "myArray": [
#         {"myKey":111},
#         {"myKey":222},
#         {"myKey":333}
#       ],
#     }
#   }
# }
readRequestJSON("myObj.mySubObj.myArray.0.myKey") # "111"
readRequestJSON("myObj/mySubObj/myArray/2/myKey") # "333"

Beachte:
readRequestJSON() gibt immer einen String (byte[]) zurück. Mit den stringTo…()-Funktionen kann das Resultat dann in den passenden Datentyp umgewandelt werden.

readRequest

  readRequest(offset:int)->byte[128]

Gibt den Text (max. 128 Bytes) der vorher mit getRequest() angeforderten Anfrage zurück.

Mit offset kann die Startposition definiert werden, die bestimmt ab wo die Antwort gelesen werden soll.
Damit lassen ich auch längere Antworten in mehreren Schritten lesen.

Beispiel:

url = "http://api.nanopy.io/v1/hello_world"
getRequest(url)
drawText(10, 10, readRequest(0))
drawText(10, 50, readRequest(6))
update()

Beachte:
Falls ein eigener Server verwendet und plain-Text zurückgeben werden möchte, muss zwingend auch die ‘Content-Length’ im header definiert werden.

readRequestLength

  readRequestLength()->int

Gibt die länge (in Bytes) der vorher mit getRequest() angeforderten Anfrage zurück.

getRequest

  getRequest(url:byte[])->bool

Für diese Funktion muss die Karte mit dem Internet verbunden sein.

Sendet eine GET-Anfrage an die definierte URL.
Die Funktion gibt true zurück, falls die Anfrage erfolgreich war (200 OK).

Die angefragten Daten können anschliessend mit den folgenden Funktionen gelsen werden:

readRequestLength()
readRequest(offset)
readRequestJSON(jsonPath)

Beispiel:

url = "http://api.nanopy.io/v1/utc"
if (getRequest(url)):
    utc = readRequestJSON("utc")
    drawText(10, 10, stringToInt(utc))
else:
    drawText(10, 10, "error")
update()

Limitierungen:
- Es können maximal 8k Bytes angefrag werden. Längere Antworten werden abgeschnitten - https-Anfragen werden nicht unterstützt