I have asked weewx group in Google Groups. Here is the response, 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.
I have not tried it as we got a strong storm though here and killed my weather 2 board. Yes it was in a sealed case and mounted. But it got hit hard enough that it hit a big old maple tree and broke open the case.