File size: 5,327 Bytes
5bda095
79c9006
5bda095
 
 
e18c564
e33f692
 
 
5bda095
79c9006
5bda095
 
e33f692
35b9301
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e33f692
35b9301
79c9006
59cbdd5
 
 
 
 
 
e33f692
 
 
59cbdd5
e33f692
 
 
 
 
 
 
 
 
 
 
 
59cbdd5
e33f692
59cbdd5
 
 
 
e33f692
59cbdd5
 
 
 
 
 
 
 
e33f692
59cbdd5
e33f692
 
 
 
 
59cbdd5
e33f692
 
 
59cbdd5
e33f692
59cbdd5
 
e33f692
 
 
 
 
 
59cbdd5
e33f692
 
 
59cbdd5
e33f692
 
 
 
59cbdd5
79c9006
e33f692
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import os
import folium
from flask import Flask, render_template, jsonify, request, redirect, url_for, session
import firebase_admin
from firebase_admin import credentials, firestore
import pickle
import numpy as np
from twilio.rest import Client

# Initialize Flask app
app = Flask(__name__)
app.secret_key = os.urandom(24)  # For session management

# Firebase Admin SDK initialization
cred = credentials.Certificate({
  "type": "service_account",
  "project_id": "snippetscript-37175",
  "private_key_id": "7d509b09fd4ba89f490e0d76a6aa69bf12750739",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCcFcmms+X9z6xg\n3HXrTsKzqFtCn05jUij4wSnd1ZqoJclWP2H01jiLAzKWGjJaTi6iBOnPT7uPSo8d\nlKe0GjBn9OstHRv1CzEBP1CW4B7jrcZqBbA5nsx/XCkrzgxjJ2OCLmtyBUf/3s7j\nC2bkAu4aGyToZJwuqw1BleXBgevocjkaSW/RvWGlpSTg9OHsgRaGYALw50WzPqdv\nCioW8ioN8IGAM4TIZtsHSayBkruC3PbW+9krnevcx08f3hPi0I2OB51GxKsOGRj8\nVGxb+LUaUaAauCqV9LaCwK9qwtBZopXx2QwbR/vZGgsXk3BvAVsopbmxeyqtj/a4\nc2x7wL17AgMBAAECggEARqXH9afkuGqo09jFmOG31/iigfe4U9VKzTklOY7m5yff\nRyX+MQNLaYRjf7RQyTYs/lGqAJdOxk9RkuqHs8nM0ij1z6Am2NWdczqUwA2mfZhY\nwAFeH96EIjt1OSoUykZ4UGKxaFUCn0paq0KsahT3b6KMpJFxbeAnamGuMlWbkUR4\n1kb1vWVe/XjBMlrDVoOMYvclo/dn7oPmYMtbufrMsdn9eb4JQf1PRfAno6JdE1RB\nHZs5/kkZv8sKXc0lw+RpD35Syl3MTxIAr/PDK8cgnytS5BInZxV2iEcdvNN3/JsC\n7hJPrqb6JOZHl0WnOxXDWvBI8jREoiNTMBqT9JVcCQKBgQDUATBaeLf4ydMOtgLt\nIVuSGto6lSt3hpi85MMYeqRr/MSbltdAEVis8opCTTCBFCQgqdiqXyIKbOvKyn47\n9PLoWciyhK3TJq8u3Oaxfk1wfGdr+Q6/d8LVZQSw1X0wrTOWAdQL9Em78mhpJrvr\nSuwOKjBlP3FgilabeDrfwjFFOQKBgQC8edtC4smOaOU1ovgWFhHumcryrNtCPv9K\nb8A3687+lawzETkQ68xBpuzxRbnW7gFJfk4iVjUErdP21LLvD9hu4e2gmQfVhNQ6\nGT7eBB41l/KVPjSghgMf5fcThBeHCK1C9V9Y56nyqZoQUvbi41cJeXDbK6urtn5L\no7p2gm2sUwKBgQCoV+lVbdZoL5rwa4cXVQ2pjrkLG7hQSQivtddVcM1vEl/sTHLP\n5PZNHqq6yyBg3uVxKm1pm/Ej5im19eUXJwJbji/X0ZNVv7oLtE1bU7eaQq69Bh+3\n2hlT6cs3v86RAHed/gWrGGgUXgCavq8pv2yCMu4K973HsxHiki3tz/3fwQKBgHvr\nHocmduDEBNe0E6rpzdZzlWTi07IFm3IEcXwS9WCbZcGZtEx0zDHqH2Uus9YlXAFH\nIvYeefNemrtx80eMwn982fC6TNVM5QBh8tykFnykL6GCabWVBt7lIwLY2WM2CDy6\n+XqJrkpWym2rLpnUYThgeRwQ5WkbroPq3UDn1lXzAoGBAJVQ9pe4KCfkFP+lX7eq\n8KXFnBuVB5EQ+VDrob9KyaGRyJ5mxYqMgQc9xgYhUSGmwzkXdB3hdsCRwft5n6rr\nKNerrFH+yUwBQUXaJCY2gSUOGbKUfKGdFjoITTlpZAxnkvojk9OKz8c2HlBdE0yL\nQrbuvPr0goYJXoZj3mbDp9lO\n-----END PRIVATE KEY-----\n",
  "client_email": "firebase-adminsdk-cf1z8@snippetscript-37175.iam.gserviceaccount.com",
  "client_id": "103525651848757260255",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-cf1z8%40snippetscript-37175.iam.gserviceaccount.com",
  "universe_domain": "googleapis.com"
})
firebase_admin.initialize_app(cred)

# Firestore client
db = firestore.client()

# Twilio Configuration
ACCOUNT_SID = 'AC97ad50edcf94fdd7d4576be9651bf4bf'
AUTH_TOKEN = '6d8b2559ffbbdbc5d06542e545220aaa'
FROM_PHONE = '+12708175529'
TO_PHONE = '+916382792828'

# Load model using pickle
with open('model.pkl', 'rb') as f:
    loaded_model = pickle.load(f)

def predict_conc(pdiff):
    try:
        if pdiff > 3.19:
            return 0
        pdiff_value = pdiff  # Input for "Average Potential Difference"
        new_data = np.array([[pdiff_value]])
        prediction = loaded_model.predict(new_data)
        concentration = 10**prediction[0]  # Reverse log transformation
        return f"{concentration:.4f}"
    except Exception as e:
        print(f"Error in predict_conc: {e}")
        return None

def send_msg(field1, suggestion):
    client = Client(ACCOUNT_SID, AUTH_TOKEN)
    try:
        message = client.messages.create(
            from_=FROM_PHONE,
            body=f"""Test Results:\nE.coli Level: {field1} CFU/mL.\nStatus: {'safe' if field1 == 0 else 'unsafe'}\nSuggestions:\n{suggestion}""",
            to=TO_PHONE
        )
        print(f"Message sent successfully! SID: {message.sid}")
    except Exception as e:
        print(f"Failed to send message: {e}")

def on_snapshot(doc_snapshot, changes, read_time):
    for change in changes:
        if change.type.name == 'ADDED':
            new_data = change.document.to_dict()
            field1 = new_data.get('field1')
            if field1 is None:
                print("field1 is missing in the document.")
                continue

            print(f"New data detected: {new_data}")
            concentration = predict_conc(float(field1))
            if concentration == "0":
                send_msg(0, "The water is safe for use!!")
            else:
                send_msg(concentration, "You may boil the water to 50\u00b0C to eradicate the bacteria.")

def start_firestore_listener():
    try:
        thingspeak_ref = db.collection('thingspeak_data')
        thingspeak_ref.on_snapshot(on_snapshot)
        print("Firestore listener started.")
    except Exception as e:
        print(f"Error starting Firestore listener: {e}")

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/logout')
def logout():
    session.pop('user_phone', None)
    return redirect(url_for('index'))

if __name__ == '__main__':
    start_firestore_listener()
    app.run(host='0.0.0.0', port=7860, debug=True)