Ankündigung

Einklappen
Keine Ankündigung bisher.

MQTT Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    MQTT Problem

    Ich habe einen neuen Stromzähler erhalten, den ich über einen Lesekopf auslese. Der spricht MQTT und sendet über das Topic tele/tasmota_37DFBC/SENSOR seine Werte:

    Knapp jede Sekunde wird die momentane Leistung ausgegeben:
    Code:
    {"Time":"2025-05-27T15:21:51","SML":{"16_7_0":470.90}}
    und ungefähr alle 30 Sekunden die Zählerstände und die momentane Leistung:
    Code:
    {"Time":"2025-05-27T15:22:37","SML":{"1_8_0":319.85897049,"1_8_1":233.963,"1_8_2":85.895,"16_7_0":472.10}}
    In der EibPC Logik habe ich das so implementiert:
    1. Im MQTT Client das Topic tele/tasmota_37DFBC/SENSOR verknüpft mit dem Objekt Stromzaehler_MQTT (c1400)
    2. Anschließend eine JSON-String Auswertung Pointer mit den Abfragen auf /SML/1_8_0, /SML/1_8_1, /SML/1_8_2 und /SML/16_7_0

    Das sieht dann so aus:
    Screenshot 2025-05-27 162945.png

    Das Problem ist nun, dass durch die verschieden langen MQTT Messages zwar die Leistung ständig aktualisiert wird, die Zählerstände aber leer sind. Nur ganz kurz, nämlich genau dann wenn die vollständige MQTT Nachricht kommt, erscheinen die Zählerwerte in der Visu.
    Screenshot 2025-05-27 163118.png

    Wenn ich die Momentanleistung im Lesekopf ausklammere, werden die Zählerstände natürlich einwandfrei angezeigt und alle 30 Sekunden aktualisiert.
    Screenshot 2025-05-27 163656.png

    Gibt es eine Lösung für dieses Problem?

    #2
    Ja. Weise die Zählerstände nicht bei Änderung zu sondern mit externem Auslöser: nur wenn sich der Wert ändert und die Länge > 0 ist, also der Wert im Objekt enthalten war:

    image.png

    Kommentar


      #3
      Das funktioniert, vielen herzlichen Dank!

      Kommentar


        #4
        Ich habe auch ein Smart Meter und einen Lesekopf, über den ich den aktuellen Verbrauch jede Sekunde und den Gesamtverbrauch alle 10 Minuten auf meinen MQTT Broker (Mosquitto auf dem NAS) schreibe. Ich denke, die Kombination Smart Meter mit MQTT Topics für Momentanverbrauch, Gesamtverbrauch und ggf. Verbrauch nach Phase (L1-L3) ist für Smart Home Nutzer durchaus üblich. Wäre es da nicht sinnvoll, ein Seitentemplate vorzubereiten wo dies hübsch mit Verbrauchskurve dargestellt wird und wo man als Nutzer nur noch die Topics anpassen muss? Und ja, ich bin etwas zu faul, mich in die Tiefen des EibStudios hineinzufummeln, um das hinzubekommen. Bin froh, dass ich die Anbindung des Wi-Fi Schreib-Lesekopfes hinbekommen habe.

        Kommentar


          #5
          Schau mal, ob diese Vorlage im EibStudio was für dich ist:
          Screenshot 2025-06-03 205533.png

          Kommentar


            #6
            Zitat von jgerhart Beitrag anzeigen
            Schau mal, ob diese Vorlage im EibStudio was für dich ist
            Danke. Das wäre von der Visualisierung her schon ungefähr das, was ich suche. Allerdings bin ich einfach zu doof, die Verknüpfungen zu meinen MQTT Werten, die im MQTT Broker stehen, hinzubekommen. Das Template ist ja für das Enertex SmartMeter vorgesehen.

            Fast alle, die ein Smart Meter haben, werden sich einen Wi-Fi IR Schreib-Lesekopf holen, der die Werte per MQTT senden kann. Optimal fände ich daher ein Template, in das ich einfach die Topics eingeben kann. Geliefert werden der aktuelle Verbrauch in Watt, der Gesamtverbrauch und (falls man einspeist) die Gesamterzeugung. Wenn ich Lust auf mehr bunte Linien hätte, könnte ich auch noch den aktuellen Verbrauch je Phase abrufen.

            Da unsere Leseköpfe beide mit Tasmota laufen, sind die Daten ähnlich. Bei mir kommt der aktuelle Wert sekündlich an und der Gesamtverbrauch sowie die Gesamterzeugung alle 10 Minuten.

            Code:
            smartmeter/normal/SENSOR = {"Time":"2025-06-05T22:12:13","MT631":{"Power_cur":1812.00}}
            smartmeter/normal/SENSOR = {"Time":"2025-06-05T22:15:50","MT631":{"Total_in":207.75,"Total_out":0.00,"Power_cur":1810.00}}

            Ich habe also mal in der Visu angefangen, Deine nachzubauen:

            Zuerst einen MQTT Client erstellt, die Verbindung zu meinem MQTT Broker eingegeben und das Topic.

            grafik.png

            Dann eine JSON Auswertung erstellt und befüllt:
            grafik.png
            Wenn ich nun das Ende von SmartmeterNormal mit dem Anfang der JSON Auswertung verbinden will, erhalte ich den Fehler "Datentypen stimmen nicht überein. Verwenden Sie Konvertierungsknoten". Im Handbuch nach "Konvertierungsknoten" gesucht und leider nichts gefunden.

            Freue mich auf Unterstützung.

            Ich bin übrigens gerade mit dem Hersteller eines HAN Adapters im Austausch, um diesen hoffentlich für den deutschen Markt anpassen zu lassen. Ergebnis wäre ein HAN Adapter, der per PoE mit dem Netz verbunden ist und die Daten per MQTT schreibt.
            Zuletzt geändert von skyynet; 08.06.2025, 20:34.

            Kommentar


              #7
              Bei dir fehlt im MQTT Client das Objekt. Das ist die Variable, die nachher den MQTT String des Stromzählers enthält:
              Screenshot 2025-06-06 122530.png

              Die JSON Auswertung erfolgt dann auf diese Variable, nicht auf den Ausgang des MQTT Client:
              Screenshot 2025-06-06 122909.png

              An den Ausgang des MQTT gehört eine Handle-Variable. Schau mal im Handbuch auf Seite 68, da ist das beschrieben.

              Kommentar


                #8
                Danke. Ich habe gerade mal versucht, das nachzubilden ohne die Abfragen auf aktualisierte Werte, also wie das, womit Du ursprünglich angefangen hast.
                Leider bekomme ich noch keine Werte. Vermutlich immer noch ein Denkfehler. Meine Logik sieht so aus:

                grafik.png

                Ich habe ein MQTT Client Objekt definiert und jetzt auch das Objekt Stromzaehler_MQTT hinterlegt:
                grafik.png
                Dann den Wert in der Variablen Stromzaehler_MQTT gespeichert:
                grafik.png

                Dann darauf eine JSON Pointer Anfrage auf die Unterwerte, z.B.

                grafik.png

                Und das Ergebnis in eine Variable speichern, hier z.B.

                grafik.png

                In der Visu dann eine Seite angelegt und einen Anzeigebutton definiert:

                grafik.png

                Leider zeigt mir der Button nichts an. Hast Du einen Tipp, wo bei mir der Knoten in der Logik ist?

                Kommentar


                  #9
                  Prüf mal zuerst, ob überhaupt Daten ankommen. Also im EibStudio in den Debug-Modus umschalten und dann den Ausgang von Stromzaehler_MQTT anklicken. Wenn da was kommt, dann in der Logik Stück für Stück weiterhangeln und die Daten prüfen.

                  Kommentar


                    #10
                    Danke. Der Debugger zeigt mir, dass nichts beim Stromzaehler_MQTT Objekt ankommt.
                    Ich habe im MQTT Client als Hostnamen mqtt://192.168.1.21 definiert, wo bei mir der MQTT Broker läuft (im Screenshot oben stand noch fehlerhaft http://). Ich hoffe, die Syntax stimmt nun. Im Handbuch wird immer mit dem MQTT Broker des EibPCs gearbeitet und entsprechend localhost. Somit fehlt mir ein Beispiel für einen externen MQTT Broker als Hostname.

                    Vielleicht hat ja foobar0815 noch eine Idee, wo mein Problem liegen könnte. Bisher habe ich relativ viele Geräte so eingerichtet, dass sie mit meinem MQTT Broker kommunizieren. Die Verbindung mit dem EibPC wäre jetzt natürlich toll, um beides zu verbinden. Offensichtlich tue ich mich da sehr schwer mit.

                    Kommentar


                      #11
                      Lass auch mal das mqtt:// beim Hostnamen weg und nimm nur die IP.
                      Außerdem kannst du prüfen, was am Ausgang des Mqtt-Client-Knotens anliegt. Das zeigt dir, ob die Verbindung überhaupt besteht.

                      Kommentar


                        #12
                        Zitat von foobar0815 Beitrag anzeigen
                        Lass auch mal das mqtt:// beim Hostnamen weg und nimm nur die IP.
                        Ups, das war es. Einfach, wenn man es weiß. Könnt ihr das bitte mal ins Handbuch aufnehmen? Optional in die Onlinehilfe. Das Beispiel im Handbuch ist mit localhost, sodass ich nicht darauf gekommen bin. Beim MQTT Explorer muss man das mqtt:// ja auch mit angeben.

                        Jetzt kann ich weitertesten. Sehr schön. Vielen Dank auch nochmal an jgerhart

                        Kommentar


                          #13
                          (hat sich erledigt)
                          Zuletzt geändert von skyynet; 10.06.2025, 22:35.

                          Kommentar


                            #14
                            Da es im gleichen Kontext ist, hänge ich mich nochmal an diesen Thread ran. Ich habe jetzt ein zweites Smart Meter für meinen Wärmestom bekommen und ebenfalls einen IR Lesekopf angeschlossen, der die Daten an den MQTT Server schickt. Statt smartmeter/normal/SENSOR liegen die Daten jetzt unter smartmeter/waerme/SENSOR bei sonst identischem JSON Inhalt. Mein Problem: Meine Logik kommt nicht an die Daten.

                            grafik.png

                            Ich habe einen MQTT Client für den Normalstromzähler und einen weiteren für den StromzaehlerWaerme ganz rechts (kann man mehrere MQTT Clients nutzen?)
                            Dieser soll die empfangenen Daten in die Variable StromzaehlerWaerme_MQTT schreiben, die dann per JSON ausgewertet wird.
                            Es kommen aber keine Daten in der Variablen StromzaehlerWaermeMQTT an, wie ich im Debugger sehe.
                            Die Konfiguration ist die gleiche, wie bei meinem Normalstromzähler und die Daten kann ich per MQTT Explorer auf dem MQTT Server sehen.
                            Woran könnte es also liegen?

                            Der Client ist so konfiguriert

                            grafik.png

                            Die Variable dahinter so

                            grafik.png

                            Im MQTT Explorer sieht man, dass die Daten auf dem MQTT Server stehen

                            grafik.png

                            Da ich das ja alles für den Normalstrom identisch am Laufen habe, verstehe ich gerade nicht, woran es liegen könnte.

                            Kommentar


                              #15
                              Könnte es sein, dass die Definition der Variablen StromzaehlerWaerme_MQTT nicht ganz korrekt ist? Bei Verarbeitung hast du "Wert am Ausgang ausgeben" gewählt. Du brauchst die Variable im MQTT Client aber auch schon. Versuch doch mal, die Variable vorab separat anzulegen, und bei Verarbeitung "Nur definieren" zu wählen. Vielleicht hilft das.

                              Kommentar

                              Lädt...
                              X