Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hi, #113

Closed
MarcEngrie opened this issue May 26, 2020 · 6 comments
Closed

Hi, #113

MarcEngrie opened this issue May 26, 2020 · 6 comments

Comments

@MarcEngrie
Copy link

MarcEngrie commented May 26, 2020

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. :-(

@brentru
Copy link
Member

brentru commented May 26, 2020

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.

@MarcEngrie
Copy link
Author

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

@brentru
Copy link
Member

brentru commented Jun 2, 2020

@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)]

@MarcEngrie
Copy link
Author

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
Copy link
Author

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?)

@brentru
Copy link
Member

brentru commented Nov 8, 2023

Unable to replicate, closing.

@brentru brentru closed this as completed Nov 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants