Einleitung
(Zurück zum Inhaltsverzeichnis)
Wenn ich schon Infrarot und normales Licht messen kann, sollte das andere Ende des Lichtspektrums auch nicht fehlen.
Die Wahl fiel auf dieses Breakoutboard VEML6070 von Watterott.
Die benutzte Library findet sich auf Github und teilweise auf einem Forum von http://www.raspberrypi.org.
Angeschlossen wird der Sensor wie üblich über den I2C-Bus und sollten danach am I2C-Bus sichtbar sein.
i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Hier sind es die Adressen 0x038 und 0x039, die Adresse 0x029 gehört zu einem TSL25911.
Die Library von Github wurde unverändert übernommen und wird nach /usr/local/bin/veml6070.py kopiert.
Das Script demo.py habe ich umbenannt und etwas ergänzt:
sudo vi /usr/local/bin/UV.py
import veml6070
import bisect
def getUvaIndex(uv_raw):
#scaling value by integration times
uvIndex = bisect.bisect_left([187,374,560,747,934,1120,1307,1494,1681,1868,2054], uv_raw)
return uvIndex
if __name__ == '__main__':
veml = veml6070.Veml6070()
for i in [veml6070.INTEGRATIONTIME_1_2T,
veml6070.INTEGRATIONTIME_1T,
veml6070.INTEGRATIONTIME_2T,
veml6070.INTEGRATIONTIME_4T]:
veml.set_integration_time(i)
# uv_raw = 400
uv_raw = veml.get_uva_light_intensity_raw()
uva = veml.get_uva_light_intensity()
UVa_index = format(getUvaIndex(uv_raw))
# Debug
#print "Integration Time setting %d: %f W/(m*m) from raw value %d" % (i, uva, uv_raw)
#print i
#print uv_raw
#print uva
#print UVa_index
#print (getUvaIndex(uv_raw))
#print("UVa Index: {:5}".format(getUvaIndex(uv_raw)))
#op = open ('/tmp/UV_index.snmp', 'w')
#op.write ('{0:0.0f}\n'.format (i))
#op.close ()
op = open ('/tmp/UV_raw.snmp', 'w')
op.write ('{0:0.0f}\n'.format (uv_raw))
op.close ()
op = open ('/tmp/UVa.snmp', 'w')
op.write ('{0:0.0f}\n'.format (uva))
op.close ()
op = open ('/tmp/UVa_index.snmp', 'w')
op.write (UVa_index)
op.close ()
Alles anzeigen
Meine Ergänzung ist die Funktion: "def getUvaIndex(uv_raw):" zum Ermitteln des UVa-Indexes.
sowie das Schreiben der 3 Files UV_index.snmp, UV_raw.snmp und UVa_index.snmp nach /tmp
Die Auswertung
Naja, hier ist wieder der übliche Verdächtige dran, cron:
Und das wars hier schon, jetzt werden alle 5 min. 3 Files nach /tmp geschrieben.
SNMP einstellen
SNMP sollte gereits eingerichtet sein, hier wird nur noch der "pass"-Abschnitt ergänzt:
sudo vi /etc/snmp/snmpd.conf
pass .1.3.6.1.2.1.25.1.48.1 /usr/local/bin/snmp_UV_int.sh
pass .1.3.6.1.2.1.25.1.49.1 /usr/local/bin/snmp_UV_index.sh
pass .1.3.6.1.2.1.25.1.50.1 /usr/local/bin/snmp_UV_raw.sh
Und dann snmp neu starten:
Fehlen noch die Bash-Scripte dazu:
vi /usr/local/bin/snmp_UV_int.sh
#!/bin/bash
echo .1.3.6.1.2.1.25.1.48.1
echo gauge
cat /tmp/UVa.snmp
exit 0
vi /usr/local/bin/snmp_UV_index.sh
#!/bin/bash
echo .1.3.6.1.2.1.25.1.49.1
echo gauge
cat /tmp/UVa_index.snmp
exit 0
sudo vi /usr/local/bin/snmp_UV_raw.sh
#!/bin/bash
echo .1.3.6.1.2.1.25.1.50.1
echo gauge
cat /tmp/UV_raw.snmp
exit 0
Das wars schon auf dem Messseite. Nur noch ein kurzer Test (bei Nacht)
pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.48.1
iso.3.6.1.2.1.25.1.45.1 = Gauge32: 0
pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.49.1
iso.3.6.1.2.1.25.1.46.1 = Gauge32: 0
pi@raspiXX:~ $ snmpget -v1 -c public 192.168.2.9 .1.3.6.1.2.1.25.1.50.1
iso.3.6.1.2.1.25.1.47.1 = Gauge32: 0
Die Auswertung mittel MRTG
Auch hier sollte MRTG bereits eingerichtet sein, hier kommt nur die Ergänzung:
sudo vi /etc/mrtg/raspi09_mrtg.cfg
#---------------------------------------------------------------
# Raspberry Pi - Ultraviolet Raw
#---------------------------------------------------------------
Target[raspi-UV_Raw]: .1.3.6.1.2.1.25.1.7.0&.1.3.6.1.2.1.25.1.50.1:public@raspi09
Title[raspi-UV_Raw]: raspi09 - Ultraviolet Raw
PageTop[raspi-UV_Raw]: <H1>raspi09 - Ultraviolet Raw</H1>
Include: raspi-Ultraviolet_Raw.inc
#---------------------------------------------------------------
# Raspberry Pi - Ultraviolet A
#---------------------------------------------------------------
Target[raspi-UV_A]: .1.3.6.1.2.1.25.1.7.0&.1.3.6.1.2.1.25.1.48.1:public@raspi09
Title[raspi-UV_A]: raspi09 - Ultraviolet A
PageTop[raspi-UV_A]: <H1>raspi09 - Ultraviolet A</H1>
Include: raspi-Ultraviolet_A.inc
#---------------------------------------------------------------
# Raspberry Pi - Ultraviolet A Index
#---------------------------------------------------------------
Target[raspi-UV_A_I]: .1.3.6.1.2.1.25.1.7.0&.1.3.6.1.2.1.25.1.49.1:public@raspi09
Title[raspi-UV_A_I]: raspi09 - Ultraviolet A Index
PageTop[raspi-UV_A_I]: <H1>raspi09 - Ultraviolet A Index</H1>
Include: raspi-Ultraviolet_A_Index.inc
Alles anzeigen
Dazu noch die Includes:
sudo vi /etc/mrtg/raspi-Ultraviolet_Raw.inc
MaxBytes1[raspi-UV_Raw]: 500
MaxBytes2[raspi-UV_Raw]: 1000
AbsMax[raspi-UV_Raw]: 10000
Options[raspi-UV_Raw]: gauge, nopercent, noi, growright, pngdate, nobanner
YLegend[raspi-UV_Raw]: Ultraviolet Raw
Unscaled[raspi-UV_Raw]: n
ShortLegend[raspi-UV_Raw]: RAW
kMG[raspi-UV_Raw]:
YTicsFactor[raspi-UV_Raw]: 1
Factor[raspi-UV_Raw]: 1
LegendI[raspi-UV_Raw]: Ultraviolet Raw:
LegendO[raspi-UV_Raw]: Ultraviolet Raw:
Legend1[raspi-UV_Raw]: Ultraviolet Raw:
Legend2[raspi-UV_Raw]: Ultraviolet Raw:
Legend3[raspi-UV_Raw]: Max. Ultraviolet Raw:
Legend4[raspi-UV_Raw]: Max. Ultraviolet Raw:
Alles anzeigen
sudo vi /etc/mrtg/raspi-Ultraviolet_A.inc
MaxBytes[raspi-UV_A]: 187
MaxBytes2[raspi-UV_A]: 374
AbsMax[raspi-UV_A]: 1000
Options[raspi-UV_A]: gauge, nopercent, noi, growright, pngdate, nobanner
YLegend[raspi-UV_A]: Ultraviolet A
Unscaled[raspi-UV_A]: n
ShortLegend[raspi-UV_A]: RAW
kMG[raspi-UV_A]:
YTicsFactor[raspi-UV_A]: 1
Factor[raspi-UV_A]: 1
LegendI[raspi-UV_A]: Ultraviolet A:
LegendO[raspi-UV_A]: Ultraviolet A:
Legend1[raspi-UV_A]: Ultraviolet A:
Legend2[raspi-UV_A]: Ultraviolet A:
Legend3[raspi-UV_A]: Max. Ultraviolet A:
Legend4[raspi-UV_A]: Max. Ultraviolet A:
Alles anzeigen
sudo vi /etc/mrtg/raspi-Ultraviolet_A_Index.inc
MaxBytes[raspi-UV_A_I]: 187
MaxBytes2[raspi-UV_A_I]: 374
AbsMax[raspi-UV_A_I]: 1000
Options[raspi-UV_A_I]: gauge, nopercent, noi, growright, pngdate, nobanner
YLegend[raspi-UV_A_I]: Ultraviolet A INDEX
Unscaled[raspi-UV_A_I]: n
ShortLegend[raspi-UV_A_I]: RAW
kMG[raspi-UV_A_I]:
YTicsFactor[raspi-UV_A_I]: 1
Factor[raspi-UV_A_I]: 1
LegendI[raspi-UV_A_I]: Ultraviolet A INDEX:
LegendO[raspi-UV_A_I]: Ultraviolet A INDEX:
Legend1[raspi-UV_A_I]: Ultraviolet A INDEX:
Legend2[raspi-UV_A_I]: Ultraviolet A INDEX:
Legend3[raspi-UV_A_I]: Max. Ultraviolet A INDEX:
Legend4[raspi-UV_A_I]: Max. Ultraviolet A INDEX:
Alles anzeigen
Dann nur noch eine neue Webseite erstellen:
Letzte Anmerkung:
Auch hier kann man, ähnlich wie bei der Dämmerungssteuerung, einen Alarm auslösen, wenn der UV-Index zu hoch ist.