Citywasseranschluss am Wowa

Hallo zusammen,

bin leider kein Programmierer, deshalb die bitte hier, könnte jemand hier eine Funktion in NodeRed programmieren, die wie folgt aussehen soll. Immer wenn der Schwimmerschalter auf 20% fällt soll ein Ventil z.B Relais 8 auf dem Board angehen und bei 80% Füllung abschalten, benutze den Schwimmerschalter mit 0-190 Ohm. Die Funktion sollte über das Touchpanel ein und ausschaltbar sein. Muss man eventuell auch was am Touchpanel ändern?
Eine step by step Anleitung wäre natürlich Top!

Danke im Voraus

Ede

Hey,

das kannst du einfach über eine Inject Node und eine Function Node realisieren.

Im Backend im Relay Controller fügst du dir zuerst ein Inject ein und hängst dahinter die Function mit dem folgenden Code:

var waterlevel = parseInt(global.get("Level1"))

if (waterlevel < 20) {
    msg.payload = true
    return msg;
}
else if (waterlevel > 80) {
    msg.payload = false
    return msg;
}

den Ausgang der Function Node verbinden wir mit der entsprechenden Switch Node, die letztendlich die Schaltung vornimmt.

Im Code schauen wir zuerst was in der globalen Variable von Wasserlevel 1 steht. Ist der Wert unter 20, geben wir als msg.payload = true an die Switch Node weiter (true bedeutet an), und wenn der Wert über 80 ist schalten wir das ganze wieder aus (also false). Ist der Wert zwischen 80 und 20 passiert nichts.
Dann musst du nur noch die Inject Node so einstellen, dass in einem regelmäßigen Intervall die Variable abgefragt wird, z.B. 1x pro Minute (das Feintuning musst du dann für dich persönlich anpassen).

Je nachdem mit welche Switch Node das Ganze dann verbindest, kannst du auch im Touchdisplay den entsprechenden Schalter benutzen um manuell zu schalten.

Viel Erfolg!

Hier sind noch die beiden Nodes, sodass du sie direkt bei dir in Node-Red importieren kannst:

[{"id":"b21f309ed27fe153","type":"inject","z":"e2902b7e.e22d58","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":"10","topic":"","payload":"","payloadType":"date","x":250,"y":1140,"wires":[["e75da9def280269a"]]},{"id":"e75da9def280269a","type":"function","z":"e2902b7e.e22d58","name":"check global var \"Level1\"","func":"var waterlevel = parseInt(global.get(\"Level1\"))\n\nif (waterlevel < 20) {\n    msg.payload = true\n    return msg;\n}\nelse if (waterlevel > 80) {\n    msg.payload = false\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":1140,"wires":[[]]}]

Step-by-Step:

  • Das Node-Red Backend aurufen unter http://RPI-IP:1880
  • Den Relay Controller auswählen (Tabs/Flows in der Leiste oben)
  • Die Nodes von drei Zeilen weiter oben kopieren
  • In Node-Red ganz rechts oben auf die drei Punkte, dann auf Importieren und den Code dort einfügen
  • Die Nodes vor die entsprechende Switch Node schieben und verbinden
  • Das Intervall der Inject Node anpassen
  • Rechts oben auf den roten Deploy Button drücken um das Ganze zu übernehmen

Danke @Vincent , wirklich super erklärt.

Gruß Ronald

1 Like

Erstmal vielen Dank für den Support, hat sehr gut geklappt, nur hab ich ein Problem, ich habe das auf den Switch 8 gelegt, und die Zeit auf 10s eingestellt, jetzt schaltet das Relais am Board alle 10s ein und aus im Wechsel, unabhängig vom Schwimmerschalter. Was habe ich falsch gemacht?

Stimmt, mein Fehler, das hab ich nicht zuende gedacht…

In der erstellten Function Node muss der Code folgendermaßen ergänzt werden:

var waterlevel = parseInt(global.get("Level1"))

if (waterlevel < 20) {
    msg.payload = true
    global.set("eight",true);
    flow.set("Rupdate",true);
    return msg;
}
else if (waterlevel > 80) {
    msg.payload = false
    global.set("eight",false);
    flow.set("Rupdate",true);
    return msg;
}

Die Verbindung zu den Hardware-Relais wird hinter der Switch Node nochmal hergestellt und geschalten, deswegen das ständige Hin- und Herschalten… Um das zu Umgehen setzen wir die Variable “Rupdate” auf true. Damit aber natürlich trotzdem geschaltet wird, übergeben wir gleichzeitig die globale Variable “eight” entsprechend mit. Danach fügen wir noch eine Delay Node ein, stellen diese auf 600ms, damit wir “Rupdate” wieder auf false umstellen können.

Damit das Ganze auch bei Homebridge ankommt verbinden wir noch die Link-Out Node (quasi die zweite Node nach dem Switch) mit unserer Function.

[{"id":"e32c21fafb91ef65","type":"inject","z":"e2902b7e.e22d58","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":830,"y":1340,"wires":[["e6c98cbb3dab0c25"]]},{"id":"e6c98cbb3dab0c25","type":"function","z":"e2902b7e.e22d58","name":"check global var \"Level1\"","func":"var waterlevel = parseInt(global.get(\"Level1\"))\n\nif (waterlevel < 20) {\n    msg.payload = true\n    global.set(\"eight\",true);\n    flow.set(\"Rupdate\",true);\n    return msg;\n}\nelse if (waterlevel > 80) {\n    msg.payload = false\n    global.set(\"eight\",false);\n    flow.set(\"Rupdate\",true);\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1030,"y":1340,"wires":[["f37320d0.ce86","3841f31f7ffdc5e9","3d012ced.3740b4"]]},{"id":"d7a3bfdeb3dffc00","type":"function","z":"e2902b7e.e22d58","name":"set \"Rupdate\" false","func":"flow.set(\"Rupdate\",false);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1370,"y":1360,"wires":[[]]},{"id":"3841f31f7ffdc5e9","type":"delay","z":"e2902b7e.e22d58","name":"600","pauseType":"delay","timeout":"600","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1210,"y":1360,"wires":[["d7a3bfdeb3dffc00"]]}]

Schau mal ob das so passt :slight_smile:

Hi Vincent,

das Relais schaltet, aber genau falsch rum!

aktuell: Schwimmerschater unteterhalb 20%, Relais schaltet nicht, Schwimmerschalter oberhalb 80% Relais schaltet

Und im Display ist das Relais aus, am Relaisboard auch aus, aber bei Pekaway Contol ist es an!!!

Welche Software Versionen benutzt du auf dem Raspberry und auf dem Display?

Raspberry 0.7.4
Display 0.4