MQTT – Wie zeigt man Temperatur und Luftfeuchtigkeit im WDP an?
 

MQTT – Wie zeigt man Temperatur und Luftfeuchtigkeit im WDP an?

Begonnen von Krogsgaard, 02. Juli 2025, 21:31:38

Vorheriges Thema - Nächstes Thema

Krogsgaard

Hallo WDP Freunde,

Ich habe angefangen, ein bisschen mit MQTT in Windigipet 2025 zu experimentieren. Ich fange ganz einfach an – mit einem NodeMCU, an dem ein DHT-Sensor (für Temperatur und Luftfeuchtigkeit) angeschlossen ist. Die Daten kommen auch schön im MQTT an – siehe Screenshot ,,MQTT Explorer".

Jetzt möchte ich die Werte in Windigipet anzeigen lassen. Ich habe die beiden Demo-Projekte durchgespielt und gesehen, dass sie funktionieren – die Verbindung passt also. Aber wie bekomme ich die Werte z. B. in die beiden angezeigten grafischen Instrumente übertragen?

Ich habe versucht, sie als Magnetartikel mit MQTT-Anbindung zu konfigurieren – aber es kommen keine Daten an. Muss man dafür vielleicht STW benutzen? Oder wie macht man das am besten?

Viele Grüße
Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Sven Spiegelhauer

Hallo Jens,

wenn Du einen Sensor in WDP sehen möchtest, dann muß dieser im Arduino-Sketch mit der MA-Adresse an den MQTT-Broker gesendet werden. Kannst Du Dir im Beispiel-Sketch ansehen. Dort wird mit dem Poti der Spannungswert an den Zähler mit der Adresse 3 gesendet und kann in WDP angezeigt werden.
Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Krogsgaard

Hallo Sven,

Nett von dir, dass du dir das anschauen willst.

Ich habe dir die Ino-Datei per Mail geschickt :)

Viele Grüße, Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Krogsgaard

Hallo Sven nochmal,

Entschuldige, dass ich dich falsch verstanden habe – ich schaue mir gerade den Beispiel-sketch an und versuche herauszufinden, wie es funktioniert.

Viele Grüße, Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Krogsgaard

Hallo WDP Freunde,

Ich kämpfe immer noch mit MQTT und damit, Werte von einem ESP32 in Windigipet anzuzeigen. Ich habe mir den Beispiel-Sketch angeschaut, den Sven vorgeschlagen hat. Ich habe einiges ausprobiert – aber ich kriege es einfach nicht zum Laufen.

Im angehängten Screenshot vom MQTT Explorer sieht man die Daten genau aus dem Beispiel-Sketch. Wenn ich zum Beispiel die Temperatur in Windigipet anzeigen möchte – wie macht man das eigentlich?
Wie man sieht, hat die Temperatur folgendes Topic:  WDP/Evt/PwSen/10/T_C

Hat jemand so ein einfaches Beispiel wie meins zum Laufen gebracht – und könnte vielleicht eine kleine Schritt-für-Schritt-Anleitung machen?

Viele Grüße, Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Sven Spiegelhauer

Hallo Jens,

ich weis noch nicht, ob ich heute schaffe. Aber ich werde Dir mal ein Beispiel fertig machen.
Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Krogsgaard

Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Sven Spiegelhauer

Hallo Jens,

Du suchst an der falschen Stelle. Der rot eingerahmte Ausschnitt aus dem MQTT-Explorer, zeigt die Daten für einen Booster an.

Sie dürfen diesen Dateianhang nicht ansehen.

Diese werden dem Booster-Management zur Verfügung gestellt und sind fest in WDP integriert. Im Demoprojekt hat der Booster die Adresse 10.

Sie dürfen diesen Dateianhang nicht ansehen.

Wenn Du einen beliebigen Wert in einem Zähler darstellen möchtest, dann siehe Dir den Zähler mit der Adresse 3 an. Der Poti hat eine Doppelfunktion. Einmal wird er zur Anzeige der Spannung im Booster-Management genutzt. Siehe Code des ESP32.

const int PwSen_Address=10;                     // PwSen-Adresse an die gemeldet wird
                                                // Spannung in V gemessen welche am Poti eingestellt wird am Anschluss A0
                                                // simulierte Strom in mA zyklisch gesendet von 0..3000mA
                                                // Temperatur in °C gemessen via DHT22

Die zweite Funktion ist, das der Wert des Poti im Zähler 3 angezeigt wird. Siehe wieder Code des ESP32.

const int VoltageReport_SD_Address=3;           // Magnetartikeladresse an die die Stellung des Potis gemeldet wird an A0, AD-Rohwert 0..1023
      val=analogRead(PotiPin);                            // Spannung an Poti an A0 auslesen und als Magnetartikelstellung an VoltageReport_SD_Address
                                                          // melden und als PwSen-Spannungswert
      if (val!=ADCValueOld){
        ADCValueOld=val;
        Serial.println("ADC Value: "+ val);
        sendSD(VoltageReport_SD_Address,val);
        float voltage=val;
        voltage /= 4096;
        voltage *= 3.2;
        sendVoltage(PwSen_Address,voltage);
      }

Und hier musst Du einsetzen. Statt des Poti-Wertes kannst Du alles mögliche an den Zähler senden. Zum Beispiel Temperatur, Helligkeit und vieles mehr.




Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Krogsgaard

Hallo Sven,

vielen Dank für deine Erklärung – da habe ich ja was zum Anschauen am Wochenende :).
Ich muss das Konzept erstmal richtig verstehen, und wie gesagt ist das Ziel einfach, die Temperatur vom DHT22 grafisch darzustellen.

Was mich wahrscheinlich etwas verwirrt hat, ist euer Umgang mit Adressen – also z. B. Adresse 10 für den Booster. Das funktioniert ja ganz gut, wenn man seinen Sketch selbst programmiert – aber was macht man, wenn man Daten über MQTT holen will, die keine Adresse haben?

Ich dachte eigentlich, dass das Topic als eindeutiger Schlüssel dienen kann, wenn man Daten über MQTT in Windigipet einlesen will.
Na ja – zum Glück gibt's noch viel zu lernen für mich :)

Ein schönes Wochenende und viele Grüße
Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Sven Spiegelhauer

Hallo Jens,

Zitataber was macht man, wenn man Daten über MQTT holen will, die keine Adresse haben?

So etwas gibt es nicht in der Computerwelt. Da hat alles eine Adresse, ID oder Kennung. Anders  geht es auch nicht. Selbst das Internet besteht nur aus Adressen (IP). Auch unsere Booster haben in irgendeiner Art und Weise eine Adresse. Das ist mit MQTT nicht anders. Die Adresse 10 in unserem Beispiel ist willkürlich gewählt. Es hätte auch jede andere sein können. Die Adresse ist auch wichtig, wenn mehrere gleich Geräte im Einsatz sind. Booster sind durchaus auch mehr als einer im Einsatz.


ZitatIch dachte eigentlich, dass das Topic als eindeutiger Schlüssel dienen kann, wenn man Daten über MQTT in Windigipet einlesen will.

Der Topic besteht aus mehreren Teilen. Siehe auch dazu die PDF zum MQTT-Projekt auf dem USB-Stick (MQTT in Win-Digipet.pdf). Dort findest Du alle von WDP verwendeten Topic's. Bleiben wir mal bei dem Zähler, der eine Temperatur anzeigen soll. Dafür ist der Topic für Magnetartikel zuständig. Denn ab WDP2025 können Zähler auch eine Magnetartikel-Adresse besitzen.

WDP/Evt/SD/Nr/State


WDP - Ist das Haupt-Topic, welches in der Systemsteuerung von WDP gewählt werden kann und auch änderbar ist. Normalerweise muß hier nichts geändert werden. Es gibt aber Fälle, wo das nötig ist. Gehe ich jetzt aber nicht weiter darauf ein.
Evt - Das bedeutet, das eine Nachricht an WDP gehen soll. Das Gegenstück ist 'Cmd', wenn WDP an den ESP32 sendet.
SD - Hier handelt es sich um einen Magnetartikel.
Nr - Das ist die Magnetartikel-Adresse.
State - Und zum Schluss kommt der Wert für den Magnetartikel. Bei einer Weiche sind '0' und '1' zulässig. Bei einem Zähler kann das ein fast beliebiger Wert sein.

Du siehst also, das die beiden letzten Elemente des Topic variabel sind. Im Sketch des ESP32 sieht die Routine dafür so aus.
void sendSD(int SDNum, int SDState){
  //Sende Magnetartikel-Stellung an WDP
  mqtt.publish(String(wdpMQTTTopic)+"/Evt/SD/"+String(SDNum)+"/State", String(SDState));
}

Man muss natürlich etwas lesen und probieren. Vor allem, wenn man zuvor noch keine Erfahrung mit ESP32 hatte. Aber das sollte bei entsprechendem Interesse kein Hexenwerk sein. Bei weiteren Fragen stehe ich Dir gerne zur Verfügung.
Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Sven Spiegelhauer

Hallo Jens,

ich habe im Anhang den Sketch eingestellt. Er ist auf ein Minimum reduziert und steuert nur die 3 Status-LED's und den Temperatursensor aus dem Demoprojekt an. Ich hoffe das alles funktioniert, denn ich konnte aus Zeitgründen noch nicht testen. Trage Deine Netzwerkdaten ein und programmiere den ESP32. Das Breadboard kannst Du einfach weiterverwenden.

Im Sketch wurde die Magnetartikel-Adresse für den Zähler auf 100 eingestellt. Kannst Du natürlich ändern.
const int TempSensor_SD_Address=100;            // Magnetartikeladresse für den Zähler Temperaturanzeige
Die Übergabe des Temperaturwertes erfolgt alle 500ms in der Loop-Schleife.
  if ((tick % 500)==0){
    //Temperatur-Sensor auslesen ~ alle 0,5 Sekunden

    float temp = dht.readTemperature();
    float humidity = dht.readHumidity();
     
    Serial.print("Reading temperatre... ");           // Kontrollausgabe der Werte via seriellem Interface
    if (!isnan(humidity) || !isnan(temp)) {
         
      sendSD(TempSensor_SD_Address,temp);
 
      Serial.print("Temp: ");
      Serial.print(String(temp));
      Serial.print(" Humidity: ");
      Serial.print(String(humidity));
    }
    Serial.println("");
       
  }

Im WDP-Demoprojekt trägst Du einen Zähler mit Adresse 100 ein und schon sollte er die Temperatur anzeigen.
Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Krogsgaard

Hallo Sven,

Vielen Dank für deine ganze Arbeit – ich freue mich schon darauf, das Projekt auszuprobieren!
Wir sind am Wochenende im Ferienhaus, und weil's angefangen hat zu regnen, habe ich das MQTT/WDP-Projekt einfach mitgenommen.
Gestern habe ich mir einen kostenlosen Account bei HiveMQ eingerichtet, um mal zu testen, wie das mit deren Broker läuft – anstatt dem, den ich lokal auf meinem Rechner installiert habe.

Viele Grüße
Jens

Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Krogsgaard

Hallo Sven,

Ich habe das Projekt heruntergeladen und geladen – läuft alles super!
Wie du im MQTT Browser sehen kannst, werden die Werte richtig angezeigt.

State = 23 – das passt, hier sind's gerade 23 Grad – viel angenehmer als am Mittwoch, da hatten wir 32 Grad :)
Von WDP aus besteht eine Verbindung zum Board, aber ich kriege es nicht hin, einen Zähler zu erstellen und die Adresse 100 mit den aktuellen 23 Grad anzuzeigen.

Wie du sehen kannst, hab ich's genauso versucht wie bei dem Zähler mit Adresse 3 – aber bei meinem Zähler mit Adresse 100 kommt kein Wert an.
Was mache ich da falsch?

Viele Grüße
Jens

Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit

Sven Spiegelhauer

Viele Grüße aus dem schönen Land Brandenburg
Sven
  • Win-Digipet-Version:
    2018 / 2021 / 2025 / Beta (alle mit aktuellen Update)
  • Anlagenkonfiguration:
    Spur-N und G, IB-II neo, IB-II, IB-Basic, IB-Com, Loconet-RM, Servo-, Schalt- und MA-Decoder, LDT Lichtsignaldecoder, Lokdecoder(DCC) ESU, Kühn, Drehscheibendecoder G.Boll und LDT, viele Eigenbauten
  • Rechnerkonfiguration:
    Notebook Windows11 / PC Windows11

Krogsgaard

Hallo Sven,

Hier ist ein Backup des Demo 2025-Projekts, in dem ich versucht habe, einen Zähler mit der Adresse 100 hinzuzufügen

Jens
Grüße Jens Krogsgaard, Kopenhagen
  • Win-Digipet-Version:
    WDP 2025
  • Anlagenkonfiguration:
    Märklin c-gleis, ECoS 50200 , S88 viessmann, Digikeijs Dsd2010,
  • Rechnerkonfiguration:
    Lenovo z710, windows 10, 12 gb ram, 64 bit