comparison service/piNode/devices.py @ 1150:2b3079126b81

switch to pigpio for reading DHT sensor Ignore-this: 32b960f125848261c3896802ed7bcfb4 darcs-hash:7f2ed33c66df0b57d21f3b0ba8e6cd19ba90c973
author drewp <drewp@bigasterisk.com>
date Sun, 15 Apr 2018 04:14:33 -0700
parents d1bc88f67969
children 6aa5beb63d9e
comparison
equal deleted inserted replaced
1149:163042261ef1 1150:2b3079126b81
265 deviceType = ROOM['TempHumidSensor'] 265 deviceType = ROOM['TempHumidSensor']
266 pollPeriod = 5 266 pollPeriod = 5
267 267
268 def __init__(self, *a, **kw): 268 def __init__(self, *a, **kw):
269 DeviceType.__init__(self, *a, **kw) 269 DeviceType.__init__(self, *a, **kw)
270 import Adafruit_DHT 270 import DHT22
271 self.mod = Adafruit_DHT 271 self.sens = DHT22.sensor(self.pi, self.pinNumber)
272 272
273 def poll(self): 273 def poll(self):
274 for tries in range(1):
275 # fails a lot, but I don't want to add too much delay in
276 # here- the next poll is coming soon
277 humid, tempC = self.mod.read(self.mod.DHT22, self.pinNumber)
278 if humid and tempC:
279 break
280
281 stmts = set() 274 stmts = set()
282 if humid is not None: 275
283 stmts.add((self.uri, ROOM['humidity'], Literal(round(humid, 2)))) 276 if self.sens.staleness() < self.pollPeriod * 2:
277 humid, tempC = self.sens.humidity(), self.sens.temperature()
278 if humid > -999:
279 stmts.add((self.uri, ROOM['humidity'], Literal(round(humid, 2))))
280 else:
281 stmts.add((self.uri, RDFS['comment'], Literal('No recent humidity measurement')))
282 if tempC > -999:
283 stmts.add((self.uri, ROOM['temperatureF'],
284 # see round() note in arduinoNode/devices.py
285 Literal(round(tempC * 9 / 5 + 32, 2))))
286 else:
287 stmts.add((self.uri, RDFS['comment'], Literal('No recent temperature measurement')))
284 else: 288 else:
285 stmts.add((self.uri, RDFS['comment'], 289 stmts.add((self.uri, RDFS['comment'],
286 Literal('DHT read returned None'))) 290 Literal('No recent DHT response (%.02f sec old)' % self.sens.staleness())))
287 if tempC is not None: 291
288 stmts.add((self.uri, ROOM['temperatureF'], 292 self.sens.trigger()
289 # see round() note in arduinoNode/devices.py 293
290 Literal(round(tempC * 9 / 5 + 32, 2))))
291 else:
292 stmts.add((self.uri, RDFS['comment'],
293 Literal('DHT read returned None')))
294 return stmts 294 return stmts
295 295
296 def watchPrefixes(self): 296 def watchPrefixes(self):
297 return [ 297 return [
298 (self.uri, ROOM['temperatureF']), 298 (self.uri, ROOM['temperatureF']),