NEWS
Arduino Programm mqtt
-
Hallo zusammen,
ich habe aus dem Netz folgendes Programm auf mein NodeMcu aufgespielt zum testen, eigentlich dachte ich das nun Objekte im Iobroker erzeugt werden
#define BASE "8266 TmpSensor" // <---------------!!Entsprechend für jeden Sensor anpassen!! #define mqtt_client_id BASE #define mqtt_topics_ip BASE "/IP" #define mqtt_topics_light BASE "/Licht" #define mqtt_topics_humidity BASE "/Luftfeuchte" #define mqtt_topics_temperature1 BASE "/Temperatur1"
und diese dann mit den Variablen Inhalt aktualisiert wird, tut so aber nicht es wird nur die Base erzeugt mit register Alive.
Kann sich das jemand mal anschauen, was mache ich da falsch.
Gruß
Toni
[spoiler]//#define DEBUG // Debug-Modus einschalten fuer spezielle Ausgaben ueber Serial #include <esp8266wifi.h> extern "C" { // nur fuer ESP8266 systen_deep_sleep() #include "user_interface.h" } // nur fuer ESP8266 systen_deep_sleep() #include <pubsubclient.h> //#include <onewire.h> #include "DHT.h" // DS18x20-Settings // float celsius, fahrenheit; //#define DSPIN 5 // DS18x20-Pin entsprechend der GPIO z.B GPIO05 -> 5 //OneWire ds(DSPIN); // Netzwerk-Settings <-------------------------!!ANPASSEN!! const char* ssid = ""; const char* password = ""; const char* USE_DHCP = "on"; // "on" fuer DHCP IPAddress Myip(192, 168, 2, 61); //static IP-Adresse (Sensor) IPAddress gateway(192, 168, 2, 1); //IP-Gateway IPAddress subnet(255, 255, 255, 0);//Subnet //// MQTT-Settings IPAddress mqtt_server(192,168,2,68); // IP-MQTT-Broker const char* mqtt_username = "user"; // MQTT-User const char* mqtt_key = "pass"; // MQTT-Password #define BASE "8266 TmpSensor" // <---------------!!Entsprechend für jeden Sensor anpassen!! #define mqtt_client_id BASE #define mqtt_topics_ip BASE "/IP" #define mqtt_topics_light BASE "/Licht" #define mqtt_topics_humidity BASE "/Luftfeuchte" #define mqtt_topics_temperature1 BASE "/Temperatur1" WiFiClient espClient; PubSubClient client(espClient); #define interval 600 // DeepSleep oder delay Zeit in Sekunden #define DHTPIN 4 // DHT-Pin entsprechend der GPIO z.B GPIO04 -> 4 // DHT-Typ //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); // DHT initialisieren char message_humidity[20]; char message_temperature1[20]; //char message_temperature2[20]; //char message_heatindex[20]; char message_light[20]; void setup() { Serial.begin(115200); if(USE_DHCP == "off") {setup_wifi();} Serial.println("DHTxx test!"); dht.begin(); client.setServer(mqtt_server, 1883); client.setClient(espClient); } void setup_wifi() { Serial.println(""); delay(10); Serial.print("Connecting to "); Serial.println(ssid); if(USE_DHCP == "off") {WiFi.config(Myip, gateway, subnet); } 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 reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect(mqtt_client_id,mqtt_username,mqtt_key)) { Serial.println("connected"); // IP-Adresse umwandeln und publish IPAddress localAddr = WiFi.localIP(); char s[16]; sprintf(s, "%d.%d.%d.%d", localAddr[0], localAddr[1], localAddr[2], localAddr[3]); client.publish(mqtt_topics_ip,s, true); // client.publish("Antonio Tedesco") Serial.println(WiFi.localIP()); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void loop() { delay(2000); // Pause fuer DHT-Initialisierung if (!client.connected()) { reconnect(); } // DS18x20 lesen // readDS18x29(); // Sensor lesen float h = dht.readHumidity(); // Luftfeuchtigkeit float t = dht.readTemperature(); // Temperatur in Celsius float f = dht.readTemperature(true); // Temperatur in Fahrenheit (isFahrenheit = true) if (isnan(h) || isnan(t) || isnan(f)) { // Auf Lesefehler pruefen -> evtl wiederholen Serial.println("Lesefehler DHT-Sensor!"); return; } float hif = dht.computeHeatIndex(f, h); // Compute heat index in Fahrenheit (the default) float hic = dht.computeHeatIndex(t, h, false); // Compute heat index in Celsius (isFahreheit = false) #if defined DEBUG Serial.print("Luftfeuchte: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatur: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); #endif String pub_humidityString = String(h); pub_humidityString.toCharArray(message_humidity, pub_humidityString.length()+1); client.publish(mqtt_topics_humidity, message_humidity); Serial.println("Humidity: "+pub_humidityString+" gesendet"); String pub_temperature1String = String(t); pub_temperature1String.toCharArray(message_temperature1, pub_temperature1String.length()+1); client.publish(mqtt_topics_temperature1, message_temperature1, true); Serial.println("Temperatur1: "+pub_temperature1String+" C gesendet"); String pub_lightString = String(analogRead(A0)); // Lichtsensor pub_lightString.toCharArray(message_light, pub_lightString.length()+1); // Lichtsensor client.publish(mqtt_topics_light, message_light, true); // Lichtsensor Serial.println("Licht: "+pub_lightString+" gesendet"); // Lichtsensor // nur bei system_deep_sleep() //////// delay(3000); void disconnect (); Serial.println("...DeepSleep enabled!"); system_deep_sleep(interval*1000000); //sleep time in usecs. 10000000 = 10 secs. /////////////////////////////////////// // delay(interval*1000); // Interval für Publish - wenn nicht system_deep_sleep() }[/spoiler]</onewire.h></pubsubclient.h></esp8266wifi.h>
geändert: Code in Code-Tags und Spoiler gesetzt; Homoran (Admin)
-
Hallo,
keiner der mir ein kleine tipp geben kann?
Gruß
Toni
-
eigentlich dachte ich das nun Objekte im Iobroker erzeugt werden `
Über welchen Adapter willst du diese Objekte erzeugen?
Gruß
Rainer
-
na, genau das was ich suche … die MQtt - Anmeldung mit Username und Passwort
objekte ? bei den richtigen zugangsdaten für den MQtt zugang sind dort die daten zu finden.
aber warum der DHT xx ? ... die machen nur ärger !!
entweder:
BME280 - Temperatur, Feuchte, Luftdruck
SI7021 - Temperatur, Feuchte
BH1750 - Helligkeit
-
eigentlich dachte ich das nun Objekte im Iobroker erzeugt werden `
Über welchen Adapter willst du diese Objekte erzeugen?
Gruß
Rainer `
Hallo Reiner,
also die Objekte erscheinen im Sonoff Adapter, oder nutzt man da einen anderen Adapter für ESP´s und Arduino Soft?
Es wird auch was erzeugt allerdings nur der Titel mit Alive siehe Bild
![](</s><URL url=)https://abload.de/img/objekti2kue.png" /> -
na, genau das was ich suche … die MQtt - Anmeldung mit Username und Passwort
objekte ? bei den richtigen zugangsdaten für den MQtt zugang sind dort die daten zu finden.
aber warum der DHT xx ? ... die machen nur ärger !!
entweder:
BME280 - Temperatur, Feuchte, Luftdruck
SI7021 - Temperatur, Feuchte
BH1750 - Helligkeit `
Hallo,
ich benutze keine Anmeldedaten user und Passwort für mqtt, deswegen gehen meine Sonoff Geräte mit Tasmota trotzdem alle.
Würde das später mit einem Esp1 als temp Feuchte Sensoren mit Batterie Betreiben. Habe schon ein paar Wemos D1 mit der Tasmota allerdings mit nem Netzteil am laufen.
Gruß
Toni
-
in MQTT funzt das programm ganz sauber ( ich habe nur den DHT ausgetauscht ) und den port angepasst - user + pwd nutze ich im moment auch nicht.
einzig was im umfeld dieser zeite " // client.publish("Antonio Tedesco") " scheint zu fehlen .
port: 1886 MQTT / 1883 Sonoff
-
ach: der esp8266 taugt nicht wirklich für DS und batterie … da ist der esp32 besser ( siehe youtube andreas spiess - muss man aber etwas suchen )
-
Hallo zusammen,
Danke nochmal an alle, war mein Fehler ich hatte nur den Sonoff Adapter als Mqtt.
ich habe den Mqtt Iobroker Adaper installiert und dem einen anderen Port gegeben 1886 wie den Sonoff Adapter mit 1883.
Und siehe Bild alles geht
~~![](</s><URL url=)https://abload.de/img/objekt_2n3kbk.png" />
Gruß
Toni~~
-
was ist den da für ein lichtsensor angeschlossen ein LDRxx oder so
-
was ist den da für ein lichtsensor angeschlossen ein LDRxx oder so `
ja genau ein LDR mit nem Widerstand
-
ich hatte nur den Sonoff Adapter als Mqtt. `
So was hatte ich ganz am Anfang vermutet.Bitte auf die Ports von mqtt und Sonoff achten
Na dann viel Spaß
Gruß
Rainer
-