HomeKit günstiger WLAN Temperatursensor

Leider gibt keinen günstigen WLAN Temperatursensor für HomeKit! Ich habe aber Abhilfe gefunden.

Das Prinzip

Ein ESP8266 Mikrocontoller (D1 mini) wird die Temperatur per GET-Request an Homebridge liefern und Homebridge die Information an HomeKit weitergeben.

HomeKit günstiger WLAN Temperatursensor
D1 mini mit HomeKit

Der D1 mini ist hierfür bestens ausgestattet. Er besitzt schon ein WLAN Modul und es kann ein Temperaturfühler direkt angeschlossen werden. In Homebridge wird das Plugin “homebridge-http-webhooks” die Anfragen des D1 mini entgegennehmen und Homebridge wird HomeKit einen Temperatursensor bereitstellen der die Werte anzeigt.

Was benötigen wird dafür?

Der D1 mini ist schon ein eigener kleiner Rechner trotzdem benötigen wird noch einen Sensor sowie eine Stromversorgung.

Homebridge installieren

Wie ihr Homebridge installiert habe ich hier beschrieben. Es gibt aber noch viele weitere Möglichkeiten, zum Beispiel auf einem Raspberry Pi.

Homebridge Plugin installieren und konfigurieren

Damit der D1 mini mit Homebridge kommunizieren kann installieren wir das Plugin “homebridge-http-webhooks“.

Homebridge Http Webhooks plugin
Homebridge Http Webhooks plugin

Unter “Webhook Settings” müssen wir das Plugin konfigurieren:

  • Webhook Port: 51828
  • Cache Directory (nur wenn Homebridge im Docker läuft): /homebridge/.node-persist

Und unter “Webhook Devices > Sensors” fügen wir einen “Sensor” hinzu:

  • ID: ein zusammenhängedes Wort um den Sensor eindeutig zu identifizieren
  • Name: Der Name in Homebridge
  • Type: Die Art des Sensors

Sobald man alle Einstellungen vorgenommen hat muss man unten rechts den “Speichern” Button klicken. Danach einmal Homebridge neu starten und der Sensor sollte soweit eingerichtet sein.

Den D1 mini verkabeln

Der Temperatursensor muss mit dem D1 mini wie folgt verkabelt werden:

D1 miniSensor DS18B20
5VVCC (rot)
GGND (schwarz)
D4DQ (gelb)

Das sieht dann so aus:

D1 mini Anschluß Temperatursensor

Arduino IDE einrichten

Damit wir den D1 mini programmieren können müssen wir nun erstmal eine Entwicklungumgebung installieren. Wie das geht erfahrt ihr hier.

Nun müssen zwei Bibliotheken installiert werden, die uns beim Source Code für den Temperatursensor helfen werden:

Beide Bibliotheken müssen heruntergeladen und in der Arduino IDE unter “Sketch > Bibliothek einbinden > .ZIP Bibliothek hinzufügen…” installiert werden.

D1 mini programmieren

Nun benötigen wir noch den Source Code damit der D1 mini die Temperatur ausliest und an Homebridge sendet. Dankeswerterweise hat makesmart dies für uns übernommen: (Letzte Aktualisierung des Scripts 10.06.2021)

/*
    WLAN TERMOMETER GET-Request
    GET-Request an einen HTTP-Server
    Created by cooper, 2020
    makesmart.net
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2

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

WiFiClient client;
HTTPClient sender;

// WLAN-Daten
const char* ssid = "WLAN_SSID";
const char* password = "WLAN_PASSWD";

//Messintervall in Sekunden
int wait = 5;

//Temperatur
float temperature;


void push(){

  //Hier wird der Wert an die Smarthome-Umgebung übertragen
  
  if (sender.begin(client, "http://SERVERIP:51828/?accessoryId=SENSORID&value=" + String(temperature))){

    // 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!");
  }

}


void setup() {
  Serial.begin(115200);
  
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
    Serial.print(".");
  }

  Serial.println("Verbunden!");
  wait = wait * 1000;
  sensors.begin();
  
}


void loop() {
  
  sensors.requestTemperatures();
  Serial.print(sensors.getTempCByIndex(0));
  Serial.println(" °C");
  
  temperature = sensors.getTempCByIndex(0);
  push();
  delay(wait);

}

Den Code kopieren wir einfach in das Arduino Fenster und passen folgende Codestellen an:

  • WLAN_SSID = Euer WLAN Name
  • WLAN_PASSWD = Euer WLAN Passwort
  • SERVERIP = Server Ip Adresse von Homebridge
  • SENSORID = Id des Webhook Sensors in Homebridge

Jetzt laden wir es mit dem “Pfeils nach rechts” hoch zum D1 mini:

Ob der D1 mini euer WLAN Netzwerk verbinden konnte erkennt ihr nun in eurem Router, da er dort als neues Gerät im WLAN auftauchen müsste.

Im Homebridge Protokoll könnt ihr schauen ob der Sensor die Daten korrekt liefert (hier alle 10 Sekunden):

Teile diesen Beitrag:

Das könnte dich auch interessieren …