Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. MQTT-Befehl und Status in demselben Objekt

    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

    MQTT-Befehl und Status in demselben Objekt

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

      Hallo alle,

      Bitte brauche ich deine Hilfe mit einem MQTT-Objekt, wo ich nicht in der Lage bin ein Objekt mit Befehls- und Statusthemen zu erstellen.

      Zum Beispiel habe ich ein Thema für ein Relais: Cmnd/Relais und ich habe die Zustände dieses Relais, das ist Stat/Relais. Ich bin in der Lage, das Relais über iobroker zu steuern, normalerweise unter Verwendung des Befehls topic (cmnd/relay), und den Status dieses Relais in einem anderen Objekt (stat/relay) zu sehen. aber wie ich beide Themen in einem Objekt zusammenführen kann, damit ich den Status dieses Objekts senden und abrufen kann.

      Vielen Dank im Voraus.

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

        @ehanna:

        aber wie ich beide Themen in einem Objekt zusammenführen kann, damit ich den Status dieses Objekts senden und abrufen kann.

        Dafür kann ein zusätzlicher Datenpunkt (unter javascript.0) dienen, der Senden und Empfangen zusammenführt und ein Script.

        const idCmd = '...';  // Datenpunkt-ID für Kommando
        const idStat = '...'; // Datenpunkt-ID für Status
        const idVis = 'MQTT.Relais1'; // Datenpunkt für gleichzeitige Anzeige / Bedienung
        const js = 'system.adapter.javascript.' + instance;
        
        createState(idVis, getState(idStat).val, {type: 'boolean'}); // Datenpunkt erzeugen
        
        on({id: idVis, change: 'ne', fromNe: js}, function(dp) {
           setState(idCmd, dp.state.val);
        });
        
        on(idStat, function(dp) {
           setState(idVis, dp.state.val, true);
        });
        
        1 Reply Last reply Reply Quote 0
        • E
          ehanna last edited by

          Danke Paul.

          Und in diesem Fall welches Objekt sollte ich in der iobroker vis Taste zuweisen?

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

            @ehanna:

            welches Objekt sollte ich in der iobroker vis Taste zuweisen? `
            Wenn du den Namen so übernimmst: "javascript.0.MQTT.Relais1".

            1 Reply Last reply Reply Quote 0
            • H
              hr1311 last edited by

              Ich bin neu hier und noch blutiger IOBroker Anfänger. Programmierkenntnisse habe ich aber ausreichend.

              Ich habe dein Skript ausprobiert und zuerst hat es auch wunderbar funktioniert.

              Als ich nun eine neue ioBroker Installation aufsetzen musste bringe ich es dort einfach nicht mehr ans laufen.

              Irgendwie scheint der Subscribe auf den erstellten Datenpunkt nicht zu funktionieren. Selbst ein einfaches Log oder ein Subscribe ohne Pattern funktioniert nicht.

              Das Skript sieht wie folgt aus:

              const idCmd = 'MQTT.Mobil.Sonoff-Socket.PowerCmnd'; // Datenpunkt-ID für Kommando

              const idStat = 'MQTT.Mobil.Sonoff-Socket.PowerStatus'; // Datenpunkt-ID für Status

              const idVis = 'MQTT.Sonoff-Socket.Power'; // Datenpunkt für gleichzeitige Anzeige / Bedienung

              const js = 'system.adapter.javascript.' + instance;

              createState(idVis, getState(idStat).val=="ON"?true:false, {type: 'boolean'}); // Datenpunkt erzeugen

              on({id: idVis, change: 'ne', fromNe: js}, function(dp) {

              console.log("Send command");

              setState(idCmd, dp.state.val?"ON":"OFF");

              });

              on(idStat, function(dp) {

              console.log("Status changed");

              setState(idVis, dp.state.val=="ON"?true:false, true);

              });

              Das ändern des Datenpunktes über den MQTT Status funktioniert, nur wenn ich den Wert des Datenpunktes ändere, tut sich gar nichts.

              Eine Idee woran das liegen könnte?

              Danke im Voraus.

              1 Reply Last reply Reply Quote 0
              • SwedishChef
                SwedishChef last edited by

                Probiere es damit:

                const idCmd = 'MQTT.Mobil.Sonoff-Socket.PowerCmnd'; // Datenpunkt-ID für Kommando
                const idStat = 'MQTT.Mobil.Sonoff-Socket.PowerStatus'; // Datenpunkt-ID für Status
                const id = 'MQTT.Sonoff-Socket.Power'; // Datenpunkt für gleichzeitige Anzeige / Bedienung
                const js = 'javascript.' + instance;
                const idVis = js + '.' + id;
                
                var state = (getState(idStat).val == "ON");
                createState(id, state, {type: 'boolean'}); // Datenpunkt erzeugen
                setState(idVis, state, true);  // beim starten setzen
                ...
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate
                FAQ Cloud / IOT
                HowTo: Node.js-Update
                HowTo: Backup/Restore
                Downloads
                BLOG

                794
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                4
                6
                2258
                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