Browse Source

Upload Client

master
5okin 3 years ago
parent
commit
56bbc0c8b9
  1. 113
      client/client.py
  2. 35
      client/fake_weather.json
  3. 1
      client/requirements.txt
  4. 39
      client/selection_menus.py

113
client/client.py

@ -0,0 +1,113 @@
import random
import json
import time
from datetime import datetime
from requests import put
from selection_menus import select_operating_mode, server_ip_address
def percentage(new, old):
'''Check if numbers are within 10% of eachother (old value ±10%)'''
return bool(not (old - old * 10 / 100.0) <= new <= (old + old * 10 / 100.0))
#return False
def weather_station():
'''Create random weather data'''
temp_min = 30 #Temperature range in Celsius
temp_max = 45
airhum_min = 40 #Air humidity range in percentage
airhum_max = 90
grdhum_min = 60 #Ground humidity range in percentage
grdhum_max = 70
wind_min = 0 #Wind speed in Km/h
wind_max = 10
measurment = {
"temperature": random.randrange(temp_min * 10, temp_max * 10)/10,
"air-humidity": random.randrange(airhum_min, airhum_max),
"ground-humidity": random.randrange(grdhum_min, grdhum_max),
"windspeed": random.randrange(wind_min, wind_max),
"time": datetime.now().strftime("%H:%M:%S"), #Log current time
}
return measurment
def more_than_10_percent(last_send_data, current_measurment):
'''Check if data current measurment is 10% different than last send data'''
if not last_send_data:
return True
else:
for data in current_measurment:
if data != 'time' and data != 'sensor-id':
if percentage(current_measurment[data], last_send_data[data]):
print(data)
print("compaired " + str(current_measurment) + " with " + str(last_send_data))
return True
def five_minute_passed(time_last_send):
'''Checks if 5min have passed'''
time_last_send = time_last_send['time']
time_now = datetime.now().strftime("%H:%M:%S")
tdelta = datetime.strptime(time_now, '%H:%M:%S') - datetime.strptime(time_last_send, '%H:%M:%S')
if tdelta.seconds >= 300:
print("SEND CAUSE TIME PASSED")
return True
def fake_data_from_json(i):
'''Imports measurments from .json file named fake_weather for testing'''
with open('./fake_weather.json') as json_file:
data = json.load(json_file)
data[i]['time'] = datetime.now().strftime("%H:%M:%S")
return data[i], len(data)
def main(url, mode):
'''Main function runs selected mode'''
last_send = {}
curr_measurement = {}
i = 0
while True:
if mode is "json":
if i < fake_data_from_json(i)[1]-1:
curr_measurement = fake_data_from_json(i)[0]
else:
print("\nTesting over\n")
break
i += 1
else:
curr_measurement = weather_station()
print("Current sensor value is: " + str(curr_measurement))
if more_than_10_percent(last_send, curr_measurement) or five_minute_passed(last_send):
last_send = curr_measurement.copy()
print("Send: " + str(last_send) + "\n")
try:
put(url=url, json=json.dumps(last_send))
except:
print("ERROR: Lost connection with server\nmake sure server is still running.")
break
time.sleep(30)
if __name__ == "__main__":
URL = server_ip_address()
if select_operating_mode():
print("IMPORT FROM JSON")
main(URL, "json")
else:
print("GENERATE RANDOM DATA")
main(URL, "random")

35
client/fake_weather.json

@ -0,0 +1,35 @@
[
{"temperature": 17.4, "air-humidity": 72, "ground-humidity": 70, "windspeed": 8, "time": ""},
{"temperature": 19.8, "air-humidity": 70, "ground-humidity": 69, "windspeed": 7, "time": ""},
{"temperature": 19.4, "air-humidity": 71, "ground-humidity": 65, "windspeed": 7, "time": ""},
{"temperature": 18.0, "air-humidity": 64, "ground-humidity": 63, "windspeed": 7, "time": ""},
{"temperature": 17.9, "air-humidity": 65, "ground-humidity": 62, "windspeed": 8, "time": ""},
{"temperature": 16.5, "air-humidity": 64, "ground-humidity": 60, "windspeed": 8, "time": ""},
{"temperature": 16.7, "air-humidity": 62, "ground-humidity": 61, "windspeed": 8, "time": ""},
{"temperature": 16.9, "air-humidity": 60, "ground-humidity": 58, "windspeed": 8, "time": ""},
{"temperature": 17.5, "air-humidity": 61, "ground-humidity": 58, "windspeed": 8, "time": ""},
{"temperature": 17.7, "air-humidity": 59, "ground-humidity": 57, "windspeed": 8, "time": ""},
{"temperature": 17.9, "air-humidity": 59, "ground-humidity": 63, "windspeed": 8, "time": ""},
{"temperature": 18.5, "air-humidity": 59, "ground-humidity": 64, "windspeed": 8, "time": ""},
{"temperature": 18.6, "air-humidity": 60, "ground-humidity": 60, "windspeed": 8, "time": ""},
{"temperature": 19.0, "air-humidity": 61, "ground-humidity": 58, "windspeed": 8, "time": ""},
{"temperature": 19.1, "air-humidity": 65, "ground-humidity": 66, "windspeed": 8, "time": ""},
{"temperature": 20.0, "air-humidity": 65, "ground-humidity": 66, "windspeed": 0, "time": ""},
{"temperature": 21.3, "air-humidity": 71, "ground-humidity": 68, "windspeed": 9, "time": ""},
{"temperature": 32.9, "air-humidity": 79, "ground-humidity": 64, "windspeed": 6, "time": ""},
{"temperature": 23.7, "air-humidity": 47, "ground-humidity": 60, "windspeed": 6, "time": ""},
{"temperature": 24.9, "air-humidity": 82, "ground-humidity": 69, "windspeed": 1, "time": ""},
{"temperature": 25.4, "air-humidity": 82, "ground-humidity": 67, "windspeed": 5, "time": ""},
{"temperature": 26.7, "air-humidity": 32, "ground-humidity": 68, "windspeed": 4, "time": ""},
{"temperature": 34.9, "air-humidity": 84, "ground-humidity": 63, "windspeed": 7, "time": ""},
{"temperature": 31.3, "air-humidity": 82, "ground-humidity": 68, "windspeed": 5, "time": ""},
{"temperature": 42.1, "air-humidity": 54, "ground-humidity": 67, "windspeed": 1, "time": ""},
{"temperature": 35.7, "air-humidity": 58, "ground-humidity": 64, "windspeed": 8, "time": ""},
{"temperature": 42.6, "air-humidity": 42, "ground-humidity": 61, "windspeed": 7, "time": ""},
{"temperature": 42.6, "air-humidity": 86, "ground-humidity": 69, "windspeed": 1, "time": ""},
{"temperature": 38.9, "air-humidity": 57, "ground-humidity": 65, "windspeed": 7, "time": ""},
{"temperature": 36.9, "air-humidity": 54, "ground-humidity": 60, "windspeed": 1, "time": ""}
]

1
client/requirements.txt

@ -0,0 +1 @@
requests==2.25.1

39
client/selection_menus.py

@ -0,0 +1,39 @@
import requests
def select_operating_mode():
'''Mode selection and menu draw'''
draw_menu = u"""
\u001b[4m\u001b[44m Please select one of the two modes \u001b[0m
\u001b[31m1.\u001b[0m Generate random data
\u001b[31m2.\u001b[0m Import data from json
"""
draw_question = u"\nType the \u001b[31mnumber\u001b[0m of the mode you want (1/2): "
print(draw_menu)
while True:
ans = input(draw_question)
if ans == "1":
return 0
elif ans == "2":
return 1
print("ERROR")
def server_ip_address():
'''Server ip user input and menu draw'''
print("Please enter the server ip")
while True:
url = "http://" + input("IP: ") + ":" + "5000"
print("Using "+url)
timeout = 5
try:
requests.get(url, timeout=timeout)
print("Connected to the url")
return url+"/api/send"
except:
print("No internet connection.")
Loading…
Cancel
Save