Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. MQTT Keepalive im Skript

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    MQTT Keepalive im Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dan11hh last edited by

      Hallo zusammen,

      ich versuche gerade ein MQTT Keepalive Shell Befehl (mosquitto_pub -h 192.168.179.388 -m '' -t 'R/XXXXX/keepalive') alle 2 Minuten durchzuführen. Wie bekomme ich das hin? Habe schon die neue Funktion Rules entdeckt und dachte ich könne den Befehl einfach in das Shell Exec Fenster kopieren. So einfach geht das aber nicht, oder?

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @dan11hh last edited by

        @dan11hh Mal unabhängig davon, was Du damit erreichen willst ???? - funktionieren mosquitto_pub Befehle auch nur dann auf einer Maschine wenn du die mosquitto-clients auf dieser Maschine installiert hast. Das hat aber nichts mit iobroker zu tun.

        D 1 Reply Last reply Reply Quote 0
        • D
          dan11hh @mickym last edited by

          Hmm ich arbeite immer noch an meinem Problem:

          Die Werte gibt der entsprechende Broker nur raus, wenn ein keepalive veröffentlicht wird.

          "Using the system/0/Serial method
          This is the de-facto method used in earlier versions of this software. Although keepalive was activated by any read request, most people simple requested the system serial as a simple shortcut for doing keep-alive.

          This method is retained for backwards compatibility. As in the past, this causes thousands of items to be forwarded from dbus to MQTT, and is now discouraged.

          To keep notifications running using this method, simply send a read request for the system serial periodically, for example:

          Topic: R/e0ff50a097c0/system/0/Serial
          Payload: empty"

          (Quelle: https://github.com/victronenergy/dbus-mqtt)

          Wie bekomme ich das im ioBroker hin. Irgendwie bin ich zu blöd dafür...

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @dan11hh last edited by mickym

            @dan11hh wie schon gesagt, hängt von Deinem mqtt Broker ab. Wenn du den Adapter als Broker verwendest, musst du halt den Datenpunkt mit Deiner Logikmaschine direkt beschreiben. So wie ich das verstanden habe ist der mqtt Broker in der Cloud. Als den mqtt Adapter als Client konfigurieren und den Datenpunkt mit Deiner Logikmaschine beschreiben.

            D 1 Reply Last reply Reply Quote 0
            • D
              dan11hh @mickym last edited by

              @mickym Ich danke Dir. Ich habe jetzt ein Javascript erstellt, welches regelmäßig aufgerufen wird. Damit funktioniert es jetzt endlich.

              sendTo('mqtt.3', 'sendMessage2Client', {topic:'R/c37239bd10b/system/0/Serial', message: "0"})
              

              Jetzt bekomme ich immer nur Werte mit folgender Zeichenkette:

              {"value": 3.505}
              

              Du weißt doch sicher wie ich nur die Werte hinter dem Doppelpunkt komme, oder? 1000DANK! 😉

              mickym 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @dan11hh last edited by mickym

                @dan11hh
                Ich gehe als mal davon aus, dass Du JavaScript verwendest.
                wenn es dasteht wie gepostet, dann ist ein JSON String.

                var obj= JSON.parse('{"value": 3.505}');
                var wert=obj.value;
                

                Oder kürzer müsste auch gegen:

                
                var wert= JSON.parse('{"value": 3.505}').value;
                
                
                D 1 Reply Last reply Reply Quote 0
                • D
                  dan11hh @mickym last edited by

                  @mickym Cool. Danke, dass Du mir da hilfst. D.h. ich muss ein Skript erstellen, was jedes Objekt einzeln anfasst? Dazu auch dann eigene Objekte erstellen, in die ich schreiben kann? Hatte irgendwie gehofft, dass man den Datentyp irgendwie direkt im Broker ändern kann.Hmm bei ca. 50 Werte ist das etwas Arbeit. Aber dann probiere ich das mal. Schönen Abend!

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @dan11hh last edited by mickym

                    @dan11hh Kommt halt drauf an, was Dich interessiert. Wenn Du mit NodeRed arbeiten würdest, dann hätte ich wahrscheinlich eine fertige Lösung, die Dir dann einzelne Datenpunkte schreibt. Da bräuchtest dann wahrscheinlich, wenn Du nicht so mit mqtt arbeitest, auch den mqtt Adapter nicht und würdest Dir die Werte in einzelne Datenpunkte schreiben.

                    Die Frage ist halt auch, ob Du wirklich die Werte alle einzeln brauchst. Die Übertragung mit JSON ist sehr effizient und wie gesagt mit dem Einzeiler hast Du ja immer schnell Zugriff auf alle Objekteigenschaften.

                    Du musst auch nicht jedes Objekt einzeln anfassen. Normalerweise triggern die Werte bei Aktualisierung oder Änderung.

                    D 1 Reply Last reply Reply Quote 0
                    • D
                      dan11hh @mickym last edited by

                      @mickym Dann muss ich mir mal NodeRed angucken. Bisher habe ich mich da gedrückt. Es geht letztlich um die Spannungen der einzelnen LifePO4 Zellen. Die will ich zwar nicht immer mir angucken müssen, aber zwischendurch drüber gucken schadet nicht. Im Idealfall hätte ich mir über den history Adapter auch noch nen Verlauf mitziehen lassen.

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @dan11hh last edited by mickym

                        @dan11hh wie gesagt musst du nicht, wenn du dieses phantastische Tool nicht nutzen willst.

                        Falls doch, hat’s du sowohl die mqtt Nodes direkt an Board und ich hab einen Subflow gemacht, der - wenn du NodeRed mit dem iobroker nutzt - Dir die Datenpunkte direkt schreibt.

                        https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

                        Siehe Beispiel 6. Inzwischen geht es auch mit Variablen Topics, so dass auch ganze Bäume kein Problem mehr sein sollten..

                        Nachdem aber alles mit dem mqtt-Adapter soweit bereits funktioniert, kannst Du natürlich auch direkt aus dem iobroker die Daten mit NodeRed auslesen und schreiben lassen. Dann solltest du aber mal einen Screenshot von den Datenpunkten machen, die Du Dich interessieren, dann können wir den Flow zusammen entwickeln.

                        Humidor 1 Reply Last reply Reply Quote 0
                        • Humidor
                          Humidor @mickym last edited by Humidor

                          @mickym Hallo, ich stehe vor diesem Thema und möchte mich gerne hier einklinken, auch wenn es schon vor guter Zeit gelöst wurde.

                          Ich bin Java nicht mächtig, dh ich kann Blockly und in Zukunft auch Node-Red.
                          Wäre es ev. sinnvoll Node-Red für den Alive zu verwenden, der Victron arbeitet auch mit Node-Red, ev. eine gute Schnittstelle. Der Mqtt vom Victron ist im ioBroker als Slave drin, die ersten Strukturen werden angelget, auch wenn nicht vollständig?

                          mit welchem Node mache ich diesen Alive, sry, steh da echt noch beim Start und muss noch viel lernen. Danke!

                          Summary (the important bits)
                          To activate keep-alive, send a read request to R/<portal ID>/keepalive. The payload may be blank, or may contain a list of topics of interest. See the next section for details on this.
                          

                          ein reiner "read" request ohne payload, ?

                          mickym 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Humidor last edited by

                            @humidor Mit einer Inject Node kannst Du Nachrichten erzeugen - entweder manuell über den Taster oder dann mit Wiederholung. Mit einer mqtt-Out sendest Du dann diese payload an das keepalive topic.

                            Humidor 1 Reply Last reply Reply Quote 0
                            • Humidor
                              Humidor @mickym last edited by Humidor

                              @mickym mache ich schon, leider kommt nichts daher vom Cerbo....
                              Zugriffsrechte?
                              Bildschirmfoto 2024-02-02 um 11.20.47.png Bildschirmfoto 2024-02-02 um 11.21.13.png Bildschirmfoto 2024-02-02 um 11.50.23.png Bildschirmfoto 2024-02-02 um 11.50.37.png Bildschirmfoto 2024-02-02 um 13.40.43.png Bildschirmfoto 2024-02-02 um 13.40.53.png Bildschirmfoto 2024-02-02 um 13.40.57.png Bildschirmfoto 2024-02-02 um 13.41.05.png

                              mickym 1 Reply Last reply Reply Quote 0
                              • mickym
                                mickym Most Active @Humidor last edited by

                                @humidor Na wenn Du eine leere payload schickst, kommt ja auch nichts (übrigens immer mit / die topics voneinander trennen) - es dient ja lediglich dazu zu zeigen, dass die Verbindung noch aktiv ist. Wenn also (null) drinsteht, dann ist das eine leere payload. Alternativ steht ja kann man dem Teil eine Liste auf topics schicken. Ich kann somit keine Fehler erst mal entdecken.

                                Wenn Du willst dass dauernd alles veröffentlicht wird, dann solltest Du wohl besser die Methode a verwenden:

                                7f65e606-cf44-4aeb-88cb-d3ee65cba09d-image.png

                                Humidor 1 Reply Last reply Reply Quote 0
                                • Humidor
                                  Humidor @mickym last edited by

                                  @mickym es funktioniert jetzt mit serial beschreiben, der Objektbaum is riesig.

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @Humidor last edited by

                                    @humidor Ja steht ja in der Beschreibung - dass dann immer alles gepublished wird. Wenn man nur einzelne topics haben will, dass muss man das wie beschrieben halt in das keepalive topic schreiben.

                                    Humidor 1 Reply Last reply Reply Quote 0
                                    • Humidor
                                      Humidor @mickym last edited by

                                      @mickym schon klar, wie ich einzelne abrufe weiß ich noch nicht, muss noch rausfinden

                                      mickym 1 Reply Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @Humidor last edited by

                                        @humidor sagte in MQTT Keepalive im Skript:

                                        @mickym schon klar, wie ich einzelne abrufe weiß ich noch nicht, muss noch rausfinden

                                        Na das steht doch weiter unten:

                                        c49c4f20-f242-432b-8d57-6ba6f9095334-image.png

                                        In das keepalive kannst ein Array mitgeben, mit einzelnen topics oder sogar mit Wildcards welche Äste.

                                        Humidor mickym 2 Replies Last reply Reply Quote 0
                                        • Humidor
                                          Humidor @mickym last edited by

                                          @mickym das ist sehr schön, dass es da steht, wie setzt man es um, ich bin kein programmierer.... und das wird ja nicht gesagt, das muss man wieder rausfinden 😉

                                          1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @mickym last edited by mickym

                                            @mickym Um das in dem Beispiel benutzte Array zu verwenden gibst du das ArrAY

                                            @humidor sagte in MQTT Keepalive im Skript:

                                            @mickym das ist sehr schön, dass es da steht, wie setzt man es um, ich bin kein programmierer.... und das wird ja nicht gesagt, das muss man wieder rausfinden 😉

                                            Na um das unten gesagte Array zu senden modifizierst Du nur deine Inject NOde.

                                            c0c1e4e7-b124-414a-a291-fe42cbbc51d3-image.png

                                            1c8b9828-e87a-40fe-ba61-641b2216a816-image.png

                                            Hier die Inject Node zum Import:

                                            [
                                               {
                                                   "id": "1dd9175a09c34086",
                                                   "type": "inject",
                                                   "z": "7e6af0015415146d",
                                                   "name": "",
                                                   "props": [
                                                       {
                                                           "p": "payload"
                                                       }
                                                   ],
                                                   "repeat": "",
                                                   "crontab": "",
                                                   "once": false,
                                                   "onceDelay": 0.1,
                                                   "topic": "",
                                                   "payload": "[\"vebus/#\",\"solarcharger/+/Dc/0/Voltage\"]",
                                                   "payloadType": "json",
                                                   "x": 490,
                                                   "y": 3960,
                                                   "wires": [
                                                       []
                                                   ]
                                               }
                                            ]
                                            

                                            und sendest das dann an den keepalive topic.

                                            So kannst Du einzelne topics häufiger abfragen und andere weniger häufig.

                                            Humidor 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            911
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            49
                                            2257
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo