Node-red & homeeAPI - cleverer Weg globaler Kontext Werte auslesen?

Moin,

vielleicht ists voll die basic Frage, ich hab jetzt aber ewig gesucht und dazu nichts gefunden:

Gibts einen cleveren Weg, über den globalen Kontext in node red mir ein paar Werte meiner Geräte auszulesen, ohne dass ich mit der Schleife durch die ganzen Arrays durchgehen muss und auf die IDs prüfe?

Anwendungsfall: Ich will mir für eine Lüftungssteuerung meiner Garage von 2 Geräten (Eltakto Feuchtemesser + Netatmo Außenstation) beim Starten des Flows die aktuelle Temperatur + Luftfeuchtigkeit aus homee auslesen, um damit dann die absolute Luftfeuchtigkeit in der Garage und außen zu berechnen und abhängig davon halt das Garagentor zu lüften.

Aktualisierungen kann ich ja recht easy über den homeeAPI Knoten und Filter auf die entsprechenden nodeids bekommen und mir an meine function weiterleiten. Aber die Initialwerte (z.B. wenn ich den Flow neu deploye) - die muss ich mir ja aus dem globalen Kontext laden. Aber da steht ja alles drin und die array ids haben ja null gemeinsam mit den node-ids und den attribute ids.

Konkretes Beispiel: meine aktuelle Netatmo Außensensor Temperatur steht aktuell im unter global.get(„homee.nodes[12].attributes[0].current_value“);

Aber wie komm ich jetzt am clevestern drauf, dass ich GENAU die Werte brauche (nodes12 und attributes 0? Klar, ich brauch die Stelle wo id:106 / node_id:17 ist - aber was zu finden? Oder ist da best practice stupide durchs Array zu suchen? Fairerweise kann ich natürlich auch einfach ins attribute array gehen, da spare ich mir zumindest den node-Wert zu suchen. Aber auch da brauch ich dann den Index von dem Attribut mit id:106 und node_id:17

Oder ändern sich diese Indexes nie und ich kann die einfach hartcodieren? Kann ich mir ja fast nicht vorstellen…

Danke und Grüße

Schau dir mal das hier an.

Dort findest du deine Geräte und alle entsprechenden ID’s.

In Node Red kannst du deine Werte aus dem globalen Kontext auslesen und so verwenden wie du magst.

var x = global.get('homee').attributes.find( a=> a.id === XXX ).current_value 
[
    {
        "id": "78baf0202903c917",
        "type": "function",
        "z": "b28da1c56fe82918",
        "name": "function 18",
        "func": "var x = global.get('homee').attributes.find(a => a.id === 4974).current_value;\nmsg = {payload:x};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 310,
        "y": 320,
        "wires": [
            [
                "b1cd9abaaded5a79"
            ]
        ]
    },
    {
        "id": "d2d011d58b63dca5",
        "type": "inject",
        "z": "b28da1c56fe82918",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 120,
        "y": 320,
        "wires": [
            [
                "78baf0202903c917"
            ]
        ]
    },
    {
        "id": "b1cd9abaaded5a79",
        "type": "debug",
        "z": "b28da1c56fe82918",
        "name": "debug 51",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 500,
        "y": 320,
        "wires": []
    }
]
3 „Gefällt mir“