2017-10-25 3 views
0

Ich versuche Benachrichtigungen auf meinem (Android) mobilen Gerät von einem ESP8266 MCU mit MicroPython zu erhalten. Aus diesem Grund habe ich einige Online-Dienste abonniert, die einige APIs für diese Aufgabe, Pushbullet und Pushed, offen legen, und ich habe die passenden Apps auf meinem Gerät installiert.MicroPython urequests.post Fehler

Das ist, was ich versuche:

Pushbullet:

import json 
import urequests 

body = "Test Notification" 
title = "Pushbullet" 
data_sent = {"type": "note", "title": title, "body": body} 
API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx' 

pb_headers = { 
    'Authorization': 'Bearer ' + API_KEY, 
    'Content-Type': 'application/json' 
} 

r = urequests.post(
    'https://api.pushbullet.com/v2/pushes', 
    data=json.dumps(data_sent), 
    headers=pb_headers 
) 

print(r) 

Fehler:

ssl_handshake_status: -256 
Traceback (most recent call last): 
    File "<stdin>", line 11, in <module> 
    File "urequests.py", line 104, in post 
    File "urequests.py", line 56, in request 
OSError: [Errno 5] EIO 

Pushed:

import json 
import urequests 

payload = { 
    "app_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "app_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "target_type": "app", 
    "content": "Remote Mic MCU test from ESP8266" 
} 

r = urequests.post("https://api.pushed.co/1/push", data=payload) 
print(r) 

Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 8, in <module> 
    File "urequests.py", line 104, in post 
    File "urequests.py", line 74, in request 
TypeError: object with buffer protocol required 

Die Suche nach diesen Fehlern bringt mich nirgends nützlich.

Die exakt gleichen Code-Schnipsel funktionieren auf meiner Linux-Box (mit requests anstelle von urequests), aber ich verstehe, dass urequests einige Einschränkungen haben kann.

Haben Sie Hinweise, wie Sie das beheben können?

Antwort

0

Die Ausnahmebedingungsnachricht schlägt vor, dass Sie den Datentyp übergeben, der urequests nicht erwartet. Aus meiner Kenntnis der Funktionsweise von HTTP POST (siehe HTTP-Standard) weiß ich, dass es Oktettstream akzeptiert, der in Python durch den Typ str oder bytes dargestellt wird. Während du ein Wörterbuch passierst. `

+0

Nach dem, was ich im Micropython-Forum beantwortet habe, gilt dies für das" Pushed "-Beispiel (aber ich habe immer noch keine Lösung dafür versucht), während für das" Pushbullet "-Snippet ich hat erfolgreich eine Benachrichtigung gesendet, die zu einem täglichen Build von Micropython und 'urequests' Modul aktualisiert, wie vorgeschlagen @ https://github.com/micropython/micropython/issues/3389 – dentex