From cad24f4287d1bb9f1bf265895f16140b20fbf35e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Fri, 26 Mar 2021 22:11:44 +0100 Subject: [PATCH] Improve date args in API --- bite/telemetry/views.py | 17 +++++---- esp32/notebook/ESP32_1 RSSI-HALL.ipynb | 49 +++++++++++++++++--------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/bite/telemetry/views.py b/bite/telemetry/views.py index d487e1c..7899900 100644 --- a/bite/telemetry/views.py +++ b/bite/telemetry/views.py @@ -17,9 +17,10 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +from datetime import datetime from django.http import Http404 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.viewsets import ModelViewSet @@ -69,12 +70,16 @@ class TelemetryRange(ModelViewSet): lookup_field = 'device' @staticmethod - def datetime_validation(datetime): - parsed_datetime = parse_datetime(datetime) + def datetime_validation(time): + parsed_datetime = parse_datetime(time) if parsed_datetime is None: - raise ParseError({ - datetime: 'Invalid date format' - }) + parsed_datetime = parse_date(time) + 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) def list(self, request, device, time_from, time_to=None): diff --git a/esp32/notebook/ESP32_1 RSSI-HALL.ipynb b/esp32/notebook/ESP32_1 RSSI-HALL.ipynb index cb867ec..df5aa22 100644 --- a/esp32/notebook/ESP32_1 RSSI-HALL.ipynb +++ b/esp32/notebook/ESP32_1 RSSI-HALL.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "running-darwin", + "id": "endless-short", "metadata": {}, "outputs": [], "source": [ @@ -31,10 +31,17 @@ "import ipywidgets as widgets\n", "import plotly.graph_objects as go\n", "\n", - "from IPython.display import display\n", - "\n", - "from datetime import date, timedelta\n", - "\n", + "from datetime import date, datetime\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "running-darwin", + "metadata": {}, + "outputs": [], + "source": [ "serial = widgets.Text(\n", " value='esp32_1',\n", " placeholder='Type something',\n", @@ -49,7 +56,7 @@ "date_to = widgets.DatePicker(\n", " description='To Date',\n", " disabled=False,\n", - " value=date.today() + timedelta(days=1)\n", + " value=date.today()\n", ")\n", "display(serial)\n", "display(date_from)\n", @@ -63,20 +70,28 @@ "metadata": {}, "outputs": [], "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", " r = requests.get(\"http://localhost/telemetry/{serial}/{date_from}/{date_to}/\".format(\n", " serial=serial.value,\n", - " date_from=date_from.value,\n", - " date_to=date_to.value\n", + " date_from=date_from,\n", + " date_to=date_to\n", " ))\n", - " data = r.json()\n", + " \n", "except requests.exceptions.RequestException as e:\n", " raise SystemExit(e)\n", "\n", - "df = pd.json_normalize(data)\n", - "index = pd.to_datetime(df['time'])\n", - "df = df.set_index(index)\n", - "df = df.resample('5min').agg(['min', 'max', 'mean'])" + "r.raise_for_status()\n", + "\n", + "df = pd.json_normalize(r.json())\n", + "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": [], "source": [ "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']['min'], fill=\"tonexty\", showlegend=False),\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'], 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']['min'], fill=\"tonexty\", showlegend=False)])\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'], showlegend=False)])\n", "fig.show()" ] },