MQTT mit Client in Deepsleep

Begonnen von pechnase, 19 Juli 2016, 14:39:14

Vorheriges Thema - Nächstes Thema

pechnase

Hallo,
mein neuestes Projekt ist ein kleines Bewässerungssystem, bei dem aus der Wassertonne mit einer Tauchpumpe Wasser zum Giesen entnommen wird. Der 'Pumpen Client' hat einen

  • Füllstandsensor
  • Temperatursensor
  • Bodenfeuchtigkeitssensor
  • Aktor (MOS-Fet) um die Pumpe anzuschalten
Der 'Pumpenclient' kommuniziert über MQTT mit FHEM. Als 'Pumpenclient' Hardware kommt ein ESP8266-12E zum Einsatz. Als MQTT-Client SW verwende ich die PubSubClient-Library mit der Arduino IDE.
FHEM läuft gemeinsam mit dem mosquitto MQTT-Broker auf einem Raspberry 2B.
Die Pumpe kann über set angeschaltet werden.
Das läuft auch alles wunderbar, solange ich den ESP immer aktiv halte.
Da ich das System autark mit einem 7.2Ah Akku betreiben möchte, bin ich auf den deepsleep mode des ESP angewiesen. Im deepsleep verbraucht der Client ca. 10mA und im aufgeweckten Zustand ca. 80mA. Wenn man von einer Pumpenlaufzeit von 15min. pro Tag ausgeht, sollte der Akku mindestens 10Tage halten.
Sobald ich den deepsleep verwende, funktioniert das Publishen der Sensordaten immer noch, ich bekomme den Pumpen Anschaltbefehl aber nicht mehr an den PumpenClient übertragen.
Vermutlich wird das FHEM MQTT_Device den set-Befehl noch richtig an den MQTT-Broker übertragen, aber ich vermute, dass dann irgend eine Zeit abläuft, bis der PumpenClient das nächste mal ein Subscribe an den MQTT-Broker absetzt.
Das Keepalive in der PubSubClient.h habe ich schon erhöht. In der mosquitto-Broker config habe ich auch schon das Keepalive eingefügt, bis jetzt hat sich aber nichts geändert.
Hat jemand schon einen ähnlichen Fall gelöst und weiß, an welchen Stellschrauben man am Broker oder Client drehen muss.
Ach ja, qos habe ich auf 1 stehen.

Vielen Dank für eure Unterstützung
Wolfgang
2 x RPI mit FHEM 6.3 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL433, Jeelink (Nachbau), nanoCUL868 WMbus

JoWiemann

Hallo,

bei Deep Sleep läuft im ESP, bis auf den internen Timer, nichts mehr. Nach Ablauf der Deep Sleep Zeit wird der Esp resettet und der Sketch neu gestartet. Somit kann der Esp auf MQTT Anfragen überhaupt nicht reagieren.



Grüße Jörg

Gesendet von iPhone mit Tapatalk
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

bugster_de

Hi,

ich wärme diesen Fred nochmal auf, da ich das gleiche Thema habe.

Bisher hatte ich MQTT so verstanden:
- man published etwas an den Broker
- ein Client (hier ESP8266) meldet sich irgendwann an und subscribed sich. Damit wird dann die published message abgeholt und alles ist gut

Mein Anwendungsfall
ich habe einen ESP8266 als Bodenfeuchte Sensor der auf Batterie läuft. Er geht in deepsleep, wacht alle 15 Minuten auf, connected sich in das Wifi, connected sich zum Broker und sendet dann den aktuellen Fecuhtegrad. Danach geht er wieder in den deepsleep.
Geht soweit.
Nun möchte ich aber die Bodenfeuchte während die Bewässerung läuft in kürzeren Zyklen schicken. Da aber nur FHEM weiß, wann die Bewässerung läuft würde ich nun gerne dem ESP eine MQTT Message publishen, die die deepsleep Zeit beinhaltet. Sprich der ESP wacht auf, verbindet sich mit WiFi und MQTT, subscribed sich auf die deepsleep-interval Message, der Broker schickt diese dann und der ESP wird nach getaner Arbeit dann mit der genannten Zeit in den deepsleep versetzt.
geht aber nicht.

Frage:
ist das ein Problem des Mosquitto Brokers oder habe ich MQTT da falsch verstanden?