Helligkeitsmessung mit TSL25911 (Licht, Infrarot)

  • Einleitung

    (Zurück zum Inhaltsverzeichnis)

    Hier geht es darum Helligkeitsabhängig zu schalten und oder die Werte aufzuzeichnen.

    Voraussetzung ist, das mindestens SNMP und der I2C-Bus, optional auch MRTG bereits eingerichtet sind.

    Für diese Anleitung musste dieses TSL25911-Breakout-Board dran glauben.

    Um einen Sensor am I2C-Bus anzuschliessen gibt es genug Anleitungen, auch bei der Plazierung ist die eigene Phantasie gefragt.

    Benutzt wurde die Library tsl2591.py von Github, wie von Watterott vorgeschlagen.


    Man bekommt vom Breakboard mit Hilfe der Library drei Werte, davon wird ein Wert berechnet:

    • Sichtbares Licht
    • Infrarot
    • Die berechnete Lichtstärke in Lux

    Da es hier darum geht, die Messwerte im Haus-Intranet zur Verfügung zu stellen, wurde die Messwertausgabe an das Protokoll SNMP angepasst.

    Die Aufzeichnung mittels MRTG lief hier schon etwas länger, das Schalten war somit der Rückgriff auf zum Teil bereits vorhandenes.

    Hintergrund war das dämmerungsabhängiges Schalten von Leuchten z.B. Außenbeleuchtung, Infrarot-LEDs für Kameraüberwachung, in diesem Fall die Außen-Adventsbeleuchtung.

    Realisiert wurde das über Funksteckdosen und dem 433,92 MHz-Sender FS1000A mittels Pilight.

    Die Messstelle ist hier "raspi09 (192.168.2.9)", daher beim kopieren der Scripts darauf achten, dies auch anzupassen.

    Die Software auf der Messstelle, hier (raspi09)

    Die Library tsl2591.py wird ohne Änderung in das Verzeichnis /usr/local/bin kopiert. Hier steht auch, das der Chip auf die I2C-Adresse 0x29 hört.

    Das Python-Script landet ebenfalls dort:

    Dann noch ein:

    Code
    1. sudo chmod 0755 /usr/local/bin/snmp_ts25911.py

    Der Cron-Job

    Dieses Script wird über cron aufgerufen und wird durch einen Eintrag in:

    Code
    1. sudo vi /etc/cron.d/snmp
    2. */5 * * * * root python /usr/local/bin/snmp_ts25911.py File 2>&1

    Ab jetzt schreibt das Script alle 5 min. 3 Dateien in /tmp

    Code
    1. ll /tmp/*.snmp
    2. -rw-r--r-- 1 root root 3 Nov 23 12:20 ir.snmp
    3. -rw-r--r-- 1 root root 4 Nov 23 12:20 lux.snmp
    4. -rw-r--r-- 1 root root 4 Nov 23 12:20 visible.snmp

    Damit hat man einen definierten Messzeitpunkt und kann die Werte jederzeit ohne Zeitverzögerung abrufen.

    Damit vermeidet man auch ständige Abfragen des oder der Sensor(en) falls der RPi als Messstelle

    für mehrere Sensoren (Temperatur, Luftdruck, rel. Luftfeuchtigkeit, UV-Licht, Feinstaub, ...) dient.

    SNMP einstellen

    Dazu muss man den "pass"-Abschnitt ergänzen:

    Code
    1. sudo vi /etc/snmp/snmpd.conf
    2. pass .1.3.6.1.2.1.25.1.45.1 /usr/local/bin/snmp_lux.sh
    3. pass .1.3.6.1.2.1.25.1.47.1 /usr/local/bin/snmp_visible.sh
    4. pass .1.3.6.1.2.1.25.1.46.1 /usr/local/bin/snmp_ir.sh

    Und dann snmp neu starten:

    Code
    1. sudo service snmpd restart

    Die Bash-Scripte

    Wie man sieht, sind es nur kurze 3 Scripte:

    Shell-Script
    1. #!/bin/bash
    2. echo .1.3.6.1.2.1.25.1.45.1
    3. echo gauge
    4. cat /tmp/lux.snmp
    5. exit 0
    Shell-Script
    1. #!/bin/bash
    2. echo .1.3.6.1.2.1.25.1.47.1
    3. echo gauge
    4. cat /tmp/visible.snmp
    5. exit 0
    Shell-Script
    1. #!/bin/bash
    2. echo .1.3.6.1.2.1.25.1.46.1
    3. echo gauge
    4. cat /tmp/ir.snmp
    5. exit 0

    Ausführbar machen nicht vergessen.


    Test

    Bei diesem Test ist die IP und das Passwort (public) ist entsprechend anzupassen:

    Code
    1. pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.45.1
    2. iso.3.6.1.2.1.25.1.45.1 = Gauge32: 566
    3. pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.46.1
    4. iso.3.6.1.2.1.25.1.46.1 = Gauge32: 38
    5. pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.47.1
    6. iso.3.6.1.2.1.25.1.47.1 = Gauge32: 201

    Die Werte entsprechen einem grauen Novembertag.

    Die Auswertung mittels MRTG auf dem Webserver (raspiXX)

    Vorausgesetzt wird, das MRTG bereits installiert ist und funktioniert.

    Die Konfigurationsdatei: /etc/mrtg/raspi09_mrtg.cfg

    wird um folgenden Abschnitt ergänzt:

    Hier sind der sichtbare und der Infrarot-Bereich zusammengefasst, fehlen noch die Includes:

    für den infraroten und sichtbaren Anteil des Lichts.

    Dann noch eine neue Webseite erstellen:

    Code
    1. cd /etc/mrtg/
    2. sudo indexmaker --output=/var/www/mrtg/raspi09/index.html raspi09_mrtg.cfg

    Abfragen aus dem Intranet auf irgendeinem RPi, auf dem ebenfalls SNMP installiert sein muss.

    Für dieses Script wird Pilight benötigt, denn hier werden Funksteckdosen geschaltet.

    Eine funktionierende Installation von Pilight wird hier vorausgesetzt. Hier ist die Messstelle und der "Schalter" (eine Webcam auf RPi-Basis mit Langeweile) räumlich voneinander getrennt.

    Dazu ein kleines Python-Script, das über Pilight Funksteckdosen schaltet:

    In der Variable "light" wird der Schwellwert vorgegeben, unter der das Licht eingeschaltet wird.

    Das "time.sleep( 5 )" dient dazu, um der Messstelle (raspi09) die Zeit zu geben um die Messwerte zu Verfügung zu stellen.

    Die Optionen -p, -i und -u sollten den eigenen Verhältnissen angepasst werden.

    Auch dieses Script wird alle 5 min. mittels Cronjob gestartet:

    Shell-Script
    1. sudo vi /etc/cron.d/Funksteckdose
    2. */5 * * * * root /usr/bin/python /usr/local/bin/Funksteckdose.py

    Hier werden mittels Pilight mehrere Funksteckdosen eingeschaltet, die alle auf einen Knopf der Ferbedienung angelernt wurden.

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wußte das nicht, und hat es dann einfach gemaccht.

    Meine Projekte

    Avatar


    Edited 6 times, last by Jürgen Böhm ().