Adding virtual probe code
This commit is contained in:
parent
039cd556a7
commit
f5601e4aaf
Binary file not shown.
6
dnup_virtual_sensor/Dockerfile
Normal file
6
dnup_virtual_sensor/Dockerfile
Normal 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"
|
||||
BIN
dnup_virtual_sensor/virtual_probe.model/saved_model.pb
Normal file
BIN
dnup_virtual_sensor/virtual_probe.model/saved_model.pb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
66
dnup_virtual_sensor/virtual_soil_sensor.py
Executable file
66
dnup_virtual_sensor/virtual_soil_sensor.py
Executable 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)
|
||||
@ -4,4 +4,4 @@ COPY . .
|
||||
RUN pip install requests
|
||||
RUN pip install -r requirements.txt
|
||||
EXPOSE 3333
|
||||
CMD "/code/irrigator.py"
|
||||
CMD "/code/main.py"
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
#!/usr/local/bin/python
|
||||
import logging
|
||||
import time
|
||||
|
||||
import adafruit_rfm69
|
||||
import board
|
||||
import busio
|
||||
import digitalio
|
||||
import logging
|
||||
from requests import get as api_get
|
||||
|
||||
import adafruit_rfm69
|
||||
|
||||
|
||||
class LoRa:
|
||||
__SIGNAL_FREQUENCY = 915.0
|
||||
@ -76,7 +77,7 @@ class Irrigator:
|
||||
if rsp.status_code != 200:
|
||||
logging.error(f'Got code {rsp.status_code} from server, using yesterday\'s value')
|
||||
return self.yesterday_water
|
||||
today_water = rsp.json().get('value')
|
||||
today_water = int(rsp.json().get('value'))
|
||||
self.yesterday_water = today_water
|
||||
return today_water
|
||||
|
||||
@ -87,6 +88,7 @@ class Irrigator:
|
||||
while True:
|
||||
watering_vol = self.get_today_watering_vol()
|
||||
self.send_watering_command(watering_vol)
|
||||
time.sleep(60*60*24)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Loading…
Reference in New Issue
Block a user