Spaces:
Sleeping
Sleeping
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)
|