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
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
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
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
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
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
Hallo Klausi
Benutze doch bitte CodeTags (#)! Geht auch nachtraeglich!
Danke und Gruss Christoph
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
Hallo Thorsten,
ich finde kein Unterforum für MQTT.
Gruß
Klausi
Guckst Du hier:
https://fhem.de/MAINTAINER.txt
Gruß,
Thorsten
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