Autor Thema: MQTT, ESP & FHEM  (Gelesen 368 mal)

Offline Klausi

  • New Member
  • *
  • Beiträge: 11
MQTT, ESP & FHEM
« am: 20 März 2017, 11:41:50 »
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
« Letzte Änderung: 20 März 2017, 21:07:28 von Klausi »

Offline pc1246

  • Hero Member
  • *****
  • Beiträge: 1065
  • tempus fugit
Antw:MQTT, ESP & FHEM
« Antwort #1 am: 20 März 2017, 12:45:59 »
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
RasPi2
Jeelink mit 1 ETH200comfort; Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; netatmo; HM-USB mit 14 HM-CC-RT-DN, 3 HM_WDS10_TH_O; PhilipsTV; add-on board mit 6 IT-Steckdosen;3 harmony hub; Jeelink mit 6 PCA301; Somfy;
S7-300; 2 LGW; KS300; Vaillant e-Bus in Vorbereitung

Offline Klausi

  • New Member
  • *
  • Beiträge: 11
Antw:MQTT, ESP & FHEM
« Antwort #2 am: 20 März 2017, 13:27:32 »
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

Offline pc1246

  • Hero Member
  • *****
  • Beiträge: 1065
  • tempus fugit
Antw:MQTT, ESP & FHEM
« Antwort #3 am: 20 März 2017, 14:41:22 »
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
RasPi2
Jeelink mit 1 ETH200comfort; Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; netatmo; HM-USB mit 14 HM-CC-RT-DN, 3 HM_WDS10_TH_O; PhilipsTV; add-on board mit 6 IT-Steckdosen;3 harmony hub; Jeelink mit 6 PCA301; Somfy;
S7-300; 2 LGW; KS300; Vaillant e-Bus in Vorbereitung

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3853
  • Finger weg von der fhem.cfg
Antw:MQTT, ESP & FHEM
« Antwort #4 am: 20 März 2017, 15:14:36 »
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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline Klausi

  • New Member
  • *
  • Beiträge: 11
Antw:MQTT, ESP & FHEM
« Antwort #5 am: 20 März 2017, 20:15:05 »
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

« Letzte Änderung: 20 März 2017, 21:08:36 von Klausi »

Offline pc1246

  • Hero Member
  • *****
  • Beiträge: 1065
  • tempus fugit
Antw:MQTT, ESP & FHEM
« Antwort #6 am: 20 März 2017, 20:19:21 »
Hallo Klausi
Benutze doch bitte CodeTags (#)! Geht auch nachtraeglich!
Danke und Gruss Christoph
RasPi2
Jeelink mit 1 ETH200comfort; Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; netatmo; HM-USB mit 14 HM-CC-RT-DN, 3 HM_WDS10_TH_O; PhilipsTV; add-on board mit 6 IT-Steckdosen;3 harmony hub; Jeelink mit 6 PCA301; Somfy;
S7-300; 2 LGW; KS300; Vaillant e-Bus in Vorbereitung

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3853
  • Finger weg von der fhem.cfg
Antw:MQTT, ESP & FHEM
« Antwort #7 am: 20 März 2017, 20:27:03 »
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
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline Klausi

  • New Member
  • *
  • Beiträge: 11
Antw:MQTT, ESP & FHEM
« Antwort #8 am: 20 März 2017, 21:24:04 »
Hallo Thorsten,

ich finde kein Unterforum für MQTT.

Gruß

Klausi

Offline Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3853
  • Finger weg von der fhem.cfg
Antw:MQTT, ESP & FHEM
« Antwort #9 am: 20 März 2017, 21:32:13 »
Guckst Du hier:
https://fhem.de/MAINTAINER.txt
Gruß,
   Thorsten
RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Offline Klausi

  • New Member
  • *
  • Beiträge: 11
Antw:MQTT, ESP & FHEM
« Antwort #10 am: 20 März 2017, 22:59:49 »
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