Gladys und Docker mqtt+zigbee2mqtt vorhanden

Hallo zusammen,

da ich bereits einen bestehenden Mosquitto-Server (Docker) und einen Docker mit zigbee2mqtt habe, ist es möglich, Gladys mit diesen beiden Docker-Containern zu verbinden, um Zigbee-Sensoren nutzen zu können? Oder ist der Umweg über die beiden internen Docker-Container von Gladys (MQTT und zigbee2mqtt) zwingend erforderlich?

Ich hätte gerne meine beiden Docker-Container behalten :slight_smile:
Vielen Dank euch!

Z.

Ich versuche eine Antwort, ohne überhaupt ein Experte zu sein, aber ich denke, es ist möglich, vorausgesetzt, die Zugriffe auf die MQTT- und z2m-Container sind korrekt konfiguriert: Benutzername/Kennwort und IP-Adresse:Port

Im Zweifel, bevor man eine Konfigurationsdatei ändert… wir warten auf eine Bestätigung! :wink:

Das Problem ist, dass du Portkonflikte bekommst, wenn du die von Gladys zusätzlich zu deinen eigenen auf derselben Maschine bereitstellst,
ton docker mqtt = IP + Port (wahrscheinlich 1883) + Benutzername + Passwort
ton docker zigbee2mqtt = IP + Port (wahrscheinlich 1884) + Benutzername + Passwort

docker gladys mqtt = IP + Port (1883) + Benutzername (standardmäßig gladys) + Passwort, das in Gladys definiert ist
docker gladys zigbee2mqtt = IP + Port (1884) + (standardmäßig gladys) + Passwort in der Datei « configuration.yaml », die sich im Verzeichnis « var/lib/gladysassistant/zigbee2mqtt/z2m » im Abschnitt « mqtt: » befindet
Daher musst du die Ports in deinen Containern ändern, und ich denke, dass es keine gute Idee ist, andere Docker-Container als die von Gladys zu verwenden, oder du musst diese Datei in deinem Docker-Container anpassen, damit sie korrekt mit Gladys kommunizieren, Gladys benötigt zigbee2mqtt, um Geräte zu integrieren, aber diese Parameter sind nicht über Gladys zugänglich, im Gegensatz zum MQTT-Teil

Wenn sie auf einer anderen Maschine sind, kein Problem!

Was lässt du aktuell laufen, das diese Docker-Container erfordert, bevor du Gladys installierst?

Ich habe diese 2 Container mit Jeedom verwendet, die ich zuvor genutzt habe.
Ich hätte sie gerne behalten, weil ich sie gut kenne, ihre Konfigurationsdateien bearbeiten kann, sie sind gesichert und funktionieren seit langem korrekt zusammen. Wenn es eine schlechte Idee ist, sie zu behalten, werde ich den Schritt wagen und nur die von Gladys verwenden und die anderen löschen.

Wenn du sie behalten möchtest, kannst du dann die Ports auf bereits bestehende ändern?
Dann gibt es doch kein Problem, oder?

wie du sagst, kannst du andere Ports als 1883 und 1884 in deinen Konfigurationsdateien verwenden und es gibt keine Probleme beim Arbeiten mit deinen Containern und denen von Gladys, und du hast zumindest eine stabile Konfiguration für Gladys! :wink:

Hallo :wave:

Für MQTT ist das möglich (siehe die Dokumentation), indem du die Option « Docker-Container als Broker verwenden » nicht aktivierst.

Für ZigbeMQTT ist das nicht möglich, das war eine Funktionsanfrage einiger Benutzer (du kannst eine Funktionsanfrage im Forum stellen).

Tatsächlich verwende ich bereits meinen Mosquitto mit Gladys:

Das funktioniert sehr gut und ich erhalte bereits alle meine Topics.
Allerdings installiert Zigbee2MQTT einen zweiten Docker, er nutzt nicht meinen bestehenden Mosquitto-Server.

Ich habe das Gefühl, dass du größere Chancen hast, ein Backup deines persönlichen ZigBee2MQTT zu erstellen und es in dem von Gladys verwalteten wiederherzustellen…

Genau das hat dir @cicoub13 geantwortet
Aktuell macht z2m das nicht

Ok, ich streich meine bestehenden Docker-Container. Ich verwende den MQTT-Server von Gladys:

Dann aktiviere ich zigbee2mqtt und lande mit zwei MQTT-Dockern:

  • eclipse-mosquitto, der durch die MQTT-Integration installiert wurde
  • gladys-z2m-mqtt, installiert von zigbee2mqtt
  • meinen Mosquitto, den ich daher gestoppt habe

Ist dieses Verhalten normal oder habe ich bei der Konfiguration etwas falsch gemacht?

Non, das ist alles gut :ok_hand:
Diese beiden Integrationen benötigen jeweils einen MQTT-Broker, mit dem sie kommunizieren können.

Ok, danke für all diese Infos, ich habe ein bisschen aufgeräumt und meinen MQTT-Broker Mosquitto behalten. Jetzt muss ich mich nur noch um meine Zigbee-Konfiguration kümmern:

Danke an alle für die schnellen Infos :wink:

Hallo @zedyxer,
Von meiner Seite aus verwende ich Gladys mit K8S, daher habe ich keinen Zugriff auf das automatische Mounten von Docker.

Für Zigbee verwende ich wie du einen Container daneben, der mit Gladys verbunden ist. Um die Kommunikation zwischen den beiden zu ermöglichen, ändere ich die Verbindungsdaten direkt im Docker.

Ich übergebe die Dateien:

/src/server/services/zigbee2mqtt/lib/init.js
/src/server/services/zigbee2mqtt/lib/getConfiguration.js

Danach ist es nicht die beste Technik, aber ich verwende sie schon seit langer Zeit und hatte nie ein Problem. Allerdings muss man von Zeit zu Zeit die Updates des Zigbee-Codes überprüfen, ob es keine großen Änderungen gibt (bisher einmal)

Hier sind die betreffenden Dateien:

init.js

Zusammenfassung
const logger = require('../../../utils/logger');
const { CONFIGURATION } = require('./constants');
const { generate } = require('../../../utils/password');
const { PlatformNotCompatible } = require('../../../utils/coreErrors');

/**
* @description Bereitet den Dienst vor und startet die Verbindung mit dem Broker, falls erforderlich.
* @example
* await z2m.init();
*/
async function init() {
    // Lade gespeicherte Konfiguration
    const configuration = await this.getConfiguration();

    this.mqttRunning = true

    await this.connect(configuration);

    await this.saveConfiguration(configuration);

    return null;
}

module.exports = {
    init,
};

getConfiguration.js

Zusammenfassung
const logger = require('../../../utils/logger');
const { CONFIGURATION } = require('./constants');

/**
* @description Holt MQTT-Konfiguration.
* @returns {Promise} Aktuelle MQTT-Netzwerkkonfiguration.
* @example
* getConfiguration();
*/
async function getConfiguration() {
    logger.debug('Zigbee2mqtt: Lade gespeicherte Konfiguration...');

    // Lade z2m-Parameter
    const z2mDriverPath = await this.gladys.variable.getValue(CONFIGURATION.Z2M_DRIVER_PATH, this.serviceId);
    //const z2mMqttUsername = await this.gladys.variable.getValue(CONFIGURATION.Z2M_MQTT_USERNAME_KEY, this.serviceId);
    //const z2mMqttPassword = await this.gladys.variable.getValue(CONFIGURATION.Z2M_MQTT_PASSWORD_KEY, this.serviceId);
    const z2mMqttUsername = '<username>';
    const z2mMqttPassword = '<password>';

    // Lade MQTT-Parameter
    // const mqttUrl = await this.gladys.variable.getValue(CONFIGURATION.MQTT_URL_KEY, this.serviceId);
    const mqttUrl = 'mqtt://<IP>:1883';
    const mqttUsername = '<username>';
    const mqttPassword = '<password>';
    // const mqttUsername = await this.gladys.variable.getValue(CONFIGURATION.GLADYS_MQTT_USERNAME_KEY, this.serviceId);
    // const mqttPassword = await this.gladys.variable.getValue(CONFIGURATION.GLADYS_MQTT_PASSWORD_KEY, this.serviceId);

    return {
        z2mDriverPath,
        z2mMqttUsername,
        z2mMqttPassword,
        mqttUrl,
        mqttUsername,
        mqttPassword,
    };
}

module.exports = {
    getConfiguration,
}

Danke für das Feedback, ich habe meine Installation gestern geändert, indem ich meinen Docker MQTT und meinen Docker Zigbee2mQTT entfernt habe.

Ich werde trotzdem deine Lösung für meine persönliche Info testen, sobald ich etwas Zeit und etwas Mut habe ^^

tch@o

Z.