Ich habe für meinen Intexpool nicht nur eine smarte Poolpumpe, sondern jetzt auch einen HomeKit Temperatursensor DS18B20. Ich verwende in dieser Anleitung einen d1 mini* und einen DS18B20*. Und das ganze für unter 10€!


HomeKit Temperatursensor DS18B20 – Das brauchst du

Nun zum einen brauchst du einen ESP. Ich werde einen d1 mini verwenden, da dieser ohne große Vorbereitungen programmiert werden kann und direkt 5V liefert. Eine Anleitung zur Programmierung findest du hier. Ich verwende zudem noch Jumperkabel, um den Sensor mit meinem d1 mini verbinden zu können.

Zum anderen brauchst du noch einen DS18B20 Sensor*. Den Sensor gibt es in Kabellängen von einem Meter bis drei Meter. Ich habe mir den Sensor mit einem 1 Meter langen Kabel bestellt. Empfehlen kann ich dir jedoch ein etwas längeres Kabel, da der Sensor später über den Rand in den Pool hängen soll.


Da ich nicht dauerhaft im Außenbereich eine Kabeltrommel legen möchte, habe ich mir noch eine Batterieklammer für eine 9V Blockbatterie* gekauft und einen Konverter zu 5V*. Nun fehlt nur noch eine 9V Block Batterie* und ein paar Jumperkabel*, um alles zu verbinden.


Die Verkabelung

Nun die „Basic“ Verkabelung, also der Anschluss des Sensors an den d1 mini*, ist bei dieser Anleitung besonders einfach.

Verbinde einfach das rote VCC Kabel mit dem 5V Pin des d1 mini. Nun verbindest du einfach das schwarzen GND Kabel mit dem G Pin des d1 mini.

Das gelbe Data-Kabel habe ich mit dem Pin D4 verbunden. Diesen kannst du aber auch frei wechseln, denk aber daran den Code entsprechend anzupassen. Das Datenblatt findest du auf makesmart.net.

Willst du später meinen Code verwenden und den Deep-Sleep Modus verwenden, musst du zusätzlich noch den Pin RST mit dem Pin D0. Nur so kann sich der d1 mini* selbst nach einer bestimmten Zeit aus dem Deep-Sleep Modus wecken und sein Programm wieder ausführen. Ich verwende für diese Brücke ganz einfach ein Jumperkabel*.


HomeKit Temperatursensor DS18B20 im Akkubetrieb

Ich verwende, wie bereits oben geschrieben, eine 9V Block Batterie* und eine Step Down auf 5V*. Die Verkabelung ist hierbei wirklich simpel. Die Batterie wird über einen passenden Anschluss* mit dem Step Down verbunden. Der Ausgang des Step Downs ist 5V VCC und GND. Diese werden nun entsprechend mit dem d1 mini* verbunden, also 5V an den 5V Pin und GND an den G Pin.

Mit dem deep-sleep Modus des ESPs reicht diese Batterie für ca. 5 Monate! Bei einer Messung alle 15 Minuten.


Der Code

Wenn du deinen PC noch nicht auf die Programmierung eines ESP8266 Moduls vorbereitet hast, dann erledige das bitte jetzt.

Zudem musst du noch die Bibliotheken OneWire und DallasTemperature installieren. Das machst du unter dem Menüpunkt Werkzeuge->Bibliotheken verwalten, oder drück einfach Str+Shift+i.

Suche in dem Suchfeld einmal nach DallasTemperature und installiere das gelb markierte Paket. Das Gleiche danach auch noch mit dem Paket OneWire.


Da ich keinen Widerstand verwende, muss ich den Sensor ein paar Mal auslesen, bevor der Wert genau ist. Das ist aber gar kein Problem. Mit dem folgenden Code wird der Sensor sein Messergebnis erst senden, wenn die Messung genau genug ist.

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

HTTPClient sender;

const char* ssid = "Wifi Name";
const char* password = "Wifi_Passwort";

// Pinlayout und Werte
int zaehler = 0;
float lastTemp = 0.0;
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int regenPin = 0;
int regenLevel = 300;

void setup() {
  Serial.begin(115200);
  Serial.println("ESP Gestartet");
  WiFi.begin(ssid, password);
  Serial.print("Verbindung wird hergestellt ...");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Verbunden! IP-Adresse: ");
  Serial.println(WiFi.localIP());

}

void loop() {
  // Temperatur auslesen
  lastTemp = 0.0;
  while (zaehler < 5) 
  {
    sensors.requestTemperatures();
    if (sensors.getTempCByIndex(0) != lastTemp) {
      lastTemp = sensors.getTempCByIndex(0);
      zaehler = 0;
      Serial.println(String(sensors.getTempCByIndex(0)));
    } else {
      zaehler = zaehler + 1;
      Serial.println(String(sensors.getTempCByIndex(0)));
    }
    
    delay(1000);
  }
  // Hier die IP-Adresse der Homebridge und den Port von Http Webhooks einfügen
  apiSend("http://192.168.178.24:1837/?accessoryId=tempPool&value=", String(lastTemp));

  // Deep Sleep schalten
  ESP.deepSleep(900e6);
}

void apiSend(String path, String state) {
  String temp = path + state;
  if (sender.begin(temp)) {

    // HTTP-Code der Response speichern
    int httpCode = sender.GET();
   

    if (httpCode > 0) {
      
      // Anfrage wurde gesendet und Server hat geantwortet
      // Info: Der HTTP-Code für 'OK' ist 200
      if (httpCode == HTTP_CODE_OK) {

        // Hier wurden die Daten vom Server empfangen

        // String vom Webseiteninhalt speichern
        String payload = sender.getString();

        // Hier kann mit dem Wert weitergearbeitet werden
       // ist aber nicht unbedingt notwendig
        Serial.println(payload);
      }
    }else{
      // Falls HTTP-Error
      Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
    }

    // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
    sender.end();
    
  } else {
    Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
  }
}

Erklärung des Codes

Im ersten Teil des Codes werden die Pins und Werte definiert, die später gebraucht werden. In der Setup Funktion wird die Verbindung mit dem Wifi Netzwerk aufgebaut. Eine genauere Erklärung findest du in meinem Sonoff Basic Projekt.

Die eigentliche Messung findet in der loop() Funktion statt. Da in diesem Aufbau kein Widerstand verwendet wird, müssen wir mehrere Messungen durchführen, bis der Wert sich einpendelt. Ich habe eine Schleife verwendet, die so lange ausgeführt wird, bis 5 Mal der selbe Wert gemessen wurde. Das ist schon sehr genau, aber wenn du das Ergebnis noch genauer gemessen werden soll, kannst du in der folgenden Zeile einfach die 5 durch eine höhere Zahl ersetzen.

  while (zaehler < 5) 

Wenn der Wert sich dann eingependelt hat, wird der Wert per http Protokoll an die Homebridge gesendet. Wenn du die IP deiner Homebridge nicht kennst, schau in deinem Router Interface ein oder verwende die Shell, wie hier erklärt. Die Funktion apiSend() sendet die HTTP-Aufforderung. Verwende diese Funktion als Blackbox oder les bei makesmart.net die Erklärung.

Im Aufruf der Funktion kannst du aber noch die ID des Sensors anpassen. Diese ID wird später für die Konfiguration der Homebridge wichtig. Ändere hierfür im folgenden Code tempPool zu einem Wert deiner Wahl.

  apiSend("http://192.168.178.24:1837/?accessoryId=tempPool&value=", String(lastTemp));

Homebridge einstellen

Nun musst du in deiner Homebridge einen neuen Sensor erstellen. Ich verwende hierfür das Plugin Http Webhooks. Wenn du das Plugin noch nicht installiert hast, klicke in deiner Config-UI-X auf Plugins und such nach Http Webhooks. Klicke anschließend noch auf Installieren. Nach der Installation kannst du das Plugin konfigurieren.

Klicke als Nächstes auf Einstellungen und öffne den Reiter Sensors. Nach einem Klick auf ADD SENSORS kannst du einen neuen Sensor erstellen.

Falls du meinen Code von oben 1:1 kopiert hast, kannst du meine Einstellungen übernehmen. Hast du jedoch die ID angepasst, musst du diese auch hier wieder anpassen.

Wenn du Webhooks noch nicht eingerichtet hattest, musst du zudem noch den Port anpassen. Scrolle hierfür nach ganz oben und öffne Webhook Settings. Trage bei der Einstellung Webhook Port die Zahl 1837 ein und klicke anschließend auf SPEICHERN.


Hat alles geklappt?

Nach einem Neustart der Homebridge, solltest du den Sensor in deiner Apple Home App angezeigt bekommen. Wenn dieser noch auf 0,0°C steht, musst du noch maximal 15 Minuten warten, bis der Sensor wieder einen Wert gesendet hat. Also häng noch schnell den Sensor in den Pool. Ich habe als Wasserschutz eine alte Curry Verpackung genommen und das Bohrloch für den Sensor mit Heißkleber abgedichtet.


Wenn etwas nicht geklappt hat oder etwas unklar ist, schreibe gerne einen Kommentar oder nimm direkt den Kontakt zu mir auf. Falls alles geklappt hat, dann teil doch diese Anleitung mit deinen Freunden!


Die mit Sternchen (*) gekennzeichneten Links sind sogenannte Affiliate-Links von Amazon. Wenn du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekomme ich von Amazon eine Provision. Für dich verändert sich der Preis nicht. So finanziere ich meine DIY-Artikel und stelle dir immer das passende Produkt zur Verfügung.


Leon Gauweiler

Ich hoffe mein Artikel konnte dir helfen! Mein Name ist Leon Gauweiler und ich habe im März mein Abitur erhalten. Bis im Oktober mein Studium im Fach Wirtschaftsinformatik beginnt arbeite ich an meinem Softwareunternehmen, um mir mein Studium zu finanzieren. Als mein Hobby interessiere ich mich außerdem für die Programmierung von Mikrocontrollern, wie dem Arduino oder ESPs und der Arbeit an Servern auf linux Basis.

0 Kommentare

Schreibe einen Kommentar

Avatar-Platzhalter

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