Tom, I use the wxMesh driver but I think your demo code is imlemented in that way you posted:
#!/usr/bin/python # # weewx driver that reads data from MQTT subscription # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation, either version 3 of the License, or any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. # # See http://www.gnu.org/licenses/ # # The units must be weewx.US: # degree_F, inHg, inch, inch_per_hour, mile_per_hour # # To use this driver, put this file in the weewx user directory, then make # the following changes to weewx.conf: # # [Station] # station_type = wxMesh # [wxMesh] # host = localhost # MQTT broker hostname # topic = weather # topic # driver = user.wxMesh # # If the variables in the file have names different from those in weewx, then # create a mapping such as this: # # [wxMesh] # ... # [[label_map]] # temp = outTemp # humi = outHumidity # in_temp = inTemp # in_humid = inHumidity from __future__ import with_statement import syslog import time import paho.mqtt.client as mqtt import weewx.drivers DRIVER_VERSION = "0.1" def logmsg(dst, msg): syslog.syslog(dst, 'wxMesh: %s' % msg) def logdbg(msg): logmsg(syslog.LOG_DEBUG, msg) def loginf(msg): logmsg(syslog.LOG_INFO, msg) def logerr(msg): logmsg(syslog.LOG_ERR, msg) def _get_as_float(d, s): v = None if s in d: try: v = float(d[s]) except ValueError, e: logerr("cannot read value for '%s': %s" % (s, e)) return v def loader(config_dict, engine): return wxMesh(**config_dict['wxMesh']) class wxMesh(weewx.drivers.AbstractDevice): """weewx driver that reads data from a file""" def __init__(self, **stn_dict): # where to find the data file self.host = stn_dict.get('host', 'localhost') self.topic = stn_dict.get('topic', 'weather') # how often to poll the weather data file, seconds self.poll_interval = float(stn_dict.get('poll_interval', 5.0)) # mapping from variable names to weewx names self.label_map = stn_dict.get('label_map', {}) loginf("host is %s" % self.host) loginf("topic is %s" % self.topic) loginf("polling interval is %s" % self.poll_interval) loginf('label map is %s' % self.label_map) self.payload = "Empty" #self.payloadList = [payload] self.client = mqtt.Client(client_id="XXX", protocol=mqtt.MQTTv31) #self.client.on_connect = self.on_connect self.client.on_message = self.on_message self.client.username_pw_set("XXX", "XXX") self.client.connect(self.host, 1883, 60) self.client.subscribe(self.topic, qos=1) # The callback for when a PUBLISH message is received from the server. def on_message(self, client, userdata, msg): self.payload = str(msg.payload) logdbg("Got message %s" % str(msg.payload)) def genLoopPackets(self): while True: self.client.loop() # read whatever values we can get from the MQTT broker logdbg("Working on payload : %s" % self.payload) if self.payload != "Empty" : data = {} row = self.payload.split(","); for datum in row: (key,value) = datum.split(":") data[key] = value if( key=="TIME" and data[key] == "0"): data[key] = str(int(time.time())) logdbg("key: "+key+" value: "+data[key]) *# map the data into a weewx loop packet* * _packet = {'usUnits': weewx.METRICWX}* *for vname in data:* * _packet[self.label_map.get(vname, vname)] = _get_as_float(data, vname)* *yield _packet* self.payload = "Empty" logdbg("Sleeping for %d" % self.poll_interval) time.sleep(self.poll_interval) self.client.disconnect() @property def hardware_name(self): return "wxMesh" I got 0.1mm on Payload hail...but If I look at the values they doesn't match (printed on my website). If I change to 'US' units then my Celsius values mapped wrong so I think in general changing to METRICWX in the wxMesh driver works. I think I have to look in the database what hail values were written if I simulate a 0.1mm rain event (at the moment one switch to press...just before wirering to the bucket in the garden).... Thanks for you help. Regards, Christian Am Sonntag, 3. Dezember 2017 14:50:27 UTC+1 schrieb Tom Keffer: > > You're being a little vague on the details. What results are you getting? > And, what do you mean by "send 0.1 (mm)?" Do you mean in the loop packets? > If so, your genLoopPackets() function should look something like this > (NOT TESTED): > > def genLoopPackets(): > data = {'dateTime': time.time(), 'usUnits': weewx.METRIC} > data['outTemp'] = (something) > ... > data['hail'] = 0.1 # NB: This would be 0.1 cm, or 1mm > > yield data > > There are a two other assumptions as well: > > 1. You have not implemented genArchiveRecords() and are, therefore, > depending on software record generation to turn your loop packets into > archive records. > 2. The observation type 'hail' is in your schema. This is the normal > situation with the default "wview" schema, so I'm assuming you have not > changed it. > > > -tk > > > > On Sun, Dec 3, 2017 at 6:56 AM, 'Christian Peters' via weewx-user < > [email protected] <javascript:>> wrote: > >> Tom, >> >> that seems not to solve my problem. I send 0.1 (mm) but didn't get that >> into weewx. >> As I already have a rain bucket with the VPII I used 'hail' and 'hail >> rate". Could these be a problem or can't I use it for a second rain bucket >> (same computation as rain?). >> >> Regard, >> >> Chrstian >> >> Am Sonntag, 26. November 2017 15:09:33 UTC+1 schrieb Tom Keffer: >>> >>> That could be it. weewx.METRIC has rainfall in cm, weewx.METRICWX in mm. >>> See the Units <http://weewx.com/docs/customizing.htm#units> appendix in >>> the Customizing Guide. >>> >>> -tk >>> >>> On Sun, Nov 26, 2017 at 8:02 AM, 'Christian Peters' via weewx-user < >>> [email protected]> wrote: >>> >>>> Tom, >>>> >>>> thank you for that hint. So emitting in mm was the right change. >>>> I just wonder why my temp values are ok but my rain data isn't!? >>>> Just found that on the wxMesh driver: >>>> >>>> # map the data into a weewx loop packet >>>> _packet = {'usUnits': weewx.METRIC} >>>> >>>> So I think I have to switch to METRICWX. >>>> >>>> Regards, >>>> >>>> Christian >>>> >>>> >>>> >>>> -- >>>> 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]. >>>> 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 [email protected] <javascript:>. >> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
