NEWS
Hilfe für Sketch für Wemos mit DHT11 in IoBroker
-
Hallo,
ich brauche bitte Hilfe von Programmierern. Ich habe hier aus dem Forum, von einen sehr netten Mitglied einen Sketch bekommen um den Wemos D1 mini mit dem IObroker zur verbinden. Das hat auch sehr gut und stabil funktioniert.
Nun soll der Wemos aber auch eine Aufgabe erfüllen, er soll die Temp und die Feuchtigkeit mit einem DHT11 ermitteln und über den Java Script als Datenpunkt an den IObroker weitergeben.
Der Sketch für den DHT11 (der einzeln auch funktioniert hat) wurde mir bereits integriert, doch leider kommen Fehlermeldungen.
Ich habe den Sketch (Verbindung mit IObroker mit integrierten DHT11) unten angehängt.
Wer kann mir helfen, um den Wemos in die Haussteuerung zu integrieren??
Vielen Dank
Sketch IObroker mit DHT11 :
! /*
! * WeMos ioBroker Basis Sketch V 1.0.0
! *
! * verbindet sich mit dem vorhandenen WLAN als Server
! * und schreibt die Daten in ioBroker Datenpunkte
! *
! * Auf Seite ioBroker muss der Adapter "simpleAPI" installiert und aktiv sein
! *
! * ioBroker Skript zum Anlegen der notwendigen Datenpunkte: xxxxxx.js (V1.0.0)
! *
! * Skript von ruhr70
! *
! * Inspieriert von:
! * eric2905 (Anpassung seines Basis-Skripts für Weomos -> ioBroker)
! * http://homematic-forum.de/forum/viewtop … 31&t=29321
! * http://www.renmet.com/wiki/index.php?title=Hauptseite
! *
! * Ausgabe:
! * - Zugriff per Browser auf die IP des Wemos
! * - Datenpunkte in ioBroker
! * - Serieller Monitor in der Arduino IDE
! *
! * Steuerung über HTTP-Befehle:
! * "<ip-adresse>/heartbeat?sets=<wert>" Schaltet den Heartbeat ein/aus (true/false)
! *
! *
! * Bedeutung der WiFi.status() Meldungen
! *
! * 3 WL_CONNECTED // assigned when connected to a WiFi network;
! * 255 WL_NO_SHIELD // assigned when no WiFi shield is present;
! * 0 WL_IDLE_STATUS // it is a temporary status assigned when WiFi.begin() is called and remains active until the number of attempts expires (resulting in WL_CONNECT_FAILED) or a connection is established (resulting in WL_CONNECTED);
! * 1 WL_NO_SSID_AVAIL // assigned when no SSID are available;
! * 2 WL_SCAN_COMPLETED // assigned when the scan networks is completed;
! * 4 WL_CONNECT_FAILED // assigned when the connection fails for all the attempts;
! * 5 WL_CONNECTION_LOST// assigned when the connection is lost;
! * 6 WL_DISCONNECTED
! *
! /
! # define WM_IO_version "v1.0.0" // Version des Skripts (Ausgabe seriell und auf der Webseite)
! # define WM_IO_skriptname "ioBroker Basissketch" // Name des Skripts (Ausgabe seriell und auf der Webseite)
! # define WM_IO_device_name "51" // Name des Wemosgeräts (für die ioBroker Datenpunkte)
! # define WM_IO_WLAN_ssid "nix Verloren" // ssid des WLANs
! # define WM_IO_WLAN_password "KacKnOOp" // Passwort des WLANs
! # define WM_IO_iobroker_host "192.168.178.3" // IP oder FQDN von ioBroker
! # define WM_IO_iobroker_port 8087 // ioBroker Portnummer Simple-API-Adapter
! # define WM_IO_serial_speed 115200 // Geschwindigkeit der seriellen Ausgabe (serieller Monitor in der IDE)
! # define WM_IO_heartbead_LED D4 // LED, die für den Heartbeat verwendet wird (D4 ist mit der internen LED verbunden)
! # define WM_IO_heartbeat_on true // Heartbeat on (keine WLAN Verbindung wird auch bei on:false signalisiert)
! #include <simpledht.h>// for DHT11,
! // VCC: 5V or 3V
! // GND: GND
! // DATA: 2
! int pinDHT11 = 2;
! SimpleDHT11 dht11;
! const String dpNameIoBrokerTemp = "dht11.temp";
! const String dpNameIoBrokerHum = "dht11.hum";
! #include <esp8266wifi.h>// https://github.com/ekstrand/ESP8266wifi
! #include <esp8266webserver.h>// Webserver
! // Bibliotheken für Sensoren und Anschaltungen
! // #include <wire.h>// für Geräte, die den I2C-Bus verwenden (https://www.arduino.cc/en/Reference/Wire / http://html.szaktilla.de/arduino/6.html));
! // ******* Wartezeit in Sekunden zwischen 2 Messungen/Vorgängen, bitte anpassen! *******
! unsigned long deltaMessungSekunden = 60; // Intervall für Messungen
! unsigned long deltaSysinfosSekunden = 5 * 60; // Intervall, in dem rssi und uptime an ioBroker übertragen wird
! unsigned long deltaHeartbeatMillisOK = 3000; // Heartbeat-Intervall bei WIFI Verbindung
! unsigned long deltaHeartbeatMillisError = 1000; // Heartbeat-Intervall keine WLAN Verbindung
! // ******* Netzwerkeinstellungen, bitte anpassen! *******
! const char ssid = WM_IO_WLAN_ssid; // SSID des vorhandenen WLANs
! const char* password = WM_IO_WLAN_password; // Passwort für das vorhandene WLAN
! // wenn nicht DHCP genutzt werden soll, sondern eine feste IP (siehe auch im Setup):
! //IPAddress gateway(192,168,178,1); // IP-Adresse des WLAN-Gateways
! //IPAddress subnet(255,255,255,0); // Subnetzmaske
! //IPAddress ip(192,168,178,180); // feste IP-Adresse für den WeMos
! // ******* ioBroker *******
! // host als FQDN ODER IP angeben:
! //const char* host = "iobroker.fritz.box"; // FQDN des ioBroker-Servers
! const char* host = WM_IO_iobroker_host; // IP des ioBroker-Servers
! const int httpPort = WM_IO_iobroker_port; //Port des simpleAPI-Adapters in ioBroker
! ESP8266WebServer server(80); // Webserver des Wemos (ESP8266WebServer.h) initialisieren auf Port 80
! // Geschwindigkeit für die serielle Ausgabe (Serieller Monitor)
! const unsigned int serialSpeed = WM_IO_serial_speed;
! // =========== Einstellungen fuer Meldungen an ioBoker, bitte anpassen! *******
! // Pfad + Gerät + Datenpunkte müssen in ioBroker angelegt sein!!
! // das ioBroker Skript xxxx.js legt die Datenpunkte an
! const String ioBrokerBasisPath = "javascript.0.Wemos."; // Basispfad zum Datenpunkt in ioBroker
! const String ioBrokerDevice = "Device." WM_IO_device_name "."; // Gerätename in ioBroker (alle Geräte sollten mit "Device." beginnen)
! // Datenpunkte für die Wemos Systeminfos
! const String dpNameIoBrokerLastStart = "last_start"; // im Basis Pfad für alle Wemos Geräte identisch
! // Datenpunkte: Individuelle Wemos Systeminfos
! const String dpNameIoBrokerRssi = "Systeminfo.rssi";
! const String dpNameIoBrokerUptime = "Systeminfo.uptime";
! const String dpNameIoBrokerSsid = "Systeminfo.ssid";
! const String dpNameIoBrokerWemosIp = "Systeminfo.ip";
! const String dpNameIoBrokerWemosMac = "Systeminfo.mac";
! // Datenpunkte für die Messwerte
! const String dpNameIoBrokerDemo1 = "WemosDemo1"; // Bezeichnung des ioBroker-Datenpunktes 1 für die gemessene Temperatur
! const String dpNameIoBrokerDemo2 = "WemosDemo2"; // Bezeichnung des ioBroker-Datenpunktes 2 für die gemessene Temperatur
! // Variablen alte Werte für die Messpunkte (für den Vergleich: "nur bei Änderung übermitteln)
! String ioBrokerDemo1ValueAlt = "";
! String ioBrokerDemo2ValueAlt = "";
! // ******* Heartbeat *******
! boolean heartbeatOn = true; // true - Heartbeat über LED einschalten
! // =========== Allg. Variablen - nicht anfassen !!! *******
! unsigned long intervallLastMillis[] = {0,0,0,0,0}; // max. 5 Intervalle (0-4)
! byte wifiLastStatus =0;
! // globale Variable mit der Mac-Adresse des WLAN-Moduls
! char MAC_char[18];
! // Kommando an ioBroker und Rückantwort
! String ioBrokerSimpleApiCommand = "";
! String ioBrokerSimpleApiAntwort = "";
! // Zeitstempel (uptime) für Debug-Ausgabe berechnen
! // =======================================================================
! // nach ca. 49,6 Tagen erfolgt ein Überlauf und der Zeitstempel fängt wieder bei 0 an
! String zeitstempel() { // Betriebszeit als Stunde:Minute:Sekunde
! char stempel[10];
! int lfdStunden = millis()/3600000;
! int lfdMinuten = millis()/60000-lfdStunden60;
! int lfdSekunden = millis()/1000-lfdStunden3600-lfdMinuten*60;
! sprintf (stempel,"%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
! return stempel;
! }
! // =========== IP-Adresse ermitteln *******
! String myIp() {
! char myIpString[24];
! IPAddress myIp = WiFi.localIP();
! sprintf(myIpString, "%d.%d.%d.%d", myIp[0], myIp[1], myIp[2], myIp[3]);
! return myIpString;
! }
! // =========== MAC-Adresse ermitteln *******
! // See more at: http://www.esp8266.com/viewtopic.php?f= … jHXQH.dpuf
! void myMac() {
! uint8_t MAC_array[6];
! // MAC-Adresse ermitteln und ausgeben
! WiFi.macAddress(MAC_array); // die 6 Byte der MAC-Adresse auselsen und in ein Array schreiben
! for (int i = 0; i < sizeof(MAC_array); ++i){
! sprintf(MAC_char,"%s%02x:",MAC_char,MAC_array__);
! }
! MAC_char[strlen(MAC_char)-1] = '\0'; // letztes Zeichen ":" kürzen
! //MAC_char[strlen(MAC_char)-1] = 0; // letztes Zeichen ":" kürzen
! // MAC-Adresse steht in der globalen Variable: MAC_char
! }
! // =========== Meldestring an ioBroker beim Start - hallo hier bin ich (Last Start) *******
! String lastStart() {
! String lastStartString = "["" + myIp() + "","" + MAC_char + "","" + zeitstempel() + ""]";
! //String lastStartString = "["" + myIp() + "","" + myMac() + "","" + zeitstempel() + ""]";
! return lastStartString;
! }
! // ===== wandelt bool in true/false String um =====
! String logikBool2Str(boolean logikBool) {
! String logikStr = "true";
! if(!logikBool) {logikStr = "false";}
! return logikStr;
! }
! // =========== Intervalle *******
! boolean intervall(byte intervallArr, int millisekunden) {
! if(millis() - intervallLastMillis[intervallArr] > millisekunden) {
! intervallLastMillis[intervallArr] = millis();
! return true;
! }
! return false;
! }
! void heartbeatIntervall() {
! unsigned long intervall3 = deltaHeartbeatMillisOK;
! if(WiFi.status() != WL_CONNECTED) {
! intervall3 = deltaHeartbeatMillisError;
! }
! else {
! if(wifiLastStatus != WiFi.status()) {
! delay(200);
! melde_ioBroker(dpNameIoBrokerLastStart, lastStart()); // Hallo ioBroker, hier bin ich. Wemos aktiv und gestartet.
! }
! }
! wifiLastStatus = WiFi.status();
! if(intervall(3, intervall3)) {
! // Heartbeat
! if(heartbeatOn || (WiFi.status() != WL_CONNECTED)) { // Heartbeat über LED, wenn eingeschaltet ODER WLAN Verbindung verloren
! digitalWrite(WM_IO_heartbead_LED, 0);
! delay(50);
! digitalWrite(WM_IO_heartbead_LED, 1);
! if(WiFi.status() != WL_CONNECTED) {
! Serial.print(".");
! Serial.print(WiFi.status());
! }
! }
! }
! }
! // =========== Webserver *******
! void homepage() { // bei Aufruf des Root-Verzeichnisses
! String betriebszeit = zeitstempel();
! String antwort = "";
! int rssi = WiFi.RSSI();
! antwort = "WeMos \t" WM_IO_skriptname " (" WM_IO_version ")";
! antwort = antwort + "\n\n";
! antwort = antwort + "\tBetriebszeit: " + betriebszeit + " (Std:Min:Sek)\n";
! antwort = antwort + "\tVerbunden mit: " + ssid + "\n";
! antwort = antwort + "\tSignalstaerke: " + String(rssi) + " dBm\n";
! antwort = antwort + "\tIP: " + myIp() + "\n";
! antwort = antwort + "\tMAC: " + MAC_char;
! antwort = antwort + "\n\n";
! antwort = antwort + "ioBroker: \n";
! antwort = antwort + "\tIP: " + host + "\tPort: " + httpPort;
! antwort = antwort + "\n\n";
! antwort = antwort + "Systemparameter: \n";
! antwort = antwort + "\tCOM-Port: "+ serialSpeed + " Baud\n";
! antwort = antwort + "\tIntervall: "+ deltaMessungSekunden + " Sek.\n";
! antwort = antwort + "\tHeartbeat LED: "+ logikBool2Str(heartbeatOn);
! antwort = antwort + "\n\n";
! antwort = antwort + "HTTP-Befehlsuebersicht:\n\n";
! antwort = antwort + "\thttp://"+myIp()+"/heartbeat?set=<wert>\n\t\tSchaltet den LED Heartbeat ein/aus. ( <wert>= true/false)\n";
! antwort = antwort + "\n\n";
! antwort = antwort + "Letzes Kommando an ioBroker:\n";
! antwort = antwort + "\t" + ioBrokerSimpleApiCommand;
! antwort = antwort + "\n\n";
! antwort = antwort + "Letzte Antwort ioBroker: \n\n" + ioBrokerSimpleApiAntwort;
! server.send(300, "text/plain", antwort);
! delay(150);
! Serial.println(zeitstempel() + " unspezifische HTTP-Anfrage (Root-Verzeichnis) an den Wemos");
! }
! void webSetHeartbeat() { // bei Aufruf von "…/heartbeat"
! String set = server.arg("set");
! if((set == "true") || (set == "1")) {
! heartbeatOn = true;
! server.send(200, "text/plain", "Heartbeat ist eingeschaltet");
! delay(100);
! Serial.println(zeitstempel() + " Heartbeat ist eingeschaltt");
! }
! else if((set == "false") || (set == "0")) {
! heartbeatOn = false;
! server.send(200, "text/plain", "Heartbeat ist ausgeschaltet");
! delay(100);
! Serial.println(zeitstempel() + " Heartbeat ist ausgeschaltt");
! }
! else {
! server.send(200, "text/plain", "ungueltiger Aufruf. /heartbeat?set= <wert>\t <wert>= true/false");
! delay(100);
! Serial.println(zeitstempel() + " ungueltiger Aufruf. /heartbeat?set=<wert>");
! }
! }
! // Melderoutine an ioBroker
! // =======================================================================
! // &prettyPrint sorgt für die Rückmeldung des JSON in mehren Zeilen
! // https://github.com/ioBroker/ioBroker.si ... DME.md#set
! void melde_ioBroker(String datenpunktName, String wert) {
! String dp = ioBrokerBasisPath + ioBrokerDevice + datenpunktName;
! if (datenpunktName == dpNameIoBrokerLastStart) {
! dp = ioBrokerBasisPath + datenpunktName; // "Hallo ioBroker hier bin ich" -> Datenpunkt deviceunabhängig
! }
! ioBrokerSimpleApiAntwort = ""; // globale Variale für die Rückantwort von ioBroker
! Serial.println("\n\n" + zeitstempel() + " <- melde_ioBroker Start\n");
! WiFiClient client; // Webclient initialisieren
! if (!client.connect(host, httpPort)) { // mit dem CCU-Port verbinden
! Serial.println(zeitstempel() + " Fehler: Verbindung zum ioBroker konnte nicht aufgebaut werden (Eric2905)");
! ioBrokerSimpleApiAntwort = zeitstempel() + " Fehler: Verbindung zum ioBroker konnte nicht aufgebaut werden";
! delay(100);
! return;
! }
! String meldung = "GET /set/" + dp + "?value=" + wert + "&prettyPrint HTTP/1.1";
! Serial.println(meldung);
! client.println(meldung);
! ioBrokerSimpleApiCommand = zeitstempel() + ": " + meldung;
! client.println();
! delay(1000);
! Serial.println();
! ioBrokerSimpleApiAntwort = "\t"+zeitstempel() + ":\n";
! while(client.available()){ // Antwort des ioBrokers zeilenweise auslesen
! String zeile = "";
! zeile = client.readStringUntil('\n');
! Serial.println(zeile);
! ioBrokerSimpleApiAntwort = ioBrokerSimpleApiAntwort + "\t" + zeile + "\n";
! }
! Serial.println();
! Serial.println(zeitstempel() + " Werte an ioBroker gemeldet --> ");
! }
! // regelmässige Systeminfos an ioBroker (RSSI und uptime)
! // =======================================================================
! void systeminfos() {
! int rssi = WiFi.RSSI();
! String uptime = zeitstempel();
! char tmp[10];
! dtostrf(rssi, 1/minStringWidthIncDecimalPoint/, 0/numVarsAfterDecimal/, tmp);
! String rssiStr = tmp;
! melde_ioBroker(dpNameIoBrokerRssi , rssiStr);
! melde_ioBroker(dpNameIoBrokerUptime , uptime);
! }
! // Mess-Routine
! // =======================================================================
! // ausgabe = 0 // Messung wird nur ausgegeben, wenn eine Änderung der Messwerte erfolgte
! // ausgabe = 1 // Messung wird immer ausgegeben, auch wenn die Messwerte gleich geblieben sind
! // alles Messwerte werden als String an ioBroker übermittelt und müssen vor dem Aufruf
! // der Funktion melde_ioBroker in einen String gewandelt werden.
! void messung(boolean ausgabe) {
! //Hier kommt dann der Mess-Code rein (oder die echten Messwerte)
! float ioBrokerDemo1Value = 123;
! float ioBrokerDemo2Value = 456;
! // Umwandlung float in String
! char tmp[10];
! dtostrf(ioBrokerDemo1Value, 1/minStringWidthIncDecimalPoint/, 2/numVarsAfterDecimal/, tmp);
! String out1 = tmp;
! dtostrf(ioBrokerDemo2Value, 1/minStringWidthIncDecimalPoint/, 2/numVarsAfterDecimal/, tmp);
! String out2 = tmp;
! // Messwerte schreiben, wenn sich der Wert geändert hat
! if ((out1 != ioBrokerDemo1ValueAlt) || (ausgabe == 1)) {
! melde_ioBroker(dpNameIoBrokerDemo1,out1);
! ioBrokerDemo1ValueAlt = out1;
! }
! if ((out2 != ioBrokerDemo2ValueAlt) || (ausgabe == 1)) {
! melde_ioBroker(dpNameIoBrokerDemo2,out2);
! ioBrokerDemo2ValueAlt = out2;
! }
! }
! // =======================================================================
! // setup() - Setup-Routine
! // =======================================================================
! void setup() {
! // Heartbeat
! pinMode(WM_IO_heartbead_LED, OUTPUT); // Pin "WM_IO_heartbead_LED" wird als Output definiert, die interne LED ist mit D4 "fest verdrahtet"
! digitalWrite(WM_IO_heartbead_LED, 1); // 1 = LED aus
! // Seriellen Monitor für Kontrollausgaben öffnen
! Serial.begin(serialSpeed); // initialize serial (Geschwindigkeit in der Variable "serialSpeed")
! delay(10);
! Serial.println("");
! Serial.println("WeMos - " WM_IO_skriptname " (" WM_IO_version ")");
! Serial.println("");
! // WLAN-Verbindung herstellen
! //WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
! WiFi.begin(ssid, password);
! Serial.println("Verbindungsaufbau zur ssid: " WM_IO_WLAN_ssid);
! Serial.println("");
! Serial.print(zeitstempel() + " ");
! myMac(); // Mac-Adresse ermitteln und in die globale Variable "MAC_char" schreiben
! // Verbindungsaufbau abwarten
! while (WiFi.status() != WL_CONNECTED) {
! heartbeatIntervall();
! //delay(500);
! //Serial.print(".");
! }
! wifiLastStatus = WiFi.status();
! // WLAN verbunden, weiter im setup()
! // Ausgaben im seriellen Monitor
! Serial.println("");
! Serial.println(zeitstempel() + " erfolgreich!");
! Serial.println("");
! Serial.println("Verbunden mit: " WM_IO_WLAN_ssid);
! //Serial.println(ssid);
! Serial.print("Signalstaerke: ");
! int rssi = WiFi.RSSI();
! Serial.print(rssi);
! Serial.println(" dBm");
! Serial.print("IP-Adresse: ");
! Serial.print(WiFi.localIP());
! Serial.println("");
! Serial.print("MAC-Adresse: ");
! Serial.println(MAC_char);
! Serial.println("");
! // HTTP-Anfragen bearbeiten
! server.on("/" , homepage);
! server.on("/heartbeat", webSetHeartbeat);
! // HTTP-Server starten
! server.begin();
! Serial.println(zeitstempel() + " HTTP-Server gestartet");
! // WLAN-/Systeminfos an ioBroker übermitteln (Datenpunkte müssen in ioBroker angelegt sein)
! melde_ioBroker(dpNameIoBrokerLastStart, lastStart()); // Hallo ioBroker, hier bin ich. Wemos aktiv und gestartet.
! systeminfos(); // uptime und rssi
! melde_ioBroker(dpNameIoBrokerSsid , ssid); // ssid
! melde_ioBroker(dpNameIoBrokerWemosIp, myIp()); // ip
! melde_ioBroker(dpNameIoBrokerWemosMac, MAC_char);
! }
! // =======================================================================
! // loop() - Schleife, die immer wieder durchlaufen wird
! // =======================================================================
! void loop() {
! server.handleClient(); // auf HTTP-Anfragen warten
! // kontinuierliche Überprüfung der Messwerte, Ausgabe nur bei Änderung
! messung(0); // 0 = Ausgabe der Messwerte nur bei Änderung, 1 = AUsgabe des Messwerts bei jedem Aufruf (1 ist nur im Intervall sinnvoll)
! // Intervall 0: Messintervall - Verarbeiten wenn Zeitintervall erreicht
! if(intervall(0,deltaMessungSekunden * 1000)) { // alle "deltaMessungSekunden" Sekunden
! Serial.print("\nMess-Zeitpunkt : ");
! Serial.println(zeitstempel());
! //messung(1); // wenn zyklisch zusätzlich immer Werte ausgegeben werden sollen -> 1 = Ausgabe der Messwerte, auch wenn die Werte sich nicht geändert haben
! } // Ende Zeitintervall 0
! // Intervall 1: Systemmeldungen an ioBroker - Verarbeiten wenn Zeitintervall erreicht
! if(intervall(1, deltaSysinfosSekunden * 1000)) {
! systeminfos();
! }
! // Intervall 2: Verarbeiten wenn Zeitintervall erreicht
! // Reserve
! if(intervall(2, 1 * 1000)) { // jede Sekunde
! Serial.print("."); // Reserve - Beispiel
! }
! // Intervall 3: Heartbeat - Verarbeiten wenn Zeitintervall erreicht
! heartbeatIntervall();
! // Intervall 4: DHT11 - Verarbeiten wenn Zeitintervall erreicht
! if(intervall(4, 30 * 1000)) {
! // Serial.print(WiFi.status());
! // read with raw sample data.
! byte temperature = 0;
! byte humidity = 0;
! byte data[40] = {0};
! if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
! Serial.print("Read DHT11 failed");
! return;
! }
! Serial.print("DHT11 Sample RAW Bits: ");
! for (int i = 0; i < 40; i++) {
! Serial.print((int)data__);
! if (i > 0 && ((i + 1) % 4) == 0) {
! Serial.print(' ');
! }
! }
! Serial.println("");
! Serial.print("DHT11 Sample OK: ");
! Serial.print((int)temperature); Serial.print(" *C, ");
! Serial.print((int)humidity); Serial.println(" %");
! melde_ioBroker(dpNameIoBrokerTemp , (int)temperature);
! melde_ioBroker(dpNameIoBrokerHum , (int)humidity));
! }
! }</wert></wert></wert></wert></wert></wire.h></esp8266webserver.h></esp8266wifi.h></simpledht.h></wert></ip-adresse> __DHT11 Sketch:! #include <simpledht.h>// for DHT11,
! // VCC: 5V or 3V
! // GND: GND
! // DATA: 2
! int pinDHT11 = 2;
! SimpleDHT11 dht11;
! void setup() {
! Serial.begin(9600);
! }
! void loop() {
! // start working…
! Serial.println("=================================");
! Serial.println("Sample DHT11...");
! // read with raw sample data.
! byte temperature = 0;
! byte humidity = 0;
! byte data[40] = {0};
! if (dht11.read(pinDHT11, &temperature, &humidity, data)) {
! Serial.print("Read DHT11 failed");
! return;
! }
! Serial.print("Sample RAW Bits: ");
! for (int i = 0; i < 40; i++) {
! Serial.print((int)data);
! if (i > 0 && ((i + 1) % 4) == 0) {
! Serial.print(' ');
! }
! }
! Serial.println("");
! Serial.print("Sample OK: ");
! Serial.print((int)temperature); Serial.print(" *C, ");
! Serial.print((int)humidity); Serial.println(" %");
! // DHT11 sampling rate is 1HZ.
! delay(6000);
! }__</simpledht.h>____ -
Häng doch bitte mal deine Fehlermeldungen unten an den Beitrag.
Ich denke, das macht es einfacher, zu erkennen, was nicht funktioniert….
Läuft der Simple.Api Adapter ???
Hast du die Datenpunkte im ioBroker und im Script richtig eingetragen ??
Grüße
Tom
-
Hallo,
ja klar, jabe ich vergessen:
! Arduino: 1.8.4 (Windows 10), Board: "WeMos D1 R2 & mini, 80 MHz, 4M (3M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 921600"
! C:\Users\Miragolix\Desktop\iobroker_Wemos\iobroker_Wemos.ino: In function 'void loop()':
! iobroker_Wemos:541: error: converting to 'String' from initializer list would use explicit constructor 'String::String(int, unsigned char)'
! melde_ioBroker(dpNameIoBrokerTemp , (int)temperature);
! ^
! iobroker_Wemos:313: error: initializing argument 2 of 'void melde_ioBroker(String, String)'
! void melde_ioBroker(String datenpunktName, String wert) {
! ^
! iobroker_Wemos:542: error: converting to 'String' from initializer list would use explicit constructor 'String::String(int, unsigned char)'
! melde_ioBroker(dpNameIoBrokerHum , (int)humidity));
! ^
! iobroker_Wemos:313: error: initializing argument 2 of 'void melde_ioBroker(String, String)'
! void melde_ioBroker(String datenpunktName, String wert) {
! ^
! iobroker_Wemos:542: error: expected ';' before ')' token
! melde_ioBroker(dpNameIoBrokerHum , (int)humidity));
! ^
! exit status 1
! converting to 'String' from initializer list would use explicit constructor 'String::String(int, unsigned char)'
! Dieser Bericht wäre detaillierter, wenn die Option
! "Ausführliche Ausgabe während der Kompilierung"
! in Datei -> Voreinstellungen aktiviert wäre.Wenn ich es richtig verstehe, liegt es an dem (int). Selbst wenn ich dieses (int) lösche kommt die gleiche Fehlermeldung.
Nur wenn ich //(int)temper….. bzw. //(int)humidity)); schreibe kommt folgende Fehlermeldung.
! Arduino: 1.8.4 (Windows 10), Board: "WeMos D1 R2 & mini, 80 MHz, 4M (3M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 921600"
! C:\Users\Miragolix\Desktop\iobroker_Wemos\iobroker_Wemos.ino: In function 'void loop()':
! iobroker_Wemos:543: error: expected primary-expression before '}' token
! }
! ^
! iobroker_Wemos:543: error: expected ';' before '}' token
! exit status 1
! expected primary-expression before '}' token
! Dieser Bericht wäre detaillierter, wenn die Option
! "Ausführliche Ausgabe während der Kompilierung"
! in Datei -> Voreinstellungen aktiviert wäre.Der Rest läuft, wenn ich den Ursprüngliche Sketch (ohne DHT11) nehme geht alles. Die Datenpunkte werden mir angezeigt.
Vielen Dank
-
Moin
ersetze mal dein
melde_ioBroker(dpNameIoBrokerTemp , (int)temperature); melde_ioBroker(dpNameIoBrokerHum , (int)humidity));
mit
melde_ioBroker(dpNameIoBrokerTemp , String((int)temperature)); melde_ioBroker(dpNameIoBrokerHum , String((int)humidity));
Du hattest bei humidity ein ) zuviel.
Ausserdem erwartet die Funktion melde_ioBroker() einen String, du übergibst aber mit deinem Code ein INT…
Immer schön auf die Datenintegrität achten :lol:
Deine Fehlermeldungen des Compilers sagen dir übrigens schon genau, was er erwartet.
Umwandlung in String und dein ) zuviel werden explizit angemeckert mit einem genauen Lösungsvorschlag...
In C (und das nutzt Arduino) ist "string" nicht gleich "String". Beachte Groß-Kleinschreibung
Grüße
Tom
-
Hallo Tom,
vielen Dank für Deine Hilfe. Der Sketch funktioniert.
Super, Danke
Gruß
Miragolix
-
Moin,
ich wollte fragen, hat jemand sich mit dem Projekt nochmal auseinander gesetzt bzw. es umgesetzt? Überlege etwas ähnliches zu machen, nur der Ersteller des Themas ist ja schon über 1 Jahr nich mehr online gewesen. Denke von daher wird man keine Infos bekommen.
Ich habe vor 2 DHT 11 bzw. DHT 22 Sensoren an den Wemos zu packen und dieses in den ioBroker in die Visualisierung zu packen. Könnte zwar auch ein weiteren Multihost einsetzen, da ich dort Netzwerk liegen habe aber von der Homematic sind die Sensoren recht teuer und daher wollte ich zumindest für manche Sensoren, was anderes machen.
Michael
-
@raspido
Ich habe zwar nur jeweils einen DHT22 an einer NodeMCU, sollte aber auch mit D1 mini funktionieren.
Guckst Du: http://arduino.joergeli.de/dht22/dht22.php
Gruß
Jörg -
ich habe mehrere solche Lösungen am Laufen. Ich nutze EasyESP. Einfach flashen und dann nach Bedarf online konfigurieren. Einbindung von IoBroker mache ich dann entweder über mqtt oder über Skript, wenn ich direkt auf die CCU schreiben möchte.
Wenn man das ganze mit Solarzellen betreiben möchte, dann hier habe ich was dazu geschrieben. Ein DHT hängt dran und den Bodensensor kann man entfernen.