wifi_bssids → addresses
This commit is contained in:
parent
ca6252583c
commit
cfed6d9ed7
12 changed files with 70 additions and 30 deletions
|
@ -19,7 +19,7 @@ class Command(BaseCommand):
|
|||
found_beacons.setdefault(measurement["bssid"], []).append((beacon_measurement, measurement))
|
||||
|
||||
# put in the ones we know
|
||||
known = dict(chain(*(((bssid, r) for bssid in r.wifi_bssids) for r in RangingBeacon.objects.all())))
|
||||
known = dict(chain(*(((bssid, r) for bssid in r.addresses) for r in RangingBeacon.objects.all())))
|
||||
|
||||
# lets go through them
|
||||
for bssid, measurements in found_beacons.items():
|
||||
|
|
|
@ -48,7 +48,8 @@ class Command(BaseCommand):
|
|||
spaces_for_level.setdefault(space.level_id, []).append(space)
|
||||
|
||||
beacons_so_far: dict[str, RangingBeacon] = {
|
||||
**{m.import_tag: m for m in RangingBeacon.objects.filter(import_tag__startswith="noc:")},
|
||||
**{m.import_tag: m for m in RangingBeacon.objects.filter(import_tag__startswith="noc:",
|
||||
beacon_type=RangingBeacon.BeaconType.EVENT_WIFI)},
|
||||
}
|
||||
|
||||
for name, item in items.items():
|
||||
|
@ -118,7 +119,7 @@ class Command(BaseCommand):
|
|||
# build resulting object
|
||||
altitude_quest = True
|
||||
if not result:
|
||||
result = RangingBeacon(import_tag=import_tag)
|
||||
result = RangingBeacon(import_tag=import_tag, beacon_type=RangingBeacon.BeaconType.EVENT_WIFI)
|
||||
else:
|
||||
if result.space == new_space and distance(unwrap_geom(result.geometry), new_geometry) < 0.03:
|
||||
continue
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 5.0.8 on 2024-12-28 14:15
|
||||
|
||||
import django.core.serializers.json
|
||||
import django_pydantic_field.compat.django
|
||||
import django_pydantic_field.fields
|
||||
import pydantic_extra_types.mac_address
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mapdata', '0135_rangingbeacon_beacon_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='rangingbeacon',
|
||||
old_name='wifi_bssids',
|
||||
new_name='addresses',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rangingbeacon',
|
||||
name='addresses',
|
||||
field=django_pydantic_field.fields.PydanticSchemaField(config=None, default=list,
|
||||
encoder=django.core.serializers.json.DjangoJSONEncoder,
|
||||
help_text="uses node's value if not set",
|
||||
schema=django_pydantic_field.compat.django.GenericContainer(
|
||||
list,
|
||||
(pydantic_extra_types.mac_address.MacAddress,)),
|
||||
verbose_name='Mac Address / BSSIDs'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rangingbeacon',
|
||||
name='ap_name',
|
||||
field=models.CharField(blank=True, max_length=32, null=True, verbose_name='AP name'),
|
||||
),
|
||||
]
|
|
@ -470,9 +470,10 @@ class BeaconMeasurement(SpaceGeometryMixin, models.Model):
|
|||
for peer in scan:
|
||||
if peer.ap_name:
|
||||
map_name.setdefault(peer.ap_name, []).append(peer.bssid)
|
||||
for beacon in RangingBeacon.objects.filter(ap_name__in=map_name.keys()):
|
||||
for beacon in RangingBeacon.objects.filter(ap_name__in=map_name.keys(),
|
||||
beacon_type=RangingBeacon.BeaconType.EVENT_WIFI):
|
||||
print(beacon, "add ssids", set(map_name[beacon.ap_name]))
|
||||
beacon.wifi_bssids = list(set(beacon.wifi_bssids) | set(map_name[beacon.ap_name]))
|
||||
beacon.addresses = list(set(beacon.addresses) | set(map_name[beacon.ap_name]))
|
||||
beacon.save()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
@ -495,8 +496,8 @@ class RangingBeacon(SpaceGeometryMixin, models.Model):
|
|||
|
||||
node_number = models.PositiveSmallIntegerField(_('Node Number'), unique=True, null=True, blank=True)
|
||||
|
||||
wifi_bssids: list[MacAddress] = SchemaField(list[MacAddress], verbose_name=_('WiFi BSSIDs'), default=list,
|
||||
help_text=_("uses node's value if not set"))
|
||||
addresses: list[MacAddress] = SchemaField(list[MacAddress], verbose_name=_('Mac Address / BSSIDs'), default=list,
|
||||
help_text=_("uses node's value if not set"))
|
||||
bluetooth_address = models.CharField(_('Bluetooth Address'), unique=True, null=True, blank=True,
|
||||
max_length=17,
|
||||
validators=[RegexValidator(
|
||||
|
@ -522,7 +523,7 @@ class RangingBeacon(SpaceGeometryMixin, models.Model):
|
|||
|
||||
altitude = models.DecimalField(_('altitude above ground'), max_digits=6, decimal_places=2, default=0,
|
||||
validators=[MinValueValidator(Decimal('0'))])
|
||||
ap_name = models.TextField(null=True, blank=True, verbose_name=_('AP name'))
|
||||
ap_name = models.CharField(null=True, blank=True, verbose_name=_('AP name'), max_length=32)
|
||||
comment = models.TextField(null=True, blank=True, verbose_name=_('comment'))
|
||||
|
||||
altitude_quest = models.BooleanField(_('altitude quest'), default=True)
|
||||
|
@ -551,8 +552,8 @@ class RangingBeacon(SpaceGeometryMixin, models.Model):
|
|||
title = ' - '.join(segments).strip()
|
||||
else:
|
||||
title = f'#{self.pk}'
|
||||
if self.wifi_bssids:
|
||||
ssids = self.wifi_bssids[0] + (', …' if len(self.wifi_bssids) > 1 else '')
|
||||
if self.addresses:
|
||||
ssids = self.addresses[0] + (', …' if len(self.adresses) > 1 else '')
|
||||
title += f' ({ssids})'
|
||||
if self.comment:
|
||||
title += f' ({self.comment})'
|
||||
|
|
|
@ -61,17 +61,17 @@ class RangingBeaconBSSIDsQuestForm(ChangeSetModelForm):
|
|||
super().__init__(*args, **kwargs)
|
||||
self.fields["look_for_ap"] = CharField(disabled=True, initial=self.instance.import_tag[4:],
|
||||
widget=HiddenInput())
|
||||
self.fields["wifi_bssids"].widget = HiddenInput()
|
||||
self.fields["addresses"].widget = HiddenInput()
|
||||
|
||||
def clean_bssids(self):
|
||||
data = self.cleaned_data["wifi_bssids"]
|
||||
def clean_addresses(self):
|
||||
data = self.cleaned_data["addresses"]
|
||||
if not data:
|
||||
raise ValidationError(_("Need at least one bssid."))
|
||||
return data
|
||||
|
||||
class Meta:
|
||||
model = RangingBeacon
|
||||
fields = ("wifi_bssids", )
|
||||
fields = ("addresses", )
|
||||
|
||||
@property
|
||||
def changeset_title(self):
|
||||
|
@ -103,7 +103,7 @@ class RangingBeaconBSSIDsQuest(Quest):
|
|||
|
||||
@classmethod
|
||||
def _qs_for_request(cls, request):
|
||||
return RangingBeacon.qs_for_request(request).filter(ap_name__isnull=False, wifi_bssids=[])
|
||||
return RangingBeacon.qs_for_request(request).filter(ap_name__isnull=False, addresses=[])
|
||||
|
||||
|
||||
class BeaconMeasurementQuestForm(ChangeSetModelForm):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue