Weiter zum Inhalt

Node-Red

961 Themen 13.2k Beiträge

Hilfe für Skripterstellung mit Node-RED

NEWS

  • Gelöst: Wert in dynamische Struktur im ioBroker ablegen

    91
    2
    0 Stimmen
    91 Beiträge
    12k Aufrufe
    M
    @mickym Genau. Und vielen Dank.
  • Philips Hue Switch -- Shelly Actor, Tuya,Sonoff,Hue

    14
    2
    -1 Stimmen
    14 Beiträge
    2k Aufrufe
    AphofisA
    @mickym i've done vielen dank
  • Simple wechselschaltung bei selbem Eingangswert

    10
    1
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    AphofisA
    @cinimod Weil ich blockly nenn schluck besser verstehe hätte aber gerne alle mein Schaltungen nach wie vor in node-red da ich die nodes übersichtlicher finde nur mit node-red noch nicht so gut klar komme.
  • Probleme mit Aktualisierung

    18
    0 Stimmen
    18 Beiträge
    1k Aufrufe
    HomoranH
    @thomas-braun sagte in Probleme mit Aktualisierung: Von nodered und dem Palettenmanager hab ich keine Ahnung. ich dachte du hättest ab und zu die Abhängigkeiten der npm Pakete herausgefunden
  • [gelöst] Philips Hue Switch über Node Red einbinden.

    13
    2
    0 Stimmen
    13 Beiträge
    4k Aufrufe
    T
    @aphofis sagte in [gelöst] Philips Hue Switch über Node Red einbinden.: @issi welche palette ist denn dieser node button !? [image: 1738780679554-screenshot-2025-02-05-193633.png] @Aphofis das ist ein Node aus einer Hue-Palette. Welche es war weiß ich nicht mehr, da ich mit NodeRed nicht mehr arbeite. Gruß Torsten
  • Javascript zu node red

    7
    0 Stimmen
    7 Beiträge
    636 Aufrufe
    jmeister79J
    @haus-automatisierung Das was am meisten sinn macht. Im besten Fall dann später direkt auf die Entitäten oder? Momentan müsste ich jetzt auf die Objekte bzw in meinem Fall die Alias schreiben. Ich möchte es hier erstmal üben um dann später nicht auf böse Überraschungen zu stoßen nachdem ich dann due migration zu 99% fertig hab
  • Modbus RTU Nachkommastellen variieren ständig

    2
    2
    0 Stimmen
    2 Beiträge
    192 Aufrufe
    mickymM
    @marcelv Ich kann Dir nicht sagen, warum das so ist - entweder kommt das schon so an oder es ist allgemein bekannt, dass Javascript und das ist ja der Unterbau von NodeRed bei der Division solche Ungenauigkeiten aufweist. Hier findest Du einige solche Beispiele. Um das ganze zu normalisieren musst Du halt runden auf die gewünschte Zahl. Hier das falsche Rechnen von Javascript wenn Du 5.30/0.1 teilst. [image: 1738412316126-91708128-9ab3-4714-a25b-b1ea9026e1bb-image-resized.png] Hier zum Test: Spoiler [ { "id": "6d825db117977676", "type": "change", "z": "7e6af0015415146d", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$round(payload, 3)\t", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 490, "y": 6560, "wires": [ [ "fbdb916f6d2eae7a" ] ] }, { "id": "cbdde4b5e1744372", "type": "function", "z": "7e6af0015415146d", "name": "Division 5.30/0.1", "func": "msg.payload = 5.30/0.1;\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 330, "y": 6480, "wires": [ [ "6884d1879fbacb54", "6d825db117977676" ] ] }, { "id": "6884d1879fbacb54", "type": "debug", "z": "7e6af0015415146d", "name": "JS Error", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 540, "y": 6480, "wires": [] }, { "id": "421036d3582817fa", "type": "inject", "z": "7e6af0015415146d", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 110, "y": 6480, "wires": [ [ "cbdde4b5e1744372" ] ] }, { "id": "fbdb916f6d2eae7a", "type": "debug", "z": "7e6af0015415146d", "name": "gerundet", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 720, "y": 6560, "wires": [] } ]
  • Bereich aus ASCII-String herausfiltern

    10
    1
    0 Stimmen
    10 Beiträge
    615 Aufrufe
    P
    @mickym oh man .... jetzt hab ich verstanden wie das mit den kopieren und einfügen geht. is ja easy biesy. Jetzt versteh ich auch deinen Flow. Alles klar, funktioniert prima. Danke dir für die Mühe.
  • Durch enums iterieren?

    3
    1
    0 Stimmen
    3 Beiträge
    381 Aufrufe
    M
    @mickym Super, danke für die Hilfe. Ja ist etwas schade, dass es nicht out of the box einen einfachen Weg gibt um mit den Enums zu arbeiten. Habe mir mit deinen Informationen jetzt einen kleinen Subflow gebastelt, an den ich ein Such-Topic und den gewünschten Enum-Namen übergeben kann. Der Subflow findet dann alle states welche zum gewünschten enum gehören und gibt mir jede ID mit einer eigenen message zurück. Damit kann ich dann sehr einfach in meinen Flows über die entsprechenden messages weiterarbeiten. Weiterhin kann ich mit dem Subflow auch gleich unerwünschte enums herausfiltern (habe ein enum mit automatisierten states, welche ich ggf. ignorieren möchte) und der Subflow hat auch noch die Möglichkeit nur aktive states zu berücksichtigen. Damit hab ich eine eierlegende Wollmichsau die ich überall in meinen Flows einsetzen kann. :) MfG Micha
  • Buch / Literatur zu Node-red

    6
    0 Stimmen
    6 Beiträge
    612 Aufrufe
    M
    @mickym Okay. Ich teste dann mal weiter. Wenn ich den produktiven Flow in Arbeit habe, dann poste ich mal den Flow. Edit: Ich habe mir gerade eine Testumgebung auf meinem Testsystem aufgebaut. Da laufen jetzt schon die Daten ein. Morgen kann ich dann weitermachen.
  • Shelly Plus Plug S - Node Red

    8
    1
    0 Stimmen
    8 Beiträge
    977 Aufrufe
    hotspot_2H
    @mickym sagte in Shelly Plus Plug S - Node Red: @hotspot_2 Hast du die simple Variante ohne rpc direkt als command versucht? Das teste ich noch.
  • Node Red Export zu ioBroker Datenpunkt

    4
    1
    0 Stimmen
    4 Beiträge
    442 Aufrufe
    mickymM
    @phil_discount Na ja wie gesagt - Deine Flows in eine neue Instanz (interner NodeRed Adapter) zu importieren wäre kein Hexenwerk gewesen und die sauberste Lösung. Ich könnte Dich ja unterstützen - aber machen musst Du halt selbst. Und wie gesagt, Du musst ja Deine jetzige Instanz deswegen nicht gleich wegschmeissen - sondern kannst die sogar parallel laufen lassen - nur halt nicht auf die gleiche Hardware zugreifen lassen. Man kann ja auch einzelne Flows deaktivieren.
  • Fehler in Node-Red Function

    3
    0 Stimmen
    3 Beiträge
    393 Aufrufe
    icebearI
    @mickym Oh, vielen Dank. Das war ja einfach, aber jetzt ist alles i.o und die nervige Fehlermeldung ist weg. Nochmals vielen Dank für die schnelle Antwort.
  • Zwei Strings zusammenführen

    23
    3
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    P
    @ju_ Prima. Danke für die Rückmeldung. Edit: In den beiden Change-Nodes kann die Regel, wo die Werte nach flow.Datum und flow.Tage geschrieben werden, raus. Da brauchts nur das Topic. Den Rest macht die Function. Die nimmt vom Datum die ersten 8 Stellen und vom Tage sucht die sich nur die Ziffern am Anfang raus. Wenn beides gefunden wurde, wird es weitergeleitet.
  • Rolladensteuerung Shelly x Alexa

    3
    0 Stimmen
    3 Beiträge
    422 Aufrufe
    mickymM
    Vielleicht postest du mal, welche Alexa Nodes Du nutzt - dann kann man Dir besser helfen.
  • Einfache Funktion - Wertüberwachung mit 2 Verzögerungszeiten

    48
    0 Stimmen
    48 Beiträge
    4k Aufrufe
    mickymM
    @i0br0ker Wie gesagt hier nochmal zum Abschluss um mein Geschriebenes auszuprobieren und wie gesagt, das solltest Du halt selbst machen: [image: 1736859406124-b432c456-6bf4-47ca-b117-ba0ed827c7a2-image.png] Mach diese Inject Node vor den Filter und eine Debug Node dahinter und schau, ob Du nach der 1. Nachricht noch jemals was raus bringst. Spoiler [ { "id": "38380c7431f79978", "type": "inject", "z": "7e6af0015415146d", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "SMAcharge", "payload": "true", "payloadType": "bool", "x": 900, "y": 7280, "wires": [ [ "f6a8cb46c61a8f11" ] ] }, { "id": "f260b3dadb7efeb5", "type": "debug", "z": "7e6af0015415146d", "name": "teste filter", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1300, "y": 7220, "wires": [] } ] Ansonsten dann viel Glück und Gelingen. Ich bin dann erst mal raus.
  • Alexa-Geräte reagieren nicht mehr

    4
    1
    0 Stimmen
    4 Beiträge
    425 Aufrufe
    haselchenH
    @mickym Ersteres wusste ich :) Meistens kannst Du ja dann doch noch was zu Nodes beitragen ;)
  • String [14] in true / false umwandeln.

    8
    2
    0 Stimmen
    8 Beiträge
    464 Aufrufe
    mickymM
    @ju_ Na dann ist ja gut - wie gesagt, wenn da ein Buffer rauskäme dann müsstest du umwandeln. Generell, wenn du einzelne Register ausliest, solltest Du Dich dann mit den Buffer Nodes beschäftigen. Ansonsten wenn Du mit Standardnodes auskommst und ist das immer die richtige Wahl.
  • [gelöst] JSONata loop - $moment > Invalid date?

    8
    3
    0 Stimmen
    8 Beiträge
    848 Aufrufe
    M
    @mickym said in JSONata loop - $moment > Invalid date?: Spaß macht es auf jeden Fall. :-) Ich stoße beim tüfteln nur oft an meine Grenzen. JSONata ist für mich noch Neuland. Nochmal vielen lieben Dank, dass du dich da so reingefuchst hast. @mickym Mein fertiger Flow für Feiertage und Schulferien zusammen: Spoiler [ { "id": "2428c1679199ce79", "type": "function", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Global:Feiertag", "func": "msg.payload = global.get(\"Frei\");\nreturn msg;", "outputs": 1, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1740, "y": 280, "wires": [ [ "16744919a414ee37" ] ] }, { "id": "16744919a414ee37", "type": "debug", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Info", "active": true, "tosidebar": false, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1910, "y": 280, "wires": [] }, { "id": "27a3db497b5ec5d0", "type": "inject", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Abfrage", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "06 00 * * *", "once": true, "onceDelay": "0.5", "topic": "", "payload": "", "payloadType": "date", "x": 1560, "y": 280, "wires": [ [ "2428c1679199ce79" ] ] }, { "id": "2873966a84096291", "type": "http request", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "https request", "method": "GET", "ret": "obj", "paytoqs": "ignore", "url": "", "tls": "498c6e5f.1070f", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "basic", "senderr": false, "headers": [], "x": 1920, "y": 120, "wires": [ [ "7a7a0f91d75faecf" ] ] }, { "id": "98eaa50401fd8651", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "", "rules": [ { "t": "set", "p": "url", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "url", "pt": "msg", "to": "$.url", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1890, "y": 60, "wires": [ [ "2873966a84096291" ] ] }, { "id": "2b49ef7e9032ba65", "type": "function", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Url", "func": "msg.payload = `https://openholidaysapi.org/SchoolHolidays?countryIsoCode=DE&validFrom=${msg.payload}-01-01&validTo=${msg.payload}-12-31&languageIsoCode=DE&subdivisionCode=DE-BY`;\nreturn msg;\n\n", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1710, "y": 60, "wires": [ [ "98eaa50401fd8651" ] ] }, { "id": "668cd4c46954209e", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Jahr", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Jahr", "tot": "str" }, { "t": "set", "p": "payload", "pt": "msg", "to": "$moment().year() ", "tot": "jsonata" }, { "t": "set", "p": "payload", "pt": "msg", "to": "$string(payload)", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1710, "y": 120, "wires": [ [ "2b49ef7e9032ba65" ] ] }, { "id": "081d12e755b9ae21", "type": "inject", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Abfrage", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "05 00 * * *", "once": true, "onceDelay": "0.5", "topic": "", "payload": "", "payloadType": "date", "x": 1560, "y": 140, "wires": [ [ "668cd4c46954209e", "ab40ce0d2f51afd7" ] ] }, { "id": "def42661118b4dd8", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.payload.isSame", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2310, "y": 120, "wires": [ [ "175999b28a5905ca" ] ] }, { "id": "1524c9b76d833a59", "type": "http request", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "https request", "method": "GET", "ret": "obj", "paytoqs": "ignore", "url": "", "tls": "498c6e5f.1070f", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "basic", "senderr": false, "headers": [], "x": 1920, "y": 160, "wires": [ [ "ecf91cc75ee58cec" ] ] }, { "id": "ab40ce0d2f51afd7", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Jahr", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Jahr", "tot": "str" }, { "t": "set", "p": "payload", "pt": "msg", "to": "$moment().year() ", "tot": "jsonata" }, { "t": "set", "p": "payload", "pt": "msg", "to": "$string(payload)", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1710, "y": 160, "wires": [ [ "12625be60bc8538d" ] ] }, { "id": "12625be60bc8538d", "type": "function", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Url", "func": "msg.payload = `https://openholidaysapi.org/PublicHolidays?countryIsoCode=DE&validFrom=${msg.payload}-01-01&validTo=${msg.payload}-12-31&languageIsoCode=DE&subdivisionCode=DE-BY`;\nreturn msg;", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 1710, "y": 220, "wires": [ [ "1ffa03fb20ce426e" ] ] }, { "id": "1ffa03fb20ce426e", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "", "rules": [ { "t": "set", "p": "url", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "url", "pt": "msg", "to": "$.url", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1890, "y": 220, "wires": [ [ "1524c9b76d833a59" ] ] }, { "id": "ecf91cc75ee58cec", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Feiertage", "rules": [ { "t": "delete", "p": "headers", "pt": "msg" }, { "t": "delete", "p": "statusCode", "pt": "msg" }, { "t": "delete", "p": "url", "pt": "msg" }, { "t": "delete", "p": "responseUrl", "pt": "msg" }, { "t": "delete", "p": "retry", "pt": "msg" }, { "t": "delete", "p": "redirectList", "pt": "msg" }, { "t": "set", "p": "payload", "pt": "msg", "to": "payload.{\t \"Feiertag\": $.name[language=\"DE\"].text,\t \"payload\": (\t $date := $moment($.startDate,'YYYY-MM-DD');\t $today := $moment();\t $date.isSame($today)\t )\t }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2100, "y": 160, "wires": [ [ "3da676eba96a5168" ] ] }, { "id": "8a5a46b1a1839d84", "type": "debug", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Info", "active": true, "tosidebar": false, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 2990, "y": 140, "wires": [] }, { "id": "83e59a86c8412805", "type": "function", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "includes(true)", "func": "const Frei = msg.payload[0] && msg.payload[1];\nmsg.payload = Frei.includes(true);\nreturn msg;", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 2680, "y": 140, "wires": [ [ "ad9391d7ef4f1de7" ] ] }, { "id": "3da676eba96a5168", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.payload", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2310, "y": 160, "wires": [ [ "175999b28a5905ca" ] ] }, { "id": "175999b28a5905ca", "type": "join", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "", "mode": "custom", "build": "array", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 2510, "y": 140, "wires": [ [ "83e59a86c8412805" ] ] }, { "id": "7a7a0f91d75faecf", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Schulferien", "rules": [ { "t": "delete", "p": "headers", "pt": "msg" }, { "t": "delete", "p": "statusCode", "pt": "msg" }, { "t": "delete", "p": "url", "pt": "msg" }, { "t": "delete", "p": "responseUrl", "pt": "msg" }, { "t": "delete", "p": "retry", "pt": "msg" }, { "t": "delete", "p": "redirectList", "pt": "msg" }, { "t": "set", "p": "payload", "pt": "msg", "to": "payload.{\t \"Schulferien\": $.name[language=\"DE\"].text,\t \"payload\": (\t $start := $moment($moment($.startDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t $end := $moment($moment($.endDate,'YYYY-MM-DD').format('DD.MM.YYYY'),['DD.MM.YYYY','x'],'de');\t $diff := $end.diff($start, 'days');\t ([0..$diff])@$day.{\t \"date\": $moment($.startDate,'YYYY-MM-DD').add($day,'days').format('DD.MM.YYYY'),\t \"today\": $moment().format('DD.MM.YYYY'),\t \"isSame\": $moment($.startDate,'YYYY-MM-DD').add($day,'days').isSame($moment(),'days')\t } \t )\t }", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2110, "y": 120, "wires": [ [ "def42661118b4dd8" ] ] }, { "id": "ad9391d7ef4f1de7", "type": "change", "z": "2a5d5250.f178be", "g": "d7ab92de65468601", "name": "Frei", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Frei", "tot": "str" }, { "t": "set", "p": "Frei", "pt": "global", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 2850, "y": 140, "wires": [ [ "8a5a46b1a1839d84" ] ] }, { "id": "498c6e5f.1070f", "type": "tls-config", "name": "", "cert": "", "key": "", "ca": "", "certname": "", "keyname": "", "caname": "", "servername": "", "verifyservercert": false, "alpnprotocol": "" } ] [image: 1736090206348-flow_schulferien_5.jpg] Nebenbei. Ist absolut erstaunlich wie enorm man einen Flow verschlanken kann. Flow für die Feiertage: [image: 1736090490259-flow_feiertage.jpg] Flow für die Feiertage: [image: 1736090992721-flow_feiertage_1.jpg] Und der absolute Wahnsinn war das Abrufen auf einmal. Dadurch redziert sich alleine bei den Feiertagen das JSONata von 106 auf 8 Zeilen in der change-node. :-)
  • [gelöst] http request mit 2-facher Ausgabe

    5
    1
    0 Stimmen
    5 Beiträge
    565 Aufrufe
    M
    @mickym said in http request mit 2-facher Ausgabe: @mage Das Problem ist meines Erachtens ganz simple und ich verstehe auch nicht, warum man das macht. In dem Du aus der 1. Inject Node 2 Kabel schickst, verdoppelst Du die Anzahl Nachrichten. [image: 1735766671105-6ab980c0-8215-4b8e-800a-b29fcfec80f5-image.png] Wenn Du also die Nachricht nicht verdoppelst, dann kommt auch nur EINE Nachricht raus. Vielen lieben Dank. Die doppelte Verbindung hatte ich total übersehen. :-) Jetzt funktioniert es wie es soll. [image: 1735767316367-screenshot_node-red2.jpg]

407

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge