I guess I was wrong! I find it hard to believe that the Python socket.io library is incapable of handling such a simple case. The problem must be some combination of getting the base host, api endpoint, and parameters right.
-tk On Thu, Aug 16, 2018 at 8:34 AM Pat <p...@obrienphoto.net> wrote: > I tried that too and couldn't get it to work. Forgot to mention that. > > Trying it a couple of different ways again, I get the apiKey is missing: > > with SocketIO(' > https://api.ambientweather.net/v1/devices?applicationKey=YOUR_APP_KEY&apiKey=YOUR_API_KEY', > 443, LoggingNamespace, verify=False ) as socketIO: > socketIO.on('connect', on_connect) > > /usr/local/lib/python2.7/dist-packages/urllib3/connectionpool.py:857: > InsecureRequestWarning: Unverified HTTPS request is being made. Adding > certificate verification is strongly advised. See: https:// > urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings > InsecureRequestWarning) > > WARNING:socketIO-client:api.ambientweather.net:443/v1/devices/socket.io [ > engine.io waiting for connection] unexpected status code (401 {"error": > "apiKey-missing"}) > > Or the 404 again > > SocketIO( > 'https://api.ambientweather.net/v1/devices/YOUR_MAC_ADDR', 443, > LoggingNamespace, > verify=False, > params={'apiKey': 'YOUR_API_KEY', 'applicationKey': 'YOUR_APP_KEY' }) > > > /usr/local/lib/python2.7/dist-packages/urllib3/connectionpool.py:857: > InsecureRequestWarning: Unverified HTTPS request is being made. Adding > certificate verification is strongly advised. See: https:// > urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings > InsecureRequestWarning) > > WARNING:socketIO-client:api.ambientweather.net:443/v1/devices/ > YOUR_MAC_ADDR/socket.io [engine.io waiting for connection] unexpected > status code (404 {"name":"NotFound","message":"Page not found","code":404, > "className":"not-found","errors":{}}) > > Pat > > > > > On Thursday, August 16, 2018 at 11:24:00 AM UTC-4, Thomas Keffer wrote: >> >> I'm betting this is a ssl certificate problem. Try setting verify=False. >> >> -tk >> >> On Thu, Aug 16, 2018 at 8:15 AM Pat <p...@obrienphoto.net> wrote: >> >>> I'm still thinking about this, and since I can't get the socket.io real >>> time stream >>> <https://ambientweather.docs.apiary.io/#reference/ambient-realtime-api> >>> to work in Python, I thought about using a timer to poll the endpoint. >>> However it looks like they only update the endpoint every 5 minutes. I'm >>> thinking that's not really a good option since you probably want real time >>> loop data, and not a 5 minute archive. >>> >>> Since it seems to be working with node, and you're familiar with node, >>> maybe that's your best bet right now to get the real time updates out of >>> AW? >>> >>> >>> >>> Since you're a customer of AW, you could also email them asking for >>> Python help with the real time endpoint >>> <https://ambientweather.docs.apiary.io/#reference/ambient-realtime-api> >>> and see what they say. Their API docs >>> <https://ambientweather.docs.apiary.io/#reference/ambient-realtime-api> >>> say "The easiest way to use the API is to use a Socket.io helper library. >>> They are available in most languages.", but when I use their endpoint with >>> a Python helper library all I get is a 404. >>> >>> Here's the code from sockerIO_client's sample code >>> <https://pypi.org/project/socketIO-client/>. Nothing fancy here yet, >>> just trying to connect, and it doesn't. >>> >>> After doing sudo pip install socketIO_client >>> >>> I ran this code >>> >>> import logging >>> logging.getLogger('socketIO-client').setLevel(logging.DEBUG) >>> logging.basicConfig() >>> >>> >>> from socketIO_client import SocketIO, LoggingNamespace >>> >>> >>> def on_connect(): >>> print('connect') >>> >>> >>> with SocketIO(' >>> https://api.ambientweather.net/?api=1&applicationKey=YOUR_APPLICATION_KEY >>> ', 443, LoggingNamespace ) as socketIO: >>> socketIO.on('connect', on_connect) >>> >>> >>> which outputs: >>> >>> WARNING:socketIO-client:api.ambientweather.net:443//socket.io [engine.io >>> waiting for connection] unexpected status code (404 >>> {"name":"NotFound","message":"Page not >>> found","code":404,"className":"not-found","errors":{}}) >>> >>> Adding your API Key to that HTTPS endpoint: >>> >>> with SocketIO(' >>> https://api.ambientweather.net/v1/devices?applicationKey=YOUR_APPLICATION_KEY&apiKey=YOUR_API_KEY >>> ', 443, LoggingNamespace ) as socketIO: >>> socketIO.on('connect', on_connect) >>> >>> gave me: >>> >>> WARNING:socketIO-client:api.ambientweather.net:443/v1/devices/socket.io >>> [engine.io waiting for connection] unexpected status code (401 {"error": >>> "apiKey-missing"}) >>> >>> But the API key isn't missing, it's in the string :) >>> >>> >>> >>> Or if I did something even different (again from the examples >>> <https://pypi.org/project/socketIO-client/>) >>> >>> SocketIO( >>> 'https://api.ambientweather.net/v1/devices/YOUR_MAC_ADDRESS', 443, >>> LoggingNamespace, >>> params={'apiKey': 'YOUR_API_KEY', 'applicationKey': >>> 'YOUR_APPLICATION_KEY' }) >>> >>> I get >>> >>> WARNING:socketIO-client:api.ambientweather.net:443/v1/devices/ >>> YOUR_MAC_ADDRESS/socket.io [engine.io waiting for connection] >>> unexpected status code (404 {"name":"NotFound","message":"Page not >>> found","code":404,"className":"not-found","errors":{}}) >>> >>> >>> >>> >>> >>> However, if I go to an online socket.io test tool >>> <https://amritb.github.io/socketio-client-tool/>, and enter in your >>> real time endpoint, it connects just fine. This is farther than Python is >>> letting me get. >>> >>> [image: socketio.png] >>> Again, not sure where to go from here. Maybe Node is your best bet. But >>> also maybe the information above is enough info to get help from them if >>> you do end up reaching out to them? >>> >>> >>> >>> >>> On Wednesday, August 15, 2018 at 9:04:34 AM UTC-4, Pat wrote: >>>> >>>> No, those are using sockets like how you and I think sockets are. I'm >>>> familiar with traditional sockets (my SocketLogger driver, and I forked the >>>> meteostick driver to use sockets).... and I'm familiar with websockets, but >>>> this is using socket.io which is a websocket, but not a normal >>>> websocket apparently. It's designed to support old browsers so they use a >>>> bit of a custom algo to make it happen. >>>> >>>> Since AW is using https and not wss, only the socketIO-client Python >>>> lib will work, but when trying to connect to the endpoint it gives a 404. >>>> But using the same endpoint on an online JavaScript socket.io test >>>> tool, its a success. Could be a limitation with the lib. >>>> >>>> The AW socket.io endpoint is for the real-time streaming data from >>>> AmbientWeather. Perhaps plan B is to implement a time.sleep() in the >>>> driver and just request data every 10 seconds (or something) and submit to >>>> the loop. Downside could be duplicate timestamps, unless the weewx loop >>>> already allocates for that? Which could be a non-issue. >>>> >>>> >>>> On Tuesday, August 14, 2018 at 11:39:10 PM UTC-4, gjr80 wrote: >>>>> >>>>> So nothing in the vantage or ws1 drivers or restx.py to help? >>>>> >>>>> Gary >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "weewx-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to weewx-user+...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- > You received this message because you are subscribed to the Google Groups > "weewx-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to weewx-user+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.