DHT22 -> ESP8266 (ESP-01) <=Wlan=> Mosquitto <- Fhem <- MQTT <- MQTT_Device

Begonnen von Papaloewe, 28 März 2015, 19:52:13

Vorheriges Thema - Nächstes Thema

sbiermann

Die Arduino IDE 1.6.6 sollte man nicht verwenden wenn es um den ESP8266 geht. Es wird empfohlen die 1.6.5 zu verwenden. Ich find nur gerade nicht mehr den Link zu der Webseite wo ich das gelesen hatte. Vielleicht hängen damit die kompletten Fehlermeldungen zusammen.

Eine andere Frage, hat jemand einen Schaltplan für die Schaltung? Ich hab in dem Sourcecode gesehen das die Spannung eingelesen und per MQTT gepushed wird, mir ist aber nicht ganz klar wie die Verkabelung der z.B. AA Batterien aussieht.

a_quadrat

Danke für die Hilfe, ich habe die Arduino IDE 1.65 installiert, und siehe da, es funktioniert.

a_quadrat

Hallo,

ich muss leider noch mal nerven, was habt ihr in Mosquito konfiguriert? Könnt ihr den Code evtl. hier posten?

mfg Andreas

Familienpapi

Hallo, Andreas,

eigentlich muss man nichts konfigurieren, außer Du arbeitest mit mehreren IPs und möchtest nur an eine IP binden oder Du möchtest einen anderen Port.
Wo genau liegt im Moment noch das Problem? Dann kann man es etwas eingrenzen. 
FHEM@RPi4, piVCCU3@RPi3 (nur Homematic IP), boot via USB NVME SSD, keine SDs,
FTUI 3, HMCCU, MQTT(Mosquitto), MobileAlerts, JeelinkV3c868 (LaCrosse), ZWAVE(+), TelegramBot, eigene Heizungssteuerung, Configurable Firmata
ESP8266 MQTT mit eigener Firmware / Framework

Wzut

@anco1726, wo hast du den Mosquito laufen und welche Version ? Raspberry ?
Such mal hier im Forum nach Mosquito und MQTT,  es gibt da einige Beiträge wo die User eine falsche Version installiert hatten.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

a_quadrat

Danke für den Hinweis. Ich habe im Sketch "pi" durch die IP des Servers ausgetauscht, jetzt scheint es zu funktionieren.

mfg Andreas

ome

Hallo,
seit einigen Tagen versuche ich mich auch mit FHEM und MQTT. Habe inzwischen auch die ersten vorsichtigen Ergebnisse mit dem EPS8266 ESP-01. Da mir aber immer noch nicht wirklich die Zusammenhänge mit Topic, Payload etc. im Arduino (1.6.5, unter Win7) Sketch und die korrespondierenden Einträge im FHEM wirklich klar sind, habe ich den letzten Beispielsketch von Jörg heruntergeladen. Die fehlenden Libraries habe ich bei Adafruit heruntergeladen. Idee ist den Arduino Sketch nachzuvollziehen und anhand eurer Screenshots aus FHEM entsprechende Rückschlüsse auf die notwendigen Einträge zu entnehmen.

Nun erhalte ich folgende Fehlermeldung vorm Upload bzw. kompilieren auf den ESP-01:


ESPDHT22FHEM:149: error: no matching function for call to 'DHT::DHT()'
ESPDHT22FHEM.ino:149:5: note: candidates are:
In file included from ESPDHT22FHEM.ino:37:0:
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:40:4: note: DHT::DHT(uint8_t, uint8_t, uint8_t)
    DHT(uint8_t pin, uint8_t type, uint8_t count=6);
    ^
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:40:4: note:   candidate expects 3 arguments, 0 provided
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:38:7: note: constexpr DHT::DHT(const DHT&)
class DHT {
       ^
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:38:7: note:   candidate expects 1 argument, 0 provided
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:38:7: note: constexpr DHT::DHT(DHT&&)
C:\Users\Olaf Meier\Documents\Arduino\libraries\DHT/DHT.h:38:7: note:   candidate expects 1 argument, 0 provided
ESPDHT22FHEM.ino: In function 'void startSensors()':
ESPDHT22FHEM:332: error: 'class DHT' has no member named 'setup'
ESPDHT22FHEM.ino:335:30: warning: 'void TwoWire::pins(int, int)' is deprecated (declared at C:\Users\Olaf Meier\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\Wire/Wire.h:54) [-Wdeprecated-declarations]
ESPDHT22FHEM.ino: In function 'void processDHT()':
ESPDHT22FHEM:544: error: 'class DHT' has no member named 'getMinimumSamplingPeriod'
ESPDHT22FHEM:544: error: 'max' was not declared in this scope
ESPDHT22FHEM.ino:544:85: note: suggested alternative:
In file included from c:\users\olaf meier\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\memory:62:0,
                 from C:\Users\Olaf Meier\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/WiFiClient.h:28,
                 from C:\Users\Olaf Meier\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:32,
                 from ESPDHT22FHEM.ino:33:
c:\users\olaf meier\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:260:5: note:   'std::max'
     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^
ESPDHT22FHEM:554: error: 'class DHT' has no member named 'readSensor'
ESPDHT22FHEM:555: error: 'class DHT' has no member named 'getStatus'
ESPDHT22FHEM:555: error: 'class DHT' has no member named 'ERROR_NONE'
ESPDHT22FHEM:558: error: 'class DHT' has no member named 'getStatusString'
ESPDHT22FHEM:562: error: 'class DHT' has no member named 'getTemperature'
ESPDHT22FHEM:574: error: 'class DHT' has no member named 'getHumidity'
ESPDHT22FHEM.ino: In function 'void mqttCallback(char*, byte*, unsigned int)':
ESPDHT22FHEM:601: error: 'min' was not declared in this scope
ESPDHT22FHEM.ino:601:37: note: suggested alternative:
In file included from c:\users\olaf meier\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\memory:62:0,
                 from C:\Users\Olaf Meier\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/WiFiClient.h:28,
                 from C:\Users\Olaf Meier\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:32,
                 from ESPDHT22FHEM.ino:33:
c:\users\olaf meier\appdata\roaming\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:239:5: note:   'std::min'
     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^
no matching function for call to 'DHT::DHT()'


Die Adafruit Libraries habe ich wie sonst auch in den Ordner C:\Users\ome\Documents\Arduino\libraries gespült. Die alten Libraries habe ich dort herausgenommen. Aktuelle Version wie folgt:

name=DHT sensor library
version=1.2.3
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
paragraph=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
category=Sensors
url=https://github.com/adafruit/DHT-sensor-library
architectures=*


Vielleicht hat jemand eine Idee. Danke schon mal im voraus.

Gruß Olaf

PS. Der Mosquitto Broker läuft zusammen mit FEHM und noch einigen anderen Dingen wie ADS-B und RTL-SDR stabil auf einem RasPi B

Wzut

ersetze mal deine DHT.h und DHT.cpp durch die angehängte Version
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

ome

Hallo Wzut, vielen Dank Dir! Mit der angepassten DHT Library und der ergänzten/umbenannten eigenen min/max Funktion läuft der Sketch. Jetzt werde ich in den nächsten Tagen mal weiter schauen.
Gruß Olaf
;D

Wzut

Sehr schön , die DHT Lib die ich gepostet hatte stammt aus dieser Quelle :
http://playground.arduino.cc/Main/DHTLib
du hattest vermutlich die Version von Adafruit :
https://github.com/adafruit/DHT-sensor-library
Die Adafruit Version muss ich mir mal die Tage ansehen und testen, eigentlich sollte die für den ES8266 besser sein da sie einen zusätzlichen Warteparameter hat der speziell beim Einsatz auf dem ESP höher einzustellen ist als bei einem Atmega ( 11 statt default 6)
Zitat// Initialize DHT sensor
20.// NOTE: For working with a faster than ATmega328p 16 MHz Arduino chip, like an ESP8266,
21.// you need to increase the threshold for cycle counts considered a 1 or 0.
22.// You can do this by passing a 3rd parameter for this threshold.  It's a bit
23.// of fiddling to find the right value, but in general the faster the CPU the
24.// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
25.// Arduino Due that runs at 84mhz a value of 30 works.
26.// This is for the ESP8266 processor on ESP-01
27.DHT dht(DHTPIN, DHTTYPE, 11); // 11 works fine for ESP8266
Quelle : https://learn.adafruit.com/esp8266-temperature-slash-humidity-webserver/code
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

LarsMie

hi, also mein ESP-01 läuft jetzt testweise zusammen mit einem DHT-22.

Ich habe das ganze auch mit dem PID20 modul verknüpft und teste damit meine heizungssteuerung.

Zusätzlich habe ich noch einen RGBW-LED Dimmer realisiert, der auch ohne probleme läuft (einen "firmware-bug" gibt es noch beim prototypen, aber den behebe ich, wenn ich die fertigen platinen habe)


Ich habe nur das problem, dass der ESP-01 regelmässig die verbindung zum mqtt server verliert, die Signalqualität liegt bei 39% (ESP <-> Router) und es gibt auch keine WLAN-Verbindungsabbrüche glaube ich.

Das eigentliche Problem ist aber nicht, der verbindungsverlust, sondern eher das, was bei einem reconnect im Topic steht. Das lässt nämlich den PID20 verrückt spielen:

Verbindet sich der ESP neu zum Server, steht im Topic als Wert ein "?", woraus für den PID resultiert, dass die aktuelle temperatur 0°C ist. Ihr könnt euch bestimmt vorstellen , was dann mit dem Stellantrieb passiert... :)

Ich habe das vorübergehend so gelöst: Verliert der ESP die verbindung, wird "tempReq" und "humReq" auf true gesetzt, damit bei einem reconnect die letzten werte wieder eingetragen werden.

Hat jemand ähnliche probleme? Und wenn ja wie gelöst?


Vielleicht versuche ich das mal mit den esp-12 die ich noch hier habe. aber als reine temp-sensoren sind die mir eigentlich zu "overkill"

Kuzl

Wenn in dem Topic ein "?" steht, dann trägt das der ESP auch ein. d.h. du musst suchen, wo er das einträgt (z.b. bei der Initialisierung oder dem "bekanntmachen" des Topics
Das einfach rausnehmen und dann passts wieder.

Familienpapi

Hallo, LarsMie,

das Problem des Timeouts hatte ich auch. Ich habe den Timeout in der Datei PubSubClient.h in der Library direkt wie folgt geändert:

...
// MQTT_KEEPALIVE : keepAlive interval in Seconds
#define MQTT_KEEPALIVE 120
...


und ich sende alle 60 Sekunden unter dem Topic /lwt einen reconnect.

Das löste das Problem. Unter https://github.com/Familienpapi/ESP8266RoomControl kannst Du meine komplette Lösung einsehen. Läuft jetzt seit über 2 Monaten ohne Probleme.

Wenn ein ? gesendet wird, dann muss das - wie von Kuzl bereits erwähnt - aus Deinem Code kommen.
FHEM@RPi4, piVCCU3@RPi3 (nur Homematic IP), boot via USB NVME SSD, keine SDs,
FTUI 3, HMCCU, MQTT(Mosquitto), MobileAlerts, JeelinkV3c868 (LaCrosse), ZWAVE(+), TelegramBot, eigene Heizungssteuerung, Configurable Firmata
ESP8266 MQTT mit eigener Firmware / Framework

LarsMie

Hmm okay,

danke schonmal für die Tipps!

ich habe den Code hier aus dem Thread übernommen und für mich abgeändert. Ich werde mal nach dem Fragezeichen suchen.


Und schnell gefunden. Habe das mal auskommentiert.


Zwei Fragen habe ich aber noch:

Mein Client soll alle 10min. die Temperatur messen und dann senden. Sollte für Raumtemperatur vollkommen ausreichen.

Sollte dann der KEEPALIVE intervall auch 10min. sein?


zu /lwt:

Du machst aber keinen "forced" disconnect, oder?

Und "first connect" wird jedesmal geschrieben wenn du einen disconnect hattest oder nur nach dem Einschalten?  Gefolgt von "connected", aber ein "disconnected" kann man ja nicht schicken....



Edit: Mann Falscher Button... hier sollte noch einiges mehr an Text stehen :)

Ich komme nachher nochmal drauf zurück

Wzut

Zitat von: LarsMie am 18 Dezember 2015, 10:27:46
Mein Client soll alle 10min. die Temperatur messen und dann senden. Sollte für Raumtemperatur vollkommen ausreichen.
Eine Frage des persönlichen Geschmacks, ich werte die Temp Sensoren alle Minute aus, vergleiche den Messwert mit dem vorherigen und bei Ungleichheit geht der neue Wert ab zum Broker.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher