NOV 24 2018

MQTT Temperatursensor

Arduino, FHEM, MQTT

Schlagwörter: , ,

In der Haus-Automatisation eignet sich MQTT (Message Queuing Telemetry Transport) perfekt.

Hardware:

    • Arduino
    • Ethernet-Shield
    • Dallas/Maxim DS1820

Der One-Wire-Temperatur-Sensor DS1820 habe ich an Pin D2 angeschlossen.

Die Anbindung an FHEM erfolgt wie im Wiki beschrieben an die MQTT-Bridge

Auf dem Arduino wird das Skript geladen:

/********************************************************************
 *  Temperatur-Sensor
 *  
 *  MQTT-Client mit DS18x20 Sensor
 *  
 *  
 */
#include                                                         // Serial Peripheral Interface
#include                                                    // Ethernet Bibliothek
#include                                                // MQTT Bibliothek
#include                                                     // OneWire
#include                                           // Dallas Temperatursensor

#define ONE_WIRE_BUS 2


IPAddress server(192, 168, 178, 122);                                   // MQTT-Broker
char inTopic[] = "DL8MA";                                               // Topic

byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };

char msg[100];                                                          // Buffer

OneWire oneWire(ONE_WIRE_BUS);                                          // TEmperatursensor einbinden
DallasTemperature sensors(&oneWire);

EthernetClient ethClient;                                               // Ethernet-Client aktivieren
PubSubClient client(ethClient);                                         // MQTT-Klasse

void reconnect() {                                                      // automatischer Reconnect 
  while (!client.connected()) {
    Serial.print("Versuch des MQTT Verbindungsaufbaus...");

    if (client.connect("arduinoClient")) {
      Serial.println("Erfolgreich verbunden!");
      client.publish( inTopic,"Temperatursensor");

      client.subscribe(inTopic);
    } else { 
      Serial.print("Fehler, rc=");
      Serial.print(client.state());
      Serial.println(" Nächster Versuch in 5 Sekunden");
      delay(5000);
    }
  }
}

void setup()
{
  Serial.begin(9600);                 
  sensors.begin();                                                      // Sensor initialisieren
  client.setServer(server, 1883);                                       // Adresse des MQTT-Brokers setzen
  Ethernet.begin(mac );                                                 // Ethernet-Vebindung aufbauen
  delay(1000);

}

void loop()
{  

  static char floatStr[15];
  String payLoad;
  String tempWertString;
  float  tempWertFloat;
  
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  sensors.requestTemperatures();                                        // Temperatur messen

  tempWertFloat = sensors.getTempCByIndex(0);                           // Messwert holen
  dtostrf( tempWertFloat,7, 2, floatStr);                               // Zahlenwert in String wandeln
  tempWertString = floatStr;
  tempWertString.trim();
  payLoad = "{\"Temperatur\":\"";                                       // Nachricht zusammenbauen
  payLoad = payLoad + tempWertString + "\"}";                           // Messwert dazufügen
  payLoad.toCharArray(msg, 100 );                                       // für publish-Funktion umwandeln

  client.publish( inTopic, msg );                                       // MQTT-Nachricht an Brocker senden

  Serial.println( msg );                                                

  delay( 1000 );
  
}

Die Verdrahtung:

DS18B20

Der Aufbau hier mit einem Arduino UNO

Anschluss am Arduino UNO

Arduino UNO

MQTT Debugging

FHEM und Arduino

There are no comments

Leave a Reply