Hello All,

For the past few months I have been playing around at writing a new 
driver.  This week I have decided to change my current driver that uses 
FileParse (which works ok-ish), to using loop packets, which I believe to 
be more effient.

Using my efforts and borrowing from other drivers I have created a small 
part of my driver that uses data from a BME280 sensor, plugged into a 
SwitchDoc labs Groveweather, the connect onto my GrovePi by the l2c port.

So far my efforts at least runs on Weewx and as far as I know with out 
throwing any errors which I check by using  sudo tail -f /var/log/syslog.
How ever it does not appear to port date into Weewx.

Please can some-one take a look at my code and point in the right direction 
too getting it to work, so I may later add more sensors to it.   It is 
likely I have made some howling mistakes, for which I am sory.

Many thanks Michael.

-- 
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.
For more options, visit https://groups.google.com/d/optout.
#!/usr/bin/python
#
#   $Revision: 1.01$
#   $Author: WhimickRH $
#   $Date: 2016-10-20 $
#   $SwitchdocGrove
#   $Error logging enabled

# --------------------------IMPORT DEPENDENCIES---------------------------

from __future__ import with_statement
import grovepi
import RPi.GPIO as GPIO
from grovepi import *
import math
import time
from time import sleep
from datetime import datetime
from time import strftime, localtime
import weewx.drivers
import weewx.wxformulas

import syslog

import sys

sys.path.append('/home/pi/Adafruit_Python_BME280')

from Adafruit_BME280 import *

# --------------------------SENSOR SETTINGS---------------------------

rev = GPIO.RPI_REVISION
if rev == 2 or rev == 3:
	bus = smbus.SMBus(1)
else:
	bus = smbus.SMBus(0)
	
temperature = 0
Temp_F = 0
pressure = 0
inHg = 0
hPa = 0
outHumidity = 0

DRIVER_NAME = 'SwitchdocGrove'
DRIVER_VERSION = '1.01'

def loader(config_dict, _):
	return SwitchdocGroveDriver(**config_dict[DRIVER_NAME])

# Read the data from the sensors

class SwitchdocGroveDriver(weewx.drivers.AbstractDevice):
	def __init__(self, poll_interval=5, **stn_dict):
		self.poll_interval = int(poll_interval)  # seconds
		#self.red_led = 3
		#self.blue_led = 4
		self.bme280 = BME280(mode=BME280_OSAMPLE_8)
		
	def hardware_name(self):
		return DRIVER_NAME
	
	def bme280(self):
		while True:
			temperature = round(self.bme280.read_temperature(), 2)
			hPa = round(self.bme280.read_pressure() / 100, 2)
			outHumidity = round(self.bme280.read_humidity(), 2)
			return [temperature, hPa, outHumidity]

	def genLoopPackets(self):
		global temperature, Temp_F, pressure, inHg, hPa, outHumidity
		while True:
			packet = {'dateTime': int(time.time() + 0.5), 'usUnits': weewx.US}
			try:
				[temperature, hPa, outHumidity] = self.bme280(self)
							
				packet['outTemp'] = temperature
				packet['pressure'] = hPa
				packet['outHumidity'] = outHumidity
				
			except (IOError, TypeError) as e:
				continue
			else:
				yield packet
				time.sleep(self.poll_interval)

Reply via email to