Mit einem speziellem Sensor, dem SI 1145 (amazon.de), kann man den UV-Index (-> Wikipedia) messen. Der zeigt neben dem UV-Index (Bereich 0 bis 11) auch noch andere Werte an (UV-Light und Visible Light). Was der SI 1145 noch alles kann, steht in der Dokumentation des Chips (-> hier):
Ziel in diesem Beitrag ist die Verbindung:
UV-Index-Sensor -> WLAN -> MQTT -> Fhem
Ich habe einige Informationen aus dem Netz geholt, z. B. bei Bitbastelei (-> youtube-Video).
Ich habe aber anstatt den ESP 8266-01 den Wemos D1 mini (-> Wemos D1 mini bei amazon.de) genommen. Hier muss man aber aufpassen, das man in Source Code den richtigen GPIO Port nimmt. In der Doku vom Wemos stand nämlich, man sollte den GPIO 2 nicht verwenden.
Richtig zur Verwendung eines WeMos D1 mini sieht die Script-Zeile in der SI1145 Library bei mir so aus.
Adafruit_SI1145.cpp
Wire.begin(12,13); also D6 und D7 auf dem WeMos D1 mini
Den eigentlichen Programm-Code habe ich hier gefunden: Craftsmen
Hier habe ich die notwendigen Programmzeilen angepasst, dann auf dem WeMos D1 mini geflashed:
/************************* WiFi Access Point *********************************/
#define WLAN_SSID „?????“
#define WLAN_PASS „?????“
/************************* MQTT Broker Setup *********************************/
const int MQTT_PORT = 1883;
const char MQTT_SERVER[] PROGMEM = „192.168.178.xxx“;
const char MQTT_CLIENTID[] PROGMEM = „LichtsensorMQTT“;
const char MQTT_USERNAME[] PROGMEM = „“;
const char MQTT_PASSWORD[] PROGMEM = „“;
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_PORT, MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD);
/****************************** Feeds ***************************************/
const char VISIBLE_LIGHT_FEED[] PROGMEM = „fhem/sensors/outdoor/visible_light“;
Adafruit_MQTT_Publish visible_light_feed = Adafruit_MQTT_Publish(&mqtt, VISIBLE_LIGHT_FEED);
const char UV_LIGHT_FEED[] PROGMEM = „fhem/sensors/outdoor/uv_light“;
Adafruit_MQTT_Publish uv_light_feed = Adafruit_MQTT_Publish(&mqtt, UV_LIGHT_FEED);
const char UV_INDEX_FEED[] PROGMEM = „fhem/sensors/outdoor/uv_index“;
Adafruit_MQTT_Publish uv_index_feed = Adafruit_MQTT_Publish(&mqtt, UV_INDEX_FEED);
Adafruit_SI1145 uv = Adafruit_SI1145();
Denkt auch dran, Eure SSID, Passwort und die IP von Eurem MQTT-Broker einzutragen.
Nachdem also alles via Arduino GUI richtig geflashed und beschaltet wurde, folgt ein lokaler Test.
Nun folgt ein Test, ob die MQTT-Daten korrekt herausgepustet werden. Das mache ich mit meinem Mac immer mit MQTT-SPY (Link zum Download).
Um das Ganze noch für Fhem lauffähig zu machen, habe ich folgendes Script genommen:
define UVSensor MQTT_DEVICE LichtsensorMQTT
attr UVSensor IODev MyBroker
attr UVSensor room Büro
attr UVSensor stateFormat transmission-state
attr UVSensor subscribeReading_uvindex fhem/sensors/outdoor/uv_index
attr UVSensor subscribeReading_uvlight fhem/sensors/outdoor/uv_light
attr UVSensor subscribeReading_visiblelight fhem/sensors/outdoor/visible_light
define FileLog_UVSensor FileLog ./log/UVSensor-%Y.log UVSensor
Das Ergebnis sieht dann so aus:
Anhand der Farbscala kann man nun den UV-Index sehen.
Die Fhem-Scripter unter Euch werden jetzt anhand dieser Readings natürlich noch Plots bauen oder Schaltungen, die bei bestimmten Werten interagieren.
Ich werde noch ein kleines Gehäuse basteln.
Ich hoffe, der Blog-Beitrag hat Euch gefallen, und bei Fragen, fragen in den Kommentaren.