NEWS
Lampe gleichzeitig als publish und subscribe?
-
Hallo,
ich habe zur Implementierung des PubSub Cliet in Verbindung mit dem ioBroker eine Frage. Die Kommunikation für Sensoren (Out) und Aktoren (In) ist mir mir klar
// Once connected, publish an announcement... client.publish("outTopic", "hello world"); // ... and resubscribe client.subscribe("inTopic");
Doch wie setze ich fogendes um, ohne ein DeadLock zu erzeugen. Beispiel: Mein IoT Gerät hat ein Taster, ein Relais und eine Lampe. Die Lampe soll per ioBroker als auch mit dem Taster aktiviert werden. Die Lampe soll ihren Status per MQTT zurückmelden - damit in Lampe In und Out bzw. publish und subscripe (gleicher Pfad?)
Mein Ansatz: A. Die MQTT Abfrage in die callback Routine für Lampe ein. B. Taste Auslesen und in der Tasten Routine// Once connected, publish an announcement... client.publish("Lampe", "Aus"); // ... and resubscribe client.subscribe("Lampe");
client.publish("Lampe", msg);
Funktioniert das Vorgehen "ohne Nebenwirkung". Eine Testumsetzung hat bisher funktioniert. Würde mich über Rückmeldung freuen.
-
Nachdem ich auf die Frage keine Antwort bekommen habe, gehe ich davon aus, dass ich mich nicht richtig ausgedrückt habe. Meine Befürchtung ist bzw. war, dass wenn die gleiche Nachricht als publish und subscripe deklariert ist eine Endlosschleife entsteht.
-
Gleiche Nachricht als publish und subscripe
Taste am Dev published Nachricht, ioBroker empfängt den neuen Weit, speichert und published seinerseits den Wert neu. Hier sollte die Kette zuende sein. Also ein Denkfehler. -
Rücksenden des gesetzten Wertes bei Verletzung des Wertebereich
Eine andere Sache hat mich beschäftigt. Mein Dev empfängt einen Wert "Mode" der den Wertebereich 0..5 hat. Empfängt Dev den flaschen Wert, so soll bei zu klein der Min Wert (0) bei zu groß Wert (5) gesetzt werden.
void MQTT_Callback(char* topic, byte* payload, unsigned int length) { String value = ""; for (int i=0;i<length;i++) { value += (char)payload[i]; } if( strcmp( topic,"WeMosDev1/Mode")==0 ) { Value = value.toInt(); if( InRage( Valie,0,5 )==false ) { Value = MinMax( Value,0,5 ); snprintf( MQTT_msg,50,"%d",iFANPWM_Mode ); MQTT_Client.publish( "WeMosDev1/Mode",Value ); }
Seht ihr hier Schwierigkeiten?
-
-
@HomeSweetHome said in Lampe gleichzeitig als publish und subscribe?:
Nachdem ich auf die Frage keine Antwort bekommen habe, gehe ich davon aus, dass ich mich nicht richtig ausgedrückt habe. Meine Befürchtung ist bzw. war, dass wenn die gleiche Nachricht als publish und subscripe deklariert ist eine Endlosschleife entsteht.
-
Gleiche Nachricht als publish und subscripe
Taste am Dev published Nachricht, ioBroker empfängt den neuen Weit, speichert und published seinerseits den Wert neu. Hier sollte die Kette zuende sein. Also ein Denkfehler. -
Rücksenden des gesetzten Wertes bei Verletzung des Wertebereich
Eine andere Sache hat mich beschäftigt. Mein Dev empfängt einen Wert "Mode" der den Wertebereich 0..5 hat. Empfängt Dev den flaschen Wert, so soll bei zu klein der Min Wert (0) bei zu groß Wert (5) gesetzt werden.
void MQTT_Callback(char* topic, byte* payload, unsigned int length) { String value = ""; for (int i=0;i<length;i++) { value += (char)payload[i]; } if( strcmp( topic,"WeMosDev1/Mode")==0 ) { Value = value.toInt(); if( InRage( Valie,0,5 )==false ) { Value = MinMax( Value,0,5 ); snprintf( MQTT_msg,50,"%d",Value); MQTT_Client.publish( "WeMosDev1/Mode",Value ); }
Seht ihr hier Schwierigkeiten?
-