ugnen

git clone https://git.tarina.org/ugnen
Log | Files | Refs

ugnen.py (4443B)


      1 import RPi.GPIO as GPIO
      2 import time
      3 import json
      4 import requests
      5 import socket
      6 import os
      7 import pickle
      8 #import serial
      9 import blessed
     10 import max6675
     11 
     12 # set the pin for communicate with MAX6675
     13 cs = 20
     14 sck = 26
     15 so = 16
     16 # max6675.set_pin(CS, SCK, SO, unit)   [unit : 0 - raw, 1 - Celsius, 2 - Fahrenheit]
     17 max6675.set_pin(cs, sck, so, 1)
     18 
     19 term = blessed.Terminal()
     20 
     21 #Bra Brööö
     22 
     23 rundir = os.path.dirname(__file__)
     24 if rundir != '':
     25     os.chdir(rundir)
     26 folder = os.getcwd()
     27 print(folder)
     28 try:
     29     f = open(folder+"/apikey", "r")
     30     apikey = f.readline().strip()
     31 except:
     32     apikey = 'none'
     33 heating = False
     34 
     35 baseurl = 'https://brabro.fi/owenapi?apikey='+apikey+'&'
     36 relaypin = 21
     37 start_time = time.time()
     38 get_code_time = time.time()
     39 new_temp = 'gettin temp...'
     40 cooldown = False
     41 float_temp = 0.0
     42 set_temp = 200.0
     43 cooldown_degrees = 8.0
     44 cooldown_half = cooldown_degrees/2
     45 GPIO.setmode(GPIO.BCM)
     46 GPIO.setup(relaypin, GPIO.OUT) #RELAY
     47 #GPIO.setup(12, GPIO.OUT, pull_up_down=GPIO.PUD_DOWN) #Öppen knappen
     48 GPIO.output(relaypin, GPIO.LOW)
     49 
     50 
     51 #try:
     52 #    arduino = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=.1)
     53 #except:
     54 #    arduino = ''
     55 
     56 def read_temp():
     57     try:
     58         temp = max6675.read_temp(cs)
     59         #temp = arduino.readline().decode('utf-8').rstrip()
     60     except:
     61         return 0
     62     return temp
     63 
     64 def save_temp(set_temp):
     65     global folder
     66     with open(folder+'/.set_temp.p', 'wb') as f:
     67         pickle.dump(set_temp, f)
     68         #print('save temperature for offline mode')
     69 
     70 def load_temp():
     71     global folder
     72     temp = pickle.load(open(folder+'/.set_temp.p', 'rb'))
     73     return float(temp)
     74 
     75 def is_webz_on():
     76     try:
     77         socket.create_connection(("google.com",80))
     78         return True
     79     except:
     80         pass
     81     print('no internet connection!')
     82     return False
     83 
     84 def get_set_temp(old_temp):
     85     global apikey, baseurl
     86     url = baseurl + 'status=get_temp'
     87     #print(url)
     88     try:
     89         resp = requests.get(url=url)
     90         set_temp = resp.json()
     91     except:
     92         print('cant access brabro.fi')
     93     try:
     94         set_temp = float(set_temp)
     95     except:
     96         pass
     97     if old_temp != set_temp:
     98         save_temp(set_temp)
     99         print('got new temp ' + str(set_temp) + ' from interweb')
    100         time.sleep(2)
    101         return set_temp
    102     else:
    103         return 
    104 
    105 def send_temp_interweb(temp):
    106     global apikey, baseurl
    107     url = baseurl + 'temp=' + str(temp)
    108     #print('sending debug info to brabro.fi api')
    109     try:
    110         resp = requests.get(url=url)
    111         #print(resp)
    112     except:
    113         print('cant send debug info to brabro.fi')
    114     return
    115 
    116 def failbeep():
    117     successbeep()
    118     successbeep()
    119 
    120 def successbeep():
    121     GPIO.output(21,GPIO.HIGH)
    122     time.sleep(0.25)
    123     GPIO.output(21,GPIO.LOW)
    124 
    125 #load from last session
    126 set_temp = load_temp()
    127 temp_input=''
    128 with term.fullscreen(), term.cbreak(), term.hidden_cursor():
    129     while 1:
    130         run_time = time.time() - start_time
    131         update = time.time() - get_code_time
    132         #time.sleep(0.2)
    133         if update > 5:
    134             get_code_time = time.time()
    135             if is_webz_on():
    136                 new_set_temp = get_set_temp(set_temp)
    137                 if new_set_temp:
    138                     set_temp = new_set_temp
    139                 send_temp_interweb(new_temp)
    140                 #doordebug()
    141         temp = read_temp()
    142         if temp != '':
    143             new_temp = str(temp)
    144         time.sleep(1)
    145         val = term.inkey(timeout=1)
    146         if val.is_sequence:
    147             event=val.name
    148         elif val:
    149             event=val
    150         else:
    151             event=''
    152         if event.isdigit():
    153             temp_input+=event
    154         elif event=='KEY_ENTER' or event==10 or event==13:
    155             new_temp=temp_input
    156         print(term.clear)
    157         print(term.bold_yellow('Temperature is now ' + new_temp + ' ℃'))
    158         print(term.bold_yellow('Temperature is set for ' + str(set_temp) + ' ℃'))
    159         #print(term.red(str(run_time)))
    160         if cooldown == True:
    161             print(term.green('RELAY IS OFF'))
    162         else:
    163             print(term.green('RELAY IS ON'))
    164         try:
    165             float_temp = float(new_temp)
    166         except:
    167             print('Inititializing...')
    168         if float_temp > set_temp + float(cooldown_half):
    169             GPIO.output(relaypin, GPIO.HIGH)
    170             cooldown = True
    171         if float_temp < set_temp - float(cooldown_half) and cooldown == True:
    172             GPIO.output(relaypin, GPIO.LOW)
    173             cooldown = False