MQTT bei mehreren ESPuinos

Hallo,
Ich würde gerne 2 ESPuino´s an einem MQTT-Server nutzen.
Leider werden alle States im Ordner „ESPuino“ abgelegt.
Wenn ich also Loudness steuere, wird direkt an beiden die Lautstärke gesetzt.
Wo kann ich das so ändern, dass alle stetes unter deer jeweiligen Client-ID z.B. abgelegt werden?

Danke vorab für eure Hilfe

ist (derzeit noch) ein #define im Quellcode

Und wie muss ich das ändern, dass es genutzt wird?
Hab mir aktuell so beholfen:

	// (optional) Topics for MQTT
	#ifdef MQTT_ENABLE
		constexpr uint16_t mqttRetryInterval = 60;                // Try to reconnect to MQTT-server every (n) seconds if connection is broken
		constexpr uint8_t mqttMaxRetriesPerInterval = 1;          // Number of retries per time-interval (mqttRetryInterval). mqttRetryInterval 60 / mqttMaxRetriesPerInterval 1 => once every 60s
		#define DEVICE_HOSTNAME "ESP32-ESPuino"         // Name that is used for MQTT
		constexpr const char topicSleepCmnd[] = "ESPuinoLaurenz/Cmnd/Sleep";
		constexpr const char topicSleepState[] = "ESPuinoLaurenz/State/Sleep";
		constexpr const char topicRfidCmnd[] = "ESPuinoLaurenz/Cmnd/Rfid";
		constexpr const char topicRfidState[] = "ESPuinoLaurenz/State/Rfid";
		constexpr const char topicTrackState[] = "ESPuinoLaurenz/State/Track";
		constexpr const char topicTrackControlCmnd[] = "ESPuinoLaurenz/Cmnd/TrackControl";
		constexpr const char topicCoverChangedState[] = "ESPuinoLaurenz/State/CoverChanged";
		constexpr const char topicLoudnessCmnd[] = "ESPuinoLaurenz/Cmnd/Loudness";
		constexpr const char topicLoudnessState[] = "ESPuinoLaurenz/State/Loudness";
		constexpr const char topicSleepTimerCmnd[] = "ESPuinoLaurenz/Cmnd/SleepTimer";
		constexpr const char topicSleepTimerState[] = "ESPuinoLaurenz/State/SleepTimer";
		constexpr const char topicState[] = "ESPuinoLaurenz/State/State";
		constexpr const char topicCurrentIPv4IP[] = "ESPuinoLaurenz/State/IPv4";
		constexpr const char topicLockControlsCmnd[] ="ESPuinoLaurenz/Cmnd/LockControls";
		constexpr const char topicLockControlsState[] ="ESPuinoLaurenz/State/LockControls";
		constexpr const char topicPlaymodeState[] = "ESPuinoLaurenz/State/Playmode";
		constexpr const char topicRepeatModeCmnd[] = "ESPuinoLaurenz/Cmnd/RepeatMode";
		constexpr const char topicRepeatModeState[] = "ESPuinoLaurenz/State/RepeatMode";
		constexpr const char topicLedBrightnessCmnd[] = "ESPuinoLaurenz/Cmnd/LedBrightness";
		constexpr const char topicLedBrightnessState[] = "ESPuinoLaurenz/State/LedBrightness";
		constexpr const char topicWiFiRssiState[] = "ESPuinoLaurenz/State/WifiRssi";
		constexpr const char topicSRevisionState[] = "ESPuinoLaurenz/State/SoftwareRevision";
		#ifdef BATTERY_MEASURE_ENABLE
		constexpr const char topicBatteryVoltage[] = "ESPuinoLaurenz/State/Voltage";
		constexpr const char topicBatterySOC[]     = "ESPuinoLaurenz/State/Battery";
		#endif
	#endif

Ist aber natürlich etwas blöd, da ich es jedes mal bei Änderungen an anderen Stellen wieder auch ändern muss (je nach dem für welchen ESPuiono ich es grade nutze).

Könne man da nicht die MQTT-ClientID dazu verwenden und vorne hin setzen?

Je nachdem für welchen du „baust“ musst du dann die Werte anpassen…

Ich habe bei mir 2 Branch lokal im Git und wechsel dann zu den einzelnen Branches je nachdem für wen ich baue…

Das könnte man im Prinzip machen. Aber wir werden auf kurz oder lang die Topics eh ins Frontend schieben und uns dann einen Mechanismus überlegen, wie man das möglichst einfach anpassen kann.
Du musst auf jeden Fall schauen, dass die ClientId pro ESPuino unterschiedlich ist und dass auch die Topics sich unterscheiden. Dann sollte das laufen; tut’s auf jeden Fall bei meinen Kindern schon seit Jahren :slight_smile:.

1 „Gefällt mir“

Mit meiner Änderung läuft das mal soweit. Danke