Weiter zum Inhalt

Node-Red

961 Themen 13.2k Beiträge

Hilfe für Skripterstellung mit Node-RED

NEWS

  • Jalousien mit Alexa und Node Red bedienen

    5
    1
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    TB 0T
    Schaut mal hier: https://www.iluminize.com/shop/product/5128-zigbee-3-0-rolladen-aktor-mini-v2-fur-lichtsteuerung-montage-in-einer-tiefen-schalterdose-schwarz-114 Die haben das ganz smart (Wortspiel, haha) gelöst. Hue kann „eigentlich“ nur Lampen, deshalb wird auch dieser Aktor als dimmbare Lampe dargestellt, du nennst ihn dann aber so wie du willst, bspw. „Markise“. Praktisch wird die Steuerung dann so umgesetzt, dass der untere „Dimmbereich“ runterfahren ist, der obere Bereich ist hochfahren und dazwischen ist stopp. Du kannst dir das dann auch als 3 Szenen abspeichern, sodass du nicht immer die Dimm-Leiste in der App schieben musst, sondern einen Button für rauf/runter/stopp hast.
  • Werte positiv in negativ und negativ in positiv ändern

    13
    1
    0 Stimmen
    13 Beiträge
    3k Aufrufe
    C
    @pd_mueller Ich habe die ganzen scripte aus dem [Tutorial] SolarEdge -> Modbus -> ioBroker -> Grafana Hier aus dem Forum.
  • (gelöst) Falsches Datum in Fehlermeldung

    5
    6
    0 Stimmen
    5 Beiträge
    489 Aufrufe
    T
    @mickym Vielen Dank für Deine Hilfe! Es funktioniert jetzt.
  • Node-Red TCP-Request Timeout

    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    Werde45W
    @mickym Okay.. Gute Idee. Werde ich testen. Schade, das es so umständlich sein muss.
  • Rollladensteuerung Logikfehler

    14
    1
    0 Stimmen
    14 Beiträge
    1k Aufrufe
    mickymM
    @hc-yami sagte in Rollladensteuerung Logikfehler: Hatte mir auch immer nur den msg.payload angeschaut und nicht den Topic. Danke dir! Ehrlich gesagt würde ich die Option in den filter Nodes grundsätzlich abschalten, dass für jedes topic separat gearbeitet wird. [image: 1675435468136-e8a9ded1-8238-4959-aba1-7e946e259e46-image.png] Verstehe nicht, warum das defaultmäßig angehakt ist, denn ich denke es kommt seltener vor, dass die Leute die filter node für unterschiedliche topics nutzen. Ja und generell ist immer das ganze Nachrichtenobjekt im Zweifel relevant - und das topic kommt in der Bedeutung gleich hinter der payload. (Was nützt schließlich ein Wert, wenn ich seine Bedeutung nicht mehr kenne. ;) ). Das nächste Mal würde ich sowas auch immer schnell selbst simulieren. Mit so einem Aufbau: [image: 1675435331320-51e06cf1-3987-4108-900d-5aaff6bce931-image-resized.png] hättest Du schnell herausgefunden, dass spätestens nach dem 2. Inject drücken nichts mehr hinten raus gekommen wäre.
  • Daten 1 mal im Monat schreiben

    6
    3
    0 Stimmen
    6 Beiträge
    633 Aufrufe
    mickymM
    Du schreibst den Inhalt Deiner function 18 in einer Flowvariable und die cronnode holt diese dann ab: Deine function 18 - speicher die payload in einer Flow variablen - z.Bsp SML dann machst den Ausgang Deiner function Node einfach weg: [image: 1675273210910-82f5937f-191c-4919-90ad-9ed5fa1e6af2-image.png] Deine payload speicherst Du in einer Flow variable: msg.payload = { "SML.Total.in" : 5000, "SML.Total.out": 15000, "SML.Power_curren": 500, "Time" : new Date() } flow.set ("SML", msg.payload); Die function Node selbst gibt nichts mehr aus!!! (Also return msg; als letzte Zeile kannst wegschmeissen und die Ausgänge der function Node auf 0 stellen). EDIT: Kannst natürlich auch den Ausgang dran lassen, um zu Debug Zwecken irgendwas mit einer Debug Node zu kontrollieren!! Wichtig ist ja nur die Speicherung im Flow-Kontext. In Deinem Kontext sind aber die Inhalt gespeichert und werden aktualisiert. [image: 1675273546169-2e4d010f-a24a-43a2-afb1-c9060808ad80-image.png] Die cron-plus Node holt nun den Inhalt der Flowvariablen ab und Du schreibst in die csv: [image: 1675274635846-5b3a7a29-b73c-4ead-8c32-eff460baf7e7-image-resized.png] Hier der Beispielflow zum Import: Spoiler [ { "id": "5d827132f180d9ea", "type": "function", "z": "00b2bb10c6f72961", "name": "function 18", "func": "msg.payload = {\n \"SML.Total.in\" : 5000,\n \"SML.Total.out\": 15000,\n \"SML.Power_curren\": 500,\n\n \"Time\" : new Date()\n}\n\nflow.set (\"SML\", msg.payload);\n// return msg;", "outputs": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 390, "y": 500, "wires": [] }, { "id": "2245ac4b3ce16c32", "type": "inject", "z": "00b2bb10c6f72961", "name": "trigger", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 190, "y": 500, "wires": [ [ "5d827132f180d9ea" ] ] }, { "id": "73eb8037e9423096", "type": "cronplus", "z": "00b2bb10c6f72961", "name": "", "outputField": "payload", "timeZone": "", "persistDynamic": false, "commandResponseMsgOutput": "output1", "outputs": 1, "options": [ { "name": "SML", "topic": "monthlySML", "payloadType": "flow", "payload": "SML", "expressionType": "cron", "expression": "0 0 0 1 * * *", "location": "", "offset": "0", "solarType": "all", "solarEvents": "sunrise,sunset" } ], "x": 420, "y": 560, "wires": [ [ "2698d7c79fc129a6", "c5e7d602db5a4f04" ] ] }, { "id": "66e2ea42728c843c", "type": "inject", "z": "00b2bb10c6f72961", "name": "manueller Trigger", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "trigger", "payload": "SML", "payloadType": "str", "x": 200, "y": 560, "wires": [ [ "73eb8037e9423096" ] ] }, { "id": "2698d7c79fc129a6", "type": "debug", "z": "00b2bb10c6f72961", "name": "SML zur CSV Node", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 630, "y": 540, "wires": [] }, { "id": "c5e7d602db5a4f04", "type": "file", "z": "00b2bb10c6f72961", "d": true, "name": "", "filename": "test.csv", "filenameType": "str", "appendNewline": true, "createDir": false, "overwriteFile": "false", "encoding": "none", "x": 620, "y": 600, "wires": [ [] ] } ] ============================================================================================= Du musst halt dafür Sorge tragen, dass zum Zeitpunkt halt was korrektes im Flowkontext drin steht.
  • Übergabe von Werten auf andere Objekte

    18
    3
    0 Stimmen
    18 Beiträge
    1k Aufrufe
    K
    @mickym Ach, fürs erste ist alles in Ordnung so. Bisher konnte ich nur An und Aus, da ist so ein bisschen Farbe schon ganz nett. Mal schauen wie oft man es im Alltag wirklich braucht...
  • Homematic IP Rolladen - HMIP-BROLL in Homekit

    2
    1
    1 Stimmen
    2 Beiträge
    1k Aufrufe
    W
    @magic2910 Das Thema ist zwar schon sehr alt, aber ich bin froh es gefunden zu haben :) Danke dafür! Aber bei mir wird das LOG immer wieder geflutet mit folgender Meldung: [ioBroker NodeRed 6229@Rolladen Office@Rolladen Office@Position State] characteristic was supplied illegal value: number 3 exceeded maximum of 2 Wie kann ich das unterbinden?
  • contrib-amazon-echo: Farbkonvertierung?

    18
    0 Stimmen
    18 Beiträge
    3k Aufrufe
    B
    Hallo nochmals Zusammen, also als Verständniss vieleicht habe ich mich unklar ausgedrückt es geht um folgende Einstellungen: Wie gebe ich hier dem Amazon Echo Hub z.b die Rückmeldung (angenommen mit der HUE App Lampe eingeschaltet) Lampe EIN. [image: 1674779299410-1.1.png] [image: 1674779310047-5.png] [image: 1674779316806-1.png] [image: 1674779320047-2.png] [image: 1674779323904-3.png] [image: 1674779329472-4.png]
  • Dreifach-Taster TS0043

    2
    2
    0 Stimmen
    2 Beiträge
    131 Aufrufe
    mickymM
    @gregor37 Sieht so aus, also ob die Datenpunkte noch nicht initialisiert wären. Musst halt mal ein Doppelklick auf einen Taster machen und schauen, ob sich dann der Datenpunkt füllt.
  • Nur eine Lampe ein- und ausschalten...

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    818 Aufrufe
    mickymM
    @gregor37 Das eine hat mit dem anderen nichts zu tun. Du kannst über Node-Red mit den iobroker-IN und iobroker-OUT Nodes die Datenpunkte im iobroker beschreiben egal wo. Das zigbee2mqtt hängt nun davon ab, wie Du es verwendest zusammen mit dem iobroker: Wenn Du einen externen mqtt-broker verwendest (zum Beispiel) mosquitto bekommst Du die Datenpunkte in den iobroker mit dem mqtt-Adapter als Client konfiguriert. (so habe ich es gemacht). Wenn Du den mqtt-Adapter als Broker definierst, dann hast Du die datenpunkte direkt und kannst den Broker auch direkt ansprechen. Aus Node-Red kannst Du alle (fast) Datenpunkte im iobroker, via der iobroker Nodes ansprechen, bei mqtt (als zigbee2mqtt) auch noch mit den mqtt-Nodes. Es gibt auch noch einen neuen zigbee2mqtt Adapter, der entweder selbst als mqtt-Broker agiert oder (vorbildlich !) auch einen externen mqtt-Broker nutzen kann. Damit werde die Datenpunkte wieder interpretiert, man kann aber ggf. auch direkt via mqtt zugreifen. Die Fragen stellt sich also nicht, welche Nodes Du verwendest, sondern eher ob Du lieber den zigbee-Adapter oder zigbee2mqtt verwenden willst. Ich bin aus mehrfach schon erwähnten Gründen auf zigbee2mqtt umgestiegen, da ich auch den Conbee2 Stick als Koordinator verwende, der von den zigbee Adapter Entwicklern anfangs nicht voll unterstützt wurde. Inzwischen mag das besser sein. Der zigbee-Adapter greift aber letztlich anscheinend auch nur auf das zurück, was zigbee2mqtt anbietet. Aber wie gesagt, das hat alles nichts mit den Nodes bzw. NodeRed zu tun. NodeRed spielt hier was die Effizienz betrifft gar keine Rolle, sondern eher die ausführende Schickt (zigbee-Adapter oder zigbee2mqtt Service).
  • MQTT out an node-red-contrib-dynamic-thermostat anpassen.

    climate
    5
    0 Stimmen
    5 Beiträge
    670 Aufrufe
    N
    @mickym Vielen Dank für die Lösung. Hatte es inzwischen mit einem Function Node hinbekommen. Gruß NetFritz
  • Fehlermeldung

    4
    0 Stimmen
    4 Beiträge
    172 Aufrufe
    S
    @mickym hat sich erledigt, da kam in de Node noch eine andere Nachricht rein die nicht rein sollte. DANKE!
  • Automatisch States anlegen ioBroker out?

    node-red
    13
    2
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    Werde45W
    @mickym Guten morgen, leider viel Neuschnee in Oberbayern - daher keine Solarleitung aber Zeit... Ich habe die Wandlung nun in eine Funktion geschrieben und es klappt. Und alles im Parser steuerbar. [image: 1674294262193-dec905dd-1048-4ee5-82b3-72ac1e76df2e-image.png] msg.ack = true; msg.Name = msg.topic; msg.topic = "0_userdata.0.Akku." + msg.topic; // Hex in Dezimal wandeln msg.payload = parseInt(msg.payload, 16); return msg; Danke. Ich wünsche ein schönes Wochenende.
  • Einfache Wenn dann Funktion, stehe auf dem Schlauch

    9
    1
    0 Stimmen
    9 Beiträge
    840 Aufrufe
    J
    @mickym Danke, ich hoffe ich habe es hinbekommen, mal sehen was passiert wenn die Sonne scheint ;)
  • Sonos Lautstärke regeln

    60
    0 Stimmen
    60 Beiträge
    5k Aufrufe
    S
    @mickym vielen Dank das passt die KNX Node sendet immer sobald man den Button benötigt :-). Jetzt geht es auch mit dem Touch Display.
  • Node-Red an Elfin EW11 Adapter - nicht Modbus

    2
    0 Stimmen
    2 Beiträge
    526 Aufrufe
    Werde45W
    @werde45 Hallo Alex - Oh das bin ich ja selber. Ich habe für dieses Problem eine Lösung. Bei Bedarf kann ich dir eine PM zum Thema senden.
  • Amis-Zähler auslesen / einbinden ?

    36
    0 Stimmen
    36 Beiträge
    8k Aufrufe
    mickymM
    Na wenn Du dir sicher bist, dass die Daten in Deinem mqtt_broker sind, musst doch nur die entsprechenden topics subscriben.
  • NSPanel Tasmota Node-Red MQTT

    node-red heating
    4
    0 Stimmen
    4 Beiträge
    668 Aufrufe
    mickymM
    @netfritz Ok - da ich mich mit dem NSPanel nicht auskenne, kann ich Dir glaub auch nicht weiterhelfen. Ich denke auch nicht dass Du so tief in der cmnd Hierarchie gehen darfst - aber egal. Ich würde aber an Deiner Stelle, das NodeRed aus dem Thread rausmachen - da es unerheblich ist, wie Du den richtigen Datenpunkt in mqtt setzt und es gibt genügend Leute, die vielleicht helfen könnten, aber sobald sie NodeRed lesen, den Thread von vorne herein ignorieren. Wenn Du weisst, welches topic Du setzen musst, kannst Du das ja mit NodeRed machen, aber das Mittel mit dem Du das Topic setzt ist hier erst mal sekundär.
  • Baluberg-Vento, Wie kann ich diesen Knoten benutzen?

    2
    1
    0 Stimmen
    2 Beiträge
    237 Aufrufe
    mickymM
    @karloslb Ich kann Dir mit der Node auch nichts sagen. In meinen Augen hast Du 2 Möglichkeiten: Du baust ganz von selbst eine low-level Kommunikation auf in dem Du direkt UDP Pakete an Dein Gerät schickst und die Pakete halt nach der verlinkten Kommunikation aufbaust: https://blaubergventilatoren.de/uploads/download/b133_4_1en_01preview.pdf Hier würde ich Dir aber in jedem Fall ein buffer Node mitverwenden. Du nutzt das JS Bibliothek, die Du verlinkt hast direkt in einer function Node: https://github.com/michaelkrog/blaubergventojs zu 1 hab ich mal einen Flow zum Ausprobieren gebastelt - keine Ahnung ob der funktioniert - hab das mal anhand des PDFs zusammengebastelt. Die dyn. Buffer-Node hat mE ein Problem, deswegen habe ich das Parsen alleine mit Javascript gemacht. [image: 1673644385284-bcddf1ff-e314-4462-a1dd-7c67541b788a-image-resized.png] Spoiler [ { "id": "b822a5c6e6e5a711", "type": "buffer-maker", "z": "385f4b8d434f6005", "name": "type, ID und Passwort", "specification": "spec", "specificationType": "ui", "items": [ { "name": "type", "type": "buffer", "length": 1, "dataType": "bin", "data": "[2]" }, { "name": "sizeID", "type": "buffer", "length": 1, "dataType": "bin", "data": "[16]" }, { "name": "ID", "type": "string", "length": 16, "dataType": "msg", "data": "ID" }, { "name": "sizePWD", "type": "byte", "length": 1, "dataType": "jsonata", "data": "$length(password)" }, { "name": "password", "type": "string", "length": -1, "dataType": "msg", "data": "password" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "x": 340, "y": 80, "wires": [ [ "f8c660323b580df5" ] ] }, { "id": "929cad4e0b9a7443", "type": "inject", "z": "385f4b8d434f6005", "name": "", "props": [ { "p": "ID", "v": "", "vt": "str" }, { "p": "password", "v": "1111", "vt": "str" }, { "p": "FUNC", "v": "1", "vt": "num" }, { "p": "DATA", "v": "[1,2]", "vt": "bin" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 150, "y": 80, "wires": [ [ "b822a5c6e6e5a711" ] ] }, { "id": "f8c660323b580df5", "type": "buffer-maker", "z": "385f4b8d434f6005", "name": "FUNC und DATA", "specification": "spec", "specificationType": "ui", "items": [ { "name": "header", "type": "buffer", "length": -1, "dataType": "msg", "data": "payload" }, { "name": "FUNC", "type": "byte", "length": 1, "dataType": "msg", "data": "FUNC" }, { "name": "DATA", "type": "buffer", "length": -1, "dataType": "msg", "data": "DATA" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "x": 570, "y": 80, "wires": [ [ "88b327dbfb39ca80" ] ] }, { "id": "d029a20fb5676950", "type": "debug", "z": "385f4b8d434f6005", "name": "Final Packet", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1210, "y": 120, "wires": [] }, { "id": "88b327dbfb39ca80", "type": "function", "z": "385f4b8d434f6005", "name": "Checksum", "func": "msg.checksum = 0;\nfor (var x of msg.payload.values()) {\n msg.checksum += x;\n}\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 770, "y": 80, "wires": [ [ "19c7a157927761dd" ] ] }, { "id": "19c7a157927761dd", "type": "buffer-maker", "z": "385f4b8d434f6005", "name": "Header und Checksum", "specification": "spec", "specificationType": "ui", "items": [ { "name": "header", "type": "buffer", "length": 2, "dataType": "bin", "data": "[253,253]" }, { "name": "payload", "type": "buffer", "length": -1, "dataType": "msg", "data": "payload" }, { "name": "item3", "type": "uint16le", "length": 1, "dataType": "msg", "data": "checksum" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "x": 980, "y": 80, "wires": [ [ "d029a20fb5676950", "69e5f16a7ba0a2d7" ] ] }, { "id": "65b737e55abf4055", "type": "udp in", "z": "385f4b8d434f6005", "d": true, "name": "", "iface": "", "port": "4000", "ipv": "udp4", "multicast": "false", "group": "", "datatype": "buffer", "x": 160, "y": 160, "wires": [ [ "78d6d6a15e93d806" ] ] }, { "id": "69e5f16a7ba0a2d7", "type": "udp out", "z": "385f4b8d434f6005", "d": true, "name": "", "addr": "192.168.4.1", "iface": "", "port": "4000", "ipv": "udp4", "outport": "4000", "base64": false, "multicast": "false", "x": 1240, "y": 80, "wires": [] }, { "id": "8c24bc356424c638", "type": "inject", "z": "385f4b8d434f6005", "name": "incoming packet", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "[253,253,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,49,49,49,49,1,1,2,222,0]", "payloadType": "bin", "x": 140, "y": 200, "wires": [ [ "78d6d6a15e93d806" ] ] }, { "id": "78d6d6a15e93d806", "type": "function", "z": "385f4b8d434f6005", "name": "parse Buffer", "func": "let buffer=msg.payload;\nlet size_ID = buffer.slice(3).readInt8();\nlet size_PW = buffer.slice(4 + size_ID).readInt8();\nlet object={\n \"TYPE\": buffer.slice(2, 3).readInt8(),\n \"SIZE_ID\": size_ID,\n \"ID\": buffer.slice(4,size_ID + 4).toString(),\n \"SIZE_PW\": size_PW,\n \"PWD\": buffer.slice(4 + size_ID + 1, 4 + size_ID + 1 + size_PW).toString(),\n \"FUNC\": buffer.slice(4 + size_ID + 1 + size_PW).readInt8(),\n \"DATA\": buffer.slice(4 + size_ID + 1 + size_PW+ 1,-2),\n \"Checksum\" : buffer.slice(-2)\n}\n\nmsg.payload = object;\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 350, "y": 200, "wires": [ [ "af96eaba3270a79f" ] ] }, { "id": "af96eaba3270a79f", "type": "debug", "z": "385f4b8d434f6005", "name": "parsed Buffer", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 540, "y": 200, "wires": [] } ]

275

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge