Compare commits

..

No commits in common. "0d7b2a4935adcf770616687f036f6c3e077b4ad3" and "be6fb4bc3c084e819d2d9118489dc0b418bbf9f5" have entirely different histories.

2 changed files with 21 additions and 83 deletions

View File

@ -1,50 +1,35 @@
import os import os
import logging import logging
DEBUG = os.environ.get('DEBUG', False)
logging.basicConfig( logging.basicConfig(
format='[%(asctime)s] %(levelname)s %(module)s/%(funcName)s - %(message)s', format='[%(asctime)s] %(levelname)s %(module)s/%(funcName)s - %(message)s',
level=logging.DEBUG if DEBUG else logging.INFO) level=logging.DEBUG if os.environ.get('DEBUG') else logging.INFO)
#logging.getLogger('aiohttp').setLevel(logging.DEBUG if os.environ.get('DEBUG') else logging.WARNING)
import asyncio import asyncio
from statistics import mean from statistics import mean
from signal import *
import time
import w1therm import w1therm
import relays import relays
import data import data
import requests
HI_SETPOINT = 40.0 HI_SETPOINT = 40.0
LO_SETPOINT = HI_SETPOINT - 5.0 LO_SETPOINT = 30.0
PUMP_RELAY = relays.RELAY1
FAN_RELAY = relays.RELAY3 FAN_RELAY = relays.RELAY3
def controller_message(message): async def main():
payload = dict(misc=message) relays.init_relays()
r = requests.post('https://tbot.tannercollin.com/message', data=payload, timeout=10)
if r.status_code == 200:
return True
else:
logging.exception('Unable to communicate with controller! Message: ' + message)
return False
while True:
def set_fan_on(): try:
relays.set_relay(FAN_RELAY, relays.RELAY_ON)
def set_fan_off():
relays.set_relay(FAN_RELAY, relays.RELAY_OFF)
def set_pump_on():
relays.set_relay(PUMP_RELAY, relays.RELAY_ON)
async def get_temp():
temps = await w1therm.get_temperatures() temps = await w1therm.get_temperatures()
if len(temps) != len(data.PROBES): if len(temps) != len(data.PROBES):
raise raise
except:
logging.error('Problem reading temperature probes! Setting fan on and sleeping.')
relays.set_relay(FAN_RELAY, relays.RELAY_ON)
await asyncio.sleep(60)
continue
temperature_log = [] temperature_log = []
for id_, temp in temps.items(): for id_, temp in temps.items():
@ -53,65 +38,18 @@ async def get_temp():
temperature_list = list(temps.values()) temperature_list = list(temps.values())
temperature_mean = mean(temperature_list) temperature_mean = mean(temperature_list)
return temperature_mean
async def run_thermostat():
while True:
try:
temperature_mean = await get_temp()
except:
logging.error('Problem reading temperature probes! Turning fan on and sleeping 60s.')
relays.set_relay(FAN_RELAY, relays.RELAY_ON)
await asyncio.sleep(60)
continue
if temperature_mean > HI_SETPOINT: if temperature_mean > HI_SETPOINT:
logging.info('Turning fan on') logging.info('Turning fan on')
set_fan_on() relays.set_relay(FAN_RELAY, relays.RELAY_ON)
elif temperature_mean < LO_SETPOINT: elif temperature_mean < LO_SETPOINT:
logging.info('Turning fan off') logging.info('Turning fan off')
set_fan_off() relays.set_relay(FAN_RELAY, relays.RELAY_OFF)
await asyncio.sleep(10) await asyncio.sleep(10)
def run_on_exit(*args):
logging.info('Cryptosoak exiting, turning pump and fan on.')
controller_message('Cryptosoak exiting.')
set_pump_on()
set_fan_on()
exit()
async def feed_watchdog():
while True:
with open('/dev/watchdog', 'w') as wdt:
wdt.write('1')
await asyncio.sleep(5)
def init():
relays.init_relays()
set_pump_on()
for sig in (SIGABRT, SIGILL, SIGINT, SIGSEGV, SIGTERM):
signal(sig, run_on_exit)
logging.info('Signals initialized')
async def main():
controller_message('Cryptosoak booting up...')
logging.info('Initialization complete')
await run_thermostat()
if __name__ == '__main__': if __name__ == '__main__':
init()
if not DEBUG:
logging.info('Waiting 60 seconds to boot...')
time.sleep(60)
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
loop.run_until_complete(main()).add_done_callback(run_on_exit) loop.run_until_complete(main())
if not DEBUG:
loop.run_until_complete(feed_watchdog())
loop.close() loop.close()

View File

@ -31,7 +31,7 @@ async def test():
for r in RELAYS: for r in RELAYS:
set_relay(r, RELAY_ON) set_relay(r, RELAY_ON)
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
set_relay(r, RELAY_OFF) #set_relay(r, RELAY_OFF)
if __name__ == '__main__': if __name__ == '__main__':
init_relays() init_relays()