Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Datenpunkt MQTT-Client per Skript (de)aktivieren?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Datenpunkt MQTT-Client per Skript (de)aktivieren?

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

      @bananajoe sagte: per Skript aktivieren, oder? Oder deaktivieren?

      const freigabe = true;
      const id = '0_userdata.0.tasmota.EasyMeterHichi.Watt-Summe';
      extendObject(id, {common: {custom: {'sql.0': {enabled: freigabe}}}});
      
      BananaJoe 2 Replies Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @paul53 last edited by

        @paul53 ok, ich teste mal eben, extendObject war mir auf der Hilfeseite noch nicht aufgefallen ( https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#extendObject )

        Hast du auch was für das deaktivieren parat?

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @BananaJoe last edited by paul53

          @bananajoe sagte: für das deaktivieren parat?

          const freigabe = false;
          
          BananaJoe 1 Reply Last reply Reply Quote 0
          • BananaJoe
            BananaJoe Most Active @paul53 last edited by

            @paul53 sagte in Datenpunkt MQTT-Client (oder SQL) per Skript (de)aktivieren?:

            @bananajoe sagte: für das deaktivieren parat?

            const freigabe = false;
            

            [Schlägt sich mit der Hand vor die Stirn]

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

              So, hier die komplette Lösung für mein Problem:

              MQTT-Client mit spezifischen Einstellungen für einen Datenpunkt aktivieren:

              // MQTT-Client für Datenpunkt aktivieren
              const mein_Datenpunkt = "0_userdata.0.000-Testen.Zufallszahlen";
              // const mein_Datenpunkt = "0_userdata.0.000-Testen.Waschmaschine-status";
              extendObject(mein_Datenpunkt, 
                  {common: 
                      {custom: 
                          {'mqtt-client.0': 
                              {
                                  enabled: true,
                                  publish: true,
                                  pubChangesOnly: true,
                                  pubAsObject: false,
                                  qos: false,
                                  retain: false,
                                  subscribe: false,
                                  subChangesOnly: false,
                                  subAsObject: false,
                                  subQos: false,
                                  setAck: false,
                                  topic: "iobroker/Testen/Zufallszahlen"
                              }
                          }
                      }
                  }
              );
              

              Die Parameter einfach auflisten, was es da so Einzustellen gibt kann man sich in den Objektdaten ansehen nachdem man das bei einem Datenpunkt von Hand gemacht hat.

              Prüfen ob der MQTT-Client für einen Datenpunkt aktiviert ist:

              // Prüfen ob MQTT-Client für Datenpunkt aktiv ist:
              const mein_Datenpunkt = "0_userdata.0.000-Testen.Zufallszahlen";
              try {
                  var checkMQTTactive_obj = getObject(mein_Datenpunkt);
                  if (checkMQTTactive_obj.common.hasOwnProperty("custom")) {
                      if (checkMQTTactive_obj.common.custom.hasOwnProperty("mqtt-client.0")) {
                          if (checkMQTTactive_obj.common.custom["mqtt-client.0"].enabled == true) {
                              console.warn("MQTT-Client ist aktiv!");
                          } else {
                              console.warn("MQTT-Client ist nicht aktiv");        
                          }
                      }
                  } else {
                      console.warn("MQTT-Client ist nicht aktiv");
                  }
              } 
              catch (e) {
                  // nichts machen
                  console.warn("Catch-Fehler!");
              }
              

              Da musste ich etwas mehr prüfen. custom existiert ggf. gar nicht, und selbst wenn die MQTT-Client Eigenschaften vorhanden sind kann es immer noch deaktiviert sein.

              MQTT-Client für einen Datenpunkt deaktivieren:

              // MQTT-Client für Datenpunkt deaktivieren
              const mein_Datenpunkt = "0_userdata.0.000-Testen.Zufallszahlen";
              extendObject(mein_Datenpunkt, {common: {custom: {'mqtt-client.0': {enabled: false}}}});
              

              Es wird nur deaktiviert!!! Die Objektdaten bleiben am Datenpunkt vorhanden!
              @ralf-2 wollte in seinem Post den ich oben erwähnt habe diese ganz löschen (aber ohne Erfolg).

              So, vielen Dank an @paul53 , jetzt kann ich wieder mein ganzes Skript für die Geräte umschreiben ... Und die Daumen drücken das es mit dem MQTT-Client performt.
              Ich hatte es erst per MQTT-Broker/Client-Modus, der verliert aber die Verbindung zum MQTT-Broker von Home Assistant wenn ich z.B. 60 Werte in einer Minute sende. Zudem musste ich für Gegenreaktionen die entsprechenden Datenpunkte unterhalb von mqtt.1 noch extra Subscriben.
              Das ist dann mit dem MQTT-Client doch eleganter weil ich einfach die schon vorhandenen Datenpunkte verknüpfen kann und so gar keine Extrabehandlung für den MQTT Weg brauche, ich kann ja sogar auswählen ob die Daten bestätigt oder unbestätigt geschrieben werden.

              R 1 Reply Last reply Reply Quote 0
              • R
                Ralf 2 @BananaJoe last edited by

                @bananajoe sagte in [gelöst] Datenpunkt MQTT-Client per Skript (de)aktivieren?:

                @ralf-2 wollte in seinem Post den ich oben erwähnt habe diese ganz löschen (aber ohne Erfolg).

                Ja, ich wollte die löschen ohne die Adapter erneut zu installieren. Das geht aber nicht.
                Man muss daran denken vor dem entfernen von Adaptern die Einstellungen aus den Datenpunkte zu entfernen.
                Meine Lösung war: Adapter installieren, In den Objekten über Expertenmodus -> mit dem Schraubenschlüssel -> alle Einträge zu deaktivieren. Danach den Adapter wieder entfernen.

                Mit ExtendObject hatte es nicht ohne installiertem Adapter geklappt, aber vielleicht hatte ich es auch falsch gemacht. Wo der Adapter installiert war konnte ich auch den Weg über den Schraubenschlüssel gehen.

                Hattest du keine Möglichkeit die Objekte entsprechend zu filtern und auch mit dem Schraubenschlüssel zu arbeiten?

                BananaJoe 1 Reply Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @Ralf 2 last edited by

                  @ralf-2 sagte in [gelöst] Datenpunkt MQTT-Client per Skript (de)aktivieren?:

                  Hattest du keine Möglichkeit die Objekte entsprechend zu filtern und auch mit dem Schraubenschlüssel zu arbeiten?

                  Ich habe hier ein eigenes Skript für alle meine Tasmota-Geräte (siehe Signatur) welches über MQTT arbeitet. Davon läuft pro Gerät eine eigene Instanz.
                  Nun wollte ich diverse Geräte auch in Home Assistant haben und per MQTT rüberschieben (und dort dann als MQTT Sensor, Switch oder Light). In meinen Skript gibt es da einen Boolean ob Home Assistant eingebunden werden soll. Ich wollte halt gerne das ich das eben nicht von Hand machen muss sondern das es je nach Option ein oder ausgeschaltet wird.

                  Klar, ich könnte Home Assistant auch einfach mit auf den vorhandenen MQTT drauf lassen, das hatte ich sogar schon mal gemacht. Hat mein Smarthome dann im ersten Moment lahmgelegt und ich hätte es gerne doch differenzierter.
                  HA nutze ich nur wegen einige Dinge die ich in deren mobilen App angezeigt haben möchte, insbesondere dem Energiemonitor.
                  Ich werde und will weiter ioBroker nutzen, das ist für mich viel flexibler und nutze nur das aus HA was ich da gerade brauchen kann.

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

                    @paul53 sagte in [gelöst] Datenpunkt MQTT-Client per Skript (de)aktivieren?:

                    @bananajoe sagte: per Skript aktivieren, oder? Oder deaktivieren?

                    const freigabe = true;
                    const id = '0_userdata.0.tasmota.EasyMeterHichi.Watt-Summe';
                    extendObject(id, {common: {custom: {'sql.0': {enabled: freigabe}}}});
                    

                    Ich muss dich noch mal bemühen:
                    In deinem Beispiel ist sql.0 ja fest als Text eingetragen.
                    Wie kann ich das durch eine Variable ersetzen? Also das er den Inhalt der Variablen nimmt und nicht den Namen?
                    Bei den Werten selbst funktioniert das ja ( enabled: freigabe ), wie macht man das für die Wertnamen usw. ?

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

                      @bananajoe

                      const test = 'abc';
                      const test2 = {native: {[test]: 'nurTest'}};
                      
                      BananaJoe 1 Reply Last reply Reply Quote 0
                      • BananaJoe
                        BananaJoe Most Active @ticaki last edited by

                        @ticaki Perfekt, danke!

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        798
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        4
                        12
                        239
                        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