Fhem: UV-Index messen mit dem SI 1145 und MQTT

Sommer, Sonne, Kaktus hat Helge Schneider schon gesungen. Wie schön das wir Ende August 2017 noch so viel Sonne haben. Aber manchmal möchte man wissen, wie stark die Sonneneinstrahlung ist und ob die für uns auch noch gesund ist.
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).

UV Sensor MQTT SPY

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.

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

3 Antworten zu Fhem: UV-Index messen mit dem SI 1145 und MQTT

  1. Robin sagt:

    Hallo Stefan,

    danke für die Info, und wenn du schon ein Gehäuse hast, her damit 🙂

    LG
    /robin

  2. Stefan sagt:

    Mal wieder ein sehr guter Artikel, Daumen hoch.

    Ein Tipp für das Gehäuse, da ich ein ähnliches Projekt mit MySensors schon umgesetzt habe. Das Problem ist ja das der UV Sensor schlecht im Regen hängen darf, also muss er hinter Glas, aber das Glas filtert ja UV Licht.
    In der Aquaristik gibt es allerdings Quarzglaskolben für UV Lampen die natürlich das UV Licht nicht filtern. 😉

  3. Ben sagt:

    Sehr interessant. Direkt bestellt und werde es nachbauen. Vielen Dank Robin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.