Mercurial > code > home > repos > homeauto
view service/thermostat/rpi_buttons.py @ 861:10b1e6a1b408
thermostat program and raspberry pi buttons reader
Ignore-this: aed325a19554a509a19747c89079597b
darcs-hash:20130210102208-312f9-40fd7de854665d9f78e4788ddb4ea15062d52614
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sun, 10 Feb 2013 02:22:08 -0800 |
parents | |
children | cbc557c35121 |
line wrap: on
line source
#!/usr/bin/python3 """ read button and knob on rpi, send back to thermostat program """ from RPi.GPIO import setmode, PUD_UP, setup, BCM, IN, input as pinInput import time, json # using a copy of urllib/request.py from py3.3 which supports 'method' from request import urlopen, Request requestedTemperature = 'http://bang.bigasterisk.com:10001/requestedTemperature' requestOpts = dict(headers={'user-agent': 'rpi buttons'}) def getRequestedTemp(): return (json.loads(urlopen( Request(requestedTemperature, **requestOpts)).read().decode('utf-8')) )['tempF'] def setRequestedTemp(f): urlopen(Request(url=requestedTemperature, method='PUT', data=json.dumps({'tempF' : f}).encode('utf-8'), **requestOpts)) PIN_KNOB_A = 1 PIN_KNOB_B = 4 PIN_BUTTON = 0 setmode(BCM) setup(PIN_KNOB_A, IN, PUD_UP) setup(PIN_KNOB_B, IN, PUD_UP) setup(PIN_BUTTON, IN, PUD_UP) print("reading knob and button, writing to %s" % requestedTemperature) prev = None prevButton = 0 buttonHold = 0 step = .05 while True: a, b = pinInput(PIN_KNOB_A), pinInput(PIN_KNOB_B) button = not pinInput(PIN_BUTTON) pos = (b * 2) + (a ^ b) if prev is None: prev = pos dpos = (pos - prev) % 4 if dpos == 1: print ("up") setRequestedTemp(getRequestedTemp() + 1) elif dpos == -1 % 4: print ("down") setRequestedTemp(getRequestedTemp() - 1) else: pass # 0 or unknown prev = pos if button: buttonHold += 1 if buttonHold == int(.1 / step): print ("button to", button) else: buttonHold = 0 time.sleep(step)