From 7bc8ec0d9628827889829c4d98396852fa69b469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Wed, 3 Jun 2020 15:33:34 +0200 Subject: [PATCH] Fix telemetry when clock is 0 --- arduino/tempLightSensor/tempLightSensor.ino | 11 +++++++++-- freedcs/api/admin.py | 4 ++++ freedcs/telemetry/admin.py | 5 ++++- .../migrations/0005_telemetry_clock.py | 19 +++++++++++++++++++ .../migrations/0006_auto_20200603_1317.py | 17 +++++++++++++++++ freedcs/telemetry/models.py | 8 ++++++-- freedcs/telemetry/serializers.py | 2 +- 7 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 freedcs/telemetry/migrations/0005_telemetry_clock.py create mode 100644 freedcs/telemetry/migrations/0006_auto_20200603_1317.py diff --git a/arduino/tempLightSensor/tempLightSensor.ino b/arduino/tempLightSensor/tempLightSensor.ino index 3eafe5d..9bde4c4 100644 --- a/arduino/tempLightSensor/tempLightSensor.ino +++ b/arduino/tempLightSensor/tempLightSensor.ino @@ -22,6 +22,7 @@ int photocellPin = A1; EthernetUDP ntpUDP; NTPClient timeClient(ntpUDP); +bool NTPValid = false; struct netConfig { IPAddress address; @@ -71,7 +72,9 @@ void setup(void) { timeClient.setPoolServerIP(config.address); #endif timeClient.begin(); - timeClient.update(); + if (timeClient.update()) { + NTPValid = true; + } #if DEBUG_TO_SERIAL Serial.println("DEBUG: clock updated via NTP."); @@ -89,7 +92,11 @@ void loop(void) { float tempVoltage = tempReading * AREF_VOLTAGE / 1024.0; float tempC = (tempVoltage - 0.5) * 100 ; - json["time"] = timeClient.getEpochTime(); + if (NTPValid) { + json["clock"] = timeClient.getEpochTime(); + } else { + json["clock"] = NULL; // converted into 0 + } payload["light"] = photocellReading; temp["celsius"] = tempC; diff --git a/freedcs/api/admin.py b/freedcs/api/admin.py index b566819..0d27b99 100644 --- a/freedcs/api/admin.py +++ b/freedcs/api/admin.py @@ -5,6 +5,8 @@ from api.models import Device, WhiteList @admin.register(Device) class DeviceAdmin(admin.ModelAdmin): readonly_fields = ('creation_time', 'updated_time',) + list_filter = ('serial',) + search_fields = ('serial',) fieldsets = ( (None, { @@ -20,6 +22,8 @@ class DeviceAdmin(admin.ModelAdmin): @admin.register(WhiteList) class WhiteListAdmin(admin.ModelAdmin): readonly_fields = ('creation_time', 'updated_time',) + list_filter = ('serial',) + search_fields = ('serial',) fieldsets = ( (None, { diff --git a/freedcs/telemetry/admin.py b/freedcs/telemetry/admin.py index 4ab6ccc..6f229f5 100644 --- a/freedcs/telemetry/admin.py +++ b/freedcs/telemetry/admin.py @@ -4,4 +4,7 @@ from telemetry.models import Telemetry @admin.register(Telemetry) class TelemetryAdmin(admin.ModelAdmin): - readonly_fields = ('device', 'time', 'payload',) + readonly_fields = ('device', 'time', 'clock', 'payload',) + list_display = ('__str__', 'device') + list_filter = ('time', 'device__serial') + search_fields = ('device__serial',) diff --git a/freedcs/telemetry/migrations/0005_telemetry_clock.py b/freedcs/telemetry/migrations/0005_telemetry_clock.py new file mode 100644 index 0000000..476e345 --- /dev/null +++ b/freedcs/telemetry/migrations/0005_telemetry_clock.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.6 on 2020-06-03 13:08 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('telemetry', '0004_auto_20200602_2132'), + ] + + operations = [ + migrations.AddField( + model_name='telemetry', + name='clock', + field=models.IntegerField(null=True, validators=[django.core.validators.MinValueValidator(0)]), + ), + ] diff --git a/freedcs/telemetry/migrations/0006_auto_20200603_1317.py b/freedcs/telemetry/migrations/0006_auto_20200603_1317.py new file mode 100644 index 0000000..6ca695a --- /dev/null +++ b/freedcs/telemetry/migrations/0006_auto_20200603_1317.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.6 on 2020-06-03 13:17 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('telemetry', '0005_telemetry_clock'), + ] + + operations = [ + migrations.AlterModelOptions( + name='telemetry', + options={'ordering': ['-time', 'device'], 'verbose_name_plural': 'Telemetry'}, + ), + ] diff --git a/freedcs/telemetry/models.py b/freedcs/telemetry/models.py index ce95be9..2c8a04b 100644 --- a/freedcs/telemetry/models.py +++ b/freedcs/telemetry/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.core.validators import MinValueValidator from django.contrib.postgres.fields import JSONField from api.models import Device @@ -7,11 +8,14 @@ from api.models import Device class Telemetry(models.Model): device = models.ForeignKey(Device, on_delete=models.CASCADE) time = models.DateTimeField(primary_key=True, auto_now_add=True) + clock = models.IntegerField( + validators=[MinValueValidator(0)], + null=True) payload = JSONField() class Meta: - ordering = ['time', 'device'] + ordering = ['-time', 'device'] verbose_name_plural = "Telemetry" def __str__(self): - return "%s - %s" % (self.time, self.device.serial) + return str(self.time) diff --git a/freedcs/telemetry/serializers.py b/freedcs/telemetry/serializers.py index 337012d..5bd8ab7 100644 --- a/freedcs/telemetry/serializers.py +++ b/freedcs/telemetry/serializers.py @@ -11,7 +11,7 @@ class TelemetrySerializer(serializers.ModelSerializer): class Meta: model = Telemetry - fields = ('device', 'time', 'payload',) + fields = ('time', 'device', 'clock', 'payload',) # class WhiteListSerializer(serializers.ModelSerializer):