MQTT, ESP & FHEM

Begonnen von Klausi, 20 März 2017, 11:41:50

Vorheriges Thema - Nächstes Thema

Klausi

Hallo liebe FHEM-Gemeinde,

ich habe mit FHEM 5.7 auf einem Bananapi BPI-M1 (Raspian jessie) folgendes Problem :


Auf dem BPI ist Mosquitto installiert und in FHEM ein MQTT-Device.

Mit einem ESP8266-12 wird mit der PubSubClient-Library über einen callback-Aufruf

eine LED (später ein Relais) an einem als Output definierten Pin(13) ein- und ausgeschaltet.

Der callback-Aufruf erfolgt in FHEM mit einem "set myMQTT 0" bzw. "set myMQTT 1" über ein
"publishSet 0 1 inTopic"  - Attribut.

Das funktioniert bestens, die LED schaltet ein bzw. aus.


Über eine Brücke zwischen ESP-Pin13 (OUTPUT) und dem als INPUT definierten ESP-Pin14 möchte ich das Signal am
Pin13 (HIGH/LOW) ermitteln und vom ESP als eine  -client.publish("/fhem/LED_state", "LED ist eingeschaltet", true)-,
bzw. -client.publish("/fhem/LED_state", "LED ist ausgeschaltet", true)-  Anweisung an FHEM zurück melden.

Programmauszug:


   newStatus_LED = digitalRead(LED_INP);
    if (oldStatus_LED != newStatus_LED)    // Ausgang PIN13 hat sich verändert
    {
      oldStatus_LED = newStatus_LED;
      if (newStatus_LED == HIGH)
      {
        client.publish("/fhem/LED_state", "LED ist eingeschaltet", true);
        Serial.println("LED ist eingeschaltet");
      }
      else
      {
        client.publish("/fhem/LED_state", "LED ist ausgeschaltet", true);
        Serial.println("LED ist ausgeschaltet");
      }
    }



Das funktioniert teilweise.

Ich muss das "set myMQTT 0" bzw. "set myMQTT 1" zwei mal von FHEM absenden bis der richtige Status des LED-Ausanges wieder in FHEM angezeigt wird.

Über den seriellen Ausgang erscheint der Status der LED sofort korrekt, d.h der Programm-Teil wird durchlaufen.

Wenn ich parallel den Vorgang mit MQTT.fx verfolge, erscheint der Status der geschalteten LED auch sofort korrekt.

Was könnte die Ursache für dieses FHEM-Verhalten sein.

Vielen Dank für Eure Hilfe

Klausi

pc1246

Hallo Klausi
Kann es eventuell sein, dass der Browser nur keinen Refresh macht!? Das ist immer wieder Thema! Einen Browserrefresh wuerde ich als letztes probieren, da es sein kann, dass der letzte Befehl der Eingabezeile auch noch mal ausgefuehrt wird!? Wechsel einfach mal auf ein anderes Device oder Raum, und dann zurueck zu Deinem LED-Status.
Un Anstatt noch zusaetzliche Zeilen fuer Deinen Code zu generieren, Striche und Leerzeilen, kannst du bitte einfach den Knopf "#" ueber den Smilies benutzen. Dieser markiert code als code, und belegt bei langen Auszuegen weniger Platz!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Klausi

Hallo Christoph,

vielen Dank für  Deine rasche Antwort.

Der fehlende Refresh der FHEM-WEB Oberfläche nach Absenden des "set myMQTT ..." und dem Eintreffen der Rückmeldung ist die Ursache.
Nachdem ich die Oberfläche kurz verlassen und wieder zurückgekehrt bin, wurde der korrekte LED-Status angezeigt.

Kann in FHEM ein Refresh gesteuert ausgelöst werden?

Gruß

Klausi

pc1246

Hallo Klausi
Ja, das geht, aber ich weiss nicht wie. Ich locke Dich mal auf die Faehrte "longpoll", den Rest must Du dir selber zusammensuchen, oder fragen!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Thorsten Pferdekaemper

Hi,
ich habe das zwar nicht komplett kapiert, aber eigentlich sollte es ja nicht nötig sein, da selbst was zu machen.
Wird die gewünschte Information als Reading angezeigt oder irgendwie anders, z.B. als Internal?
Zeig doch mal ein list von dem Ding und einen Hinweis, wo die gewünschte Information steht.
Gruß,
   Thorsten
FUIP

Klausi

#5
Hallo Thorsten,

anbei ein List meines MQTT-Test:

Internals:
   IODev      mqtt
   NAME       mqtt_test
   NR         68
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   qos        1
   retain     1
   Readings:
     2017-03-20 16:38:04   Brenner_state   Brenner eingeschaltet
     2017-03-19 17:35:14   Power           14310.86
     2017-03-19 17:35:14   PowerL1         3374.77
     2017-03-19 17:35:14   PowerL2         4643.32
     2017-03-19 17:35:14   PowerL3         6292.78
     [color=red]2017-03-20 17:27:11   LED_state    LED ist eingeschaltet [/color]
     2017-03-20 16:19:24   Starts          1
     2017-03-19 17:35:14   Zähler          0.2830646
     2017-03-20 17:27:10   state           1
     2017-03-20 17:27:11   transmission-state incoming publish received
   Message_ids:
   Publishsets:
     :
       topic      inTopic
       values:
         0
         1
   Sets:
     0
     1
   subscribe:
     /fhem/Brenner_state
     /fhem/Q3D/Q3DA1024/Power_ges
     /fhem/Q3D/Q3DA1024/Power1
     /fhem/Q3D/Q3DA1024/Power2
     /fhem/Q3D/Q3DA1024/Power3
   [color=red]  /fhem/LED_state [/color]
     /fhem/Brenner/starts
     /fhem/Q3D/Q3DA1024/Z_Stand
   subscribeExpr:
     ^\/fhem\/Brenner_state$
     ^\/fhem\/Q3D\/Q3DA1024\/Power_ges$
     ^\/fhem\/Q3D\/Q3DA1024\/Power1$
     ^\/fhem\/Q3D\/Q3DA1024\/Power2$
     ^\/fhem\/Q3D\/Q3DA1024\/Power3$
   [color=red]  ^\/fhem\/LED_state$ [/color]
     ^\/fhem\/Brenner\/starts$
     ^\/fhem\/Q3D\/Q3DA1024\/Z_Stand$
   Subscribereadings:
     /fhem/Brenner/starts Starts
     /fhem/Brenner_state Brenner_state
     /fhem/Q3D/Q3DA1024/Power1 PowerL1
     /fhem/Q3D/Q3DA1024/Power2 PowerL2
     /fhem/Q3D/Q3DA1024/Power3 PowerL3
     /fhem/Q3D/Q3DA1024/Power_ges Power
     /fhem/Q3D/Q3DA1024/Z_Stand Zähler
   [color=red]  /fhem/LED_state LED_state [/color]
Attributes:
   IODev      mqtt
   publishSet 0 1 inTopic
   qos        at-least-once
   retain     1
   room       MQTT
   stateFormat transmission-state
   subscribeReading_Brenner_state /fhem/Brenner_state
   subscribeReading_Power /fhem/Q3D/Q3DA1024/Power_ges
   subscribeReading_PowerL1 /fhem/Q3D/Q3DA1024/Power1
   subscribeReading_PowerL2 /fhem/Q3D/Q3DA1024/Power2
   subscribeReading_PowerL3 /fhem/Q3D/Q3DA1024/Power3
   [color=red]subscribeReading_LED_state /fhem/LED_state [/color]
   subscribeReading_Starts /fhem/Brenner/starts
   subscribeReading_Zähler /fhem/Q3D/Q3DA1024/Z_Stand


Wie von Christoph (pc1246) richtig vermutet, liegt das Problem am ausbleibenden Refresh  der FHEM-Web Oberfläche beim Eintreffen der  client.publish("/fhem/LED_state", "LED ist eingeschaltet", true) vom ESP.

Wenn ich nach dem Eintreffen der Rückmeldung vom ESP  "F5" am PC betätige, wird der LED_state sofort richtig aktualisiert.

Im Event-Monitor wird immer der korrekte LED_state gezeigt.

Web longpoll 1 ist gesetzt.

Vielen Dank für Euere Hilfe.

Klausi


pc1246

Hallo Klausi
Benutze doch bitte CodeTags (#)! Geht auch nachtraeglich!
Danke und Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

Thorsten Pferdekaemper

Hi,
meiner Meinung nach dürfte das nicht passieren. Ich habe mal kurz ins Coding geschaut und eigentlich sollte das so passen.
Es kann höchstens noch sein, dass das einer der Fälle ist, bei dem man den Update des Readings per InternalTimer asynchron machen muss.
Ich würde das ganze ins richtige Unterforum für MQTT verschieben, so dass sich der Maintainer mal anschauen kann.
Gruß,
   Thorsten
FUIP

Klausi

Hallo Thorsten,

ich finde kein Unterforum für MQTT.

Gruß

Klausi

Thorsten Pferdekaemper

FUIP

Klausi

Hallo  Christoph , hallo Thorsten,

ich bin nun weiter.

Wenn ich das Ein- Ausschalten der LED über eine Anweisung in der fhem.cfg   bsp. über

define di_LED_on DOIF ([22:35]) (set mqtt_test 1)
define di_LED_on DOIF ([22:40]) (set mqtt_test 0)

ausführen lasse, erscheint in den Readings unmittelbar nach Schalten der entsprechende korrekte Status.

Nur nach dem Aktivieren des Schaltens der LED über die FHEM- Weboberfläche mittels manuellem "set mqtt_test 1"
wird durch den fehlenden refresh der Oberfläche der Status nicht korrekt angezeigt. Da muß ich dann mit "F5" den
refresh auslösen. Ich kann mit dem leben.

Vielen Dank an Euch beide für die Hilfe

Gruß
Klausi