Hallo,
versuche mich hier vergeblich an einer MQTT Auswertung via CloudMQTT und
benutzte dabei die Library "PubSubClient.H"; Hardware ist ein ESP8266
Publishen funktioniert problemlos, nur beim Subscribe bekomme ich nichts
zurück.
Das angefügte Beispiel schickt alle 5sek Daten an den MQTT Server und
müsste ja dann sofort eine Rückmeldung geben - das passiert aber nicht.
Auch direktes Eintragen in die GUI auf CloudMQTT bleibt ohne Reaktion.
Hat jemand 'ne Idee was falsch ist?
Gruß
Timo
Hallo,
ich spiele auch gerade etwas mit MQTT rum. CloudMQTT habe ich nicht
benutzt, bei mit läuft ein Mosquitto unter Windows zum Testen. Da sehe
ich wenigstens, was passiert. Testclient ist MQTT.fx unter Windows.
Seit vorhin gibt es auch ein altes Pearl-Laufschrift-Display mit ESP
drin als Actor.
Mosquitto habe ich vorhan auf dem soweiso nur rumliegenden RasPi
intstallert und meinen Test-ESP, der sinnigerweise EANs scannt und
published angeworfen.
Sicher sie "sinnvollste" Anwendung: das Display zeigt per MQTT eine
gescannte EAN an...
Wenn CloudMQTT als reiner Broker funktioniert, müßtest Du ja Deinen
eigenen topic subscriben können und Dir an die serielle schicken lassen.
Gruß aus Berlin
Michael
Hi,
habe mich jetzt nochmals intensiv mit dem Thema beschäftigt und mein
vermeindlichen Fehler gefunden: Nach dem Reconnect muss ein Subscribe
erfolgen, dann klappt es auch.
CloudMQTT lässt auch über das GUI eine Sicht auf die Daten zu, noch dazu
nutze ich ein Android-Tool "MyMQTT", welches astreine Dienste leistet.
Gruß
Timo
Hallo,
naja, Dein angehängtes Programm hat ja auch nur als Publisher die Daten
des Feuchtesenders zum Brooker geschickt. Mit QoS = 0 wird die Nachricht
genau einmal an den Brooker gesendet.
Subscribe sagt dem Brooker ja erst, daß Du Nachrichten mit diesem Topic
erhalten willst.
Du hast zwar in
client.publish(humidity_topic, String(hum).c_str(), true);
retained auf true gesetzt, dann mußt Du aber den Rückgabewert auswerten,
wenn Du nur wissen willst, ob die Nachricht beim Brooker angekommen ist.
Müßte dann wohl
1
bool test = client.publish(humidity_topic, String(hum).c_str(), true);
2
if (test)
3
{
4
Serial.println("Nachricht angekommen");
5
}
6
{
7
Serial.println("Nachricht NICHT angekommen");
8
}
aussehen. Habe ich selber aber noch nicht benutzt.
Gruß aus Berlin
Michael
Dan schrieb:> Weißt Jemand wie man MQTT mit Sicherheit in der Industrie implementieren> kann?
Ja, ich weiß es, aber die Antwort wird dir nicht gefallen.
MQTT ist sicherheitmäßig eine Katastrophe. Username/Password im
Klartext, das ist alles was MQTT an "Sicherheit" bietet. Ein Witz.
MQTTs Antwort drauf ist MQTT über TLS laufen zu lassen. Klar, kann man
machen. Bei der Implementierung von TLS, auch wenn man eine Bibliothek
verwendet, kann man als nicht Crypto-Experte so viele Fehler machen,
dass das Ergebnis nicht mehr als Kosmetik ist. Wählt man eine
fehleranfällige Bibliothek (räusper OpenSSL räusper), kann man sich
TLS fast schon schenken.
Alles das ist besonders unschön, da MQTT aus der SCADA-Welt kommt und
man dort eigentlich erhöhte Sicherheitsanforderungen hat. Das
interessiert in der SCADA-Welt niemanden :-( Ich rechne in den nächsten
Jahrzehnten mit sehr vielen gehackten Industrieanwendungen. Ein Fest für
Hacker.
Warum ist MQTTs Antwort "dann nimm doch TLS" zu billig? Industrien, die
sich wirklich um Sicherheit bemühen, wie in der Luftfahrt, haben es auf
die harte Tour gelernt. Der Effekt wird mit dem Swiss Cheese Model
beschrieben https://en.wikipedia.org/wiki/Swiss_cheese_model .
Sicherheitslayer haben Löcher. Daher legt man mehrere übereinander (also
nicht wie bei MQTT nichts machen, selber ein einziges großes
Sicherheitsloch sein und sich einfach auf TLS verlassen). Sogar wenn man
viele Layer übereinander legt geht es manchmal noch schief (->
Flugzeugabsturz). Aber seltener als wenn man keine Layer übereinander
legt.
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.