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
|
||||
# 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):
|
||||
|
@ -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()"
|
||||
]
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user