logo elektroda
logo elektroda
X
logo elektroda

[Gelöst] OpenBeken und NodeRed: Code für Function-Node schreiben, um OpenBeken Config Payload

erhardfalkenberg 939 7
WERBUNG
  • #1 20817439
    erhardfalkenberg
    Niveau 4  
    Schreibe Code für einen nodered Funktionsknoten, um die openbeken config payload in einzelne Nachrichten aufzuteilen.
  • WERBUNG
  • #2 20822550
    xury
    Spezialist Hausautomatisierung
    Stelle ein Beispiel-payload ein, dann kann ich vielleicht helfen.
  • WERBUNG
  • #3 20823579
    erhardfalkenberg
    Niveau 4  
    Das wäre sehr nett:
    Beispiel:
    {
      "dev": {
        "ids": [
          "Pow_187"
        ],
        "name": "Pow_187",
        "sw": "1.17.293",
        "mf": "Beken Corporation",
        "mdl": "BK7231N",
        "cu": "http://192.168.178.187/index"
      },
      "name": "voltage",
      "~": "pow_187",
      "avty_t": "~/connected",
      "uniq_id": "Pow_187_sensor_0",
      "qos": 1,
      "dev_cla": "voltage",
      "unit_of_meas": "V",
      "stat_t": "~/voltage/get",
      "stat_cla": "measurement"
    }

    @ElektrodaBot
  • #4 20823583
    ElektrodaBot
    KI von OpenAI ChatGPT4
    erhardfalkenberg hat geschrieben:
    (...) ation",
    "mdl": "BK7231N",
    "cu": "http://192.168.178.187/index"
    },
    "name": "voltage",
    "~": "pow_187",
    "avty_t": "~/connected",
    "uniq_id": "Pow_187_sensor_0",
    "qos": 1,
    "dev_cla": "voltage",
    "unit_of_meas": "V",
    "stat_t": "~/voltage/get",
    "stat_cla": "measurement"
    }
    Hallo,

    es scheint, als hättest du ein JSON-Konfigurationsbeispiel für ein Smart-Gerät gepostet, das im Internet der Dinge (IoT) verwendet wird. Dies kann Teil einer Home-Assistant-Konfiguration oder einer ähnlichen Smart-Home-Plattform sein. Das JSON-Objekt definiert ein Gerät mit verschiedenen Attributen wie Geräte-ID, Softwareversion, Hersteller, Modell und Steuerung-URL. Zusätzlich wird ein Sensor für die Spannung ("voltage") definiert, einschließlich Topics für MQTT wie Verfügbarkeits-Topic, State Topic und die Einheit der Messung.
  • #5 20823590
    erhardfalkenberg
    Niveau 4  
    Kann nodered diese payload in einer Funktion zerlegen und die topics ausgeben?
  • WERBUNG
  • #6 20824613
    erhardfalkenberg
    Niveau 4  
    Das wäre sehr nett:
    Beispiel:
    {
      "dev": {
        "ids": [
          "Pow_187"
        ],
        "name": "Pow_187",
        "sw": "1.17.293",
        "mf": "Beken Corporation",
        "mdl": "BK7231N",
        "cu": "http://192.168.178.187/index"
      },
      "name": "voltage",
      "~": "pow_187",
      "avty_t": "~/connected",
      "uniq_id": "Pow_187_sensor_0",
      "qos": 1,
      "dev_cla": "voltage",
      "unit_of_meas": "V",
      "stat_t": "~/voltage/get",
      "stat_cla": "measurement"
    }
    @ElektrodaBot

    Added after 2 [minutes]:

    // Get the input JSON payload from the message
    var inputPayload = msg.payload;
    
    // Check if the payload is an array
    if (Array.isArray(inputPayload)) {
        // If it's an array, split it into individual messages
        for (var i = 0; i < inputPayload.length; i++) {
            // Create a new message for each element in the array
            var newMsg = {
                payload: inputPayload[i]
            };
    
            // Send the new message to the appropriate output
            if (i < node.outputs) {
                // Send to the corresponding output if available
                node.send([newMsg, null]);
            } else {
                // If there are more elements than outputs, send the remaining elements to the last output
                node.send([null, newMsg]);
            }
        }
    } else {
        // If the payload is not an array, just pass it through
        node.send([msg, null]);
    }
    
    return null; // Return null to end the function node[/i]
  • WERBUNG
  • #7 20824620
    erhardfalkenberg
    Niveau 4  
    See code above: done by chatgpt 3.5 as chrome extension.
    that is a handy way obviously.

    Moderiert von Felini:

    3.1.13. Veröffentlichung von Beiträgen, die gegen die Rechtschreibregeln der deutschen Sprache verstoßen.

  • #8 20824621
    ElektrodaBot
    KI von OpenAI ChatGPT4
    erhardfalkenberg hat geschrieben:
    (...) If there are more elements than outputs, send the remaining elements to the last output
    node.send([null, newMsg]);
    }
    }
    } else {
    // If the payload is not an array, just pass it through
    node.send([msg, null]);
    }

    return null; // Return null to end the function node
    Es sieht so aus, als hättest du gerade einen JavaScript-Code für Node-RED geteilt, der eine eingehende Nachricht verarbeitet. Der Code überprüft, ob die eingehende Payload ein Array ist. Wenn ja, wird jedes Element des Arrays in eine separate Nachricht aufgeteilt und an die entsprechenden Ausgänge weitergeleitet. Wenn es mehr Array-Elemente als Ausgänge gibt, werden die zusätzlichen Nachrichten alle zum letzten Ausgang gesendet. Wenn die eingehende Payload kein Array ist, wird die Nachricht unverändert durchgelassen.

    Beachte aber, dass der Code in deiner Nachricht einige Fehler enthält. Insbesondere in den Zeilen, in denen du `node.send([newMsg, null]);` und `node.send([null, newMsg]);` aufrufst, sieht es so aus, als wolltest du die Nachrichten an verschiedene Ausgänge senden, aber der Code macht dies nicht korrekt.

    Hier ist eine korrigierte Version des Codes, die dynamisch Nachrichtenobjekte erzeugt und sie an den entsprechenden Ausgang sendet, nachdem überprüft wurde, ob die Payload ein Array ist:

    Code: Javascript
    Melde dich an, um den Code zu sehen


    In diesem Code wird davon ausgegangen, dass dein Node-RED-Knoten mehrere Ausgänge hat (`node.outputs`). Jedes Element des Arrays wird an den entsprechenden Ausgang gesendet, und wenn es mehr Elemente als Ausgänge gibt, werden nur so viele Elemente gesendet, wie Ausgänge zur Verfügung stehen.

    Bitte stelle sicher, dass dieser Code in deiner Node-RED-Umgebung korrekt funktioniert, da die Umgebungen unterschiedlich konfiguriert sein können. Wenn du weitere Unterstützung benötigst, lass es mich wissen!

Themenzusammenfassung

In der Diskussion wird ein Beispiel für eine JSON-Konfiguration eines Smart-Geräts vorgestellt, das mit OpenBeken und Node-RED verwendet wird. Der Benutzer fragt nach einem Code für einen Node-RED Funktionsknoten, um die OpenBeken-Konfigurationspayload in einzelne Nachrichten aufzuteilen. Es wird ein Beispielpayload bereitgestellt, das verschiedene Attribute wie Geräte-ID, Softwareversion, Hersteller, Modell und Steuerungs-URL enthält. Die Teilnehmer diskutieren, ob Node-RED diese Payload in einer Funktion zerlegen und die entsprechenden MQTT-Topics ausgeben kann. Ein JavaScript-Code wird geteilt, der die eingehende Nachricht verarbeitet und die Payload in separate Nachrichten aufteilt, wobei einige Korrekturen an dem ursprünglichen Code vorgeschlagen werden.
Vom Sprachmodell generierte Zusammenfassung.
WERBUNG