adafruit / Adafruit_CircuitPython_ESP32SPI

ESP32 as wifi with SPI interface
MIT License
102 stars 74 forks source link

json error in get #9

Open jerryneedell opened 5 years ago

jerryneedell commented 5 years ago

I was trying to test @brentru adafruit_io library and started getting jason errors when trying to use his "get_all_feeds" function -- I then tried the same "get" just using esp32spi (via wifimanager) and get the same error so there seems to be an underlying issue in esp32spi

here is the test case

import time
import board
import busio
from digitalio import DigitalInOut

from adafruit_esp32spi import adafruit_esp32spi
from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print("ESP32 SPI webclient test")

# Get wifi details and more from a settings.py file
try:
    from esp32spi_settings import settings
except ImportError:
    print("WiFi settings are kept in esp32spi_settings.py, please add them there!")
    raise

esp32_cs = DigitalInOut(board.D9)
esp32_ready = DigitalInOut(board.D10)
esp32_reset = DigitalInOut(board.D5)
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, settings, board.NEOPIXEL)
esp._debug=True
while True:
    try:
        print("Get data...", end='')
        response = wifi.get(
            "https://io.adafruit.com/api/v2/"+settings['aio_username']+"/feeds",
            headers={bytes("X-AIO-KEY","utf-8"):bytes(settings['aio_key'],"utf-8")})
        print(response.json())
        response.close()
        print("OK")
    except (ValueError, RuntimeError) as e:
        print("Failed to get data, retrying\n", e)
        wifi.reset()
        continue
    response = None
    time.sleep(15)

here is the log -- with some repeated lines removed


Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 4.0.0-beta.2-97-g0dc260058 on 2019-02-19; Adafruit Feather nRF52840 Express with nRF52840
>>> 
>>> import aio_get_esp32spi
ESP32 SPI webclient test
Get data...Connection status
Conn status: 0
Connection status
Conn status: 0
Connect to AP b'REDACTED' b'REDACTED'
Connection status
Conn status: 1

repeated lines removed

Connection status
Conn status: 1
Connection status
Conn status: 3
Connection status
Conn status: 3
*** Get host by name
*** Get socket
Allocated socket #0
*** Socket connect mode 2
*** Open socket
Writing: b'GET /api/v2/REDACTED/feeds HTTP/1.0\r\n'
Writing: b'Host: io.adafruit.com\r\n'
Writing: b'User-Agent: Adafruit CircuitPython\r\n'
Writing: b'X-AIO-KEY'
Writing: b': '
Writing: b'REDACTED'
Writing: b'\r\n'
Writing: b'\r\n'
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available

repeated lines removed

ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 8308 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 4308 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 308 bytes available
Reading 308 bytes from ESP socket with status 4
ESPSocket: 0 bytes available
Failed to get data, retrying
 syntax error in JSON
Reset ESP32
jerryneedell commented 5 years ago

I realize the response was big - 8308 bytes -- is there a limit?

jerryneedell commented 5 years ago

hmm -- I changed "feeds" to "groups" and it works fine.

In this case there seem to be 2 responses one of 8308 byte then one of 5030 bytes and it is happy parsing the second one

SPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 8308 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 4308 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 308 bytes available
Reading 308 bytes from ESP socket with status 4
ESPSocket: 5030 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 1030 bytes available
Reading 1030 bytes from ESP socket with status 4
ESPSocket: 0 bytes available
[{'updated_at': '2019-01-28T17:51:10.944124Z',  FULL RESPONSE deleted to save space'}]
OK
makermelissa commented 5 years ago

Good question. I didn’t even realize there was a limit before you found this. I think ideally it should attempt to grab it in chunks and assemble it if that’s possible.

jerryneedell commented 5 years ago

i'm not sure there is a limit, but it looked suspicious.

ladyada commented 5 years ago

the socket/requests code should do it all for you - in chunks o' 4K - we've downloaded 250KB bitmaps so that works for sure :)

jerryneedell commented 5 years ago

so any idea what failed?

ladyada commented 5 years ago

sorry no :/ i haven't run this demo yet - perhaps in requests or esp32spi have it dump the socket buffer?

jerryneedell commented 5 years ago

OK - no problem -- I misunderstood :-) Will keep looking into it.

ladyada commented 5 years ago

np - its a mystery - and maybe i have a bug too...not sure :D also json parser may not be so great ;)

makermelissa commented 5 years ago

I can take a closer look this evening. I don’t have my computer with me at the moment.

makermelissa commented 5 years ago

Ah yeah, ok. I think @ladyada is correct about the JSON parser. This looks like the error message is syntax error in JSON, which means that it probably wan't valid JSON (this can be verified by running it through a JSON parser online). Some JSON parsers can still parse imperfect JSON, but I'm guessing ujson (the library used) is meant to be small so doesn't have really any margin of error. The thing is, there's not much we can really do in this library. Perhaps write out own parser that handles imperfect json in CP? If you want to take a look at the source of ujson, you can see it at https://github.com/adafruit/circuitpython/blob/master/extmod/modujson.c

makermelissa commented 5 years ago

As a follow-up after looking at the code, it doesn't appear to handle single quotes, or capitalized True, False, Null, etc.

makermelissa commented 5 years ago

Just noticed this in the comments which I formatted a little better.

"The JSON specification is at http://www.ietf.org/rfc/rfc4627.txt The parser here will parse any valid JSON and return the correct corresponding Python object. It allows through a superset of JSON, since it treats commas and colons as "whitespace", and doesn't care if brackets/braces are correctly paired. It will raise a ValueError if the input is outside its specs."

So yeah, it probably was outside its specs.

jerryneedell commented 5 years ago

FYI - an update -- I have been running the "cheerlights" demo for a long time (>24 hours) but I notice that it had stopped updating so I connected to the REPL and saw that it was connecting but reporting JSON syntax errors! I had not seen these with this demo before. However, rebooting the system made the problem go away - it connected and is updating normally again. That makes no sense to me... I hope to have some time to dig into this this weekend. Something fishy is going on....

xelll commented 5 years ago

the socket/requests code should do it all for you - in chunks o' 4K - we've downloaded 250KB bitmaps so that works for sure :)

did you use this esp32 firmware? https://cdn-learn.adafruit.com/assets/assets/000/071/843/original/NINA_W102_Feb_17_2018.bin?1550892535

ladyada commented 5 years ago

yep thats what we use

xelll commented 5 years ago

yep thats what we use

ok, did you test how fast is it? i test it about 160KB/s ,but not very stable.

ladyada commented 5 years ago

yes its not stable compared to a USB wifi adapter, its meant for simple microcontrollers!

xelll commented 5 years ago

yes its not stable compared to a USB wifi adapter, its meant for simple microcontrollers!

ok, how fast can it work stable.

ladyada commented 5 years ago

there's no speed relation, it is a completely different system of using the internet. really, we recommend using a USB wifi adapter if you are on linux

xelll commented 5 years ago

there's no speed relation, it is a completely different system of using the internet. really, we recommend using a USB wifi adapter if you are on linux

ok...

ladyada commented 5 years ago

@jerryneedell is this resolvedish?

jerryneedell commented 5 years ago

I think so -- At least I have not seen it in a long time -- Closing...

jerryneedell commented 5 years ago

oops -- closed too soon -- this issue is still present


Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 4.0.1-5-g63b253c33 on 2019-05-24; Adafruit PyPortal with samd51j20
>>> import aio_test
ESP32 SPI webclient test
Get data...Connection status
Conn status: 0
Connection status
Conn status: 0
Connect to AP b'Needell Airport' b'REDACTED'
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 3
Connection status
Conn status: 3
*** Get host by name
*** Get socket
Allocated socket #0
*** Socket connect mode 2
*** Open socket
Writing: b'GET /api/v2/jerryn/feeds HTTP/1.0\r\n'
Writing: b'Host: io.adafruit.com\r\n'
Writing: b'User-Agent: Adafruit CircuitPython\r\n'
Writing: b'X-AIO-KEY'
Writing: b': '
Writing: b'REDACTED'
Writing: b'\r\n'
Writing: b'\r\n'
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 15421 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 11421 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 7421 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 3421 bytes available
Reading 3421 bytes from ESP socket with status 4
ESPSocket: 0 bytes available
Failed to get data, retrying
 syntax error in JSON
Reset ESP32
Get data...Connection status
Conn status: 0
Connection status

here is the test code

import time
import board
import busio
from digitalio import DigitalInOut

from adafruit_esp32spi import adafruit_esp32spi
from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print("ESP32 SPI webclient test")

# Get wifi details and more from a settings.py file
try:
    from secrets import secrets
except ImportError:
    print("WiFi settings are kept in secrets.py, please add them there!")
    raise

esp32_cs = DigitalInOut(board.ESP_CS)
esp32_ready = DigitalInOut(board.ESP_BUSY)
esp32_reset = DigitalInOut(board.ESP_RESET)
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, None)
esp._debug=True
while True:
    try:
        print("Get data...", end='')
        response = wifi.get(
            "https://io.adafruit.com/api/v2/"+secrets['aio_username']+"/feeds",
            headers={"X-AIO-KEY":secrets['aio_key']})
        print(response.json())
        response.close()
        print("OK")
    except (ValueError, RuntimeError) as e:
        print("Failed to get data, retrying\n", e)
        wifi.reset()
        continue
    response = None
    time.sleep(15)

as before - replacing "feeds" with "groups" works OK.

jerryneedell commented 5 years ago

retested after merging #44 and it still fails as above.

also noticed that while using "groups" usually works, it does occasionally fail as well.

ladyada commented 5 years ago

what do you see when you print the text out before json parsing?

jerryneedell commented 5 years ago

I'm not sure what you are looking for... what do you want me to print out?

ladyada commented 5 years ago

response.text or somethin :)

jerryneedell commented 5 years ago

OK -- added print(response.text) before print(response.json()) it ends with

[],"feed_status_changes":[{"created_at":"2019-04-19T20:12:10Z","from_status":"online","to_status":"offline

clearly truncated full output


Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 4.0.1-5-g63b253c33 on 2019-05-24; Adafruit PyPortal with samd51j20
>>> import aio_test
ESP32 SPI webclient test
Get data...Connection status
Conn status: 0
Connection status
Conn status: 0
Connect to AP b'Needell Airport' b'browndog'
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Failed to connect, retrying
 ('No such ssid', b'Needell Airport')
Connection status
Conn status: 1
Connect to AP b'Needell Airport' b'browndog'
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 1
Connection status
Conn status: 3
Connection status
Conn status: 3
*** Get host by name
*** Get socket
Allocated socket #0
*** Socket connect mode 2
*** Open socket
Writing: b'GET /api/v2/jerryn/feeds HTTP/1.0\r\n'
Writing: b'Host: io.adafruit.com\r\n'
Writing: b'User-Agent: Adafruit CircuitPython\r\n'
Writing: b'X-AIO-KEY'
Writing: b': '
Writing: b'94cce1f27dd2caac8da3ed48571946a147be82ee'
Writing: b'\r\n'
Writing: b'\r\n'
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 0 bytes available
ESPSocket: 8324 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 4324 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 324 bytes available
Reading 324 bytes from ESP socket with status 4
ESPSocket: 16384 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 12384 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 8384 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 4384 bytes available
Reading 4000 bytes from ESP socket with status 4
ESPSocket: 384 bytes available
Reading 384 bytes from ESP socket with status 4
ESPSocket: 1514 bytes available
Reading 1514 bytes from ESP socket with status 4
ESPSocket: 0 bytes available
*** Closing socket #0
[{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":648833,"name":"pitemperature","description":"temperature from pi3-1","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"71.04937841796875","created_at":"2017-02-19T17:34:52Z","updated_at":"2019-05-29T10:22:16Z","status_notify":true,"status_timeout":60,"status":"online","key":"pitemperature","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-13T00:32:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-13T00:28:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-12T17:31:08Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-12T15:32:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-03T14:18:20Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T14:12:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":648834,"name":"pihumidity","description":"humidity from pi3-1","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"41.863006591796875","created_at":"2017-02-19T17:35:12Z","updated_at":"2019-05-29T10:22:17Z","status_notify":true,"status_timeout":60,"status":"online","key":"pihumidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-13T00:32:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-13T00:28:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-12T17:31:08Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-12T15:32:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-03T14:18:20Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T14:12:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":648872,"name":"basementtemperature","description":"DHT22 in basement","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"57.940039062500006","created_at":"2017-02-19T21:19:33Z","updated_at":"2019-05-29T10:22:48Z","status_notify":true,"status_timeout":60,"status":"online","key":"basementtemperature","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-15T06:23:20Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-14T08:44:12Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-06T23:00:21Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T19:48:10Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"},{"created_at":"2019-05-06T17:38:43Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T13:48:09Z","from_status":"online","to_status":"offline","email_sent":true,"email_sent_to":"jerryneedell@gmail.com"}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":648873,"name":"basementhumidity","description":"DHT22 in basement","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"60.3889575856284","created_at":"2017-02-19T21:19:54Z","updated_at":"2019-05-29T10:22:48Z","status_notify":false,"status_timeout":60,"status":"online","key":"basementhumidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-15T06:23:20Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-14T08:44:12Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T23:00:22Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T19:48:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T17:38:43Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T13:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":701136,"name":"eco2","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"881","created_at":"2017-08-12T20:54:38Z","updated_at":"2019-05-29T10:24:00Z","status_notify":false,"status_timeout":60,"status":"online","key":"eco2","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-12T17:32:11Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-12T15:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-02T09:36:10Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-01T17:56:11Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:55:06Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T13:52:11Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":717817,"name":"humidity","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"28.5","created_at":"2017-10-08T19:00:56Z","updated_at":"2019-02-27T21:48:09Z","status_notify":false,"status_timeout":60,"status":"offline","key":"humidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-02-27T21:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-02-27T20:02:11Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":744349,"name":"tvoc","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"275","created_at":"2017-12-27T11:14:38Z","updated_at":"2019-05-29T10:24:00Z","status_notify":false,"status_timeout":60,"status":"online","key":"tvoc","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-12T17:32:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-12T15:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-02T09:36:11Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-01T17:56:11Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:55:14Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T13:52:11Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":748434,"name":"Digital","description":"","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"0","created_at":"2018-01-07T13:22:33Z","updated_at":"2019-05-11T18:20:14Z","status_notify":false,"status_timeout":60,"status":"offline","key":"digital","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-11T18:20:14Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-11T17:16:36Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T15:00:21Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T13:58:25Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T12:52:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-06T11:50:07Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":753384,"name":"rfm69temperature","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"60","created_at":"2018-01-20T13:56:43Z","updated_at":"2019-05-29T10:17:30Z","status_notify":false,"status_timeout":60,"status":"online","key":"rfm69temperature","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-26T10:43:22Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-25T13:40:14Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-24T18:52:47Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-24T16:00:27Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-19T09:18:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-19T08:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":817882,"name":"freeheep","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"111168","created_at":"2018-06-07T10:00:54Z","updated_at":"2019-04-04T02:48:09Z","status_notify":false,"status_timeout":60,"status":"offline","key":"freeheep","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-04-04T02:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-04T01:44:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-13T13:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-13T12:29:08Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-01-29T03:48:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-01-29T02:44:45Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":824642,"name":"rfm69humidity","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"58","created_at":"2018-06-20T17:54:20Z","updated_at":"2019-05-29T10:17:30Z","status_notify":false,"status_timeout":60,"status":"online","key":"rfm69humidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-26T10:43:22Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-25T13:40:14Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-24T18:52:47Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-24T16:00:27Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-19T09:18:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-19T08:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":830701,"name":"hose","description":"button to tun on/off hose","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"OFF","created_at":"2018-07-01T14:48:38Z","updated_at":"2018-11-20T00:19:58Z","status_notify":false,"status_timeout":60,"status":"offline","key":"hose","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":841736,"name":"Counter","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"224","created_at":"2018-07-16T19:38:14Z","updated_at":"2018-12-26T15:42:26Z","status_notify":false,"status_timeout":60,"status":"offline","key":"counter","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[{"id":187,"feed_id":841736,"expire_at":null,"token":"a8FMM57fzfbXJusFhmiFiWt5E6E8","enabled":true,"active":true,"use_count":363,"data_rate_limit":null,"feed_key":"counter","hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/a8FMM57fzfbXJusFhmiFiWt5E6E8","raw_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/a8FMM57fzfbXJusFhmiFiWt5E6E8/raw","notify_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/a8FMM57fzfbXJusFhmiFiWt5E6E8/notify"}],"feed_status_changes":[]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":877499,"name":"test","description":null,"license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"8765","created_at":"2018-09-19T20:38:18Z","updated_at":"2019-04-04T02:48:09Z","status_notify":false,"status_timeout":60,"status":"offline","key":"test","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[{"id":163,"feed_id":877499,"expire_at":null,"token":"3o7zCNByWr8zsy1VcwSP53qUZxqY","enabled":true,"active":true,"use_count":3353,"data_rate_limit":null,"feed_key":"test","hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/3o7zCNByWr8zsy1VcwSP53qUZxqY","raw_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/3o7zCNByWr8zsy1VcwSP53qUZxqY/raw","notify_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/3o7zCNByWr8zsy1VcwSP53qUZxqY/notify"}],"feed_status_changes":[{"created_at":"2019-04-04T02:48:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-04T01:44:12Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-17T02:32:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-17T01:28:22Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-15T20:32:11Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-03-15T19:17:35Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":897244,"name":"ttntemperature","description":"","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"67.4638671875","created_at":"2018-10-23T11:13:23Z","updated_at":"2019-05-29T10:22:14Z","status_notify":false,"status_timeout":60,"status":"online","key":"ttntemperature","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-05-10T14:50:23Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T14:00:21Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T12:48:57Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-09T09:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-07T13:33:45Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-07T07:20:14Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":897326,"name":"ttnhumidity","description":"","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"42.2119140625","created_at":"2018-10-23T13:46:49Z","updated_at":"2019-05-29T10:22:14Z","status_notify":false,"status_timeout":60,"status":"online","key":"ttnhumidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[{"id":756,"feed_id":897326,"expire_at":null,"token":"qDQJJjY2J5dKk8sLtu2RawgKpt8L","enabled":true,"active":true,"use_count":null,"data_rate_limit":null,"feed_key":"ttnhumidity","hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/qDQJJjY2J5dKk8sLtu2RawgKpt8L","raw_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/qDQJJjY2J5dKk8sLtu2RawgKpt8L/raw","notify_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/qDQJJjY2J5dKk8sLtu2RawgKpt8L/notify"}],"feed_status_changes":[{"created_at":"2019-05-10T14:50:23Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T14:00:21Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T12:48:57Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-09T09:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-07T13:33:39Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-07T07:20:14Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":955056,"name":"argon_temperature","description":"temperature from particle Argon","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"70.4053","created_at":"2018-12-29T21:35:55Z","updated_at":"2019-05-29T10:23:02Z","status_notify":false,"status_timeout":60,"status":"online","key":"argon-temperature","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[{"id":221,"feed_id":955056,"expire_at":null,"token":"cpnHhNy5XjP6okCXhdY2HBm2qqC6","enabled":true,"active":true,"use_count":21932,"data_rate_limit":null,"feed_key":"argon-temperature","hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/cpnHhNy5XjP6okCXhdY2HBm2qqC6","raw_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/cpnHhNy5XjP6okCXhdY2HBm2qqC6/raw","notify_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/cpnHhNy5XjP6okCXhdY2HBm2qqC6/notify"}],"feed_status_changes":[{"created_at":"2019-05-10T20:21:33Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T13:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T10:49:11Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T07:48:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:55:19Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:28:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":955057,"name":"argon_humidity","description":"humidity from particle argon","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"46.5607","created_at":"2018-12-29T21:36:24Z","updated_at":"2019-05-29T10:23:21Z","status_notify":false,"status_timeout":60,"status":"online","key":"argon-humidity","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[{"id":220,"feed_id":955057,"expire_at":null,"token":"P3Uz35jg6dqL5CKrAgFSWDoYppUt","enabled":true,"active":true,"use_count":21819,"data_rate_limit":null,"feed_key":"argon-humidity","hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/P3Uz35jg6dqL5CKrAgFSWDoYppUt","raw_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/P3Uz35jg6dqL5CKrAgFSWDoYppUt/raw","notify_hook_url":"https://io.adafruit.com/api/v2/webhooks/feed/P3Uz35jg6dqL5CKrAgFSWDoYppUt/notify"}],"feed_status_changes":[{"created_at":"2019-05-10T20:21:54Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-10T13:32:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T10:49:32Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-05-03T07:48:10Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:55:39Z","from_status":"offline","to_status":"online","email_sent":null,"email_sent_to":null},{"created_at":"2019-04-20T16:28:09Z","from_status":"online","to_status":"offline","email_sent":null,"email_sent_to":null}]},{"username":"jerryn","owner":{"id":20772,"username":"jerryn"},"id":977746,"name":"rfm69vbat","description":"battery monitor for rfm69","license":null,"history":true,"enabled":true,"visibility":"private","unit_type":null,"unit_symbol":null,"last_value":"0","created_at":"2019-01-28T17:51:10Z","updated_at":"2019-04-19T20:12:10Z","status_notify":false,"status_timeout":4320,"status":"offline","key":"rfm69vbat","group":{"id":110425,"key":"default","name":"Default","user_id":20772},"groups":[{"id":110425,"key":"default","name":"Default","user_id":20772}],"feed_webhook_receivers":[],"feed_status_changes":[{"created_at":"2019-04-19T20:12:10Z","from_status":"online","to_status":"offline
Failed to get data, retrying
 syntax error in JSON
Reset ESP32
Get data...Connection status
Conn status: 0
Connection status
ladyada commented 5 years ago

yeah looks like its incomplete - dunno why tho

kattni commented 4 years ago

@jerryneedell Have you made any progress on this?

us3r64 commented 9 months ago

@ladyada it might be related to this: https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI/issues/184