Skip to content

Node-Red

Hilfe für Skripterstellung mit Node-RED

953 Themen 13.1k Beiträge

NEWS

  • Node Red Flow Werte vergleichen

    node-red
    3
    0 Stimmen
    3 Beiträge
    251 Aufrufe
    M
    @mickym Vielen Dank, das funktioniert wie ich es wollte. Das mit den Zahlen ändere ich noch ab und passe dann den Flow an. So war es einfacher es zu erklären! Mousenray
  • Zeitsteuerung function

    10
    1
    0 Stimmen
    10 Beiträge
    792 Aufrufe
    C
    @mickym Vielen Dank! Du hast mir echt weitergeholfen. Und ich habe wieder etwas gelernt.
  • Victron

    135
    0 Stimmen
    135 Beiträge
    20k Aufrufe
    mickymM
    @kmuenke Na wie gesagt - das mit dem topic wundert mich, sollte auch so nicht funktionieren. Ich würde trotzdem mal als topic nur den # nehmen - der sollte alle subscriben dann kommt die topic so raus, wie sie eigentlich sollten. Ich würde eine extra client-Instanz definieren, die dann unter einem eigenen Prefix aus 0_userdata.0 published. Warum das plötzlich geht, ist, dass eigene States gepublished werden - da erzeugst Du dir aber Endlosschleifen, wenn Du diese nicht unter eigenem Prefix publishst. Manche Dinge habe ich hier ja mal zusammengefasst und getestet: https://forum.iobroker.net/topic/53315/grundsatzfrage-zu-den-mqtt-adaptern
  • Thermostat Automatisierung mit mehreren Bedingungen

    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    mickymM
    @cpt-pommes sagte in Thermostat Automatisierung mit mehreren Bedingungen: Die folgende Funktion würde also jeden einzelnen Wert mit allen übrigen vergleichen und sobald eine dieser Kombinationen/Verknüpfungen aus dem kompletten array true ist, true herausgeben? Damit könnte man also auch noch mehr Personen zur Anwesenheitskontrolle hinzufügen und es würde immer die Heizung eingeschaltet werden, sobald mindestens eine Person da ist? Ja - Du kannst das um beliebige Personen erweitern - funktioniert immer sobald eine Person da ist. Ich denke, dass das auch so gewünscht ist. Nochmal: myfunc($accumulator, $value[, $index[, $array]]) Die function innerhalb der reduce function definiert die Bedeutung der Variablen in der Reihenfolge, in der sie bei der Definition definiert werden. Der 1. Wert ist der akkumulierte Wert (egal ob der $i,$j,$A, $accumulator oder $Ergebnis heißt), der 2. Wert ist der Wert ist der Wert mit dem durch das Array gegangen wird (egal ob der $i,$j,$A, $value oder $wert heißt). Insofern ist es egal wie die Variable heißt (in JSONATA müssen nur alle Variablen mit einem $-Zeichen beginnen). Die Bedeutung der jeweiligen Variablen ergibt sich aus der Position bei der Definition der Funktion $reduce(function($accumulator,$value){$accumulator or $value}) Noch eine andere Frage: Was bewirkt beim "Zeitfenster Heizen" an Wochentagen die erste change Regel? Also "Setze msg.payload auf/nach []" Wird dadurch soetwas wie ein Vektor erstellt, der dann mit den folgenden Regeln gefüllt wird und für [0],[1],[2],[3] usw wird eine neue Variable hinzugefügt? Die Payload wird als leeres Array definiert. Normalerweise ist die payload ein skalarer Wert und durch die Definition eines leeren Arrays - kann ich in den anschließenden Regeln auf die Positionen des Arrays setzen. Wenn Du die erste Regel wegschmeisst, dann wirst Du sehen, dass es eine Fehlermeldung gibt, dass ein skalarer Wert nicht in ein Objekt gewandelt werden kann. Deshalb wird die payload am Anfang als leeres Array definiert. Sobald Du also diese Fehlermeldung bekommst, kannst Du durch ein leeres Objekt oder leeres Array diesen Fehler umgehen. Wenn Du die payload nicht als leeres Array definierst und dann versuchst mit payload[0] etc. ein Element eines Arrays definieren willst - erhälst Du folgende Fehlermeldungen: [image: 1678404324680-665fc587-73fb-4b65-8aa9-18bce0284172-image.png] Also wenn Du solche Fehlermeldungen hast, dann weißt Du zukünftig, wie Du sie vermeiden kannst. ;) Diese ist super um das ganze mit der CHange Node zu lösen. Wird hier 'minute' dafür herangezogen um den Abgleich anhand der Minuten zu machen? Wenn zB "08:05" dort stehen würde anstatt "08:00" und 'hour' am Ende, dann würde bereits ab 08:01 Uhr false herausgegeben werden? 08:00 ist ein schlechtes Beispiel weil wir es schon exkludiert haben. Sprich um 08:00 wird schon auf false umgeschaltet (s. Klammern). Gesetzt den Fall Du würdest es inkludieren, dann wird mit hour nur die Stunden betrachtet. Es handelt sich also um die Angabe der Granularität - wenn Du auf hour machen würdest wird nur geschaut ob es 08:xx ist - das heisst es ist true egal ob es 08:10 oder 08:30 ist. Wenn dieser Parameter nicht definiert wird, wird bis auf Millisekunden-Ebene überprüft. Hier mal die Originialdoku: https://momentjs.com/docs/#/query/is-between/ Wichtig ist dass die Ränder der Zeiträume per Default ausgeschlossen werden, wenn Du die Klammern nicht angibst. Der letzte Satz in diesem Kapitel: [image: 1678402916539-c5746119-16d2-4ff8-a599-5162d9b3b6ae-image.png] So nun zur Granularität: [image: 1678402816442-d8accd74-0307-4339-87dc-a9e97c7f065a-image.png] Wenn man dieses Beispiel also verstehen will, sieht man im 1. Beispiel dass ein false rauskommt obwohl der 20. Oktober 2010 ja zwischen dem 1. Januar 2010 und dem 1.Januar 2012 liegt. Das liegt daran - dass ohne Angaben der Klammern die Ränder ausgeschlossen werden. Da wir als Granulariät das Jahr haben ist das ganze Jahr 2010 und das ganze Jahr 2012 ausgeschlossen und deshalb ergibt das 1. Beispiel false - weil das ganze Jahr 2010 ausgeschlossen wird, AUCH wenn der 20.Oktober 2010 dazwischen liegt. Im unteren Beispiel ist der Bereich 20.10.2010 zwischen dem 31.12.2009 und 1.1.2012 ist true, weil die kompletten Jahre 2010 und 2011 gültig sind.
  • Finde "ioBroker get" node nicht

    21
    0 Stimmen
    21 Beiträge
    2k Aufrufe
    liv-in-skyL
    @arno-josef-abler sagte in Finde "ioBroker get" node nicht: Home Assistant, influxDB, KNX, Sonos, TP Link Tapo, etc. machen ihre Nodes nicht davon abhängig du vergleichst äpfel mit birnen :-)
  • [error] [function:generateChart] TypeError: ....

    20
    0 Stimmen
    20 Beiträge
    1k Aufrufe
    W
    @mickym vielen Dank und schönen Abend. VG Sascha
  • wenn keine neue Nachricht Werte auf xx setzen

    3
    0 Stimmen
    3 Beiträge
    129 Aufrufe
    L
    @mickym Tiptop!! Klappt in der Simulation wie gewünscht! Unter echten Bedingungen kann ich leider gerade nicht testen, da ist zuviel Neuschnee auf den Modulen. Also konstant 0 Leistung :-( Gruß L.T.
  • debug node lässt sich nicht aktivieren [gelöst]

    26
    1
    0 Stimmen
    26 Beiträge
    2k Aufrufe
    mickymM
    @foto2004 Einfach den ersten Beitrag editieren und in der Überschrift [gelöst] einfügen.
  • Laufschrift in einem NodeRed Flow erzeugen

    12
    2
    6 Stimmen
    12 Beiträge
    2k Aufrufe
    A
    @mickym Vielen Dank für deine Mühe. Ich hatte noch das PRoblem, dass er immer beim Holen der Titelinformation den Text neugetriggert hat auch wenn sich inhaltlich nichts geändert hat. Das habe ich aber mit einem filter node wegbekommen, dass er bis Wertänderung blockiert. Super Ding!!!
  • Node-Red Modbus mehrere Slave ID´s abfragen

    javascript node-red
    36
    1
    0 Stimmen
    36 Beiträge
    5k Aufrufe
    G
    @malaus sagte in Node-Red Modbus mehrere Slave ID´s abfragen: Wieso nicht das Flex Getter benutzen? Mein Raspi4 kommuniziert über die Modbusschnittstelle mit einem SAIA Regler. Also nur eine Adresse, aber mehrere Modbusregister. Anfangs hatte ich mehrere function Nodes im Einsatz. Aber es gibt hier User die dieses Node geradezu ablehnen. Ich komme aber nicht mehr drauf wer daß nur sein könnte.:blush: Leider hat er auch noch Recht, es geht auch anders. [image: 1676924082665-0be670a1-bb02-4dbd-b3c4-a6106f931d98-grafik.png] Und natürlich kannst Du auch das FlexGetter verwenden. Ich wollte nur die Gedanken mal in eine andere Richtung lenken.
  • Werte aus JSON übernehmen

    14
    0 Stimmen
    14 Beiträge
    876 Aufrufe
    L
    @mickym Da hätte ich drauf kommen können Da ich die Werte in iobroker nicht weiter bearbeite sondern lediglich in ein virtuelles Geräte meines SmartHome schreibe, reicht mir das. Nochmals Danke!
  • Hilfe kann keine Payloads schreiben

    5
    1
    0 Stimmen
    5 Beiträge
    201 Aufrufe
    F
    @mickym Das es nicht normal ist ist mir auch klar. Browser bereits gewechselt und Node-red bereits neu gestartet naja auf Redxdit gibts wohl die lösung, es liegt wohl an dem monaco editor den mal neuinstallieren
  • 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
    2k 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
    400 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
    523 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
    994 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... :grin:
  • 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?

721

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge