NEWS
Ich brauche eine Funktion um 2 Werte zu vergleichen und dann dann Fußbodenheizung l Aus/An zu schalten
-
So…. ich versuche als Leihe immer noch meine Heizung mit NodeRed etwas smarter zu machen.
Aktuelles Problem 1 - ich schaffe es nicht eine Funktion zusammen zu basteln die einen Ist wert mit dem Soll wert abgleicht :oops:
Ist Temperatur wird von einem Sonoff mit Tasmota über MQTT geliefert...
dachte wenn ich einfach ... IF (Wert msg.payload.Soll) < (Wert msg.payload.IST) dann payload 1, else payload 0
Ich hab aber eigentlich null Ahnung von Jason und der Grammatik...
Problem 2 - Ich will den Rücklauf mit dem Vorlauf abgleichen... also: "Vorlauf-10" => "Rücklauf" dann aus/an
Hoffe ihr versteht was ich meine :?
Könnt euch ja mal meinen letzten Versuch anschauen :arrow:
[
{
"id": "62c6a2b7.ab352c",
"type": "inject",
"z": "f271d39c.050e7",
"name": "",
"topic": "",
"payload": "19",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 350,
"y": 520,
"wires": [
[
"110e26ef.e67a89"
]
]
},
{
"id": "110e26ef.e67a89",
"type": "change",
"z": "f271d39c.050e7",
"name": "",
"rules": [
{
"t": "move",
"p": "payload",
"pt": "msg",
"to": "payload.SOLL",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 610,
"y": 540,
"wires": [
[
"e4d1a9e.8a53758",
"9dc5e678.038418"
]
]
},
{
"id": "4edc1450.0a4d2c",
"type": "inject",
"z": "f271d39c.050e7",
"name": "",
"topic": "",
"payload": "21",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 350,
"y": 580,
"wires": [
[
"110e26ef.e67a89"
]
]
},
{
"id": "e4d1a9e.8a53758",
"type": "function",
"z": "f271d39c.050e7",
"name": "Vergleich",
"func": "\nif ('payload.SOLL' < 'payload.IST') \nmsg.payload = "0" ;\nelse\nmsg.payload = "1" ;\n\nreturn msg;\n\n//ontext.target = context.target || 0.0;\n//context.sensor = context.sensor || 0.0;\n\n//if (msg.topic === 'sensor_temperature') {\n// context.sensor = msg.payload;\n//} else if (msg.topic === 'target_temperature') {\n// context.target = msg.payload;\n//}\n\n//Cooling with hysteresis\n//var setpoint = context.target;\n//var hysteresis = 1;\n//var current = context.sensor;\n//if (current >= (setpoint+hysteresis)) {\n// msg.payload = 1;\n//}\n//else if(current <= (setpoint-hysteresis)) {\n//\tmsg.payload = 0;\n//}\n//return msg;\n\n// No hysteresis below, typically not desired\n//Heating\n//if (context.target >= context.sensor) {\n// return {payload: 1};\n//} else {\n// return {payload: 0};\n//}\n\n//Cooling\n//if (context.target >= context.sensor) {\n// return {payload: 0};\n//} else {\n// return {payload: 1};\n//}",
"outputs": 1,
"noerr": 0,
"x": 880,
"y": 580,
"wires": [
[
"8fff579b.4906b8"
]
]
},
{
"id": "9dc5e678.038418",
"type": "debug",
"z": "f271d39c.050e7",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 890,
"y": 520,
"wires": []
},
{
"id": "42b53ded.7c10b4",
"type": "change",
"z": "f271d39c.050e7",
"name": "",
"rules": [
{
"t": "move",
"p": "payload",
"pt": "msg",
"to": "msg.payload.IST",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 590,
"y": 640,
"wires": [
[
"e4d1a9e.8a53758",
"5999bbdc.12e724"
]
]
},
{
"id": "9189d0e.bd37f3",
"type": "change",
"z": "f271d39c.050e7",
"name": "",
"rules": [
{
"t": "move",
"p": "payload.AM2301.Temperature",
"pt": "msg",
"to": "msg.payload.IST",
"tot": "msg"
},
{
"t": "delete",
"p": "payload.Time",
"pt": "msg"
},
{
"t": "delete",
"p": "payload.TempUnit",
"pt": "msg"
},
{
"t": "delete",
"p": "payload.AM2301.Humidity",
"pt": "msg"
},
{
"t": "delete",
"p": "retain",
"pt": "msg"
},
{
"t": "delete",
"p": "topic",
"pt": "msg"
},
{
"t": "delete",
"p": "payload.AM2301",
"pt": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 580,
"y": 700,
"wires": [
[
"e4d1a9e.8a53758",
"102d391c.8b7fd7"
]
]
},
{
"id": "8fff579b.4906b8",
"type": "debug",
"z": "f271d39c.050e7",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 1130,
"y": 580,
"wires": []
},
{
"id": "abd4bdf7.17cbe",
"type": "inject",
"z": "f271d39c.050e7",
"name": "",
"topic": "",
"payload": "20",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": "",
"x": 350,
"y": 640,
"wires": [
[
"42b53ded.7c10b4"
]
]
},
{
"id": "5999bbdc.12e724",
"type": "debug",
"z": "f271d39c.050e7",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 870,
"y": 640,
"wires": []
},
{
"id": "51a1b5fd.1bbd2c",
"type": "json",
"z": "f271d39c.050e7",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 350,
"y": 700,
"wires": [
[
"9189d0e.bd37f3"
]
]
},
{
"id": "102d391c.8b7fd7",
"type": "debug",
"z": "f271d39c.050e7",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 870,
"y": 700,
"wires": []
},
{
"id": "b4e45187.9759d",
"type": "mqtt in",
"z": "f271d39c.050e7",
"name": "",
"topic": "Anna/Temperatur/SENSOR",
"qos": "2",
"broker": "376dd3.71d9e22e",
"x": 120,
"y": 700,
"wires": [
[
"51a1b5fd.1bbd2c"
]
]
},
{
"id": "376dd3.71d9e22e",
"type": "mqtt-broker",
"z": "",
"name": "",
"broker": "111.111.111.10",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]
-
So etwas zu programmieren sollte nicht wirklich ein Problem sein. Dafür kannst Du sicher auch Blockly direkt unter ioBroker nehmen. Warum willst Du es unbedingt mit Node Red machen?
Eine Fußbodenheizung sollte man nicht so einfach mal ein- und ausschalten. Fußbodenheizungen sind äußert träge in ihrem Regelverhalten. Was möchtest Du mit dem Ein- und Ausschalten denn bezwecken.
-
Das ist schon richtig so, ich hab das mit nem Kumpel so durch gesprochen der hat das mal gelernt - Es sollen auch nur die einzelnen Kreise für 5 Min. abgestellt werden damit die anderen Räume effizienter aufgeheizt Werden könne und die Vorlauftemperatur möglichst niedrig/effizient ist…
(bitte kommt mir nicht mit Hydraulischer Abgleich das kann man noch besser lösen)
Mit Blockly kenne ich mich noch null aus... bin ich aber offen für. Hauptsache es geht
Mit NodeRed hab ich halt schon ein wenig Erfahrung...
Gruß Lukas
-
Den hydraulischen Abgleich hätte ich dir als nächstes um die Ohren gehauen. :lol:
Auch wenn ich eure Abschaltelogik und den damit erhofften Erfolg des schnelleren Aufheizen anderer Räume nicht nachvollziehen kann, die von dir gewünschte Funktion sollten wir hinbekommen. Und das Abschaltethema selber muss ich ja auch nicht verstehen.
Ich wollte auch ein wenig Zeit sparen und hatte gehofft, dass sich rewenode in der Zwischenzeit meldet und eine Lösung aus dem Ärmel zaubert. Ich mache mir später mal Gedanken dazu.
Wie sieht den der Ausgabewert von dem MQTT-Node aus?
Ich habe eben einen MQTT Ausgabewert vergleichen wollen, der kam als String in der Form [1] rein. Der von mir programmierte Vergleicher erwartete allerdings einen Stringwert 1. Da hat dann natürlich nichts funktioniert. Häng bitte mal direkt ein debug-Node an das MQTT-Node und poste mal den Ausgabewert. Dann habe ich auch eine Chance es real nachzuvollziehen. EIne Verbindung zu deinem MQTT Broker werde ich ja wohl kaum aufbauen können. :lol:
-
..dass sich rewenode in der Zwischenzeit meldet und eine Lösung aus dem Ärmel zaubert. `
Ich leider noch abgetaucht und kann mir im Moment nicht mal den flow ansehen[emoji22]Da musst du jetzt durch;-)
Aber ich bin sicher, dass ihr das perfekt hinbekommt!
Inzwischen, Alles Gute für 2019[emoji1635]
Gesendet von iPhone mit Tapatalk
-
Ich leider noch abgetaucht und kann mir im Moment nicht mal den flow ansehen[emoji22] `
Besser abgetaucht als abgeraucht.
@rewenode:Da musst du jetzt durch;-) `
Da reden wir noch drüber.
@rewenode:Aber ich bin sicher, dass ihr das perfekt hinbekommt! `
Jetzt setzt er uns noch unter Druck. :lol:
@rewenode:Inzwischen, Alles Gute für 2019[emoji1635] `
Dies wünsche ich dir auch.Back to topic.
Ich habe es mir mal einfach gemacht und die Aufgabe mit Javascript gelöst. War wirklich eine Kleinigkeit.
Hier die Lösung:
! ````
[{"id":"d94131a9.1b89c","type":"inject","z":"de87f48f.fcaa78","name":"","topic":"","payload":"19","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":"","x":109,"y":200,"wires":[["f3b6d983.f5c5a8"]]},{"id":"f3b6d983.f5c5a8","type":"change","z":"de87f48f.fcaa78","name":"","rules":[{"t":"move","p":"payload","pt":"msg","to":"Sollwert","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":369,"y":220,"wires":[["d2b9f4b6.80a5a","73884f1a.26054"]]},{"id":"8136864a.7f9ed","type":"inject","z":"de87f48f.fcaa78","name":"","topic":"","payload":"21","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":"","x":109,"y":260,"wires":[["f3b6d983.f5c5a8"]]},{"id":"d2b9f4b6.80a5a","type":"function","z":"de87f48f.fcaa78","name":"Vergleich","func":"var istwert = flow.get("Istwert");\nvar sollwert = flow.get("Sollwert");\nnode.send({payload: {"Istwert": istwert,\n " Sollwert": sollwert}});\nif (sollwert < istwert) {\nmsg.payload = "0" ;\n}\nelse\n{\nmsg.payload = "1" ;\n \n}\n\nreturn msg;\n\n\n//ontext.target = context.target || 0.0;\n//context.sensor = context.sensor || 0.0;\n\n//if (msg.topic === 'sensor_temperature') {\n// context.sensor = msg.payload;\n//} else if (msg.topic === 'target_temperature') {\n// context.target = msg.payload;\n//}\n\n//Cooling with hysteresis\n//var setpoint = context.target;\n//var hysteresis = 1;\n//var current = context.sensor;\n//if (current >= (setpoint+hysteresis)) {\n// msg.payload = 1;\n//}\n//else if(current <= (setpoint-hysteresis)) {\n//\tmsg.payload = 0;\n//}\n//return msg;\n\n// No hysteresis below, typically not desired\n//Heating\n//if (context.target >= context.sensor) {\n// return {payload: 1};\n//} else {\n// return {payload: 0};\n//}\n\n//Cooling\n//if (context.target >= context.sensor) {\n// return {payload: 0};\n//} else {\n// return {payload: 1};\n//}","outputs":1,"noerr":0,"x":639,"y":260,"wires":[["2a768dee.1ef502"]]},{"id":"73884f1a.26054","type":"debug","z":"de87f48f.fcaa78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":649,"y":200,"wires":[]},{"id":"4d000cc6.afe684","type":"change","z":"de87f48f.fcaa78","name":"","rules":[{"t":"move","p":"payload","pt":"msg","to":"Istwert","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":349,"y":320,"wires":[["d2b9f4b6.80a5a"]]},{"id":"2a768dee.1ef502","type":"debug","z":"de87f48f.fcaa78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":889,"y":260,"wires":[]},{"id":"680a7bc0.fbf8cc","type":"inject","z":"de87f48f.fcaa78","name":"","topic":"","payload":"20","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":"","x":109,"y":320,"wires":[["4d000cc6.afe684"]]},{"id":"498cdeeb.021858","type":"comment","z":"de87f48f.fcaa78","name":"payload.soll","info":"","x":390,"y":180,"wires":[]},{"id":"ede90d9f.195098","type":"comment","z":"de87f48f.fcaa78","name":"payload.ist","info":"","x":338.20001220703125,"y":279.20001220703125,"wires":[]}]Ich habe dabei nur einige Änderungen im function-Node vorgenommen. Die auskommentierten Zeilen sind nicht von mir. Wenn Du das function-Node so nutzen möchtest, solltest Du dIe Zeile3 mit dem Debug noch auskommentieren. Die baue ich, Dank rewenode, gerne zur Kontrolle ein.
-
Beim MQTT kommt das an :
{"Time":"2019-01-01T19:39:30","AM2301":{"Temperature":19.7,"Humidity":57.5},"TempUnit":"C"}
Vielen Dank, ich bin zu alt für den Kram :? das mit dem String und so keinen Plan
Könnt ihr mir ein Buch oder ne Seite empfehlen damit ich sowas selber mal machen kann? wollte mir schon so ein Java für Dummis holen :oops:
Das mit dem var und so hatte ich auch mal ausprobiert, aber das hat bei mir auch nicht geklappt, werde das die Tage auf jeden Fall testen!
Ihr seid meine Helden!!!!
-
Es hat mir keine Ruhe gelassen
Hab es schnell mal zusammen geschustert und ES LEBT :lol: keine ahnung wie aber es scheint zu gehen :mrgreen:
-
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.