Node Red - Hilfe-/Frage-/Ideen-/Austausch - Thread

Normalerweise sollte das keinen Unterschied machen.

Channel wurde gelöscht .
VG

2 „Gefällt mir“

Warum denn? Ist doch schade

Hallo Zusammen,

ich benötige mal kurz eine Anregung was die eleganteste Vorgehensweise für folgende Aufgabenstellung ist.

Ich habe eine Steckdose, die per Wall-Plug im Homee schaltbar ist. Jetzt möchte ich auf dem Node-RED Dashboard einen Button legen, der zum einen den Zustand (an/aus) anzeigt und beim Toggle auch entsprechend über Homee den Zustand ändert.

Ich habe jetzt verschiedene Wege ausprobiert. Funktional kann ich mein Außenlicht per Webhook über das Node-RED Dashboard schalten. Wenn ich das Licht aber per Homee Schalte, dann wird der Button auf dem Dashboard nicht aktualisiert.

Beim Auslesen des Wertes über ioBroker wird der Button auf dem Node-RED Dashboard auch nicht richtig refresht. :frowning:
image
Das Setzen der Werte über die Homee Api führt zu Fehlermeldungen, die ich nicht in den Griff bekomme („TypeError: Reduce of empty array with no initial value“ BZW „„TypeError: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object““) und das Update über ioBroker bewirkt keine Änderung.

Hallo Zusammen,

ich möchte mich noch nicht geschlagen geben. Ich habe auf dem Node-RED Dashboard aktuell zwei Plugs drauf, deren Zustand (on/off) immer entsprechend dem im Homee ist. Egal von wo ich schalte, der Switch auf dem Dashboard wird aktualisiert. Ich habe auch Webhooks für zwei Plugs angelegt und diese Schalten wunderbar, über Homee. Jedoch ist mir das anlegen der Webhooks zu aufwändig und ich möchte, wie mit meinen virtuellen Devices die Homee-API verwenden, um die Zustände zu ändern. Leider bekomme ich immer den gleichen Fehler egal ob ich im payload einen Boolean, einen Integer oder einen Stringwert habe

„TypeError: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received an instance of Object“

Woran kann das liegen? Was mache ich falsch?

Viele Grüße
Carsten

Servus, anhand der Screenshots überblicke ich jetzt nicht alles…

Der debug node gibt ja einen String aus… der kann aber so im template node nicht verwendet werden. Du müsstest es als integer übergeben, also 1 statt „1“.

Kannst du das mal versuchen?

Leider der gleiche Fehler :frowning:
Selbst wenn ich ihm im Aufruf eine harte 1 bzw. „1“ mitgebe kommt der Fehler.

node-red-contrib-homee Version 0.5.3

Ok, nur noch mal zum Verständnis: du hast aber schon ein virtuelles Gerät angelegt, an das du den JSON sendest? Sehe im ersten Screen nur was vom api Node, aber keinen device Node.

api Node = zur Abfrage und Steuerung bereits vorhandener Geräte in homee

device Node = Anlage und Steuerung virtueller Geräte und Integration über die homee in homee Funktion

Ich möchte in dem Fall einen echten Fibaro WallPlug und kein virtuelles Gerät steuern.

Ok, verstehe… dann musst du so vorgehen…

[{"id":"df2ad53b.1261a","type":"function","z":"b4eda002.b370a","name":"an-aus","func":"var nodeid = 605;  // node ID in homee vom Gerät\nvar attributid = 1957; // attribut ID in homee vom Gerät\nif (msg.payload === 1)\n{return {payload: \"PUT:/nodes/\"+nodeid+\"/attributes/\"+attributid+\"?target_value=0\"}}\nif (msg.payload === 0)\n{return {payload: \"PUT:/nodes/\"+nodeid+\"/attributes/\"+attributid+\"?target_value=1\"}}\n","outputs":1,"noerr":0,"x":1030,"y":520,"wires":[[]]}]

Du musst in der Funktion deine node und attribute id an deinen Fibaro anpassen. Als Input in die Funktion benötigst du dann wie eben integer 1 oder 0.

1 „Gefällt mir“

perfekt - es schaltet ein und aus :slight_smile:

Vielen Dank. Und jetzt ist es auch deutlich schlanker :- :smiling_face_with_three_hearts:
Ich denke es ist recht universell und kann auf dem „nächsten“ zum Abschauen helfen

[
    {
        "id": "42303d1b.272874",
        "type": "link in",
        "z": "bc30d249.20811",
        "name": "",
        "links": [
            "488f9b53.b640b4",
            "e1cd6c18.f7a7a",
            "12b23315.24e28d"
        ],
        "x": 95,
        "y": 160,
        "wires": [
            [
                "6bbd401a.364a9",
                "8f7cfff9.c088d",
                "add47b57.27f748"
            ]
        ]
    },
    {
        "id": "8f7cfff9.c088d",
        "type": "function",
        "z": "bc30d249.20811",
        "name": "Abfrage Plug - 83",
        "func": "const attributes = global.get('homee.attributes');\n\nvar msgPlug   = {}\n\nmsgPlug.payload = attributes.filter(attribute => attribute.id === 83).map(a => a.current_value).reduce((a,c) => a+c);\n\nswitch (msgPlug.payload){\n    case 0 : msgPlug.payload = false;\n    break;\n    case 1 : msgPlug.payload = true;\n    break;\n}\n\nreturn [msgPlug];",
        "outputs": 1,
        "noerr": 0,
        "x": 290,
        "y": 260,
        "wires": [
            [
                "2b2d586e.426d48"
            ]
        ]
    },
    {
        "id": "2b2d586e.426d48",
        "type": "ui_switch",
        "z": "bc30d249.20811",
        "name": "",
        "label": "Wasserkocher",
        "tooltip": "",
        "group": "f6baa5e7.6c4b08",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": false,
        "decouple": "true",
        "topic": "PlugWaterCocker",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 500,
        "y": 260,
        "wires": [
            [
                "ff31046.02129f8"
            ]
        ]
    },
    {
        "id": "ff31046.02129f8",
        "type": "function",
        "z": "bc30d249.20811",
        "name": "an-aus",
        "func": "var nodeid     = 8;  // node ID in homee vom Gerät\nvar attributid = 83; // attribut ID in homee vom Gerät\n\nif (msg.payload === false)\n    {return {payload: \"PUT:/nodes/\"+nodeid+\"/attributes/\"+attributid+\"?target_value=0\"}}\nif (msg.payload === true)\n    {return {payload: \"PUT:/nodes/\"+nodeid+\"/attributes/\"+attributid+\"?target_value=1\"}}\n",
        "outputs": 1,
        "noerr": 0,
        "x": 710,
        "y": 260,
        "wires": [
            [
                "be9f0332.b7628"
            ]
        ]
    },
    {
        "id": "be9f0332.b7628",
        "type": "link out",
        "z": "bc30d249.20811",
        "name": "Homee startet",
        "links": [
            "641bdcf6.c670a4"
        ],
        "x": 1075,
        "y": 260,
        "wires": []
    },
    {
        "id": "f6baa5e7.6c4b08",
        "type": "ui_group",
        "z": "",
        "name": "Schalter",
        "tab": "92b97999.109c88",
        "order": 5,
        "disp": true,
        "width": "6",
        "collapse": true
    },
    {
        "id": "92b97999.109c88",
        "type": "ui_tab",
        "z": "",
        "name": "Home",
        "icon": "dashboard",
        "order": 1,
        "disabled": false,
        "hidden": false
    }
]
1 „Gefällt mir“

Hallo Zusammen,

am Pflingstmontag habe ich wiedermal eine Frage bezüglich der Homee-API im Node-Red. Ich möchte in einer Funktion nur Geräte (Nodes) einer Gruppe verarbeiten. Sprich z.B.: nur Temperatursensoren (Attribute Typ 5) aus der Gruppe „Kellerräume“.

const attributes = global.get('homee.attributes');
const nodes      = global.get('homee.nodes');
const relation   = global.get('homee.relationships');

Ich dachte, ich kann irgendwie über die Beziehungen (Relationships) gehen. Komme hier aber nicht wirklich weit. „Relation“ ist in der Funktion leer. Wenn ichs im inject aufrufe, bekomme ich Werte zurück.

GET:relationships

Folgende Ansätze würden mich weiterbringen
a) Gibt mir alle Nodes einer Group und dann greife auf ein Attribute zu
b) diese Node-id ist Mitglied in Gruppe xxx

Wie habt ihr das abgefragt?

Grüße
Carsten

Die Beziehungen stehen im Plugin noch nicht zur Verfügung. Ich habe für diese Woche ein Update geplant; vermutlich Donnerstag oder Freitag. Baue das bis dahin ein.

Die Beziehungen bilden die n:n Verknüpfung zwischen den Nodes und den Gruppen ab. Ich würde da dann in etwa so vorgehen:
a) Relationships filtern nach der richtigen group_id. Damit hast du dann die richtigen Node-IDs. An den Nodes sollten dann die Attribute schon dran hängen. Wenn du ein spezifisches Attribut suchst, kannst du die Attribute dann auch wieder durchsuchen. Die Methoden wären Array.filter und Array.find
b) Hier auch wieder die Relationships durchsuchen nach einer gegebenen Node-ID. Dann hast du die Gruppen-ID.

Ich mache etwas vergleichbares im Homebridge Plugin. Vielleicht kannst du das als Hilfestellung nutzen: https://github.com/stfnhmplr/homebridge-homee/blob/92e246b0af03791ee3229ba859b2c43695fb563c/index.js#L133

1 „Gefällt mir“

Hallo @stfnhmplr,

lese gerade das Change Log

[0.6.0] - 2020-06-04

Added

  • Added relationships (node <–> group) to global context
  • Added option to disable the distribution to the global context
  • Add option to change data in device-attribute (PR #10)

Kannst du uns einen Tipp geben, welche Attribute nun neu zur Verfügung stehen und wie wir damit umgehen.

Grüße
Carsten

Hallo Carsten,

neue Attribute gibt es keine. Damit ich Infos nicht 10x separat veröffentlichen muss, versuche ich das Wiki im Repository aktuell zu halten: https://github.com/stfnhmplr/node-red-contrib-homee/wiki

Bei dem Update sind zusammengefasst nur folgende Änderungen erfolgt:

  • Die Beziehungen zwischen Gruppen und Geräten sind nun auch über den globalen Kontext verfügbar
  • Es gibt eine Option im homee-Api Konfigurationsnode um den globalen Kontext zu (de)aktivieren
  • Es kann nun das Data-Attribut zur Laufzeit (d.h. ohne deploy) geändert werden.

Die ersten beiden Optionen sorgen dafür, dass du nicht manuell beim homee irgendwelche Werte abfragen musst. Du kannst sie aus dem globalen Kontext nehmen.
Für das Data Attribut wendest du dich am besten an @mwr87. Der hat die Änderung beigesteuert und kann vermutlich am besten selbst erklären, wofür das benutzt wird.

1 „Gefällt mir“

Hallo Stefan,
ich bin über diese Änderung etwas gestolpert. Nach dem Update meldete eine Funktion einen Error. Auslöser war die Abfrage global.get('homee.nodes').
Übrigens ist das Teil des Flows Push Nachricht und Abfrage Fenster von @Micha .

Es hatte etwas gedauert, bis ich die Option an der Configuration node fand.
image
Die Option war nicht angeklickt. Ist das per default deaktiviert?

Als default ist ist die Option eigentlich aktiv:

Offensichtlich klappt das aber bei Updates leider nicht.

Danke für die schnelle Antwort @stfnhmplr .
Ja es scheint, zumindest bei mir, beim Update nicht aktiviert worden zu sein. Ggf. wäre es ein Hinweis im Wiki wert.

Stimmt. Ist ergänzt. Danke.

2 „Gefällt mir“