NEWS
MQTT ESP
-
Hi ich habe ein ESP am laufen mit einem DS18B20 der über einen MQTT Client zu meinem Iobroker Mqtt server pusht
Soweit so gut, das ESP Programm macht ein Connect und Pusht die daten auch zum Broker. Das sehe ich sowohl in der Konsole als auch im broker
ESP Programm:
const char* mqtt_server = "192.168.178.77";
const char* mqtt_username = "";
const char* mqtt_password = "";
const char* mqtt_topic = "temperature";
BROKER
mqtt.0 2018-03-10 09:08:01.429 info Client [ESP8266Client] connected
mqtt.0 2018-03-10 09:07:49.532 info Client [ESP8266Client] connected
mqtt.0 2018-03-10 09:07:46.991 info Starting MQTT-WebSocket server on port 1884
mqtt.0 2018-03-10 09:07:46.989 info Starting MQTT server on port 1883
mqtt.0 2018-03-10 09:07:46.501 info starting. Version 1.5.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v6.13.0
host.iobroker 2018-03-10 09:07:45.341 info instance system.adapter.mqtt.0 started with pid 13155
host.iobroker 2018-03-10 09:07:43.353 info instance system.adapter.mqtt.0 terminated with code 0 (OK)
KONSOLE
WiFi connected
IP address:
192.168.178.100
Attempting MQTT connection…connected
Requesting DS18B20 temperature...
Sending temperature: 20.00
Closing MQTT connection...
Closing WiFi connection...
Entering deep sleep mode for 5 seconds...
Leider unter dem MQTT Adapter finde ich keine Werte wieder.
Muss ich da noch ein Datenpunkt oder sowaas erzeugen?
Wenn ja wie funktioniert das gibt es da schon eine Anleitung zu?
Gruß
Ludino
-
Hi Ludino,
geht aus deinem Post nicht hervor, Du hast den Port schon in deinem Sketch angegeben?
Datenpunkte werden beim ersten (erfolgreichen) publish automatisch angelegt.
Zeig doch mal deinen Sketch.
Viele Grüße
Christian
-
Abe klar doch gern
! ```
#include <esp8266wifi.h> #include <pubsubclient.h> #include <onewire.h> #include <dallastemperature.h> #include <streaming.h> ! #define SLEEP_DELAY_IN_SECONDS 5 #define ONE_WIRE_BUS D4 // DS18B20 pin ! const char* ssid = "gelöscht"; const char* password = "gelöscht"; ! const char* mqtt_server = "192.168.178.77"; const char* mqtt_username = ""; const char* mqtt_password = ""; const char* mqtt_topic = ""; ! WiFiClient espClient; PubSubClient client(espClient); ! OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); ! char temperatureString[6]; ! void setup() { // setup serial port Serial.begin(115200); ! // setup WiFi setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); ! // setup OneWire bus DS18B20.begin(); } ! void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); ! WiFi.begin(ssid, password); ! while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } ! Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } ! void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ! void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("Aussentemperature", mqtt_username, mqtt_password)) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } ! float getTemperature() { Serial << "Requesting DS18B20 temperature..." << endl; float temp; do { DS18B20.requestTemperatures(); temp = DS18B20.getTempCByIndex(0); delay(100); } while (temp == 85.0 || temp == (-127.0)); return temp; } ! void loop() { if (!client.connected()) { reconnect(); } client.loop(); ! float temperature = getTemperature(); // convert temperature to a string with two digits before the comma and 2 digits for precision dtostrf(temperature, 2, 2, temperatureString); // send temperature to the serial console Serial << "Sending temperature: " << temperatureString << endl; // send temperature to the MQTT topic client.publish(mqtt_topic, temperatureString); ! Serial << "Closing MQTT connection..." << endl; client.disconnect(); ! Serial << "Closing WiFi connection..." << endl; WiFi.disconnect(); ! delay(100); ! Serial << "Entering deep sleep mode for " << SLEEP_DELAY_IN_SECONDS << " seconds..." << endl; ESP.deepSleep(SLEEP_DELAY_IN_SECONDS * 1000000, WAKE_RF_DEFAULT); //ESP.deepSleep(10 * 1000, WAKE_NO_RFCAL); delay(500); // wait for deep sleep to happen }</streaming.h></dallastemperature.h></onewire.h></pubsubclient.h></esp8266wifi.h>
! Danke schonmal für dir Hilfe[/i] -
OK, das ist der gute pubsub Standard.
Das sieht auf den ersten Blick eigentlich gut aus.
Das connecten klappt ja auch (siehe dein Log)
Probier doch mal das publish so abzusetzen
if (client.publish(mqtt_topic, String(getTemperature()).c_str())) { Serial.println("Temperatur gesendet"); }
zur Info:
Die Funktion client.publish() liefert ein true bei erfolgreicher Übermittlung
-
danke das war es…!
Super
-
Freut mich, daß Dein System läuft