NEWS
Ich brauche eine Funktion um 2 Werte zu vergleichen und dann dann Fußbodenheizung l Aus/An zu schalten
-
Hab es schnell mal zusammen geschustert und ES LEBT `
Aber mit erheblichen Fehlfunktionen und deshalb absolut als unbrauchbar anzusehen.Ich habe schon länger nicht mehr soviel Mist zusammengeschustert. Aber mal eben schnell in einem vorh. Flow taugt eben nicht. Auch wenn auf den ersten Blick das Ergebnis zu stimmen scheint.
@Der_LuLe:Es hat mir keine Ruhe gelassen `
Mir auch nicht, deshalb habe ich mir deinen Flow mal genauer angesehen. Du hast einige Dinge da drin, die überhaupt keine Funktion haben. Aus dem gesamten Strang mit dem json-Node kommt kein Ergebnis heraus.Das MQTT-Node habe ich für die Testzwecke durch ein inject-Node ersetzt. Über das Node wird nun der theoretische String aus deinem MQTT-Input-Node an das function-Node übergeben.
Im function-Node wird der Temperaturwert aus dem String als Sollwert herausgelesen und in eine Floatvariable geschrieben. Danach werden Soll- und Istwert verglichen und eine Entscheidung nach falsch oder richtig getroffen. Dies kannst Du natürlich auch als Integerwert bzw. Binärwert 0 oder 1 ausgeben lassen. Die erforderlichen Einträge findest Du in den Zeilen 15 und 20. Das auskommentieren und so ist dir ja geläufig.
Jetzt gilt es zu testen und uns ein Feedback zu geben.
! ````
[{"id":"92f15c74.348148","type":"function","z":"de87f48f.fcaa78","name":"Temp aus MQTT","func":"var sollwert = flow.get("Sollwert");\nvar str = msg.payload;\nvar res = str.replace(/"/gi, "");\nvar leng = res.length;\nvar n = (res.indexOf("Temperatur"))+12;\nvar t = res.substr(n, (leng-n));\nvar temp = parseFloat(t.slice(0, (t.indexOf(","))));\nflow.set("Istwert", temp);\n// Wertevergleich\n\nnode.send({payload: {"Istwert": temp,\n " Sollwert": sollwert}});\nif (sollwert < temp) {\nmsg.payload = false; // Boolean Wert\n//msg.payload = 0; //Integerwert/Binaerwert\n}\nelse\n{\nmsg.payload = true; // Boolean Wert\n//msg.payload = 1; //Integerwert/Binaerwert\n}\nreturn msg;","outputs":1,"noerr":0,"x":367,"y":830,"wires":[["2e03f0ab.7a94a8"]]},{"id":"d4fe0d12.195708","type":"inject","z":"de87f48f.fcaa78","name":"Istwert aus MQTT","topic":"","payload":"{"Time":"2019-01-01T19:39:30","AM2301":{"Temperature":19.7,"Humidity":57.5},"TempUnit":"C"}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":830,"wires":[["92f15c74.348148"]]},{"id":"33dda2b9.94a0ce","type":"inject","z":"de87f48f.fcaa78","name":"","topic":"","payload":"19","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":"","x":110,"y":700,"wires":[["d3f89c94.2131c"]]},{"id":"d3f89c94.2131c","type":"change","z":"de87f48f.fcaa78","name":"","rules":[{"t":"set","p":"Sollwert","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":740,"wires":[[]]},{"id":"3e4c20d1.e33588","type":"inject","z":"de87f48f.fcaa78","name":"","topic":"","payload":"21","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":"","x":110,"y":780,"wires":[["d3f89c94.2131c"]]},{"id":"2e03f0ab.7a94a8","type":"debug","z":"de87f48f.fcaa78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":587,"y":830,"wires":[]},{"id":"364ae204.afcc46","type":"comment","z":"de87f48f.fcaa78","name":"Sollwerte","info":"","x":96,"y":740,"wires":[]}] -
Erstmal vielen Dank!
Ok jetzt komme ich definitiv nicht mehr mit was da in der Funktion steht
ich hab es ausprobiert aber es schein noch ein Problem zu geben… es geht wenn ich die Butten drücke aber nicht mit dem MQTT (die soll ich doch direkt an die Funktion hängen oder) Hab den dibug mal umgestellt auf complete msg object dann sieht da vom MQTT so aus:
{"topic":"Anna/Temperatur/SENSOR","payload":"{"Time":"2019-01-02T15:54:36","AM2301":{"Temperature":20.0,"Humidity":61.6},"TempUnit":"C"}","qos":2,"retain":false,"_msgid":"278e5297.23aa3e"}
das manuell ausgelöste so:
{"_msgid":"13d16db.175f992","topic":"","payload":"{"Time":"2019-01-01T19:39:30","AM2301":{"Temperature":20,"Humidity":57.5},"TempUnit":"C"}"}
ob da der Fehler steckt :?:
Ich würde dir gerne alle Infos geben die du brauchst aber wie gesagt das ist mir jetzt doch zu hoch, das erste hab ich ja noch ansatzweise verstanden...
Jetzt weiß ich wie sich meine Eltern fühlen wenn wieder was am Handy nicht geht :lol:
LG Lukas
-
Oder moment….es geht... ich glaub ich war zu ungeduldig :oops:
Warte...
-
Mann wie peinlich… es geht! Ich war nur zu ungeduldig.
Wie kann ich das umstellen das es mit 2 MQTT-Werten arbeitet. Also: "Rücklauf+10" > "Vorlauf" dann Aus, sonst An.
Kann man dir ein <emoji seq="1f37a"></emoji> ausbeben für deine Mühen :oops:
-
Wie kann ich das umstellen das es mit 2 MQTT-Werten arbeitet. Also: "Rücklauf+10" > "Vorlauf" dann Aus, sonst An. `
Damit ich dir folgen kann, mache bitte immer Screenshots von deinem Flow und ggf., von den debug Werten. So ist es für mich einfacher deine Fragen besser zu verstehen.Auch der oben zitierte Satz läßt mich Dinge vermuten, aber auf der Basis von Vermutungen kann ich leider nicht programmieren. Da geht es mir dann wie deinen Eltern. :mrgreen:
Theoretisch lassen sich unendliche viele Werte in den function-Node verarbeiten.
Deshalb meine Bitte erstelle eine kleine Funktionsbeschreibung. Hilfreich kann auch eine kleine Handzeichnung sein, aus der ich den Aufbau der Anlage erkennen und verstehen kann. So etwas muss man eigentlich immer zu aller erst machen. In die Zeichnung kann man dann später die Datenpunkte und Regelbeziehungen eintragen.
Wenn dies alles steht und die Inbetriebnahme folgt, dann zeigt sich erst das Regleverhalten der Anlage. Und aus Erfahrung kann ich dir sagen, man hat sich oft viele Gedanken gemacht und im Praxistest ist man dann vom Ergebnis entäuscht. Ist mir selber schon bei einer Solaranlage so passiert. Die Anlage hatte hydraulisch so seine Tücken und die Außenfaktoren, wie z.B. plötzlich Wolke vor Sonne und Wolke wieder weg, ist regelungstechnisch schon eine spannende Aufgabe.
Fazit: Um effektiv weiter helfen zu können brauche ich noch mehr Hitergrundinformationen.
Tipp: Von einer Rücklauftemperatursteuerung bei einer Heizungsanlage wo der hydraulische Abgleich nicht zu 100% in Ordnung ist würde ich dir abraten. So etwas hatte ich schon einmal in einem großen Bürogebäude. Nannte sich Rücklauftemperaturbegrenzung. Ergebnis: die an dem Strang befindlichen Büros wurden nicht warm und das Telefon stand nicht mehr still. :shock:
-
Ok verstehe ich - ich mache dir ne Zeichnung (die wird nicht gut sein ) und erkläre gerne was ich da mit meinem Kollegen zusammen gesponnen habe.
Gib mir ein paar Tage. Muss wieder Arbeiten + Frau und Kinder :roll:
So viel schon mal wenn alle Kreise gleichzeitig bei hydraulischem Abgleich laufen muss ich die Vorlauftemperatur unnötig hoch fahren damit auch das 2. Kinderzimmer schön warm wird,was bei meiner Wärmepumpe heißt, dass sie ist nicht mehr so effizient ist. Ein weiteres Problem war das der Rücklauf schon so warm war das die Heizung abgeschaltet hat obwohl das Kinderzimmer noch nicht warm genug war. Die Raumthermostate sind Schrott (analog und viel zu träge). ich könnte mir natürlich für alle Zimmer die neusten super tollen Thermostate kaufen… dachte aber es würde mehr Spaß machen da was eigenes für wenig Geld zu programmieren. Jetzt hab ich die meiste Hardware zusammen aber es hängt am programmieren. Ein WeMos mini mit Temperaturfühlern und einem Relaybord für die 230V Stellmotoren hab ich vertig aber noch nicht im Verteiler montiert - an den Sonoff Basics die Lampen schalten hängen Temperaturfühler in fast allen Zimmern... jetzt hab ich doch fast alles geschrieben :lol:
Inspiration hatte ich von hier... http://www.controme.com
-
Ja, jetzt verstehe ich schon einmal besser worum es geht.
Vorne weg, ich helfe dir gerne weiter die Steuerung aufzuauen.
Jedoch kann ich es mir nicht verkneifen einige Worte zur Grundproblematik zu verlieren.
Dass was Du da vor hast wird wahrscheinlich nicht zum gewünschten Erfolg führen. Du baust dir genau die Problematik auf, die ich in meinem letzten Post mit dem Bürogebäude beschrieben habe. Mit einer Steuerungs- und Regelungstechnik kann man einen fehlenden hydraulischen Abgleich nicht kompensieren und dieser fehlt, oder ist nicht richtig eingestellt. Eine Fußbodenheizung steuerungstechnisch in den Griff zu bekommen ist wegen der Massenträgheit fast unmöglich.
Da ich hier aber nicht als Besserwisser auftreten möchte, und deine Anlage nur aus den bisherigen Beschreibungen von dir kenne, möchte ich jetzt mit reinen Ratschlägen auch aufhören und dich lieber bei der Umsetzung deines Projektes mit Node Red unterstützen. So etwas habe ich bisher immer nur mit professionellen Reglern für die Mess-, Steuer- und Regelungstechnik gemacht, jedoch bisher noch nicht mit einem Einplatinencomputer.
Lass dir Zeit mit der kleinen Zeichnung und der Beschreibung was wie wo und worüber passieren soll. Sehe es mal so, es wird uns bei der Umsetzung und dir bei der Inbetriebnahme und später bei der Fehlersuche sicher auch helfen.
Bis dahin warte ich auf weiteren Input von dir. Der Weg ist das Ziel und am Ende haben wir alle etwas dazu gelernt.
-
Danke, sehr anständig von dir
Es gibt Fehler die muss man selber machen - aber ich gebe die Hoffnung nicht auf das es ansatzweise so gut klappt wie die das bei controme hinbekommen :lol:
Den hydraulischen Abgleich hab ich schon mit dem Kumpel versucht aber dann muss ich den Vorlauf höher setzen und die Effizienz geht in den Keller. Die Anlage ist etwas klein für unser Haus, da sind wir schlecht beraten worden :?
Schönen Abend noch.
-
Es gibt Fehler die muss man selber machen - aber ich gebe die Hoffnung nicht auf das es ansatzweise so gut klappt wie die das bei controme hinbekommen :lol: ` Bisher sehe ich da nur Webeversprechungen. Und wenn ich schon lese 35% Energieeinparung. Zum todlachen. Ich habe mir mal in Bezug auf eine Heizungssanierung alle prognostizierten Energieeinsparungen aufaddiert. Ich lag bei > 100%.
Aber das mit den Fehlern unterschreibe ich sofort.
@Der_LuLe:Den hydraulischen Abgleich hab ich schon mit dem Kumpel versucht aber dann muss ich den Vorlauf höher setzen und die Effizienz geht in den Keller. ` Keine Ahnung ob wir von der selben Sache sprechen. Bei einem hydraulischen Abgleich bekommt jeder Heizkreis nur die erforderliche Wärmemenge die für den Raum notwendig ist. Dabei bleibt seine Wassermenge und die Temperturdifferenz zwischen Vor- und Rücklauf nahezu konstant, egal was die anderen Heizkreise machen.
@Der_LuLe:Die Anlage ist etwas klein für unser Haus, da sind wir schlecht beraten worden :? `
Passiert offensichtlich sehr häufig. Mein Nachbar hat sich auch eine Wärmepumpe einbauen lassen. Der gerichtlich bestellte Gutachter kam zu der gleichen Feststellung wie ich. Die Anlage hatte erhebliche Funktionsmängel und sollte nachgebessert werden. Letztendlich wurde sie vollständig demontiert und der Nachbar bekam den Kaufpreis erstattet.Er hat sich wieder eine Wärmepumpe einbauen lassen, die läuft jedenfalls schon deutlich besser.
-
Mir auch nicht, deshalb habe ich mir deinen Flow mal genauer angesehen. Du hast einige Dinge da drin, die überhaupt keine Funktion haben. Aus dem gesamten Strang mit dem json-Node kommt kein Ergebnis heraus. `
Ich möchte es mal wie unsere Politker halten. Was interessiert mich mein Geschwätz von gestern. Kurzum meine Bewertung ist falsch, der Fehler lag auf meiner Seite. Nachdem mich rewenode auf den richtigen Weg gebracht hat, habe ich meinen Fehler erkannt und korrigiert. Zu meiner Entschuldigung schiebe ich die Schuld mal auf die inject-Node Ersatzvornahme für das MQTT-Input-Node.Als Wiedergutmachung hier die gewünschte Funktion:
@Der_LuLe:Wie kann ich das umstellen das es mit 2 MQTT-Werten arbeitet. Also: "Rücklauf+10" > "Vorlauf" dann Aus, sonst An. `
! ````
[{"id":"4a6fddc5.f5f2ac","type":"json","z":"de87f48f.fcaa78","name":"","property":"payload","action":"","pretty":false,"x":270,"y":960,"wires":[["15c68f96.25799"]]},{"id":"8706c33.a5797c","type":"debug","z":"de87f48f.fcaa78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","x":710,"y":1040,"wires":[]},{"id":"f3cfb437.1faf6","type":"inject","z":"de87f48f.fcaa78","name":"VT aus MQTT","topic":"","payload":"{"Time":"2019-01-01T19:39:30","AM2301":{"Temperature":22.7,"Humidity":57.5},"TempUnit":"C"}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":960,"wires":[["4a6fddc5.f5f2ac"]]},{"id":"33238960.049676","type":"inject","z":"de87f48f.fcaa78","name":"RT aus MQTT","topic":"","payload":"{"Time":"2019-01-01T19:39:30","AM2301":{"Temperature":19.7,"Humidity":57.5},"TempUnit":"C"}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":1020,"wires":[["2ae5b151.4f6ea6"]]},{"id":"2ae5b151.4f6ea6","type":"json","z":"de87f48f.fcaa78","name":"","property":"payload","action":"","pretty":false,"x":270,"y":1020,"wires":[["752c058f.78feb4"]]},{"id":"15c68f96.25799","type":"change","z":"de87f48f.fcaa78","name":"VT_Temp_Istwert","rules":[{"t":"set","p":"VT_Temp","pt":"flow","to":"payload.AM2301.Temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":960,"wires":[["62a72741.bd956"]]},{"id":"752c058f.78feb4","type":"change","z":"de87f48f.fcaa78","name":"RT_Temp_Istwert","rules":[{"t":"set","p":"RT_Temp","pt":"flow","to":"payload.AM2301.Temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":1020,"wires":[["62a72741.bd956"]]},{"id":"62a72741.bd956","type":"function","z":"de87f48f.fcaa78","name":"Temp aus MQTT","func":"var dt = flow.get("SW_dt"); // Vorgabe Temperaturdiffernz VT zu RT\nvar VT = flow.get("VT_Temp"); //Messwert Vorlauftemperatur\nvar RT = flow.get("RT_Temp"); //Messwert Ruecklauftemperatur\n// Wertevergleich\n\nnode.send({payload: {"VT_Temp": VT,\n "RT_Temp": RT,\n "SW_dt": dt,\n "RT + dt": (RT+dt)}});\nif ((RT+dt) > VT) {\nmsg.payload = false; // Boolean Wert\n//msg.payload = 0; //Integerwert/Binaerwert\n}\nelse\n{\nmsg.payload = true; // Boolean Wert\n//msg.payload = 1; //Integerwert/Binaerwert\n}\nreturn msg;","outputs":1,"noerr":0,"x":710,"y":988,"wires":[["8706c33.a5797c"]]},{"id":"6d590582.38d554","type":"inject","z":"de87f48f.fcaa78","name":"SW Temperatudiffernz VL<-->RL","topic":"","payload":"10","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":168,"y":1080,"wires":[["9672b859.1c6458"]]},{"id":"9672b859.1c6458","type":"change","z":"de87f48f.fcaa78","name":"SW Temp_Differenz","rules":[{"t":"set","p":"SW_dt","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":480,"y":1080,"wires":[[]]}]Ich habe es zum besseren Verständnis versucht so einfach wie möglich zu halten. Die ersten beiden inject-Nodes musst Du durch deine MQTT-Input Nodes ersetzen und im dritten inject Node kannst Du die gewünschte Temperaturdifferenz einstellen. Im Moment stehen dort die gewünschten 10K. An dem Strang kannst Du dann auch jederzeit ein Dashboard numeric Input Node anschließen.