Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. WebService der einen MQTT Befehl sendet und auf Antwort wartet?

    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

    WebService der einen MQTT Befehl sendet und auf Antwort wartet?

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

      Hallo zusammen,

      ich bin noch nicht so unglaublich tief im Thema drin, habe aber durchaus schon gut was zum laufen gebracht und soviel Zeit investiert, dass ich mir denke "Einmal kurz die Profis fragen ist schon ok.".

      Kurz das vereinfachte Problem: Ich brauche am besten einen MQTT Node welcher einen Eingang hat und einen Ausgang.

      Ich habe ein kleines IoT Szenario mit einer Waage aufgebaut, hier ist eine NodeMcu an der RS232 Schnittstelle, welcher das Gewicht dauerhaft ausliest und in einer temporären Variable speichert (Dieses soll nicht permanent an den MQTT gesendet werden, um den Traffic klein zu halten).

      Wird in der Topic "Waage1_GW" der Befehl "WEIGH" gepublished, dann schreibt die NodeMcu das aktuelle Gewicht in die Topic "Waage1".

      Das ganze möchte ich jetzt als WebService konsumieren. Das habe ich auch schon zum laufen gebracht, aber wie ich finde nicht ganz sauber.

      Wenn ich den WebService aufrufe, dann wird der Befehl in Waage1_GW gesendet. Parallel habe ich einen Flow, der auf die Topic Waage1 lauscht und das Ergebnis in einer Flow Variable speichert:

      flow.set('weight', msg.payload);
      

      Wieder in dem Flow des WebService habe ich nun ein Delay eingebaut (Das finde ich eigentlich nicht schön) und dann lese ich die Variable aus und gebe diese als Response zurück und mache Sie leer, damit beim nächsten mal nicht der alte Wert gefunden wird.

      var x= flow.get('weight');
      flow.set('weight', '');
      msg.payload = x;
      return msg;
      
      

      Theoretisch geht es, ich verliere aber ja Zeit mit dem Delay. Kann ich irgendwie eine Do-While Schleife aufbauen, damit er in der Function wartet, bis das Ergebnis da ist?

      Habe auch schon einen Switch mit "msg.payload is null" und "is not null" eingebaut aber der will auch nicht so recht. Er wartet zwar auf das Ergebnis, aber sendet den HTTP Response einfach sofort.

      Oder hat noch jemand eine bessere Idee? MQTT Node mit Input und Output wäre halt perfekt.

      Danke für eurer HIlfe!

      Gruß Eissbear

      1 Reply Last reply Reply Quote 0
      • R
        rewenode last edited by

        Hi,

        also ehrlich gesagt, hab ich nicht alles verstanden, was du geschrieben hast. Wenn ich es aber richtig interpretiere, brauchst du vlt. eine asynchrone Funktion?

        https://nodered.org/docs/writing-functions

        https://github.com/Raynerv/node-red-contrib-async

        Loopen mit functions-node geht auch. Sollte dann eigentlich auch asynchron sein.

        1 Reply Last reply Reply Quote 0
        • E
          Eissbear last edited by

          Hi rewenode,

          Asynchron klingt erstmal gut. Ich checke das mal nachher.

          Webservice wird aufgerufen

          => Sendet Befehl an MQTT && läuft in einen 1 Sekunden Delay

          => Fragt Variable aus dem Flow Speicher ab

          => füllt den Message Payload

          => sendet HTTP Response

          Parallel läuft ein MQTT Input der die Variable in den Flow Speicher legt, das sollte während des 1 Sekunde Delays passiert sein.

          Gruß Eissbear

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

          Support us

          ioBroker
          Community Adapters
          Donate

          866
          Online

          31.7k
          Users

          79.9k
          Topics

          1.3m
          Posts

          2
          3
          225
          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