Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Verschwinden von MQTT Geräten erkennen und melden

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Verschwinden von MQTT Geräten erkennen und melden

    This topic has been deleted. Only users with topic management privileges can see it.
    • MartinP
      MartinP @guergen last edited by MartinP

      @guergen Falls es die Möglichkeit der Abfrage von "connected" bzw. "is online" gibt, wäre das die naheliegenste Lösung ...

      Das hier habe ich schon mal mit den Stichworten von Dir gefunden:
      https://stackoverflow.com/questions/36093078/mqtt-is-there-a-way-to-check-if-the-client-is-still-connected

      1 Reply Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @MartinP last edited by Marc Berg

        @martinp
        Ich verstehe nicht, warum du den Umweg über MQTT gehen willst. Wenn, wie du schreibst, das Gerät aus dem WLAN fliegt, wird es wohl auch nicht mehr per Ping erreichbar sein. Und dafür gibt es ja Adapter, die das erkennen und melden.

        Edit: Ansonsten gibt es für deinen Anwendungsfall das MQTT Feature "LWT" (Last will and testament). Das muss aber vom Broker und Client unterstützt werden. Dann wird beim unerwarteten Disconnect vom Broker eine Nachricht gesendet.

        1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer last edited by ticaki

          Ich checke meine Datenpunkte auf Veränderung... Wenn die Temperatur meines Boilers sich nicht alle 45 Minuten aktualisiert, gibts ne Telegramnachricht. Wichtiger Sensor, der Ausfall der anderen ist zwar nervig, aber da muß ich wenigstens nicht kalt duschen. 🙂

          hm-rpc mit dem aktuellen Sentrybug bleibt "connected" obwohl keine Daten mehr reinkommen.

          MartinP 1 Reply Last reply Reply Quote 0
          • MartinP
            MartinP @ticaki last edited by MartinP

            @ticaki Danke für den Tipp.

            Habe den ersten Schritt getan. Es scheint leider so zu sein, dass man direkt am MQTT-Datenpunkt-Baum des Geräts keinen User-Datenpunkt erzeugen kann ( "+" ist ausgegraut)

            Habe den Punkt "ArbeitszimmerThermostatAlive" nun unter Userdata erzeugt ...

            Die Raumtemperatur wird, wenn alles funktioniert, alle 10 Sekunden in den entsprechenden MQTT-Datenpunkt geschrieben. Das untenstehende Blockly setzt "ArbeitszimmerThermostatAlive" auf false, wenn 30 Sekunden keine Aktualisierung erfolgt...

            aa244bf3-60bb-4840-8b11-e4a4c5676699-grafik.png

            Der Userdata Datenpunkt "ArbeitszimmerThermostatAlive" soll dann wiederum weitere Aktionen auslösen.

            Wechsel auf "false" -> Alarmierung (Telegram oder Mail)
            Wechsel auf "true" -> Je nach aktueller Uhrzeit Setzen der Solltemperatur auf Solltemperatur-Tag bzw -Nacht....

            Anmerkung: Ich muss wahrscheinlich dringend an der Benennung von Elementen arbeiten. Die Benennungen sind ggfs. so generisch, dass es schwierig werden könnte nach dem Muster meines Arbeitszimmer-Thermostats noch weitere Thermostaten zu bauen und in ioBroker zu integrieren ...

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

              @martinp sagte in Verschwinden von MQTT Geräten erkennen und melden:

              Habe den ersten Schritt getan. Es scheint leider so zu sein, dass man direkt am MQTT-Datenpunkt-Baum des Geräts keinen User-Datenpunkt erzeugen kann ( "+" ist ausgegraut)

              Kann man schon, dann gehst Du so lange noch oben bis das + wieder auftaucht und gibst den Pfad von da mit einem Punkt an. Das ist leider so ein Mist vom Admin 5 - dass der immer meint bestimmen zu können, wo etwas erstellt werden darf und man mqtt von diesen Regeln nicht ausnimmt.

              MartinP 1 Reply Last reply Reply Quote 1
              • MartinP
                MartinP @mickym last edited by

                @mickym Habe da gerade mal ein wenig herumgeklickt: Alle Knoten inclusive dem MQTT-Knoten selber haben ein ausgegrautes "+".

                Nur unter "0_userdata.0" und "alias.0" kann ich etwas anlegen...

                "alias" klingt ja ggfs. recht vielversprechend - vielleicht mal etwas einlesen in die Philosopie dahinter ...

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

                  @martinp Du musst den Expertenmodus anmachen.

                  8a8fed4c-ec9a-40b2-8012-8696d1d8723c-image.png

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

                    @mickym Okay, der schwarze Indianer ist der Expertenmodus, wieder was gelernt 😉

                    Dann kann ich sogar direkt im Thermostat-Knoten neue Datenpunkte erzeugen...

                    02ea3371-2ace-40ba-a4a6-2296120d6f5c-grafik.png

                    MartinP Ro75 2 Replies Last reply Reply Quote 0
                    • MartinP
                      MartinP @MartinP last edited by

                      Noch eine Frage, die mit dem Thema zu tun hat: Gibt es in Blockly so eine Art "Templates"?

                      Wenn ich das Blockly-Skript, was den "IsAlive" Zustand in den MQTT-Pfad eines Gerätes in einen angelegten Knoten unterhalb dieses Pfades schreiben will nicht durch COPY&Paste erzeugen möchte ...

                      Es gäbe z. B.
                      system.adapter.mqtt.0.thermostat
                      system.adapter.mqtt.0.thermostat_2
                      system.adapter.mqtt.0.thermostat_3
                      system.adapter.mqtt.0.thermostat_4

                      wenn jeweils die raumtemperatur für die timeout-zeit nicht aktualisiert wird, soll der darunterliegende IsAlive Knoten auf false gesetzt werden.

                      Man kann natürlich zuerst das Skript für ...thermostat basteln, und dann durch copy&paste des ganzes skripts kopien erstellen in denen man jeweils thermostat durch thermostat_2 etc. ersetzt, aber das heißt, man hat bei jeder Änderung vier Stellen, an denen man anfassen muss, und das ist mühselig und fehleranfällig ...

                      Wahrscheinlich ist aber Blockly dazu nicht vorgesehen, und man wird auf Lösungen per Javascript gehen müssen ...

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

                        @martinp sagte in Verschwinden von MQTT Geräten erkennen und melden:

                        Dann kann ich sogar direkt im Thermostat-Knoten neue Datenpunkte erzeugen...

                        Keine gute Idee. Diese Daten sind "vergänglich". Für eigene Datenpunkte inklusive Verzeichnisse bitte "0_userdata.0." verwenden.

                        Ro75.

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

                          @martinp sagte in Verschwinden von MQTT Geräten erkennen und melden:

                          Wenn ich das Blockly-Skript, was den "IsAlive" Zustand in den MQTT-Pfad eines Gerätes in einen angelegten Knoten unterhalb dieses Pfades schreiben will nicht durch COPY&Paste erzeugen möchte ...

                          Du kannst statt die Datenpunkte manuell anzulegen auch über das SendTo Puzzleteil an den Mqtt-Adapter die Werte publishen. Alle veröffentlichen topics werden dann automatisch als Datenpunkte angelegt.

                          7b4570d5-09d8-45d9-b39c-3a3c66753ad5-image.png

                          Statt fixer Werte kannst du natürlich auch Variablen verwenden etc.

                          <xml xmlns="https://developers.google.com/blockly/xml">
                           <block type="sendto_custom" id="ls8@a?b_FZd{/PwZ%,li" x="-537" y="38">
                             <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation>
                             <field name="INSTANCE">mqtt.1</field>
                             <field name="COMMAND">sendMessage2Client</field>
                             <field name="LOG"></field>
                             <field name="WITH_STATEMENT">FALSE</field>
                             <value name="ARG0">
                               <shadow type="text" id="$,O^*f*}($?[H8_(d*+U">
                                 <field name="TEXT">thermostat1/isAlive</field>
                               </shadow>
                             </value>
                             <value name="ARG1">
                               <shadow type="text" id="kYzE4%b}Px*fTaC#_m53">
                                 <field name="TEXT">Meine Nachricht</field>
                               </shadow>
                               <block type="logic_boolean" id="#^)Qo*Dc+?;*v.HB%8Q$">
                                 <field name="BOOL">TRUE</field>
                               </block>
                             </value>
                           </block>
                          </xml>
                          

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

                            @ro75 sagte in Verschwinden von MQTT Geräten erkennen und melden:

                            @martinp sagte in Verschwinden von MQTT Geräten erkennen und melden:

                            Dann kann ich sogar direkt im Thermostat-Knoten neue Datenpunkte erzeugen...

                            Keine gute Idee. Diese Daten sind "vergänglich". Für eigene Datenpunkte inklusive Verzeichnisse bitte "0_userdata.0." verwenden.

                            Ro75.

                            Na ja - im MQTT generell gebe ich Dir Recht, dass sobald alle Subscriber informiert werden sollten, die Daten wieder aufgeräumt werden sollten. Im MQTT-Adapter jedoch nicht - was sogar eigentlich ein Problem darstellt. Deswegen kommt der Adapter auch mit dem retained Flag nicht so klar und alle Daten bleiben eigentlich bis ULTIMO vorhanden, bis sie manuell gelöscht werden. Ansonsten ist ein aber ein MQTT-Broker bei Veröffentlichen von Daten mit retained Flag durchaus ein valider Datenspeicher - das ist aber eher allgemein zu sehen und ist nicht iobroker spezifisch.

                            1 Reply Last reply Reply Quote 1
                            • MartinP
                              MartinP @mickym last edited by MartinP

                              @mickym said in Verschwinden von MQTT Geräten erkennen und melden:

                              @martinp sagte in Verschwinden von MQTT Geräten erkennen und melden:

                              Wenn ich das Blockly-Skript, was den "IsAlive" Zustand in den MQTT-Pfad eines Gerätes in einen angelegten Knoten unterhalb dieses Pfades schreiben will nicht durch COPY&Paste erzeugen möchte ...

                              Du kannst statt die Datenpunkte manuell anzulegen auch über das SendTo Puzzleteil an den Mqtt-Adapter die Werte publishen. Alle veröffentlichen topics werden dann automatisch als Datenpunkte angelegt.

                              7b4570d5-09d8-45d9-b39c-3a3c66753ad5-image.png

                              Statt fixer Werte kannst du natürlich auch Variablen verwenden etc.

                              <xml xmlns="https://developers.google.com/blockly/xml">
                               <block type="sendto_custom" id="ls8@a?b_FZd{/PwZ%,li" x="-537" y="38">
                                 <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation>
                                 <field name="INSTANCE">mqtt.1</field>
                                 <field name="COMMAND">sendMessage2Client</field>
                                 <field name="LOG"></field>
                                 <field name="WITH_STATEMENT">FALSE</field>
                                 <value name="ARG0">
                                   <shadow type="text" id="$,O^*f*}($?[H8_(d*+U">
                                     <field name="TEXT">thermostat1/isAlive</field>
                                   </shadow>
                                 </value>
                                 <value name="ARG1">
                                   <shadow type="text" id="kYzE4%b}Px*fTaC#_m53">
                                     <field name="TEXT">Meine Nachricht</field>
                                   </shadow>
                                   <block type="logic_boolean" id="#^)Qo*Dc+?;*v.HB%8Q$">
                                     <field name="BOOL">TRUE</field>
                                   </block>
                                 </value>
                               </block>
                              </xml>
                              

                              Ich meinte das etwas anders - wenn jetzt ein Thermostat dazu kommt, muss man das Blockly Skript aus Deinem Beispiel kopieren, und in der Kopie z. B. "Thermostat1" durch "Thermostat2" ersetzen...
                              Wenn man dann 6 Thermostate hat, und etwas in der Logik des Blockly Skriptes ändert, muss man immer daran denken, auch die entsprechenden Änderungen in den 5 Kopien nachzuziehen....

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

                                @martinp Nein das sagte ich doch, Du kannst Doch das ganze in eine Schleife einbinden und über ein Array durchiterieren.Oder Du triggerst direkt über den Thermostat oder abfragst. Wie gesagt welche Logik zum Abfragen du nimmst oder triggern ist Deine Sache.

                                Aber so kannst Du einfach eine Liste von Thermostaten erstellen und alle topics erstellem_

                                af2fba55-1906-4ff1-bcb6-33c41440783a-image.png

                                <xml xmlns="https://developers.google.com/blockly/xml">
                                 <variables>
                                   <variable id="nu$N7|=f+vnO8RVm:cym">Liste_Thermostate</variable>
                                   <variable id="JW8gktT*}~bRUd6MfH#u">Thermostat</variable>
                                 </variables>
                                 <block type="variables_set" id="hK7EI~VB@!#$5jf,=)lr" x="-587" y="-112">
                                   <field name="VAR" id="nu$N7|=f+vnO8RVm:cym">Liste_Thermostate</field>
                                   <value name="VALUE">
                                     <block type="lists_create_with" id="apI:3%H0NG=t+k`}/0LA">
                                       <mutation items="3"></mutation>
                                       <value name="ADD0">
                                         <block type="text" id="p%1gC:]`|DHfy{KP7JQf">
                                           <field name="TEXT">thermostat_1</field>
                                         </block>
                                       </value>
                                       <value name="ADD1">
                                         <block type="text" id="pNnv)I]Eq3==EBw;hK}d">
                                           <field name="TEXT">thermostat_2</field>
                                         </block>
                                       </value>
                                       <value name="ADD2">
                                         <block type="text" id="H{[NPCBKq05V;rK-40,2">
                                           <field name="TEXT">thermostat_3</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="controls_forEach" id="g5T}i9pUy1C0p3vha+5z">
                                       <field name="VAR" id="JW8gktT*}~bRUd6MfH#u">Thermostat</field>
                                       <value name="LIST">
                                         <block type="variables_get" id="xbe)qBW[jl?dmaR.[:Ny">
                                           <field name="VAR" id="nu$N7|=f+vnO8RVm:cym">Liste_Thermostate</field>
                                         </block>
                                       </value>
                                       <statement name="DO">
                                         <block type="sendto_custom" id="ls8@a?b_FZd{/PwZ%,li">
                                           <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation>
                                           <field name="INSTANCE">mqtt.1</field>
                                           <field name="COMMAND">sendMessage2Client</field>
                                           <field name="LOG"></field>
                                           <field name="WITH_STATEMENT">FALSE</field>
                                           <value name="ARG0">
                                             <shadow type="text" id="$,O^*f*}($?[H8_(d*+U">
                                               <field name="TEXT">thermostat1/isAlive</field>
                                             </shadow>
                                             <block type="text_join" id="O6E{W{#l(2VcnvqOe|Rl">
                                               <mutation items="2"></mutation>
                                               <value name="ADD0">
                                                 <block type="variables_get" id="AzpRo(og/GD94mdngxQF">
                                                   <field name="VAR" id="JW8gktT*}~bRUd6MfH#u">Thermostat</field>
                                                 </block>
                                               </value>
                                               <value name="ADD1">
                                                 <block type="text" id="VB)a`Lf$skQC8CWbgCS_">
                                                   <field name="TEXT">/isAlive</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                           <value name="ARG1">
                                             <shadow type="text" id="kYzE4%b}Px*fTaC#_m53">
                                               <field name="TEXT">Meine Nachricht</field>
                                             </shadow>
                                             <block type="logic_boolean" id="#^)Qo*Dc+?;*v.HB%8Q$">
                                               <field name="BOOL">TRUE</field>
                                             </block>
                                           </value>
                                         </block>
                                       </statement>
                                     </block>
                                   </next>
                                 </block>
                                </xml>
                                

                                das sind aber Basics beim Puzzeln (Geht aber auch mit steuere oder aktualisiere von Datenpunkten). Wie gesagt das sind Basics, dass man identische Codeteile über Schleifen durchläuft. Und wer mich kennt, weiss, dass ich ein anderes Tool bevorzuge - das sogar direkt mit mqtt kommunizieren kann. 😉

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                877
                                Online

                                31.7k
                                Users

                                79.8k
                                Topics

                                1.3m
                                Posts

                                6
                                16
                                415
                                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