The last version of the file is attached.

There is something added to use the data within a binding.

Karen K schrieb am Sonntag, 7. Februar 2021 um 12:05:57 UTC+1:

> I extended the file by trend values. Look at the new file attached, please.
>
> bell...@gmail.com schrieb am Donnerstag, 28. Januar 2021 um 23:45:17 
> UTC+1:
>
>> Thanks, that is exactly what I was looking for. I know it is too late for 
>> you, but I thought other people might need to add units, unit groups, and 
>> observations. So, I was looking for a real world example. I’ve opened issue 
>> 118 <https://github.com/bellrichm/WeeWX-MQTTSubscribe/issues/118> to 
>> work on this in MQTTSubscribe.
>>
>> On Thursday, 28 January 2021 at 15:03:22 UTC-5 kk44...@gmail.com wrote:
>>
>>> I am not sure that I understood what I am expected to post. The units 
>>> and unit group definition file I created is this:
>>>
>>> bell...@gmail.com schrieb am Montag, 25. Januar 2021 um 01:09:55 UTC+1:
>>>
>>>> Karen, 
>>>> If you pst what you have done, I’d be willing to look at updating 
>>>> MQTTSubscribe to have a configuration option. If we get something working, 
>>>> perhaps a pull request to WeeWX might result.
>>>> rich
>>>>
>>>> On Sunday, 24 January 2021 at 05:57:47 UTC-5 kk44...@gmail.com wrote:
>>>>
>>>>> @Rich: Yes, I was afraid that that is the only way to do it. So I 
>>>>> guess, I will do it the same way
>>>>>
>>>>> @Weatherl: Oh, I did not install devices of my own. Instead I got 
>>>>> permission to read the readings of the official level and flow meters 
>>>>> from 
>>>>> the government. They provide an API in the Internet here. If you register 
>>>>> with them you can get the data live.
>>>>>
>>>>> bell...@gmail.com schrieb am Samstag, 23. Januar 2021 um 22:48:32 
>>>>> UTC+1:
>>>>>
>>>>>> I'll be interested in hearing if there is a better way, but here is 
>>>>>> what I did to add a new observation.
>>>>>> 1. Wrote this service.
>>>>>>
>>>>>> import weewx
>>>>>>
>>>>>> import weewx.units
>>>>>> weewx.units.obs_group_dict['honeywell01'] = 'group_temperature'
>>>>>> weewx.units.obs_group_dict['honeywell02'] = 'group_temperature'
>>>>>> weewx.units.obs_group_dict['honeywell03'] = 'group_temperature'
>>>>>>
>>>>>> class Noop(weewx.engine.StdService):
>>>>>>     pass
>>>>>>
>>>>>> 2. Updated weewx.conf
>>>>>>         prep_services = weewx.engine.StdTimeSynch , 
>>>>>> user.bellrichm.Noop
>>>>>>
>>>>>> rich
>>>>>>
>>>>>> On Saturday, 23 January 2021 at 16:18:28 UTC-5 kk44...@gmail.com 
>>>>>> wrote:
>>>>>>
>>>>>>> I installed MQTTSubscribe service. In this case it provides data 
>>>>>>> about water level (unit cm) and water flow (unit cubic meter per 
>>>>>>> second) of 
>>>>>>> the near river.
>>>>>>>
>>>>>>> As those units and unit group are not included in the standard weewx 
>>>>>>> I have to assign them elsewhere.
>>>>>>>
>>>>>>> Because I use the MQTTSubscribe service, there is no need to write 
>>>>>>> an extension. On the other hand, no extension file means no place to 
>>>>>>> put 
>>>>>>> the assignment of the additional units and unit groups.
>>>>>>>
>>>>>>> Could I declare those units and unit groups somewhere in weewx.conf?
>>>>>>>
>>>>>>> Is there any other possibility?
>>>>>>>
>>>>>>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/db5629a9-85e5-473c-93a9-6f1d83eccd19n%40googlegroups.com.
# water level and water flow units and unit groups
# Copyright (c) 2021 Johanna Roedenbeck

"""

value                      US         METRIC & METRICWX
-------------------------------------------------------
water level         W      ft            cm
water level trend          ft/h          cm/h
water flow          Q      ft^3/s        m^3/s
water flow trend           ft^3/s/h      m^3/s/h

"""

# import units module to extend group, units, and conversion tables
import weewx.units

# for extend() function
import weeutil.weeutil 

# if MQTT export extension is installed, include unit label reduction
try:
    import user.mqtt
    hasMQTT=True
except ImportError:
    hasMQTT=False
    
# add groups for water level and water flow
weewx.units.USUnits.extend(
  {'group_flow':'ft3ps', # cubic foot per second
   'group_flow_trend':'ft3psph',
   'group_level':'foot',
   'group_level_trend':'foot_per_hour'})

# add groups for water level and water flow
weewx.units.MetricUnits.extend(
  {'group_flow':'m3ps', # cubic meter per second
   'group_flow_trend':'m3psph',
   'group_level':'cm',
   'group_level_trend':'cm_per_hour'})
   
# add groups for water level and water flow
weewx.units.MetricWXUnits.extend(
  {'group_flow':'m3ps', # cubic meter per second
   'group_flow_trend':'m3psph',
   'group_level':'cm',
   'group_level_trend':'cm_per_hour'})

# default format for flow units   
weewx.units.default_unit_format_dict['m3ps']='%.1f'
weewx.units.default_unit_format_dict['m3psph']='%.2f'
weewx.units.default_unit_format_dict['ft3ps']='%.0f'
  
# default unit label for flow units
weewx.units.default_unit_label_dict['m3ps']=u" m³/s"
weewx.units.default_unit_label_dict['m3psph']=u" m³/s/h" 
weewx.units.default_unit_label_dict['ft3ps']=u" ft³/s"

# Note: default format and unit labels for water level units are
# already defined within weewx.units. No need to do it here.

# add conversion functions between cm and foot for water level
weewx.units.conversionDict['cm']['foot']= lambda x : x / 30.48
weewx.units.conversionDict['foot']['cm']= lambda x : x * 30.48

# add conversion functions between cm/h and ft/h for water level trend
if 'cm_per_hour' not in weewx.units.conversionDict:
    weewx.units.conversionDict['cm_per_hour']={'foot_per_hour': lambda x : x / 30.48 }
else:
    weewx.units.conversionDict['cm_per_hour']['foot_per_hour']= lambda x : x / 30.48
if 'foot_per_hour' not in weewx.units.conversionDict:
    weewx.units.conversionDict['foot_per_hour']={'cm_per_hour': lambda x : x * 30.48 }
else:
    weewx.units.conversionDict['foot_per_hour']['cm_per_hour']= lambda x : x * 30.48

# add conversion functions for flow units
if 'm3ps' not in weewx.units.conversionDict:
    weewx.units.conversionDict['m3ps']={'ft3ps': lambda x : x * 35.3147 }
else:
    weewx.units.conversionDict['m3ps']['ft3ps']= lambda x : x * 35.3147 
if 'ft3ps' not in weewx.units.conversionDict:
    weewx.units.conversionDict['ft3ps']={'m3ps': lambda x : x / 35.3147 }
else:
    weewx.units.conversionDict['ft3ps']['m3ps']= lambda x : x / 35.3147 

# add conversion functions for flow trend units
if 'm3psph' not in weewx.units.conversionDict:
    weewx.units.conversionDict['m3psph']={'ft3psph': lambda x : x * 35.3147 }
else:
    weewx.units.conversionDict['m3psph']['ft3psph']= lambda x : x * 35.3147 
if 'ft3psph' not in weewx.units.conversionDict:
    weewx.units.conversionDict['ft3psph']={'m3psph': lambda x : x / 35.3147 }
else:
    weewx.units.conversionDict['ft3psph']['m3psph']= lambda x : x / 35.3147 

if hasMQTT:
    if 'cm_per_hour' not in user.mqtt.UNIT_REDUCTIONS:
        user.mqtt.UNIT_REDUCTIONS['cm_per_hour']='cmph'
    if 'foot_per_hour' not in user.mqtt.UNIT_REDUCTIONS:
        user.mqtt.UNIT_REDUCTIONS['foot_per_hour']='ftph'
    
# water level and flow measurements
weewx.units.obs_group_dict.extend(
  {'Q566055v':'group_flow',
   'Q566055t':'group_flow_trend',
   'W566055v':'group_level',
   'W566055t':'group_level_trend',
   'W566055a':'group_count',
   'Q567470v':'group_flow',
   'Q567470t':'group_flow_trend',
   'W567470v':'group_level',
   'W567470t':'group_level_trend',
   'W567470a':'group_count'})

# database schema

pegelTable = [
    ('dateTime','INTEGER NOT NULL PRIMARY KEY'),
    ('usUnits','INTEGER NOT NULL'),
    ('interval','INTEGER NOT NULL'),
    ('W566055v','REAL'),
    ('W566055s','VARCHAR(10)'),
    ('W566055a','INTEGER'),
    ('Q566055v','REAL'),
    ('Q566055s','VARCHAR(10)'),
    ('Q566055a','INTEGER'),
    ('W567470v','REAL'),
    ('W567470s','VARCHAR(10)'),
    ('W567470a','INTEGER'),
    ('Q567470v','REAL'),
    ('Q567470s','VARCHAR(10)'),
    ('Q567470a','INTEGER')]

pegel_day_summaries = [(e[0], 'scalar') for e in pegelTable
                 if e[0] not in ('dateTime', 'usUnits', 'interval')] 

pegelSchema = {
    'table': pegelTable,
    'day_summaries' : pegel_day_summaries
}

class Noop(weewx.engine.StdService):
  pass
  

Reply via email to