mirror of
https://github.com/daniviga/bite.git
synced 2025-04-20 14:31:20 +02:00
Improve date args in API
This commit is contained in:
parent
b6a9b3e14b
commit
cad24f4287
@ -17,9 +17,10 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.dateparse import parse_datetime
|
from django.utils.dateparse import parse_date, parse_datetime
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
@ -69,12 +70,16 @@ class TelemetryRange(ModelViewSet):
|
|||||||
lookup_field = 'device'
|
lookup_field = 'device'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def datetime_validation(datetime):
|
def datetime_validation(time):
|
||||||
parsed_datetime = parse_datetime(datetime)
|
parsed_datetime = parse_datetime(time)
|
||||||
if parsed_datetime is None:
|
if parsed_datetime is None:
|
||||||
raise ParseError({
|
parsed_datetime = parse_date(time)
|
||||||
datetime: 'Invalid date format'
|
if parsed_datetime is None:
|
||||||
})
|
raise ParseError({
|
||||||
|
datetime: 'Invalid date format'
|
||||||
|
})
|
||||||
|
parsed_datetime = datetime.combine(
|
||||||
|
parsed_datetime, datetime.min.time())
|
||||||
return timezone.make_aware(parsed_datetime)
|
return timezone.make_aware(parsed_datetime)
|
||||||
|
|
||||||
def list(self, request, device, time_from, time_to=None):
|
def list(self, request, device, time_from, time_to=None):
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "running-darwin",
|
"id": "endless-short",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -31,10 +31,17 @@
|
|||||||
"import ipywidgets as widgets\n",
|
"import ipywidgets as widgets\n",
|
||||||
"import plotly.graph_objects as go\n",
|
"import plotly.graph_objects as go\n",
|
||||||
"\n",
|
"\n",
|
||||||
"from IPython.display import display\n",
|
"from datetime import date, datetime\n",
|
||||||
"\n",
|
"from IPython.display import display"
|
||||||
"from datetime import date, timedelta\n",
|
]
|
||||||
"\n",
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "running-darwin",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
"serial = widgets.Text(\n",
|
"serial = widgets.Text(\n",
|
||||||
" value='esp32_1',\n",
|
" value='esp32_1',\n",
|
||||||
" placeholder='Type something',\n",
|
" placeholder='Type something',\n",
|
||||||
@ -49,7 +56,7 @@
|
|||||||
"date_to = widgets.DatePicker(\n",
|
"date_to = widgets.DatePicker(\n",
|
||||||
" description='To Date',\n",
|
" description='To Date',\n",
|
||||||
" disabled=False,\n",
|
" disabled=False,\n",
|
||||||
" value=date.today() + timedelta(days=1)\n",
|
" value=date.today()\n",
|
||||||
")\n",
|
")\n",
|
||||||
"display(serial)\n",
|
"display(serial)\n",
|
||||||
"display(date_from)\n",
|
"display(date_from)\n",
|
||||||
@ -63,20 +70,28 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
|
"date_from = datetime.combine(date_from.value, datetime.min.time())\n",
|
||||||
|
"date_to = datetime.combine(date_to.value, datetime.max.time())\n",
|
||||||
|
"\n",
|
||||||
"try:\n",
|
"try:\n",
|
||||||
" r = requests.get(\"http://localhost/telemetry/{serial}/{date_from}/{date_to}/\".format(\n",
|
" r = requests.get(\"http://localhost/telemetry/{serial}/{date_from}/{date_to}/\".format(\n",
|
||||||
" serial=serial.value,\n",
|
" serial=serial.value,\n",
|
||||||
" date_from=date_from.value,\n",
|
" date_from=date_from,\n",
|
||||||
" date_to=date_to.value\n",
|
" date_to=date_to\n",
|
||||||
" ))\n",
|
" ))\n",
|
||||||
" data = r.json()\n",
|
" \n",
|
||||||
"except requests.exceptions.RequestException as e:\n",
|
"except requests.exceptions.RequestException as e:\n",
|
||||||
" raise SystemExit(e)\n",
|
" raise SystemExit(e)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"df = pd.json_normalize(data)\n",
|
"r.raise_for_status()\n",
|
||||||
"index = pd.to_datetime(df['time'])\n",
|
"\n",
|
||||||
"df = df.set_index(index)\n",
|
"df = pd.json_normalize(r.json())\n",
|
||||||
"df = df.resample('5min').agg(['min', 'max', 'mean'])"
|
"if 'time' in df:\n",
|
||||||
|
" index = pd.to_datetime(df['time'])\n",
|
||||||
|
" df = df.set_index(index)\n",
|
||||||
|
" df = df.resample('5min').agg(['min', 'max', 'mean'])\n",
|
||||||
|
"else:\n",
|
||||||
|
" print('No data to compute')"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -87,11 +102,11 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"fig = go.Figure([go.Scatter(x=df.index, y=df['payload.wifi-rssi']['max'], showlegend=False),\n",
|
"fig = go.Figure([go.Scatter(x=df.index, y=df['payload.wifi-rssi']['max'], showlegend=False),\n",
|
||||||
" go.Scatter(x=df.index, y=df['payload.wifi-rssi']['mean'], fill=\"tonexty\", name=\"WiFI RSSI\"),\n",
|
" go.Scatter(x=df.index, y=df['payload.wifi-rssi']['mean'], name=\"WiFI RSSI\"),\n",
|
||||||
" go.Scatter(x=df.index, y=df['payload.wifi-rssi']['min'], fill=\"tonexty\", showlegend=False),\n",
|
" go.Scatter(x=df.index, y=df['payload.wifi-rssi']['min'], showlegend=False),\n",
|
||||||
" go.Scatter(x=df.index, y=df['payload.hall']['max'], showlegend=False),\n",
|
" go.Scatter(x=df.index, y=df['payload.hall']['max'], showlegend=False),\n",
|
||||||
" go.Scatter(x=df.index, y=df['payload.hall']['mean'],fill=\"tonexty\", name=\"Hall effect\"),\n",
|
" go.Scatter(x=df.index, y=df['payload.hall']['mean'], name=\"Hall effect\"),\n",
|
||||||
" go.Scatter(x=df.index, y=df['payload.hall']['min'], fill=\"tonexty\", showlegend=False)])\n",
|
" go.Scatter(x=df.index, y=df['payload.hall']['min'], showlegend=False)])\n",
|
||||||
"fig.show()"
|
"fig.show()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user