Exemplo n.º 1
0
def show_json(device_id):
    device = Device.query.filter_by(id=device_id).first_or_404()

    i = Indicator()
    r = requests.get(device.url_sensor_device)
    if r.status_code == 200:
        r = r.json()
        i.temp_inside = r['temp_inside']
        i.temp_outside_first = r['temp_outside_first']
        i.temp_outside_second = r['temp_outside_second']
        i.temp_outside_third = r['temp_outside_third']
        i.temp_outside_fourth = r['temp_outside_fourth']
        i.distance = r['distance']
        i.power = r['power']
        i.pressure = int(float(r['pressure_bmp180'])) / 100
        i.speed = r['speed']
        i.temp_in = r['temp_in']
        i.temp_out = r['temp_out']
        i.temp_all = r['temp_all']
    else:
        i.temp_inside = -1
        i.temp_outside_first = -1
        i.temp_outside_second = -1
        i.temp_outside_third = -1
        i.temp_outside_fourth = -1 
        i.distance =-1
        i.power = -1
        i.pressure = -1
        i.speed = -1
        i.temp_in = -1
        i.temp_out = -1
        i.temp_all = -1   

    i.device_id = device_id

    r = requests.get(device.url_relay_device)
    if r.status_code == 200:
        #TODO: костыль из-за старой версии прошивки реле
        r = r.text
        r = r.replace('"relay 6": 0 "sensor 1"', '"relay 6": 0, "sensor 1"').replace('"relay 6": 1 "sensor 1"', '"relay 6": 1, "sensor 1"')
        r = json.loads(r)

        i.relay1_state = False if r['relay 1'] == 1 else True
        i.relay2_state = False if r['relay 2'] == 1 else True
        i.relay3_state = False if r['relay 3'] == 1 else True
        i.relay4_state = False if r['relay 4'] == 1 else True
        i.relay5_state = False if r['relay 5'] == 1 else True
        i.relay6_state = False if r['relay 6'] == 1 else True

        current_mult =  1.0 / 1024 * 30 / 2 * 1.2 #5.0 / 1024.0 * 0.707 / 66 * 1000

        i.relay1_current = 0 if float(r['sensor 1']) <= 120 else float(r['sensor 1']) * current_mult
        i.relay2_current = 0 if float(r['sensor 2']) <= 120 else float(r['sensor 2']) * current_mult
        i.relay3_current = 0 if float(r['sensor 3']) <= 120 else float(r['sensor 3']) * current_mult
        i.relay4_current = 0 if float(r['sensor 4']) <= 120 else float(r['sensor 4']) * current_mult
        i.relay5_current = 0 if float(r['sensor 5']) <= 120 else float(r['sensor 5']) * current_mult
        i.relay6_current = 0 if float(r['sensor 6']) <= 120 else float(r['sensor 6']) * current_mult
    else:
        i.relay1_state = False
        i.relay2_state = False
        i.relay3_state = False
        i.relay4_state = False 
        i.relay5_state = False 
        i.relay6_state = False  

        i.relay1_current = 0 
        i.relay2_current = 0
        i.relay3_current = 0
        i.relay4_current = 0 
        i.relay5_current = 0 
        i.relay6_current = 0 

    if device.relay1_state is None:
        device.relay1_state =  i.relay1_state

    if device.relay2_state is None:
        device.relay2_state =  i.relay2_state

    if device.relay3_state is None:
        device.relay3_state =  i.relay3_state

    if device.relay4_state is None:
        device.relay4_state =  i.relay4_state

    if device.relay5_state is None:
        device.relay5_state =  i.relay5_state

    if device.relay6_state is None:
        device.relay6_state =  i.relay6_state

    device.status = True if device.relay1_state or device.relay2_state or device.relay3_state or device.relay4_state or device.relay5_state or device.relay6_state else False


    if (device.relay1_state != i.relay1_state):
        if (device.relay1_state):
            requests.get(device.url_relay_device + 'relay1on')    
        else:
            requests.get(device.url_relay_device + 'relay1off')

    if (device.relay2_state != i.relay2_state):
        if (device.relay2_state):
            requests.get(device.url_relay_device + 'relay2on')    
        else:
            requests.get(device.url_relay_device + 'relay2off')

    if (device.relay3_state != i.relay3_state):
        if (device.relay3_state):
            requests.get(device.url_relay_device + 'relay3on')    
        else:
            requests.get(device.url_relay_device + 'relay3off')

    if (device.relay4_state != i.relay4_state):
        if (device.relay4_state):
            requests.get(device.url_relay_device + 'relay4on')    
        else:
            requests.get(device.url_relay_device + 'relay4off')

    if (device.relay5_state != i.relay5_state):
        if (device.relay5_state):
            requests.get(device.url_relay_device + 'relay5on')    
        else:
            requests.get(device.url_relay_device + 'relay5off')

    if (device.relay6_state != i.relay6_state):
        if (device.relay6_state):
            requests.get(device.url_relay_device + 'relay6on')    
        else:
            requests.get(device.url_relay_device + 'relay6off')

    #получаеми хэшрейты
    i.hashrate_poolbtccom = 0
    if (not device.apikey_poolbtccom is None and device.apikey_poolbtccom != ""):
        r = requests.get("https://eu-pool.api.btc.com/v1/realtime/hashrate?access_key="+device.apikey_poolbtccom+"&puid="+device.puid_poolbtccom)
        if r.status_code == 200:
            print(r.text)
            r = r.json()
            if (r["err_no"] == 0):
                i.hashrate_poolbtccom = float(r["data"]["shares_15m"])
            

    

    #antpool
    i.hashrate_antpool = 0
    if (not device.apikey_antpool is None and device.apikey_antpool != ""):
        nonce=int(time.time()*1000)
        msgs=device.userid_antpool+device.apikey_antpool+str(nonce)
        api_sign=[]
        api_sign.append(hmac.new(device.secret_antpool.encode(encoding="utf-8"), msg=msgs.encode(encoding="utf-8"), digestmod=hashlib.sha256).hexdigest().upper())
        api_sign.append(nonce)

        post_data = {'key': device.apikey_antpool, 'nonce': api_sign[1],'signature': api_sign[0],'coin': device.coin_antpool}
        r = requests.post("https://antpool.com/api/hashrate.htm", data=post_data)

        if r.status_code == 200:
            r = r.json()
            if r["code"] == 0:
                try:
                    i.hashrate_antpool = int(r["data"]["last10m"])
                except:
                    pass

    i.hashrate_viabtc = 0

    i.hashrate_f2pool = 0
    if (not device.apikey_f2pool is None and device.apikey_f2pool != ""):
        r = requests.get("http://api.f2pool.com/bitcoin/"+device.apikey_f2pool)
        if r.status_code == 200:
            r = r.json()
            try:
                i.hashrate_f2pool = int(r["hashrate"])
            except:
                pass   

    i.hashrate_slushpool = 0

    if (not device.apikey_slushpool is None and device.apikey_slushpool != ""):
        r = requests.get("https://slushpool.com/accounts/profile/json/"+device.apikey_slushpool)
        if r.status_code == 200 and r.text != "Invalid token":
            r = r.json()
            try:
                i.hashrate_slushpool = int(r["workers"][r["username"] + "." + device.worker_slushpool]["hashrate"])
            except:
                pass

    i.hashrate_total = i.hashrate_poolbtccom + i.hashrate_antpool + i.hashrate_viabtc + i.hashrate_f2pool + i.hashrate_slushpool 
    device.hash_rate = i.hashrate_total

    db.session.add(i)
    db.session.commit()

    # Некоторое количество говнокода
    a = Alert()
    if float(i.temp_inside) > 75.0:
        a.text = "Внутренняя температура превышает пороговое значение в 75 градусов на " + str(float(r['temp_inside'])-75.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Внутренняя температура превышает пороговое значение в 75 градусов на " + str(float(r['temp_inside'])-75.0) + "градусов")
    if float(i.temp_outside_first) > 70.0:
        a.text = "Температура первого датчика превышает пороговое значение в 70 градусов на " + str(float(r['temp_outside_first'])-70.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура первого датчика превышает пороговое значение в 70 градусов на " + str(float(r['temp_outside_first'])-70.0) + "градусов")
    if float(i.temp_outside_second) > 65.0:
        a.text = "Температура второго датчика превышает пороговое значение в 65 градусов на " + str(float(r['temp_outside_second'])-65.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура второго датчика превышает пороговое значение в 65 градусов на " + str(float(r['temp_outside_second'])-65.0) + "градусов")
    if float(i.temp_outside_third) > 60.0:
        a.text = "Температура третьего датчика превышает пороговое значение в 60 градусов на " + str(float(r['temp_outside_third'])-60.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура третьего датчика превышает пороговое значение в 60 градусов на " + str(float(r['temp_outside_third'])-60.0) + "градусов")
    if float(i.temp_outside_fourth) > 60.0:
        a.text = "Температура четвёртого датчика превышает пороговое значение в 60 градусов на " + str(float(r['temp_outside_fourth'])-60.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура четвёртого датчика превышает пороговое значение в 60 градусов на " + str(float(r['temp_outside_fourth'])-60.0) + "градусов")
    if float(i.distance) > 199.0:
        a.text = "Расстояние до жидкости превышает пороговое значение 199 на " + str(float(r['distance'])-199.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Расстояние до жидкости!', '*****@*****.**', ['*****@*****.**'], "Расстояние до жидкости превышает пороговое значение 199 на " + str(float(r['distance'])-199.0))
    if float(i.power) > 100.0:
        a.text = "Мощность превышает пороговое значение 100 на" + str(float(r['power'])-100.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Мощность!', '*****@*****.**', ['*****@*****.**'], "Мощность превышает пороговое значение 100 на" + str(float(r['power'])-100.0))
    if float(i.pressure) > 200000.0:
        a.text = "Давление превышает пороговое значение 200000 на " + str(float(r['pressure'])-200000.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        send_email('Превышение давления!', '*****@*****.**', ['*****@*****.**'], "Давление превышает пороговое значение 200000 на " + str(float(r['pressure'])-200000.0))
    #if float(r['speed']) > 0.0:
    #    a.text = "Скорость превышает пороговое значение в 0 на " + str(float(r['temp_outside_fourth'])-0.0)
    #    a.device_id = i.device_id
    #    db.session.add(a)
     #   db.session.commit()
    #if float(r['temp_in']) > 0.0:
    #    a.text = "Температура внутри превышает пороговое значение в 0 градусов на " + str(float(r['temp_in'])-0.0) + "градусов"
    #    a.device_id = i.device_id
    #    db.session.add(a)
    #    db.session.commit()
    #if float(r['temp_out']) > 0.0:
    #    a.text = "Температура снаружи превышает пороговое значение в 0 градусов на " + str(float(r['temp_out'])-0.0) + "градусов"
    #    a.device_id = i.device_id
    #    db.session.add(a)
    #    db.session.commit()
    #if float(r['temp_all']) > 0.0:
    #    a.text = "Температура общая превышает пороговое значение в 0 градусов на " + str(float(r['temp_all'])-0.0) + "градусов"
    #    a.device_id = i.device_id
    #    db.session.add(a)
    #    db.session.commit()
    
    indicator = i.query.filter_by(device_id=1).first()
    return render_template('json_show.html', data=indicator.timestamp)
Exemplo n.º 2
0
def sget_sensor_parms(device_id):
    device = Device.query.filter_by(id=device_id).first_or_404()
    i = Indicator()
    
    temp_inside = request.args.get('temp_inside', default = -1, type = float)
    temp_outside_first = request.args.get('temp_outside_first', default = -1, type = float)
    temp_outside_second = request.args.get('temp_outside_second', default = -1, type = float)
    temp_outside_third = request.args.get('temp_outside_third', default = -1, type = float)
    if (temp_outside_second == 0):
        temp_outside_second = round((temp_outside_first+temp_outside_third)/2,1)
    temp_outside_fourth = request.args.get('temp_outside_fourth', default = -1, type = float)
    distance = request.args.get('distance', default = -1, type = float)
    power = request.args.get('power', default = -1, type = float)
    pressure = request.args.get('pressure', default = -1, type = float)
    if pressure != -1:
        pressure = int(float(pressure)) / 100
    else:
        pressure = pressure
    speed = request.args.get('speed', default = -1, type = float)
    temp_in = request.args.get('temp_in', default = -1, type = float)
    temp_out = request.args.get('temp_out', default = -1, type = float)
    temp_all = request.args.get('temp_all', default = -1, type = float)
    
    i.temp_inside = temp_inside
    i.temp_outside_first = temp_outside_first
    i.temp_outside_second = temp_outside_second
    i.temp_outside_third = temp_outside_third
    i.temp_outside_fourth = temp_outside_fourth
    i.distance = distance
    i.power = power
    i.pressure = pressure
    i.speed = speed
    i.temp_in = temp_in
    i.temp_out = temp_out
    i.temp_all = temp_all
    
    i.device_id = device_id
    
    #получаеми хэшрейты
    i.hashrate_poolbtccom = 0
    if (not device.apikey_poolbtccom is None and device.apikey_poolbtccom != ""):
        r = requests.get("https://eu-pool.api.btc.com/v1/realtime/hashrate?access_key="+device.apikey_poolbtccom+"&puid="+device.puid_poolbtccom)
        if r.status_code == 200:
            print(r.text)
            r = r.json()
            if (r["err_no"] == 0):
                i.hashrate_poolbtccom = float(r["data"]["shares_15m"])
            

    

    #antpool
    i.hashrate_antpool = 0
    if (not device.apikey_antpool is None and device.apikey_antpool != ""):
        nonce=int(time.time()*1000)
        msgs=device.userid_antpool+device.apikey_antpool+str(nonce)
        api_sign=[]
        api_sign.append(hmac.new(device.secret_antpool.encode(encoding="utf-8"), msg=msgs.encode(encoding="utf-8"), digestmod=hashlib.sha256).hexdigest().upper())
        api_sign.append(nonce)

        post_data = {'key': device.apikey_antpool, 'nonce': api_sign[1],'signature': api_sign[0],'coin': device.coin_antpool}
        r = requests.post("https://antpool.com/api/hashrate.htm", data=post_data)

        if r.status_code == 200:
            r = r.json()
            if r["code"] == 0:
                try:
                    i.hashrate_antpool = int(r["data"]["last10m"])
                except:
                    pass

    i.hashrate_viabtc = 0

    i.hashrate_f2pool = 0
    if (not device.apikey_f2pool is None and device.apikey_f2pool != ""):
        r = requests.get("http://api.f2pool.com/bitcoin/"+device.apikey_f2pool)
        if r.status_code == 200:
            r = r.json()
            try:
                i.hashrate_f2pool = int(r["hashrate"])
            except:
                pass   

    i.hashrate_slushpool = 0

    if (not device.apikey_slushpool is None and device.apikey_slushpool != ""):
        r = requests.get("https://slushpool.com/accounts/profile/json/"+device.apikey_slushpool)
        if r.status_code == 200 and r.text != "Invalid token":
            r = r.json()
            try:
                i.hashrate_slushpool = int(r["workers"][r["username"] + "." + device.worker_slushpool]["hashrate"])
            except:
                pass

    i.hashrate_total = i.hashrate_poolbtccom + i.hashrate_antpool + i.hashrate_viabtc + i.hashrate_f2pool + i.hashrate_slushpool 
    device.hash_rate = i.hashrate_total

    db.session.add(i)
    db.session.commit()

    # Некоторое количество говнокода
    a = Alert()
    if float(i.temp_inside) > 75.0:
        a.text = "Внутренняя температура превышает пороговое значение в 75 градусов на " + str(float(temp_inside)-75.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Внутренняя температура превышает пороговое значение в 75 градусов на " + str(float('temp_inside)-75.0) + "градусов")
    if float(i.temp_outside_first) > 70.0:
        a.text = "Температура первого датчика превышает пороговое значение в 70 градусов на " + str(float(temp_outside_first)-70.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура первого датчика превышает пороговое значение в 70 градусов на " + str(float('temp_outside_first)-70.0) + "градусов")
    if float(i.temp_outside_second) > 65.0:
        a.text = "Температура второго датчика превышает пороговое значение в 65 градусов на " + str(float(temp_outside_second)-65.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура второго датчика превышает пороговое значение в 65 градусов на " + str(float(temp_outside_second)-65.0) + "градусов")
    if float(i.temp_outside_third) > 60.0:
        a.text = "Температура третьего датчика превышает пороговое значение в 60 градусов на " + str(float(temp_outside_third)-60.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура третьего датчика превышает пороговое значение в 60 градусов на " + str(float(temp_outside_third)-60.0) + "градусов")
    if float(i.temp_outside_fourth) > 60.0:
        a.text = "Температура четвёртого датчика превышает пороговое значение в 60 градусов на " + str(float(temp_outside_fourth)-60.0) + "градусов"
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение температуры!', '*****@*****.**', ['*****@*****.**'], "Температура четвёртого датчика превышает пороговое значение в 60 градусов на " + str(float(temp_outside_fourth)-60.0) + "градусов")
    if float(i.distance) > 199.0:
        a.text = "Расстояние до жидкости превышает пороговое значение 199 на " + str(float(distance)-199.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Расстояние до жидкости!', '*****@*****.**', ['*****@*****.**'], "Расстояние до жидкости превышает пороговое значение 199 на " + str(float(distance)-199.0))
    if float(i.power) > 100.0:
        a.text = "Мощность превышает пороговое значение 100 на" + str(float(power)-100.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Мощность!', '*****@*****.**', ['*****@*****.**'], "Мощность превышает пороговое значение 100 на" + str(float(power)-100.0))
    if float(i.pressure) > 200000.0:
        a.text = "Давление превышает пороговое значение 200000 на " + str(float(pressure)-200000.0)
        a.device_id = i.device_id
        db.session.add(a)
        db.session.commit()
        #send_email('Превышение давления!', '*****@*****.**', ['*****@*****.**'], "Давление превышает пороговое значение 200000 на " + str(float(pressure)-200000.0))
        
    indicator = i.query.filter_by(device_id=1).first()
    return render_template('json_show.html', data=indicator.timestamp)