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 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"
|
||||||
|
|||||||
@ -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__":
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user