Hi,
I have Davis VP2 station with RPi3 and weewx ver. 3.9.2 for about year. Everything is running flawlessly. Because station is in remote location, everything is powered with industrial PSU with battery backup. I have idea to add weewx service for voltage monitoring purposes. For DAC ADS1115 chip is working. Breakout boards widely available in the market. For reading data I use testADS1115.py script from DataLogger SwitchDoc Labs. #!/usr/bin/python #SwitchDoc Labs May 2016 # # reads all four channels from the Grove4Ch16BitADC Board in single ended mode # also reads raw values # import time, signal, sys from MADS1x15 import ADS1x15 def signal_handler(signal, frame): print 'You pressed Ctrl+C!' sys.exit(0) signal.signal(signal.SIGINT, signal_handler) #print 'Press Ctrl+C to exit' ADS1115 = 0x01 # 16-bit ADC # Select the gain gain = 6144 # +/- 6.144V #gain = 4096 # +/- 4.096V # gain = 2048 # +/- 2.048V # gain = 1024 # +/- 1.024V # gain = 512 # +/- 0.512V # gain = 256 # +/- 0.256V # Select the sample rate # sps = 8 # 8 samples per second # sps = 16 # 16 samples per second # sps = 32 # 32 samples per second # sps = 64 # 64 samples per second # sps = 128 # 128 samples per second sps = 250 # 250 samples per second # sps = 475 # 475 samples per second # sps = 860 # 860 samples per second # Initialise the ADC using the default mode (use default I2C address) adc = ADS1x15(ic=ADS1115) while (1): # Read channels in single-ended mode using the settings above print"--------------------" voltsCh0 = adc.readADCSingleEnded(0, gain, sps) / 1000 rawCh0 = adc.readRAW_ADCSingleEnded(0, gain, sps) print "Channel 0 =%.6fV raw=%d raw=0x%4X" % (voltsCh0, rawCh0, rawCh0) voltsCh1 = adc.readADCSingleEnded(1, gain, sps) / 1000 rawCh1 = adc.readRAW_ADCSingleEnded(1, gain, sps) # O2 Sensor sensorVoltage = voltsCh1 *(5.0/6.144) AMP = 121 K_O2 = 7.43 sensorVoltage = sensorVoltage/AMP*10000.0 Value_O2 = sensorVoltage/K_O2 - 1.05 print "Channel 1 =%.6fV raw=0x%4X O2 Percent=%6.2f" % (voltsCh1, rawCh1, Value_O2) voltsCh2 = adc.readADCSingleEnded(2, gain, sps) / 1000 rawCh2 = adc.readRAW_ADCSingleEnded(2, gain, sps) print "Channel 2 =%.6fV raw=0x%4X" % (voltsCh2, rawCh2) voltsCh3 = adc.readADCSingleEnded(3, gain, sps) / 1000 rawCh3 = adc.readRAW_ADCSingleEnded(3, gain, sps) print "Channel 3 =%.6fV raw=0x%4X" % (voltsCh3, rawCh3) print"--------------------" time.sleep(0.5) and output is like this: -------------------- Channel 0 =0.000000V Channel 1 =0.000000V Channel 2 =0.000000V Channel 3 =0.000000V -------------------- Is possible to write voltage readings from all four channels to separate sqlite database and then graph acquired data ? Looks like AS3935 lightning sensor weewx service is good example. I modified as3935.py to create proper database for all voltage channels, but how to read voltage data and write them to sqlite? from MADS1x15 import ADS1x15 import time import syslog import weewx import weewx.manager from datetime import datetime from weewx.wxengine import StdService from weeutil.weeutil import to_bool VERSION = "0.1" if weewx.__version__ < "3.2": raise weewx.UnsupportedFeature("weewx 3 is required, found %s" % weewx.__version__) schema = [('dateTime', 'INTEGER NOT NULL PRIMARY KEY'), ('usUnits', 'INTEGER NOT NULL'), ('ch0_voltage', 'REAL'), ('ch1_voltage', 'REAL'), ('ch2_voltage', 'REAL'), ('ch3_voltage', 'REAL'),] def get_default_binding_dict(): return {'database': 'voltage_sqlite', 'manager': 'weewx.manager.Manager', 'table_name': 'archive', 'schema': 'user.ads1115.schema'} def logmsg(level, msg): syslog.syslog(level, 'ads1115: %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) class ADS1115(StdService): def __init__(self, engine, config_dict): super(ADS1115, self).__init__(engine, config_dict) loginf("service version is %s" % VERSION) svc_dict = config_dict.get('ADS1115', {}) self.data_binding = svc_dict.get('data_binding', None) loginf("data_binding=%s" % self.data_binding) pkt_binding = svc_dict.get('binding', 'archive') loginf("binding=%s" % pkt_binding) self.data = [] # if a binding was specified, then use it to save voltage readings to database if self.data_binding is not None: # configure the voltage database dbm_dict = weewx.manager.get_manager_dict( config_dict['DataBindings'], config_dict['Databases'], self.data_binding, default_binding_dict= get_default_binding_dict()) with weewx.manager.open_manager(dbm_dict, initialize=True) as dbm: # ensure schema on disk matches schema in memory dbcol = dbm.connection.columnsOf(dbm.table_name) memcol = [x[0] for x in dbm_dict['schema']] if dbcol != memcol: raise Exception('ads1115: schema mismatch: %s != %s' % (dbcol, memcol)) Thanks Andrej -- 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/c37f6302-c692-415c-b6c5-97c040e2c680%40googlegroups.com.