Mittwoch, 23. November 2016

Es werde Licht!

Die Idee: Beleuchtungsstärke aus einer Mobotix T25 auslesen und den Medianwert der letzten Messungen als Homematic Variable speichern, um damit Beschattung zu kontrollieren oder Bewegungsmelder-gesteuerte Lichter zu schalten.

Die meisten Mobotix Kameras erfassen die Beleuchtungsstärke als Meßwert in Lux. Meine T25 Türstationskamera zum Beispiel liefert den Messwert auf dem "rechten" Sensor mittels der Variable $(SEN.LXR) unter folgender URL:

http://<ip-adresse>/control/rcontrol?action=gettext&message=$(SEN.LXR)

Die Meßwerte werden zeilenweise in eine temporäre Datei geschrieben, in der maximal die letzen 10 Meßwerte gespeichert bleiben.
Um bei schwankenden Lichtverhältnissen die Ausreißer Meßwerte zu eliminieren, möchte ich von den letzten 10 Messungen den Median bilden. Dazu nutze ich das GNU Werkzeug datamash. Datamash liest die Daten aus der der ersten Spalte der temporären Datei. Das ist robust, egal wie viel Meßwerte bereits vorliegen.
Schließlich wird der Median per XMLAPI Aufruf in eine vorher angelegte Systemvariable geschrieben und steht damit in Homematic Skripten zur Auswertung zur Verfügung.


Hier ist der Quelltext meines Bash Skriptes, welches jede Minute als cronjob auf einem Server aufgerufen wird.

#!/bin/sh
#
# fetch the brightness measurement value from Mobotix
# and compute the median from the last 10 values (with datamash)
# and put in into Homematix system variable
#
##########################################
# Parameters go here
# .netrc must contain the credentials for this host!
URL='http://t25mobotix/control/rcontrol?action=gettext&message=$(SEN.LXR)'
FILE="/var/tmp/lux"
# Illumination: 17374
XMLAPI="http://192.168.178.11/config/xmlapi/statechange.cgi?ise_id=17374&new_value="
###########################################
#
# fetch the measurement and append it with \n to the file
wget -q -O - "$URL"| xargs -0 printf "%.2f\n" >>$FILE
# only keep the last 10 measurement lines
tail -10 $FILE >${FILE}.tmp
cat ${FILE}.tmp > $FILE
# compute the median of the last 10 measurements
MEDIAN=`datamash median 1 <$FILE`
wget -q -O /dev/null "${XMLAPI}${MEDIAN}"
exit 0
#
#EOF
view raw brightness hosted with ❤ by GitHub


Nachtrag: Unterschied zwischen Helligkeitsmesser in eine Bewegungsmelder (HM-Sen-MDIR-O-2) und dem von der T25 gemessenen Helligkeitswert: