Adding virtual probe code

This commit is contained in:
Max 2021-01-05 15:19:05 +00:00
parent 039cd556a7
commit f5601e4aaf
8 changed files with 79 additions and 5 deletions

Binary file not shown.

View File

@ -0,0 +1,6 @@
FROM pa_py_ml_fb:latest
WORKDIR /code
COPY . .
RUN pip install Flask
EXPOSE 3333
CMD "/code/virtual_soil_sensor.py"

Binary file not shown.

View File

@ -0,0 +1,66 @@
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)

View File

@ -4,4 +4,4 @@ COPY . .
RUN pip install requests RUN pip install requests
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
EXPOSE 3333 EXPOSE 3333
CMD "/code/irrigator.py" CMD "/code/main.py"

View File

@ -1,12 +1,13 @@
#!/usr/local/bin/python #!/usr/local/bin/python
import logging
import time
import adafruit_rfm69
import board import board
import busio import busio
import digitalio import digitalio
import logging
from requests import get as api_get from requests import get as api_get
import adafruit_rfm69
class LoRa: class LoRa:
__SIGNAL_FREQUENCY = 915.0 __SIGNAL_FREQUENCY = 915.0
@ -76,7 +77,7 @@ class Irrigator:
if rsp.status_code != 200: if rsp.status_code != 200:
logging.error(f'Got code {rsp.status_code} from server, using yesterday\'s value') logging.error(f'Got code {rsp.status_code} from server, using yesterday\'s value')
return self.yesterday_water return self.yesterday_water
today_water = rsp.json().get('value') today_water = int(rsp.json().get('value'))
self.yesterday_water = today_water self.yesterday_water = today_water
return today_water return today_water
@ -87,6 +88,7 @@ class Irrigator:
while True: while True:
watering_vol = self.get_today_watering_vol() watering_vol = self.get_today_watering_vol()
self.send_watering_command(watering_vol) self.send_watering_command(watering_vol)
time.sleep(60*60*24)
if __name__ == "__main__": if __name__ == "__main__":