On Wednesday, August 14, 2019 at 7:25:13 AM UTC-4, Chester L. Garrett IV 
wrote:
>
> Could someone point me in the right direction to get OurWeather by Switch 
> Doc to work with WeeWx.


just write a weewx driver that makes a periodic request for the 
'FullDataString' URL.  parse the response and emit it as LOOP data.  that's 
it!

the code will look something like this (error handling is left as an 
exercise to the reader :)

put this code into the file ourweather.py in the 'user' directory of your 
weewx installation:

#!/usr/bin/python
import urllib2
import json
import time

import weewx.drivers

DRIVER_NAME = 'OurWeather'
DRIVER_VERSION = "0.1"

def loader(config_dict, engine):
    return OurWeatherDriver(**config_dict[DRIVER_NAME])

class OurWeatherDriver(weewx.drivers.AbstractDevice):

    def __init__(self, **stn_dict):
        # where to find the data
        self.path = stn_dict.get('host', '192.168.0.10')
        # how often to poll the weather data file, seconds
        self.poll_interval = float(stn_dict.get('poll_interval', 10))

    def genLoopPackets(self):
        """request the 'full data string' then parse it.  a 'full data 
string' looks like this:
{"FullDataString":
"21.30,36.70,25.63,101714.00,620.44,0.00,0.00,0.00,0.70,0.00,0.00,0.00,0.00,0.00,0.00,0,04/2
4/2016 11:56:10,SwitchDoc Labs", "id": "1", "name": "OurWeather", 
"connected": true}
        """
        while True:
            url = "http://%s/FullDataString' % self.host
            req = urllib2.Request(url=url)
            resp = urllib2.urlopen(req).read()
            resp_json = json.loads(resp)
            parts = resp_json['FullDataString']
            _packet = {
                'dateTime': int(time.time() + 0.5),
                'usUnits': weewx.US,
                'outTemp': parts[0],
                'outHumidity': parts[1],
                # FIXME: fill in the rest of the data here
            }
            yield _packet
            time.sleep(self.poll_interval)

    @property
    def hardware_name(self):
        return "OurWeather"

# To test this driver, run it directly as follows:
#   PYTHONPATH=/home/weewx/bin python /home/weewx/bin/user/ourweather.py
if __name__ == "__main__":
    import weeutil.weeutil
    driver = OurWeatherDriver()
    for packet in driver.genLoopPackets():
        print weeutil.weeutil.timestamp_to_string(packet['dateTime']), 
packet

then add a stanza to your weewx.conf file:

[OurWeather]
    # ip address or hostname of the weather station
    host = 192.168.5.3
    driver = user.ourweather

and tell weewx to use that driver by modifying the 'station_type' field in 
the 'Station' stanza:

[Station]
    ...
    station_type = OurWeather

you should run weewx directly until you fix the bugs.  that way you will 
see data immediately.  after you get to that point you can run weewx as a 
service/daemon.

for more details, see the customization guide, or any one of the many, many 
extensions to weewx that are listed in the wiki.

m

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/d0596216-5893-41bb-880b-a1eff9d281f3%40googlegroups.com.

Reply via email to