views.py
7.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
from datetime import datetime
from django.http import HttpResponse
from django.shortcuts import render
from common.models import AgentCmd, WeatherWatchHistory, SiteWatch, Env_data_hist
from django.http import Http404
import json, csv
import os, sys
from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from django.core import serializers
from src.core.pyros_django.obsconfig.obsconfig_class import OBSConfig
# Create your views here.
sys.path.append("../../..")
from config.pyros.config_pyros import ConfigPyros
def index(request):
if request.user.is_authenticated:
# return the initial view (the dashboard's one)
return render(request, 'monitoring/monitoring_index.html',{"base_template":"base.html"})
return render(request, 'monitoring/monitoring_index.html',{'USER_LEVEL': "Visitor", 'base_template' : "base.html"})
def get_weather_history_from_date(start_datetime:datetime, end_datetime:datetime):
if Env_data_hist.objects.all().exists():
weather_history_queryset = Env_data_hist.objects.filter(Q(created__gte=start_datetime) & Q(created__lte=end_datetime)).order_by("created")
weather = serializers.serialize('json', weather_history_queryset)
return weather
# Old
# if WeatherWatchHistory.objects.all().exists():
# weather_history_queryset = WeatherWatchHistory.objects.filter(Q(datetime__gte=start_datetime) & Q(datetime__lte=end_datetime)).order_by("datetime")
# weather = serializers.serialize('json', weather_history_queryset)
# return weather
def weather_history(request):
if request.GET:
start_datetime = request.GET.get("start_datetime")
end_datetime = request.GET.get("end_datetime")
if start_datetime and end_datetime:
start_datetime = datetime.strptime(start_datetime, "%d/%m/%Y %H:%M:%S")
end_datetime = datetime.strptime(end_datetime, "%d/%m/%Y %H:%M:%S")
try:
weather_history = get_weather_history_from_date(start_datetime, end_datetime)
#return HttpResponse(json.dumps(weather), content_type="application/json")
return HttpResponse(weather_history, content_type="application/json")
#except WeatherWatchHistory.DoesNotExist:
except Env_data_hist.DoesNotExist:
raise Http404("No WeatherWatchHistory matches the given query.")
else:
return HttpResponse(json.dumps({"result":"No required start and end datetime found in query"}), content_type="application/json")
pyros_config_file = os.environ.get("pyros_config_file")
config_pyros = ConfigPyros(pyros_config_file).pyros_config
monitoring_names_to_plot = config_pyros.get("ENV").get("monitoring_names_to_be_plotted")
end_datetime =datetime.utcnow().strftime("%d/%m/%Y %H:%M:%S")
return render(request,"monitoring/weather_history.html",{
"default_end_datetime" : end_datetime,
"monitoring_names_to_plot" : monitoring_names_to_plot
})
def weather_config(request):
""" PM 20180926 prototype without database
http://127.0.0.1:8000/dashboard/weather/config
Moved to monitoring
"""
# Import PLC status sensor parser
from monitoring.plc_checker import PlcChecker
# Parse PLC status in colibri-new-fixed-2.json
#colibri_json = open("../simulators/plc/colibri-new-fixed-2.json")
#colibri_struct = json.load(colibri_json)
#plc_status = colibri_struct["statuses"][1]["entities"][0]
plc_checker = PlcChecker()
_struct = {"origin":plc_checker.origin, "sensors_table":plc_checker.sensors_table, "monitoring_names":list(plc_checker.monitoring_names.keys())}
config = OBSConfig(
os.environ["PATH_TO_OBSCONF_FILE"], os.environ["unit_name"])
monitoring_devices = config.get_monitoring_devices()
devices = config.get_devices()
devices_config = []
for device in monitoring_devices:
device_config = devices[device]
devices_config.append(device_config)
# Return template with sensors list
return render(request, 'dashboard/config_weather.html', {'weather_config' : _struct, 'base_template' : "base.html","devices_config":devices_config})
def weather_config_update(request):
""" PM 20190716 ajax
http://127.0.0.1:8000/dashboard/weather/config/update
Get data...
"""
try:
# print(request.GET["data"])
cmd_name, cmd_args = request.GET["data"].split(" ", 1)
# ['nom', 'monitoring_name actuel', 'id(json path) du capteur', 'nouveau monitoring_name']
# <class 'list'>: ['monitor_name_switch', 'None', 'Came:/S/N_A5EM:/Power_input', 'Rain_boolean']
if "Error_code" in cmd_args:
something = 5/0
AgentCmd.send_command('Dashboard', 'AgentM', cmd_name, cmd_args)
#TODO: Pour l'instant, on ne recupere pas encore ce retour
return HttpResponse('{"update":"OK", "cmd_name":"' + cmd_name + '"}', content_type="application/json")
except:
return HttpResponse('{"update":"ERROR", "cmd_name":"' + cmd_name + '"}', content_type="application/json", status="500")
def export_weather_data(request):
pyros_config_file = os.environ.get("pyros_config_file")
config_pyros = ConfigPyros(pyros_config_file).pyros_config
monitoring_names_to_plot = config_pyros.get("ENV").get("monitoring_names_to_be_plotted")
if request.GET:
start_datetime = request.GET.get("start_datetime")
end_datetime = request.GET.get("end_datetime")
if start_datetime and end_datetime:
start_datetime = datetime.strptime(start_datetime, "%d/%m/%Y %H:%M:%S")
end_datetime = datetime.strptime(end_datetime, "%d/%m/%Y %H:%M:%S")
try:
#weather_history_queryset = WeatherWatchHistory.objects.filter(Q(datetime__gte=start_datetime) & Q(datetime__lte=end_datetime)).order_by("datetime")
weather_history_queryset = Env_data_hist.objects.filter(Q(created__gte=start_datetime) & Q(created__lte=end_datetime)).order_by("created")
response = HttpResponse(
content_type='text/csv',
headers={f'Content-Disposition': 'attachment; filename="weather_history_{}_{}.csv"'.format(start_datetime,end_datetime)},
)
writer = csv.writer(response)
header = ["datetime","name","value"]
writer.writerow(header)
for env_data in weather_history_queryset:
writer.writerow([env_data.created, env_data.monitoring_name, env_data.value])
# for weather in weather_history_queryset:
# writer.writerow([weather.datetime,weather.humidity,weather.wind,weather.wind_dir,weather.temperature,weather.pressure,weather.rain,weather.cloud])
return response
except WeatherWatchHistory.DoesNotExist:
raise Http404("No WeatherWatchHistory matches the given query.")
def internal_monitoring(request):
current_internal_state, created = SiteWatch.objects.get_or_create(id=1)
if not created:
current_internal_state.setAttribute("InsideHumidity",0)
current_internal_state.setAttribute("Pressure",1)
current_internal_state.setAttribute("InsideTemp",19)
current_internal_state.setAttribute("Roof_state","closed")
current_internal_state.setAttribute("Power_input",1)
current_internal_state.save()
current_internal_state.setGlobalStatus()
return render(request, "monitoring/internal_state.html", locals())