working api, frontend, sensors and camera
This commit is contained in:
parent
9da65e8dc1
commit
ca14043788
30
api/all.json
Normal file
30
api/all.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"04:06:52": {
|
||||||
|
"temperature": "25.12C",
|
||||||
|
"pressure": "960.19hPa",
|
||||||
|
"humidity": "33.21%",
|
||||||
|
"air_quality": false,
|
||||||
|
"time": "04:06:52"
|
||||||
|
},
|
||||||
|
"04:06:58": {
|
||||||
|
"temperature": "25.12C",
|
||||||
|
"pressure": "960.22hPa",
|
||||||
|
"humidity": "33.19%",
|
||||||
|
"air_quality": false,
|
||||||
|
"time": "04:06:58"
|
||||||
|
},
|
||||||
|
"04:07:50": {
|
||||||
|
"temperature": "25.06C",
|
||||||
|
"pressure": "960.19hPa",
|
||||||
|
"humidity": "33.26%",
|
||||||
|
"air_quality": false,
|
||||||
|
"time": "01/02/22"
|
||||||
|
},
|
||||||
|
"04:08:14": {
|
||||||
|
"temperature": "25.06C",
|
||||||
|
"pressure": "960.21hPa",
|
||||||
|
"humidity": "33.23%",
|
||||||
|
"air_pollution": false,
|
||||||
|
"time": "01/02/22"
|
||||||
|
}
|
||||||
|
}
|
1
api/daily.json
Normal file
1
api/daily.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
38
main.py
38
main.py
@ -1,7 +1,8 @@
|
|||||||
from flask import Flask
|
from flask import Flask, render_template, jsonify
|
||||||
import RPi.GPIO as gpio
|
import RPi.GPIO as gpio
|
||||||
from time import sleep
|
from time import sleep
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import json
|
||||||
|
|
||||||
# MQ-135 gas sensor
|
# MQ-135 gas sensor
|
||||||
def stinker():
|
def stinker():
|
||||||
@ -15,24 +16,23 @@ def stinker():
|
|||||||
return True
|
return True
|
||||||
sleep(2)
|
sleep(2)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("\n")
|
pass
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
print("clean")
|
|
||||||
gpio.cleanup()
|
gpio.cleanup()
|
||||||
|
|
||||||
# BME280 Humidity, Temperature, Pressure sensor
|
# BME280 Humidity, Temperature, Pressure sensor
|
||||||
def HTP():
|
def htp():
|
||||||
string = subprocess.check_output(["./HTP"]).decode(encoding='UTF-8',errors='strict')
|
string = subprocess.check_output(["./home/pi/PWSS/HTP"]).decode(encoding='UTF-8',errors='strict')
|
||||||
string = string.split("temperature:")[1]
|
string = string.split("temperature:")[1]
|
||||||
temperature = string.split(" pressure:")[0].replace("*C", "C")
|
temperature = string.split(" pressure:")[0].replace("*C", "C")
|
||||||
string = string.split(" pressure:")[1]
|
string = string.split(" pressure:")[1]
|
||||||
pressure = string.split(" humidity:")[0]
|
pressure = string.split(" humidity:")[0]
|
||||||
humidity = string.split(" humidity:")[1].replace("\r\n", "")
|
humidity = string.split(" humidity:")[1].replace("\r\n", "")
|
||||||
result = {
|
result = {
|
||||||
"temperature":temperature,
|
"temperature":temperature.replace(" ", ""),
|
||||||
"pressure":pressure,
|
"pressure":pressure.replace(" ", ""),
|
||||||
"humidity":humidity}
|
"humidity":humidity.replace(" ", "")
|
||||||
|
}
|
||||||
# for i in string:
|
# for i in string:
|
||||||
# if i.isdigit():
|
# if i.isdigit():
|
||||||
# result.append(i)
|
# result.append(i)
|
||||||
@ -42,8 +42,24 @@ def HTP():
|
|||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def hello_world():
|
def home():
|
||||||
return f"<p>{HTP()}</p>"
|
hpt = htp()
|
||||||
|
stank = stinker()
|
||||||
|
return render_template("index.html", HTP=hpt, stinker=stank)
|
||||||
|
|
||||||
|
@app.route("/api/all")
|
||||||
|
def all_data():
|
||||||
|
with open("api/all.json","r") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
return jsonify(data)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/api/daily")
|
||||||
|
def daily_data():
|
||||||
|
with open("api/daily.json","r") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
return jsonify(data)
|
||||||
|
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
app.run(host='0.0.0.0')
|
app.run(host='0.0.0.0')
|
24
static/style.css
Normal file
24
static/style.css
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
@import url("https://fonts.googleapis.com/css?family=Ubuntu");
|
||||||
|
|
||||||
|
body{
|
||||||
|
height:100%;
|
||||||
|
display:flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
flex-direction: column;
|
||||||
|
font-family:"Ubuntu";
|
||||||
|
}
|
||||||
|
|
||||||
|
#weather-data li{
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#weather-data{
|
||||||
|
font-size: xx-large;
|
||||||
|
background-color: lightgray;
|
||||||
|
padding-right: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#camera{
|
||||||
|
padding: 20px;
|
||||||
|
}
|
35
stats_saver.py
Normal file
35
stats_saver.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
from main import stinker, htp
|
||||||
|
from datetime import datetime
|
||||||
|
import pytz, json
|
||||||
|
|
||||||
|
tz = pytz.timezone('Europe/Sofia')
|
||||||
|
date = datetime.now(tz).strftime("%x")
|
||||||
|
specific_time = datetime.now(tz).strftime("%H:%M:%S")
|
||||||
|
|
||||||
|
def get_data():
|
||||||
|
data = htp()
|
||||||
|
data["air_pollution"] = stinker()
|
||||||
|
data["time"] = specific_time
|
||||||
|
return data
|
||||||
|
|
||||||
|
def daily_data():
|
||||||
|
data = get_data()
|
||||||
|
with open("api/daily.json", "r+") as f:
|
||||||
|
f_data = json.load(f)
|
||||||
|
f_data[date] = data
|
||||||
|
f.seek(0)
|
||||||
|
json.dump(f_data, f, indent=4)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
|
def manual_data():
|
||||||
|
data = get_data()
|
||||||
|
data["time"] = date
|
||||||
|
with open("api/all.json", "r+") as f:
|
||||||
|
f_data = json.load(f)
|
||||||
|
f_data[specific_time] = data
|
||||||
|
f.seek(0)
|
||||||
|
json.dump(f_data, f, indent=4)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
manual_data()
|
21
templates/index.html
Normal file
21
templates/index.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
|
||||||
|
<title>PWSS</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img id="camera" src="http://openwebrx.local:9000/stream.mjpg" width="640" height="480" autoplay="">
|
||||||
|
<div id="weather-data">
|
||||||
|
<ul>
|
||||||
|
<li>{{stinker}}</li>
|
||||||
|
{% for i in HTP.keys() %}
|
||||||
|
<li>{{HTP[i]}}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user