@arteck - Danke, das hatte ich auch gesehen (main/lib/mqttServerController.js), ist mit aedes umgesetzt, aber halt nur mit listen und dann Info-Ausgabe in ein paar Zeilen und leider für meinen Use Case so nicht hilfreich...
@haus-automatisierung
Danke, kann ich sehr gut nachvollziehen, warum man eigene Server in den Adaptern implementiert hat.
Langfristig wäre es ganz schön, wenn man für den MQTT-Server Adapter Plugins programmieren könnte (so wie beim web Adapter). Dann bekäme man einfach Nachrichten rein, welche man abonniert hat.
+1 👍
@BananaJoe
Danke für die "Unterstützung", den mqtt-Adapter zu nehmen 🙂
Mittlerweile hab ich übrigens herausgefunden, dass der Fully Browser nach einem Neustart nur jede Minute ein neues Info-Paket sendet, nicht alle paar Millisekunden. Nur nach mehreren "intensiven" Tests in der Entwicklungsumgebung kommen diese dann wieder alle paar ms rein. Wohl aber nur aufgrund meiner Tests. Ich schau mir das noch näher an.
Aber so wie es aussieht, kann ich wohl doch aedes verwenden in einer sauberen Umgebung und Infos kommen nur jede Minute, Events sofort, wie es sein soll. Jeweils als QOS 1 und Info als retain, event als nicht retain.
Code-Auszug
/**
* fired when a client publishes a message packet on the topic
*/
this.aedes.on('publish', (packet, client) => {
if (!client || !packet) return;
if (packet.qos === 1 && packet.retain) {
/**
* Device Info coming in...
* Per fully documentation: The complete device info will be published every 60 seconds as fully/deviceInfo/[deviceId] topic (retaining, QOS=1).
*/
const info = JSON.parse(packet.payload.toString());
this.adapter.log.debug(`[MQTT] Client ${info.ip4} Publish Info: topic: ${packet.topic}, qos: ${packet.qos}`);
} else if (packet.qos === 1 && !packet.retain) {
/**
* Event coming in...
* Per fully documentation: Events will be published as fully/event/[eventId]/[deviceId] topic (non-retaining, QOS=1).
*/
const event = JSON.parse(packet.payload.toString());
this.adapter.log.debug(`[MQTT] Client Publish Event: topic: ${packet.topic}, qos: ${packet.qos}, payload: ${packet.payload.toString()}`);
} else {
// Ignore
return;
}
});