Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
co2ampel2
Web
Commits
c9afe0b0
Commit
c9afe0b0
authored
Jun 01, 2025
by
Gezer
Browse files
Added Query need some test
parent
bc0f36b4
Changes
2
Show whitespace changes
Inline
Side-by-side
backend/app/views.py
View file @
c9afe0b0
import
os
from
django.shortcuts
import
render
from
django.shortcuts
import
render
from
django.http
import
JsonResponse
from
django.http
import
JsonResponse
from
django.views.decorators.csrf
import
ensure_csrf_cookie
,
csrf_protect
from
django.views.decorators.csrf
import
ensure_csrf_cookie
,
csrf_protect
import
json
import
json
from
backend.utils.influx
import
InfluxDBHelper
from
dotenv
import
load_dotenv
from
django.views.decorators.http
import
require_http_methods
from
django.views.decorators.http
import
require_http_methods
from
django.views.decorators.csrf
import
csrf_exempt
from
django.views.decorators.csrf
import
csrf_exempt
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
django.contrib.auth
import
authenticate
,
login
,
logout
...
@@ -65,3 +67,38 @@ def register(request):
...
@@ -65,3 +67,38 @@ def register(request):
else
:
else
:
errors
=
form
.
errors
.
as_json
()
errors
=
form
.
errors
.
as_json
()
return
JsonResponse
({
"error"
:
errors
},
status
=
400
)
return
JsonResponse
({
"error"
:
errors
},
status
=
400
)
@
require_http_methods
([
"GET"
])
def
room_data_range
(
request
):
try
:
data
=
json
.
loads
(
request
.
body
.
decode
(
"utf-8"
))
room
=
data
[
"room"
]
start
=
data
[
"start"
]
stop
=
data
[
"stop"
]
if
not
room
:
return
JsonResponse
({
"error"
:
"Missing 'room' parameter"
},
status
=
400
)
load_dotenv
()
client
=
InfluxDBHelper
(
url
=
os
.
getenv
(
"INFLUXDB_URL"
),
token
=
os
.
getenv
(
"INFLUXDB_TOKEN"
),
org
=
os
.
getenv
(
"INFLUXDB_ORG"
),
bucket
=
os
.
getenv
(
"INFLUXDB_BUCKET"
),
)
tables
=
client
.
get_room_data_in_range
(
room
,
start
,
stop
)
results
=
[]
for
table
in
tables
:
for
record
in
table
.
records
:
results
.
append
({
"time"
:
str
(
record
.
get_time
()),
"field"
:
record
.
get_field
(),
"value"
:
record
.
get_value
(),
})
return
JsonResponse
({
"room"
:
room
,
"data"
:
results
},
status
=
200
)
except
json
.
JSONDecodeError
:
return
JsonResponse
(
{
"success"
:
False
,
"message"
:
"Invalid JSON"
},
status
=
400
)
backend/utils/influx.py
View file @
c9afe0b0
...
@@ -39,14 +39,46 @@ class InfluxDBHelper:
...
@@ -39,14 +39,46 @@ class InfluxDBHelper:
'''
'''
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
def
get_latest_room_data
(
self
,
room_id
:
str
):
def
get_latest_room_data
(
self
,
room_id
:
str
,
start
:
str
=
"-5M"
,
stop
:
str
=
"now()"
):
""" """
query
=
f
'''
from(bucket: "
{
self
.
bucket
}
")
|> range(start:
{
start
}
, stop:
{
stop
}
)
|> filter(fn: (r) => r["_measurement"] == "sensor_data")
|> filter(fn: (r) => r["room"] == "
{
room_id
}
")
|> filter(fn: (r) => r["_field"] == "co2" or r["_field"] == "humidity" or r["_field"] == "temperature")
'''
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
def
get_room_data_in_range
(
self
,
room_id
:
str
,
start
:
str
=
"-30d"
,
stop
:
str
=
"now()"
):
query
=
f
'''
from(bucket: "
{
self
.
bucket
}
")
|> range(start:
{
start
}
, stop:
{
stop
}
)
|> filter(fn: (r) => r["_measurement"] == "sensor_data")
|> filter(fn: (r) => r["room"] == "
{
room_id
}
")
|> filter(fn: (r) => r["_field"] == "co2" or r["_field"] == "humidity" or r["_field"] == "temperature")
'''
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
def
list_rooms
(
self
):
query
=
f
'''
import "influxdata/influxdb/schema"
schema.tagValues(
bucket: "
{
self
.
bucket
}
",
tag: "room"
)
'''
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
def
get_aggregated_room_data
(
self
,
room_id
:
str
,
window
:
str
=
"1h"
):
query
=
f
'''
query
=
f
'''
from(bucket: "
{
self
.
bucket
}
")
from(bucket: "
{
self
.
bucket
}
")
|> range(start: -
5m
)
|> range(start: -
30d
)
|> filter(fn: (r) => r["_measurement"] == "
co2
")
|> filter(fn: (r) => r["_measurement"] == "
sensor_data
")
|> filter(fn: (r) => r["room"] == "
{
room_id
}
")
|> filter(fn: (r) => r["room"] == "
{
room_id
}
")
|> last()
|> filter(fn: (r) => r["_field"] == "co2" or r["_field"] == "humidity" or r["_field"] == "temperature")
|> aggregateWindow(every:
{
window
}
, fn: mean, createEmpty: false)
|> yield(name: "mean")
'''
'''
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
return
self
.
query_api
.
query
(
org
=
self
.
org
,
query
=
query
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment