Adafruit_IO_Python icon indicating copy to clipboard operation
Adafruit_IO_Python copied to clipboard

Hi,

Open MarcEngrie opened this issue 5 years ago • 5 comments

Hi,

i just downloaded/installed Adafruit_IO Python (3.7.5 on Win 10) library to give it a first try on Adafruit IO platform.

used the example 'data.py', added user and key and ran it. I came across the date issue

Traceback (most recent call last): File "data.py", line 39, in aio.send_batch_data(temperature.key, data_list) File "C:\Python\lib\site-packages\Adafruit_IO\client.py", line 168, in send_batch_data self._post(path, {"data": data_dict}) File "C:\Python\lib\site-packages\Adafruit_IO\client.py", line 127, in _post self._handle_error(response) File "C:\Python\lib\site-packages\Adafruit_IO\client.py", line 108, in _handle_error raise RequestError(response) Adafruit_IO.errors.RequestError: Adafruit IO request failed: 422 Unprocessable Entity - request failed - Record invalid. Failed to save data to mengrie/feeds/temperature. data created_at may not be in the future

So it say, date is in the future. Given the fact that I live in EU (Belgium) and platform is most likely in US, I can understand this date issue but what should be used to overcome this? UTC time? Or is there another way around?

BTW: in the random_data.py there user and key from Brent are still there. :-(

MarcEngrie avatar May 26 '20 06:05 MarcEngrie

Adafruit_IO.errors.RequestError: Adafruit IO request failed: 422 Unprocessable Entity - request failed - Record invalid. Failed to save data to mengrie/feeds/temperature. data created_at may not be in the future

@MarcEngrie - Please check if your computer's system date-time is set to an accurate date-time.

brentru avatar May 26 '20 14:05 brentru

Hi Brent, yes my computer has the right time and is sync via ntp with time.windows.com (see attachment) Annotation 2020-05-26 162320

MarcEngrie avatar May 26 '20 14:05 MarcEngrie

@MarcEngrie There may be a small amount of drift between your server time and our server time. We allow no drift on created_at.

I'm going to create a patch for this issue, but you may want to try changing the data.py example from data_list = [Data(value=50, created_at=today), Data(value=33, created_at=yesterday)] to data_list = [Data(value=50), Data(value=33)]

brentru avatar Jun 02 '20 21:06 brentru

Indeed, that is working. Nut also this is working data_list = [Data(value=50), Data(value=33, created_at=yesterday)] The problem is for sure related to the 'today'-value. using today = datetime.datetime.now().isoformat() print(today) give me the exact current local date and time. Eg: 2020-06-03T18:49:36.103297 So, I change that line to today = datetime.datetime.utcnow().isoformat() print(today) an that give me a date/time 2 hours earlier Eg: 2020-06-03T16:53:47.841466 But also that fails with the same error. So there is a bit more than a drift that causes the problem. Just an idea, and not knowing how the code looks, but maybe all timestamps in Adafruit IO should be in UTC timezone to overcome these issues? Or timezone should be sent aswell to Adafruit IO so you can adjust based on timezone received and timezone of cloudserver?

MarcEngrie avatar Jun 03 '20 17:06 MarcEngrie

Just to help you out finding the right solution, I did the following now = datetime.datetime.utcnow() - timedelta(hours=4) today = now.isoformat() print(today) This will work now = datetime.datetime.utcnow() - timedelta(hours=3) today = now.isoformat() print(today) This will fail. Of course in non-utc timezone (CEST = CET summertime = UTC +2), this works as well now = datetime.datetime.now() - timedelta(hours=6) today = now.isoformat() print(today) while (of course) this fails now = datetime.datetime.now() - timedelta(hours=5) today = now.isoformat() print(today) (so cloudserver is based in East-Canada?)

MarcEngrie avatar Jun 03 '20 17:06 MarcEngrie

Unable to replicate, closing.

brentru avatar Nov 08 '23 23:11 brentru