On Sunday, 28 April 2019 05:23:37 UTC+2, mwall wrote:
>
>
> it is really not that difficult. if you are starting from scratch, just
> extend the wview schema:
>
> 1 copy the wview schema definition to a new file
>
> cp bin/schemas/wview.py bin/user/wview_extended.py
>
> 2 add as many temperature and humidity fields as you need by modifying the
> new schema file. see this for an example of what 8 temperature/humidity
> sensors and signals looks like:
>
> https://github.com/weewx/weewx/blob/schema/bin/schemas/wview_extended.py
>
Thanks for the details.
Added he following sensors:
[root@weather ~]# cd /usr/share/weewx/schemas/
[root@weather schemas]# diff wview.py wview_extra.py
22a23,34
> ('extraBarometer1', 'REAL'),
> ('extraBarometer2', 'REAL'),
> ('extraBarometer3', 'REAL'),
> ('extraBarometer4', 'REAL'),
> ('extraBarometer5', 'REAL'),
> ('extraBarometer6', 'REAL'),
> ('extraBarometer7', 'REAL'),
> ('extraBarometer8', 'REAL'),
> ('extraBarometer9', 'REAL'),
> ('extraBarometer10', 'REAL'),
> ('extraBarometer11', 'REAL'),
> ('extraBarometer12', 'REAL'),
43a56,64
> ('extraTemp4', 'REAL'),
> ('extraTemp5', 'REAL'),
> ('extraTemp6', 'REAL'),
> ('extraTemp7', 'REAL'),
> ('extraTemp8', 'REAL'),
> ('extraTemp9', 'REAL'),
> ('extraTemp10', 'REAL'),
> ('extraTemp11', 'REAL'),
> ('extraTemp12', 'REAL'),
51a73,82
> ('extraHumid3', 'REAL'),
> ('extraHumid4', 'REAL'),
> ('extraHumid5', 'REAL'),
> ('extraHumid6', 'REAL'),
> ('extraHumid7', 'REAL'),
> ('extraHumid8', 'REAL'),
> ('extraHumid9', 'REAL'),
> ('extraHumid10', 'REAL'),
> ('extraHumid11', 'REAL'),
> ('extraHumid12', 'REAL'),
58a90,101
> ('extraSigPercent1', 'REAL'),
> ('extraSigPercent2', 'REAL'),
> ('extraSigPercent3', 'REAL'),
> ('extraSigPercent4', 'REAL'),
> ('extraSigPercent5', 'REAL'),
> ('extraSigPercent6', 'REAL'),
> ('extraSigPercent7', 'REAL'),
> ('extraSigPercent8', 'REAL'),
> ('extraSigPercent9', 'REAL'),
> ('extraSigPercent10', 'REAL'),
> ('extraSigPercent11', 'REAL'),
> ('extraSigPercent12', 'REAL'),
70c113,125
< ('inTempBatteryStatus', 'REAL')]
---
> ('inTempBatteryStatus', 'REAL'),
> ('extraTempBatteryStatus1', 'REAL'),
> ('extraTempBatteryStatus2', 'REAL'),
> ('extraTempBatteryStatus3', 'REAL'),
> ('extraTempBatteryStatus4', 'REAL'),
> ('extraTempBatteryStatus5', 'REAL'),
> ('extraTempBatteryStatus6', 'REAL'),
> ('extraTempBatteryStatus7', 'REAL'),
> ('extraTempBatteryStatus8', 'REAL'),
> ('extraTempBatteryStatus9', 'REAL'),
> ('extraTempBatteryStatus10', 'REAL'),
> ('extraTempBatteryStatus11', 'REAL'),
> ('extraTempBatteryStatus12', 'REAL')]
> 3 add the units for each new field. in the file bin/user/extensions.py
> add something like this:
>
> import weewx.units
> weewx.units.obs_group_dict['extraTemp4'] = 'group_temperature'
> weewx.units.obs_group_dict['extraTemp5'] = 'group_temperature'
> weewx.units.obs_group_dict['extraTemp6'] = 'group_temperature'
> weewx.units.obs_group_dict['extraTemp7'] = 'group_temperature'
> weewx.units.obs_group_dict['extraHumid4'] = 'group_percent'
> weewx.units.obs_group_dict['extraHumid5'] = 'group_percent'
> weewx.units.obs_group_dict['extraHumid6'] = 'group_percent'
> weewx.units.obs_group_dict['extraHumid7'] = 'group_percent'
>
I added the units (excluding battery status, as I couldn't find an example):
[root@weather schemas]# cd ../user/
[root@weather user]# more extensions.py
#
# Copyright (c) 2009-2015 Tom Keffer <[email protected]>
#
# See the file LICENSE.txt for your full rights.
#
"""User extensions module
This module is imported from the main executable, so anything put here will
be
executed before anything else happens. This makes it a good place to put
user
extensions.
"""
import locale
# This will use the locale specified by the environment variable 'LANG'
# Other options are possible. See:
# http://docs.python.org/2/library/locale.html#locale.setlocale
locale.setlocale(locale.LC_ALL, '')
import weewx.units
weewx.units.obs_group_dict['extraTemp4'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp5'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp6'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp7'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp8'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp9'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp10'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp11'] = 'group_temperature'
weewx.units.obs_group_dict['extraTemp12'] = 'group_temperature'
weewx.units.obs_group_dict['extraHumid1'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid2'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid3'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid4'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid5'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid6'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid7'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid8'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid9'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid10'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid11'] = 'group_percent'
weewx.units.obs_group_dict['extraHumid12'] = 'group_percent'
weewx.units.obs_group_dict['extraBarometer1'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer2'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer3'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer4'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer5'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer6'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer7'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer8'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer9'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer10'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer11'] = 'group_pressure'
weewx.units.obs_group_dict['extraBarometer12'] = 'group_pressure'
weewx.units.obs_group_dict['extraSigPercent1'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent2'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent3'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent4'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent5'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent6'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent7'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent8'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent9'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent10'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent11'] = 'group_percent'
weewx.units.obs_group_dict['extraSigPercent12'] = 'group_percent'
> 4 tell weewx to use the new schema. in the weewx configuration file do
> this:
>
> [DataBindings]
> [[wx_binding]]
> ...
> schema = user.wview_extended.schema
>
Added sensors and bindings to weewx.conf:
[root@weather user]# more /etc/weewx/weewx.conf
...
[Interceptor]
# This section is for the network traffic interceptor driver.
# The driver to use:
driver = user.interceptor
# Specify the hardware device to capture. Options include:
# acurite-bridge - acurite internet bridge, smarthub, or access
# observer - fine offset WH2600/HP1000/HP1003, ambient WS2902
# lw30x - oregon scientific LW301/LW302
# lacrosse-bridge - lacrosse GW1000U/C84612 internet bridge
# wu-client - any hardware that uses the weather underground protocol
device_type = acurite-bridge
mode = listen
iface = ens3
pcap_filter = src 192.168.180.0/22 and dst port 80
[[sensor_map]]
extraTemp1 = temperature.12387.*
extraHumid1 = humidity.12387.*
extraBarometer1 = barometer.12387.*
extraSigPercent1 = rxCheckPercent.12387.*
extraTempBatteryStatus1 = txBatteryStatus.12387.*
extraTemp2 = temperature.15283.*
extraHumid2 = humidity.15283.*
extraBarometer2 = barometer.15283.*
extraSigPercent2 = rxCheckPercent.15283.*
extraTempBatteryStatus2 = txBatteryStatus.15283.*
extraTemp3 = temperature.5422.*
extraHumid3 = humidity.5422.*
extraBarometer3 = barometer.5422.*
extraSigPercent3 = rxCheckPercent.5422.*
extraTempBatteryStatus3 = txBatteryStatus.5422.*
extraTemp4 = temperature.2266.*
extraHumid4 = humidity.2266.*
extraBarometer4 = barometer.2266.*
extraSigPercent4 = rxCheckPercent.2266.*
extraTempBatteryStatus4 = txBatteryStatus.2266.*
#extraTemp5 = temperature.XXXXX.*
#extraHumid5 = humidity.XXXXX.*
#extraBarometer5 = barometer.XXXXX.*
#extraSigPercent5 = rxCheckPercent.XXXXX.*
#extraTempBatteryStatus5 = txBatteryStatus.XXXXX.*
extraTemp7 = temperature.8565.*
extraHumid7 = humidity.8565.*
extraBarometer7 = barometer.8565.*
extraSigPercent7 = rxCheckPercent.8565.*
extraTempBatteryStatus7 = txBatteryStatus.8565.*
extraTemp8 = temperature.12520.*
extraHumid8 = humidity.12520.*
extraBarometer8 = barometer.12520.*
extraSigPercent8 = rxCheckPercent.12520.*
extraTempBatteryStatus8 = txBatteryStatus.12520.*
extraTemp9 = temperature.2190.*
extraHumid9 = humidity.2190.*
extraBarometer9 = barometer.2190.*
extraSigPercent9 = rxCheckPercent.2190.*
extraTempBatteryStatus9 = txBatteryStatus.2190.*
#extraTemp10 = temperature.XXXXX.*
#extraHumid10 = humidity.XXXXX.*
#extraBarometer10 = barometer.XXXXX.*
#extraSigPercent10 = rxCheckPercent.XXXXX.*
#extraTempBatteryStatus10 = txBatteryStatus.XXXXX.*
#extraTemp11 = temperature.XXXXX.*
#extraHumid11 = humidity.XXXXX.*
#extraBarometer11 = barometer.XXXXX.*
#extraSigPercent11 = rxCheckPercent.XXXXX.*
#extraTempBatteryStatus11 = txBatteryStatus.XXXXX.*
#extraTemp12 = temperature.XXXXX.*
#extraHumid12 = humidity.XXXXX.*
#extraBarometer12 = barometer.XXXXX.*
#extraSigPercent12 = rxCheckPercent.XXXXX.*
#extraTempBatteryStatus12 = txBatteryStatus.XXXXX.*
...
[DataBindings]
[[wx_binding]]
# The database must match one of the sections in [Databases].
# This is likely to be the only option you would want to change.
database = archive_sqlite
# The name of the table within the database
table_name = archive
# The manager handles aggregation of data for historical summaries
manager = weewx.wxmanager.WXDaySummaryManager
# The schema defines the structure of the database.
# It is *only* used when the database is created.
schema = schemas.wview_extra.schema
> 5 delete or move aside any existing weewx database
>
> 6 start weewx
>
I can now see all the columns in the database:
[root@weather ~]# sqlite3 -readonly /var/lib/weewx/weewx.sdb .schema
archive | head -1 | tr ',' '\n' | grep -i extra
Error: near "archive": syntax error
`extraBarometer1` REAL
`extraBarometer2` REAL
`extraBarometer3` REAL
`extraBarometer4` REAL
`extraBarometer5` REAL
`extraBarometer6` REAL
`extraBarometer7` REAL
`extraBarometer8` REAL
`extraBarometer9` REAL
`extraBarometer10` REAL
`extraBarometer11` REAL
`extraBarometer12` REAL
`extraTemp1` REAL
`extraTemp2` REAL
`extraTemp3` REAL
`extraTemp4` REAL
`extraTemp5` REAL
`extraTemp6` REAL
`extraTemp7` REAL
`extraTemp8` REAL
`extraTemp9` REAL
`extraTemp10` REAL
`extraTemp11` REAL
`extraTemp12` REAL
`extraHumid1` REAL
`extraHumid2` REAL
`extraHumid3` REAL
`extraHumid4` REAL
`extraHumid5` REAL
`extraHumid6` REAL
`extraHumid7` REAL
`extraHumid8` REAL
`extraHumid9` REAL
`extraHumid10` REAL
`extraHumid11` REAL
`extraHumid12` REAL
`extraSigPercent1` REAL
`extraSigPercent2` REAL
`extraSigPercent3` REAL
`extraSigPercent4` REAL
`extraSigPercent5` REAL
`extraSigPercent6` REAL
`extraSigPercent7` REAL
`extraSigPercent8` REAL
`extraSigPercent9` REAL
`extraSigPercent10` REAL
`extraSigPercent11` REAL
`extraSigPercent12` REAL
`extraTempBatteryStatus1` REAL
`extraTempBatteryStatus2` REAL
`extraTempBatteryStatus3` REAL
`extraTempBatteryStatus4` REAL
`extraTempBatteryStatus5` REAL
`extraTempBatteryStatus6` REAL
`extraTempBatteryStatus7` REAL
`extraTempBatteryStatus8` REAL
`extraTempBatteryStatus9` REAL
`extraTempBatteryStatus10` REAL
`extraTempBatteryStatus11` REAL
`extraTempBatteryStatus12` REAL);
but they're not getting populated with values:
[root@weather ~]# sqlite3 -readonly /var/lib/weewx/weewx.sdb 'select *
from archive;'
1556557800|1|5||||||||||||||||||||||||0.0||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1556558100|1|5||||||||||||||||||||||||0.0||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1556558400|1|5||||||||||||||||||||||||0.0||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1556558700|1|5||||||||||||||||||||||||0.0||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
and there is data being received still:
[root@weather ~]# tcpdump -w /tmp/snoopy -c 1600000 port 80
tcpdump: listening on ens3, link-type EN10MB (Ethernet), capture size
262144 bytes
^C300 packets captured
300 packets received by filter
0 packets dropped by kernel
[root@weather ~]# strings /tmp/snoopy | egrep 'temp|rssi|barom|sensor'
&id=24C86E090EC1&mt=tower&sensor=00002190
&humidity=30&tempf=71.4
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00005422
&humidity=56&tempf=69.9
&baromin=29.63&battery=normal&rssi=3
&id=24C86E090EC1&mt=tower&sensor=00008565
&humidity=34&tempf=73.5
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00015283
&humidity=58&tempf=68.7
&baromin=29.63&battery=normal&rssi=3
&id=24C86E090EC1&mt=tower&sensor=00002190
&humidity=30&tempf=71.4
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00005422
&humidity=56&tempf=69.9
&baromin=29.63&battery=normal&rssi=3
&id=24C86E090EC1&mt=tower&sensor=00008565
&humidity=34&tempf=73.5
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00015283
&humidity=58&tempf=68.7
&baromin=29.63&battery=normal&rssi=3
&id=24C86E090EC1&mt=tower&sensor=00002190
&humidity=30&tempf=71.4
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00005422
&humidity=56&tempf=69.9
&baromin=29.63&battery=normal&rssi=3
&id=24C86E090EC1&mt=tower&sensor=00008565
&humidity=34&tempf=73.5
&baromin=30.30&battery=low&rssi=3
&id=24C86E090A48&mt=tower&sensor=00015283
&humidity=58&tempf=68.7
&baromin=29.63&battery=normal&rssi=3
any ideas?
--
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.