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

IP-based time using io.receive_time() returning UTC #95

Open
kattni opened this issue Nov 28, 2022 · 2 comments
Open

IP-based time using io.receive_time() returning UTC #95

kattni opened this issue Nov 28, 2022 · 2 comments

Comments

@kattni
Copy link
Contributor

kattni commented Nov 28, 2022

The AdafruitIO library does not provide the option to provide the tz parameter to specify timezone, which is the first thing IO looks for to return a time when using io.receive_time().

The second thing IO tries is "guessing" your timezone based on your IP address. This does not appear to be working; it is instead defaulting to UTC.

The final thing IO does is return UTC, which as said above, is happening regardless.

I tested it on a Feather ESP32-S3 TFT board, using CircuitPython 8.0.0-beta.4 and this library. I get UTC from io.receive_time(), every time.

cc: @brentru @lorennorman @jwcooper

That said, in my project code, I received a workaround for this issue from @jepler in the form of a class in my code. This really only helps if you want to make a workaround in this library, versus fixing the feature in IO itself. But I thought it was worth including either way.

class TZIO(IO_HTTP):
    def receive_time(self, tz='UTC'):
        """
        Returns a struct_time from the Adafruit IO Server based on the time zone
.
        https://circuitpython.readthedocs.io/en/latest/shared-bindings/time/__init__.html#time.struct_time
        """
        path = self._compose_path("integrations/time/struct.json?tz={}".format(tz))
        time_struct = self._get(path)
        return time.struct_time(
            (
                time_struct["year"],
                time_struct["mon"],
                time_struct["mday"],
                time_struct["hour"],
                time_struct["min"],
                time_struct["sec"],
                time_struct["wday"],
                time_struct["yday"],
                time_struct["isdst"],
            )
        )

Which is used when instantiating the io object as follows:

io = TZIO(AIO_USER, AIO_KEY, requests)
@kattni
Copy link
Contributor Author

kattni commented Nov 28, 2022

So..... I checked it again, and io.receive_time() is returning ET, which is accurate for me. Not sure what to make of that. It was definitely not working last Wednesday for myself, or Liz (which is to say it wasn't a me-issue).

I'm leaving this open in case it's an intermittent bug. Feel free to close it if you think it was a glitch.

@caternuson
Copy link

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