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

LarsMie

Zitat von: Wzut am 18 Dezember 2015, 11:36:45
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.


So habe ich das zuerst auch gemacht. Ich möchte nur irgendwann die (Temperatur)-Sensoren autark mit Batterien betreiben und die sollen dann all 10-15min. Aufwachen, messen und publishen. Habe in der richtung aber noich keine Tests gemacht, aber beim Infos sammeln habe ich schon ein paar dinge über die laufzeiten herausgefunden. Mit nem 3100mAh LiPo oder mit 2 2800mAh AA-Akkus sollte eine passable Laufzeit zu erreichen sein.

Wenn dem nicht so ist, muss ich mir ne andere lösung einfallen lassen ala NRF24L01 -> MQTT Gateway. Die sind ja sehr stromsparend und man hat keine Reconnectzeiten zum WLAN. Hier im Forum gibt es ja eine Lösung, bei der ein nanoCUL und NRF24L01 zu einem kombinierten gateway zusammengebaut wurden. Wie das ganze mit mqtt auszustatten sein wird muss ich dann schauen, wenn es soweit kommt.



Ich habe jetzt das problem, dass mein client sich gar nicht mehr verbinden will. Ich werde das Programm nochmal ganz neu aufsetzen anhand des Beispiels von Familienpapi.

Ein Frage dazu @Familienpapi: Hast du dafür die aktuellste Pubsubclient-Lib von knolleary genommen? Es gibt ja glaube ich noch eine veränderte Pubsubclient von jemand anderem.

Familienpapi

Hallo, LarsMie,

FirstConnect sende ich, um meinem FHEM mitzuteilen, alle aktuellen Daten für das Display an den RoomControl zu senden. Sonst zeigt das ja nur die Initialisierungswerte an.
Ich habe es auch mal mit 90 Sekunden versucht, aber auch da ist der Connect dann weg, trotz Timeout 120. Somit bin ich halt bei 60 Sekunden geblieben. Und ja, alle 60 Sekunden muss eine Übertragung eines Topics erfolgen, sonst wird die Verbindung unterbrochen. Dafür nutze ich den Topic /lwt. Auch meinem RPi ist die aktuelle mosquitto in der Grundkonfiguration installiert.

Vielleicht gibt's da ja auch andere Möglichkeiten, den Connect länger aufrecht zu erhalten. Ich habe mich nicht intensiv damit beschäftigt.

Deep Sleep wird mit MQTT nicht sauber funktionieren, außer Du baust die Verbindung (zuerst WLAN und dann MQTT) nach jedem Aufwachen komplett neu auf.
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

Zitat von: Familienpapi am 18 Dezember 2015, 12:31:53
Deep Sleep wird mit MQTT nicht sauber funktionieren, außer Du baust die Verbindung (zuerst WLAN und dann MQTT) nach jedem Aufwachen komplett neu auf.


So hatte ich das vor, auch wenn das ca. 10sek. dauert.

Familienpapi

oK. Ich melde mal ernsthaftes Interesse am funktionierenden Code an. Wie sieht's mit mySensors aus? Gibt's da auch Möglichkeiten mit Deep Sleep?
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

Die NFR24L01-Dinger sind ja im eigentlichen sinne keine eigenständigen uC mit TCP/IP unterstützung. Die laufen aber im gleichen Frequenzband wie der alte WLAN-Standard (2,4GHz). Ist aber am ende eigentlich dasselbe wie 868MHz (glaube ich zumindest), also keine voraussetzungen wie authentifikation oder ip adresse.

Klar wird es eine Adresse geben müssen, sonst wüßte ja kein Teilnehmer welche Nachricht für wen gedacht ist.

Ich habe beim infos sammeln auf jeden fall von einer Sleep-Funktion gelesen, man müsste dann den NFR24L01 und den uC beziehungsweise auch nur den NFR24L01 in sleep schicken können.


Ich habe hier mal den Thread aus dem ich das habe verlinkt:

http://forum.mysensors.org/topic/524/mqtt-client-gateway

Der hat das eigentliche Gateway von mySensors wohl so umgebaut, dass es nicht als Server sondern als Bridge dient. Aber wie das MQTT-Protokoll gehandlet wird, ob man das in die Clients mit implementieren muss oder ob die Bridge das alleine umsetzt (also die publish, subsrcibe, connect events usw.), weiss ich noch nicht. Soweit habe ich noch nicht gelesen.

Edit:

Steht schon im ersten Post :)

Also das Teil dient als Gateway zwischen deinen NFR24L01 und dem MQTT-Server. Der Server subscribed sich auf alle Topics die im Topic deiner wahl zu finden sind. (Das werden dann alle nodes sein, die sich mit deinem Gateway verbinden). Das Gateway kommuniziert mit deinen Nodes (die NFR24L01) und setzt das ganze auf der anderen Seite ins MQTT-Protokoll um.

Hat wohl noch keiner versucht, aber vielleicht klappt das auch mit einem ESP8266 als Ethernet-Client. Speicher ist auf jeden fall genug vorhanden.


Edit 2: ich merk grad ich bin der totale theoretiker :)

Wzut

Zitat von: Familienpapi am 18 Dezember 2015, 12:31:53
Und ja, alle 60 Sekunden muss eine Übertragung eines Topics erfolgen, sonst wird die Verbindung unterbrochen.
hmm , kann ich so nicht bestätigen. Da ich ja meine Temperaturwerte nur bei Veränderung übertrage habe ich meist  3 - 5 Minuten Intervalle und das ohne die Verbindung zum Mosquitto zu verlieren. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

LarsMie

@ Familienpapi:

Wenn ich die DeepSleep geschichte ans laufen bekommen habe, dann sage ich dir bescheid.  Oder hattest du Interesse an dieser Gateway-Geschichte?

Familienpapi

@Wzut: Wie hast Du das gemacht? Wie erwähnt hat es bei mir nicht funktioniert und nach 65 Sekunden die Verbindung getrennt. Würde mich freuen, wenn Du Deine Config mit uns teilen könntest.

@LarsMie: Deep Sleep würde mich interessieren.
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

Zitat von: Familienpapi am 18 Dezember 2015, 21:52:01
Würde mich freuen, wenn Du Deine Config mit uns teilen könntest.
Ich denke meine config hat nichts besonderes :
Mosquitto mit apt-get install installiert , mosquitto.conf habe ich unverändert gelassen.
Der ESP Sketch ist eine leicht angepasste Version von Johns ESPDHT22FHEM (DHT22 gegen OneWire getauscht und Callback rausgeworfen)
Welche PubSubClient lib verwendest du ? Die in Johns Archiv hat wenn ich es richtig sehe einen MQTT_Keepalive von 15 Sekunden. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Familienpapi

Habe mosquitto von mosqitto.org manuell installiert. Über apt-get habe ich eine ziemlich alte Version erhalten, mit welcher MQTT gar nicht so wirklich funktioniert hatte.
Meine pubsubclient.h ist
/*
PubSubClient.h - A simple client for MQTT.
  Nick O'Leary
  http://knolleary.net
*/

mit Stand vom 29.09.2015 und meinem geänderten KeepAlive.
Gibt's bessere Lösungen?
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

crememanfred

#145
Hallo liebe Fhem Gemeinde,

ich habe die Version vom Jörg vom 09.10. geladen und nach 3 Tagen rum compilieren hab ich die Schauze voll. Ständig fehlen mir irgendwelche Libaries oder bieten nicht die Funktionen die gefordert sind...

Ist eventuell jemand bereit seinen letzten (funktionierenden :) ) Stand hier zur Verfügung zu stellen inklusive Libary?

Ich bedanke mich recht herzlich im voraus!

Gruß
Manfred


JoWiemann

Zitat von: crememanfred am 20 Januar 2016, 14:48:20
Ständig fehlen mir irgendwelche Libaries oder bieten nicht die Funktionen die gefordert sind...

Hallo Manfred,

welche Arduinoversion benutzt Du und welche Libraries werden angemeckert. Dann kann man auch helfen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

crememanfred

Hallo Jörg,

danke für die schnelle Antwort!

Benutze Version 1.6.5

Hier die Fehlermeldung(en):


Arduino: 1.6.5 (Windows 7), Platine: "Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck"

In file included from ESPDHT22FHEM_KIM1.ino:38:0:
C:\Users\kwalder\Documents\Arduino\libraries\PubSubClient/PubSubClient.h:68:46: error: section attribute not allowed for '<anonymous>'
    boolean publish_P(char *, uint8_t PROGMEM *, unsigned int, boolean);
                                              ^
ESPDHT22FHEM_KIM1.ino: In function 'void startSensors()':
ESPDHT22FHEM_KIM1:307: error: 'I2C_SDA' was not declared in this scope
ESPDHT22FHEM_KIM1:307: error: 'I2C_SCL' was not declared in this scope
ESPDHT22FHEM_KIM1.ino: In function 'void processDHT()':
ESPDHT22FHEM_KIM1:454: error: 'max' was not declared in this scope
ESPDHT22FHEM_KIM1.ino:454:85: note: suggested alternative:
In file included from c:\users\kwalder\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\kwalder\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/WiFiClient.h:28,
                 from C:\Users\kwalder\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/ESP8266wifi.h:32,
                 from ESPDHT22FHEM_KIM1.ino:33:
c:\users\kwalder\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)
     ^
In file included from ESPDHT22FHEM_KIM1.ino:37:0:
C:\Users\kwalder\Documents\Arduino\libraries\DHT/DHT.h:83:8: error: 'void DHT::readSensor()' is protected
   void readSensor();
        ^
ESPDHT22FHEM_KIM1:464: error: within this context
ESPDHT22FHEM_KIM1.ino: In function 'void mqttCallback(char*, byte*, unsigned int)':
ESPDHT22FHEM_KIM1:511: error: 'min' was not declared in this scope
ESPDHT22FHEM_KIM1.ino:511:37: note: suggested alternative:
In file included from c:\users\kwalder\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\kwalder\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/WiFiClient.h:28,
                 from C:\Users\kwalder\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi\src/ESP8266wifi.h:32,
                 from ESPDHT22FHEM_KIM1.ino:33:
c:\users\kwalder\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)
     ^
Multiple libraries were found for "WiFiClient.h"

Used: C:\Users\kwalder\AppData\Roaming\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries\ESP8266WiFi

Not used: C:\Program Files (x86)\Arduino\libraries\WiFi

'I2C_SDA' was not declared in this scope



Besten Dank! Gruß
Manfred

JoWiemann

Hallo Manfred,

die 1.6.5 ist sehr viel rigider was die Prüfung von Deklarationen und Notationen angeht. Damit wird der Code in der Form nicht laufen.

Ich arbeite noch mit der 1.6.1 und den dazugehörenden ESP-Librarys.

Grüße Jörg

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

crememanfred

Hallo Jörg,

gut dann werde ich das mal austesten mit 1.6.1

Wie integriere ich bei 1.6.1 das ESP8266 Board in den Core? In Version 1.6.5 ging das easy über den Board Manager, kann im Netz nichts dadrüber finden...

Zitatund den dazugehörenden ESP-Librarys.

Darf ich fragen welche im Detail?

Besten Dank und Gruß
Manfred