Skip to content

Commit

Permalink
koruzav2: Add accelerometer data.
Browse files Browse the repository at this point in the history
  • Loading branch information
kostko committed Aug 10, 2017
1 parent 58cdc60 commit a051913
Show file tree
Hide file tree
Showing 4 changed files with 372 additions and 1 deletion.
135 changes: 135 additions & 0 deletions nodewatcher/extra/irnas/koruzav2/migrations/0005_accelerometer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-09 18:28
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('irnas_koruzav2', '0004_json_field'),
]

operations = [
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range1',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range1_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range2',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range2_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range3',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range3_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range4',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_x_range4_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range1',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range1_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range2',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range2_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range3',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range3_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range4',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_y_range4_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range1',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range1_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range2',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range2_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range3',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range3_maximum',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range4',
field=models.FloatField(null=True),
),
migrations.AddField(
model_name='koruzamonitor',
name='accel_z_range4_maximum',
field=models.FloatField(null=True),
),
]
75 changes: 75 additions & 0 deletions nodewatcher/extra/irnas/koruzav2/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,61 @@ class KoruzaMonitor(registration.bases.NodeMonitoringRegistryItem):
# Current motor coordinates.
motor_x = models.IntegerField(null=True)
motor_y = models.IntegerField(null=True)
# Accelerometer data.
accel_x_range1 = models.FloatField(null=True)
accel_x_range1_maximum = models.FloatField(null=True)
accel_x_range2 = models.FloatField(null=True)
accel_x_range2_maximum = models.FloatField(null=True)
accel_x_range3 = models.FloatField(null=True)
accel_x_range3_maximum = models.FloatField(null=True)
accel_x_range4 = models.FloatField(null=True)
accel_x_range4_maximum = models.FloatField(null=True)

accel_y_range1 = models.FloatField(null=True)
accel_y_range1_maximum = models.FloatField(null=True)
accel_y_range2 = models.FloatField(null=True)
accel_y_range2_maximum = models.FloatField(null=True)
accel_y_range3 = models.FloatField(null=True)
accel_y_range3_maximum = models.FloatField(null=True)
accel_y_range4 = models.FloatField(null=True)
accel_y_range4_maximum = models.FloatField(null=True)

accel_z_range1 = models.FloatField(null=True)
accel_z_range1_maximum = models.FloatField(null=True)
accel_z_range2 = models.FloatField(null=True)
accel_z_range2_maximum = models.FloatField(null=True)
accel_z_range3 = models.FloatField(null=True)
accel_z_range3_maximum = models.FloatField(null=True)
accel_z_range4 = models.FloatField(null=True)
accel_z_range4_maximum = models.FloatField(null=True)

class RegistryMeta:
registry_id = 'irnas.koruza'

registration.point('node.monitoring').register_item(KoruzaMonitor)


class AccelerometerField(ds_fields.FloatField):
def __init__(self, coordinate, range, maximum=False):
maximum = ' Max' if maximum else ''
super(AccelerometerField, self).__init__(
tags={
'title': 'KORUZA Accelerometer {}{} (R{})'.format(coordinate.capitalize(), maximum, range),
'group': 'koruza_{}'.format(coordinate),
'visualization': {
'with': {
'group': 'koruza_{}'.format(coordinate),
'node': ds_fields.TagReference('node'),
},
'type': 'line',
'initial_set': True,
'time_downsamplers': ['mean'],
'value_downsamplers': ['min', 'mean', 'max'],
}
}
)


class KoruzaMonitorStreams(ds_models.RegistryItemStreams):
motor_x = ds_fields.FloatField(tags={
'title': 'KORUZA Motor X',
Expand All @@ -44,4 +92,31 @@ class KoruzaMonitorStreams(ds_models.RegistryItemStreams):
}
})

accel_x_range1 = AccelerometerField('x', range=1)
accel_x_range1_maximum = AccelerometerField('x', range=1, maximum=True)
accel_x_range2 = AccelerometerField('x', range=2)
accel_x_range2_maximum = AccelerometerField('x', range=2, maximum=True)
accel_x_range3 = AccelerometerField('x', range=3)
accel_x_range3_maximum = AccelerometerField('x', range=3, maximum=True)
accel_x_range4 = AccelerometerField('x', range=4)
accel_x_range4_maximum = AccelerometerField('x', range=4, maximum=True)

accel_y_range1 = AccelerometerField('y', range=1)
accel_y_range1_maximum = AccelerometerField('y', range=1, maximum=True)
accel_y_range2 = AccelerometerField('y', range=2)
accel_y_range2_maximum = AccelerometerField('y', range=2, maximum=True)
accel_y_range3 = AccelerometerField('y', range=3)
accel_y_range3_maximum = AccelerometerField('y', range=3, maximum=True)
accel_y_range4 = AccelerometerField('y', range=4)
accel_y_range4_maximum = AccelerometerField('y', range=4, maximum=True)

accel_z_range1 = AccelerometerField('z', range=1)
accel_z_range1_maximum = AccelerometerField('z', range=1, maximum=True)
accel_z_range2 = AccelerometerField('z', range=2)
accel_z_range2_maximum = AccelerometerField('z', range=2, maximum=True)
accel_z_range3 = AccelerometerField('z', range=3)
accel_z_range3_maximum = AccelerometerField('z', range=3, maximum=True)
accel_z_range4 = AccelerometerField('z', range=4)
accel_z_range4_maximum = AccelerometerField('z', range=4, maximum=True)

ds_pool.register(KoruzaMonitor, KoruzaMonitorStreams)
17 changes: 17 additions & 0 deletions nodewatcher/extra/irnas/koruzav2/processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ class Koruza(monitor_processors.NodeProcessor):
monitor module has previously fetched data.
"""

ACCELEROMETER_COORDINATES = ('x', 'y', 'z')
ACCELEROMETER_RANGES = 4

@monitor_processors.depends_on_context('http', http_processors.HTTPTelemetryContext)
def process(self, context, node):
"""
Expand All @@ -31,6 +34,20 @@ def process(self, context, node):
koruza.mcu_connected = bool(status.connected)
koruza.motor_x = int(status.motors.x)
koruza.motor_y = int(status.motors.y)

for coordinate in self.ACCELEROMETER_COORDINATES:
for f_range in range(self.ACCELEROMETER_RANGES):
if status.accelerometer and status.accelerometer.connected:
values = status.accelerometer[coordinate]
average = values[f_range]['average']
maximum = values[f_range]['maximum']
else:
average = None
maximum = None

setattr(koruza, 'accel_{}_range{}'.format(coordinate, f_range + 1), average)
setattr(koruza, 'accel_{}_range{}_maximum'.format(coordinate, f_range + 1), maximum)

koruza.save()

# Automatically configure reported static Router ID.
Expand Down

0 comments on commit a051913

Please sign in to comment.