REST stats

stats

This started by me wanting to graph up from some arbitrary data sources, and I wanted to store the data in my postgres database for learning purposes. So I went down the rabbit hole and looked for a statsd-ish services with a Postgres backend, but everything was either a bit to much or a bit to little. So I ended up writing a simple app for my Django project lekvam.no and piggy backed the ubiquitous REST API and the Postgres backend I already had set up.

It is nothing fancy, for gauge measurements; I collect incoming values to the following models. If the gauge's slug (name) is not seen before, its created, so I can dynamically add new measurements from scripts or other sources. The secret is added when the gauge is created and must be present when you want to add data points.

class Gauge(models.Model):
    slug = models.CharField(max_length=100, unique=True)
    title = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    secret = models.TextField(null=True, blank=True)
    desc = models.TextField(null=True, blank=True)
    unit = models.TextField(null=True, blank=True)
    deleted = models.DateTimeField(null=True, blank=True)

class GaugeValue(models.Model):
    gauge = models.ForeignKey(Gauge, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    value = models.FloatField()

I have made a simple dashboard which draws graphs from the latest data on https://lekvam.no/stats/ and you can browse historical data by navigating further. For now, every graph is aggregating over all the values in the given timespan and it is snappy enough. The graphs are made by the Django app graphos which has a collection of straightforward graph types.

A gague can be created, and enriched, with:

curl -s --get \
     --data-urlencode "secret=s3cr3t" \
     --data-urlencode "value=$VALUE" \
     https://lekvam.no/stats/gauge/$SLUG/add

The whole code can be found on github.

Sigma 30mm f/1.4

I've bought myself a used Sigma 30mm f/1.4 DC DN for my Sony a6000 this winter, but I have not had a good opportunity to get the potential out of it before 17. May, our National Day. I am really happy about the optics, but the focus by wire system (the focus ring is not mechanical) is a bit paint. If you most often run on auto-focus anyway, this is a great bang for the buck.

More from the National Day here.

Roy

Intervallfotografering

Noen sa på internett at man kunne bruke «intervallfotografering» på norsk for den engelske «timelapse». Så her er et intervallfotografi fra 2014, året jeg begynte å automatisk generere ett intervallfotografi for hver dag!

  • 0:10 - dagen begynner
  • 0:15 - en fugl hopper rundt på plenen, og gjør det resten av sommeren på omtrent samme tid hver dag
  • 0:20 - farfar med hjåen
  • 0:30 - Tobias klipper gresset
  • 0:40 - traktorer legger egg
  • 0:45 - eggene blir hentet

Webcam på kvisten på Lekvam

Jeg har en Raspberry Pie på kvisten med et tilhørende kamera og pan/tilt-modul.

rasbicam2

Dette kan du styre fra lekvam.no. Men dessverre er ikke internettilkoblingen på Lekvam kjempebra, så du får bare stillbilder, óg bildene forminskes i prosessen.

raspicam_web

Kamera tar bilder i 2592 x 1944, ca 2.5MB i JPG, og det ville tatt 45 sek å overføre et stillbildet til deg. Derfor forminskes bildet på veien, men Raspberry Pie-en gjør det ikke, det tar også for lang tid på den stakkarslige ARM-en – jeg har tilfeldigvis en NAS (Ubuntu) som gjør dette.

webcamrrc

I første iterasjon SSH-et jeg fra NAS-en til Pie-en 3 ganger for å

1. sette pan/tilt til x og y,
2. ta bildet, og
3. scp-e bilde fra Pie-en til NAS-en.

Men dette blir mye krypto for den stakkars ARM-en, så partytrikset her er derfor å gjøre alt i en SSH-tilkobling som også cat-er bildet til stdout slik at NAS-en kan sende det til en fil lokalt.

ssh raspi 'pan-tilt.py x y; raspistill -o temp.jpg; cat temp.jpg' > temp.jpg

Jeg styrer pan/tilt-modulen med python-biblioteket pipan som bruker ServoBlaster i bunn.