OK, so I'm maybe taking too many steps at once, but I tried to add some 
observations types to the DB schema for a non-existent database (starting 
fresh using mwall's observer driver, plus my mods).  On it's own, the 
driver starts up.  I added the code from the 'Add a new type to the archive 
database' instructions just before __main__ block in the driver.
import schemas.wview
schema_with_devices = schemas.wview.schema + [('pump1',   'REAL')]
schema_with_devices = schema_with_devices  + [('pump2',   'REAL')]
schema_with_devices = schema_with_devices  + [('furnace1' 'REAL')]

I updated the wx_binding with: schema = user.devices.schema_with_devices, 
and tried this: bin/wee_database weewx.devices.conf --reconfigure
It failed for:
  File "/home/weewx/bin/weewx/manager.py", line 954, in 
get_manager_dict_from_config
    manager_dict['schema'] = weeutil.weeutil._get_object(schema_name)
  File "/home/weewx/bin/weeutil/weeutil.py", line 1015, in _get_object
 ImportError: No module named devices

So, are the schema extensions adding columns of type REAL, or something 
different?  I ask because in the example is this:

schema = user.electricity.schema_with_electricity

where electricity is the module name, but I have no idea where electricity 
is being made a module name other than in the schema extensions, and if 
those are just columns, I'm lost, again.  I realize this is more a python 
problem.  Oh, there's one more reference to electricity as an event record, 
but again, that doesn't sound like a module either.  I resolved this 
particular issue by changing to schema = user.observer.schema_with_devices, 
but the driver fails to load as below.

Backing away a bit and using the stock Observer driver still doesn't load.  
These are the only config differences (sorry about the font) relative to 
the Intercepter config that's working:
router.chaos.home_/home/weewx> sdiff -s -W -w 135 weewx.devices.conf 
weewx.weather.conf | more
debug = 1                                                          |   
 debug = 0
    station_type = Observer                                        |       
 station_type = Interceptor
    SKIN_ROOT = skins.devices                                      |       
 SKIN_ROOT = skins.weather
    HTML_ROOT = public_html.devices                                |       
 HTML_ROOT = public_html.weather
    #   schema = user.observer.schema_with_devices                 <
        SQLITE_ROOT = %(WEEWX_ROOT)s/archive.devices               |       
     SQLITE_ROOT = %(WEEWX_ROOT)s/archive.weather
[Observer]                                                         |   
 [Interceptor]
    driver = user.observer                                         |       
 driver = user.interceptor
    port   = 6943                                                  |       
 port   = 8080
    # How often to poll the device, in seconds                     |       
 #
    poll_interval = 150                                            |       
 # Specify the hardware device to capture.  Options include:
                                                                   >       
 device_type = lacrosse-bridge

Feb  8 11:46:21 router weewx[32575]: engine: Initializing weewx version 
3.6.2
Feb  8 11:46:21 router weewx[32575]: engine: Using Python 2.6.6 
(r266:84292, Aug 18 2016, 15:13:37) #012[GCC 4.4.7 20120313 (Red Hat 
4.4.7-17)]
Feb  8 11:46:21 router weewx[32575]: engine: Platform 
Linux-2.6.32-573.7.1.el6.x86_64-x86_64-with-centos-6.7-Final
Feb  8 11:46:21 router weewx[32575]: engine: Using configuration file 
/home/weewx/weewx.devices.conf
Feb  8 11:46:21 router weewx[32575]: engine: Loading station type Observer 
(user.observer)
Feb  8 11:46:21 router weewx[32575]: import of driver failed: __init__() 
got an unexpected keyword argument 'driver' (<type 'exceptions.TypeError'>)
Feb  8 11:46:21 router weewx[32575]: engine: Unable to load driver: 
__init__() got an unexpected keyword argument 'driver'
Feb  8 11:46:21 router weewx[32575]:     ****  Exiting...

Trying to create the DB by hand using a copy of the working config, and it 
also doesn't work.  The other instance is still running fine from the same 
area, so I don't think
I hosed up my weewx install.

router.chaos.home_/home/weewx> !sd
sdiff -s -W -w 135 weewx.devices.conf weewx.weather.conf | more
    SKIN_ROOT = skins.devices                                      |       
 SKIN_ROOT = skins.weather
    HTML_ROOT = public_html.devices                                |       
 HTML_ROOT = public_html.weather
        SQLITE_ROOT = %(WEEWX_ROOT)s/archive.devices               |       
     SQLITE_ROOT = %(WEEWX_ROOT)s/archive.weather

router.chaos.home_/home/weewx> bin/wee_database --config=weewx.devices.conf 
--create-archive
Using configuration file weewx.devices.conf
Using database binding 'wx_binding', which is bound to database 
'archive_sqlite'
Traceback (most recent call last):
  File "bin/wee_database", line 453, in <module>
    main()
  File "bin/wee_database", line 156, in main
    createMainDatabase(config_dict, db_binding)
  File "bin/wee_database", line 179, in createMainDatabase
    with weewx.manager.open_manager_with_config(config_dict, db_binding) as 
dbmanager:
  File "/home/weewx/bin/weewx/manager.py", line 984, in 
open_manager_with_config
    return open_manager(manager_dict, initialize)
  File "/home/weewx/bin/weewx/manager.py", line 976, in open_manager
    manager_dict['table_name'])
  File "/home/weewx/bin/weewx/manager.py", line 102, in open
    dbmanager = cls(connection, table_name)
  File "/home/weewx/bin/weewx/manager.py", line 1109, in __init__
    super(DaySummaryManager, self).__init__(connection, table_name, schema)
  File "/home/weewx/bin/weewx/manager.py", line 70, in __init__
    self.sqlkeys = self.connection.columnsOf(self.table_name)
  File "/home/weewx/bin/weedb/sqlite.py", line 159, in columnsOf
    raise weedb.ProgrammingError("No such table %s" % table)
weedb.ProgrammingError: No such table archive

Thx, Chris

On Tuesday, February 7, 2017 at 6:56:15 AM UTC-8, Tom Keffer wrote:
>
> There are two general strategies:
>
> 1. Run multiple instances of weewx on one computer 
> <https://github.com/weewx/weewx/wiki/weewx-multi>, then combine the 
> results in the reporting stage. Each will have its own device driver --- 
> one for the LaCrosse station, one for the AC monitor. This method will 
> result in two independent databases. They can then be queried for the final 
> reports.
>
> 2. Run one instance of weewx, then augments the data stream coming off the 
> device driver. This requires writing a custom weewx service that adds on to 
> the data coming off the one device driver. For example, you could run a 
> regular weewx instance that monitors your LaCrosse weather station. Then 
> the custom service would add you extra data onto the packets coming out of 
> the LaCrosse. Generally, your service should run and monitor a separate 
> thread that talks to your AC monitor. This way, you won't slow down the 
> main thread should the AC monitor block. This is the method documented in 
> the Customizing Guide *Adding a new observation type 
> <http://weewx.com/docs/customizing.htm#Adding_a_new_observation_type>*, 
> although not very well. The new V3.7 documentation (to come out Real Soon 
> Now) does a slightly better job of documenting this.
>
> Hope this helps.
>
> -tk
>
>
>
> On Tue, Feb 7, 2017 at 6:22 AM, <[email protected] <javascript:>> wrote:
>
>> I'm still working out how to integrate my alternate data source + a 
>> weather station into weewx.  The one LaCrosse station is already running 
>> with weewx-interceptor just fine.  This other thing monitors AC current for 
>> my sump pumps, dehumidifier, circ fan, furnace, and its own power supply.  
>> The point is to log when things turn on and off, or more precisely, 
>> determine if they have failed. It's run with some custom hardware I made on 
>> a Pi3.  All this is in my crawl space. I've looked through the 
>> customization guide, and I think I've worked out the kinds of values I want 
>> to use (thank Tom).  Where I'm lost is how to have a single weewx instance 
>> listen to two drivers, or how to have one driver consume data from the two 
>> stations.  Looking at weewx-interceptor and the weewx-observer (pretty 
>> close to what I need for the monitor).  In interceptor, could a second 
>> listener thread be started that uses the same queue?  From the 
>> customization guide for Services, the electric meter example was read as an 
>> extra service.  Is that the same idea as running two drivers?
>> Is there a better idea?
>>
>> Thx, Chris
>>
>>
>

Reply via email to