@pat Have you gotten any further with this? Really disappointed to see that 
no one from Ambient Weather has chimed in or even sent me an email to say 
that they won't for [insert reasons here].

On Thursday, August 16, 2018 at 12:54:50 PM UTC-4, Pat wrote:
>
> That's my thought is trying to find the right combination. The 
> documentation isn't exactly complete, but looking at the "supported" node 
> library they reference, it shows the URL they are using. But they explicitly 
> define websockets there too 
> <https://github.com/owise1/ambient-weather-api/blob/master/src/index.js#L77>
> . 
>
> There's a way to get socket.io to fallback onto websockets 
> <https://stackoverflow.com/a/7586302/1177153> where you can use wss, but 
> I haven't figured that bit out yet with AW.
>
>
>
> On Thursday, August 16, 2018 at 11:47:49 AM UTC-4, Thomas Keffer wrote:
>>
>> 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+...@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.

Reply via email to