icl-iot-weather/dnup_virtual_sensor/virtual_soil_sensor.py
2021-01-05 15:19:05 +00:00

67 lines
1.8 KiB
Python
Executable File

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)