1
0
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:
Daniele Viganò 2021-03-26 22:11:44 +01:00
parent b6a9b3e14b
commit cad24f4287
Signed by: dani
GPG Key ID: DB49AFC03C40EE02
2 changed files with 43 additions and 23 deletions

View File

@ -17,9 +17,10 @@
# 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/>.
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):

View File

@ -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()"
]
},