68 lines
1.8 KiB
Python
Executable File
68 lines
1.8 KiB
Python
Executable File
#!/usr/local/bin/python
|
|
import logging
|
|
|
|
import firebase_admin
|
|
from firebase_admin import credentials, firestore
|
|
from flask import Flask
|
|
from tensorflow import keras
|
|
|
|
|
|
class Firebase:
|
|
def __init__(self):
|
|
self.creds = credentials.Certificate(
|
|
'icl-iot-weather-firebase-adminsdk.json')
|
|
firebase_admin.initialize_app(self.creds)
|
|
self.db = firestore.client()
|
|
|
|
def pull_from_db(self, orderby=u'timestamp'):
|
|
doc_ref = self.db.collection('weather_data')
|
|
query = doc_ref.order_by(orderby,
|
|
direction=firestore.Query.DESCENDING).limit(1)
|
|
doc = query.stream()
|
|
return doc
|
|
|
|
def convert_to_float(self, data):
|
|
doc_elements = []
|
|
for element in data:
|
|
doc_elements.append(element)
|
|
feature_temp = doc_elements[0].to_dict()['temp']
|
|
return feature_temp
|
|
|
|
def get_feature(self):
|
|
doc = self.pull_from_db()
|
|
feature = self.convert_to_float(doc)
|
|
return feature
|
|
|
|
|
|
class VirtualProbe:
|
|
def __init__(self):
|
|
self.firebase = Firebase()
|
|
self.model = keras.models.load_model('virtual_probe.model')
|
|
|
|
def predict_soil_temp(self):
|
|
feature = self.firebase.get_feature()
|
|
predicted_temp = self.model.predict([feature])
|
|
return predicted_temp
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.root.setLevel(logging.DEBUG)
|
|
probe = VirtualProbe()
|
|
|
|
node = Flask(__name__)
|
|
|
|
@node.route("/")
|
|
def root():
|
|
return "IoT-ICL DE Weather Master Node running..."
|
|
|
|
@node.route("/hmdt")
|
|
def humidity():
|
|
return {'success': True, 'value': 0}
|
|
|
|
@node.route("/temp")
|
|
def temp():
|
|
temp = probe.predict_soil_temp()
|
|
return {'success': True, 'value': temp}
|
|
|
|
node.run(host='0.0.0.0', port='3333', use_reloader=False)
|