heating-forecast
prediction of heating demand, bla bla bla
[{"id":"376e4cb5503c8fe3","type":"subflow","name":"Subflow Heating","info":"","category":"","in":[{"x":60,"y":100,"wires":[{"id":"54d78da457546931"},{"id":"bbff4efefe325cf8"},{"id":"b04511ddb62d17c0"}]}],"out":[],"env":[],"meta":{},"color":"#DDAA99"},{"id":"54d78da457546931","type":"function","z":"376e4cb5503c8fe3","name":"Calc Setpoint Heating","func":"// Parameter der Heizkurve\nconst a = 0.025; // Beeinflusst die Krümmung der Parabel\nconst b = 24; // Außentemperatur für 0% Heizleistung\nconst c = 24; // Maximale Heizleistung in Prozent\nconst d = 4; // Sonnenverstärkungsfaktor\n\nlet forecast_T = global.get('Forecast_T');\nlet forecast_Sun = global.get('Forecast_Sun');\nlet actual_T = global.get('Actual_T');\n\n// Initialisierung der Fehleranzeige\nmsg.payload = { error: false };\n\n// Grenzen der Außentemperatur\nconst minAussentemperatur = -8; // Außentemperatur, bei der 100% erreicht werden\nconst maxAussentemperatur = 18; // Außentemperatur, bei der 0% erreicht werden\n\n// Überprüfen, ob 'Forecast_T' oder 'Actual_T' existiert und numerisch sind\nlet T_Aussen;\n\nif (forecast_T !== undefined && !isNaN(parseFloat(forecast_T))) {\n T_Aussen = parseFloat(forecast_T);\n} else if (actual_T !== undefined && !isNaN(parseFloat(actual_T))) {\n T_Aussen = parseFloat(actual_T);\n} else {\n // Fehlerfall: Weder Forecast_T noch Actual_T ist gültig\n msg.payload.error = true;\n msg.payload.errorMessage = \"Kein gültiger Wert für Forecast_T oder Actual_T gefunden. Annahme es ist 10°C\";\n T_Aussen = 10;\n}\n\n// Berechnung der Vorlauftemperatur\nlet T_Vorlauf = a * Math.pow(T_Aussen - b, 2) + c;\n\n// Kompensation Sunnenstunden\nT_Vorlauf = T_Vorlauf - (forecast_Sun)/60*d;\n\n// Skalierung: Begrenzen des Outputs auf 0% bis 100%\nT_Vorlauf = Math.min(100, Math.max(0, T_Vorlauf));\n\n// Ausgabe der berechneten Werte\nmsg.payload = T_Vorlauf; // Sollwert Vorlauftemperatur\nmsg.topic = \"setpoint\"\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":160,"wires":[["04a5e68ce15758a1","b8af1affd8fd50af"]]},{"id":"bbff4efefe325cf8","type":"function","z":"376e4cb5503c8fe3","name":"Presentvalue","func":"msg.payload = msg.payload[0]/100;\nmsg.topic = \"\";\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":100,"wires":[["04a5e68ce15758a1"]]},{"id":"04a5e68ce15758a1","type":"PID","z":"376e4cb5503c8fe3","name":"PID Heat","setpoint":"36","pb":"15","ti":"48","td":"0","integral_default":"0","smooth_factor":"0","max_interval":"10","enable":"1","disabled_op":"0","x":620,"y":80,"wires":[["0b3a33b244a9397a","3817a881f58c7730","c42b2da49f430f92","e50c95b1def23c23"]]},{"id":"3817a881f58c7730","type":"function","z":"376e4cb5503c8fe3","name":"Pmax","func":"msg.payload = 7.777","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":810,"y":100,"wires":[[]]},{"id":"0b3a33b244a9397a","type":"range","z":"376e4cb5503c8fe3","minin":"0","maxin":"1","minout":"0","maxout":"10000","action":"scale","round":false,"property":"payload","name":"Scale heating power","x":860,"y":40,"wires":[["75fbf4e956f0e385"]]},{"id":"4175e256ff9c26e8","type":"modbus-write","z":"376e4cb5503c8fe3","name":"Mischer_PmaxHeating","showStatusActivities":false,"showErrors":false,"showWarnings":true,"unitid":"","dataType":"HoldingRegister","adr":"165","quantity":"1","server":"45de044ee48e4062","emptyMsgOnFail":false,"keepMsgProperties":false,"delayOnStart":false,"startDelayTime":"","x":1220,"y":100,"wires":[[],[]]},{"id":"75fbf4e956f0e385","type":"modbus-write","z":"376e4cb5503c8fe3","name":"Mischer_Setetpoint","showStatusActivities":false,"showErrors":false,"showWarnings":true,"unitid":"","dataType":"HoldingRegister","adr":"0","quantity":"1","server":"45de044ee48e4062","emptyMsgOnFail":false,"keepMsgProperties":false,"delayOnStart":false,"startDelayTime":"","x":1210,"y":40,"wires":[[],[]]},{"id":"e50c95b1def23c23","type":"function","z":"376e4cb5503c8fe3","name":"Force Max","func":"msg.payload = 7.777","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":220,"wires":[[]]},{"id":"c42b2da49f430f92","type":"function","z":"376e4cb5503c8fe3","name":"Force Close","func":"msg.payload = 7.777","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":160,"wires":[[]]},{"id":"b04511ddb62d17c0","type":"function","z":"376e4cb5503c8fe3","name":"Eco-Mode?","func":"// Set payload based on the value of stat\nmsg.payload = global.get('Heating'); // true if not 2, false if 2\n\nmsg.topic = \"enable\";\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":40,"wires":[["04a5e68ce15758a1"]]},{"id":"b8af1affd8fd50af","type":"ha-sensor","z":"376e4cb5503c8fe3","name":"SensorHA: CalculatedSWT","entityConfig":"f29b4c8fa4f860bf","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":880,"y":280,"wires":[[]]},{"id":"45de044ee48e4062","type":"modbus-client","name":"Mischer","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"failureLogEnabled":true,"tcpHost":"192.168.0.5","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","serialAsciiResponseStartDelimiter":"0x3A","unit_id":"5","commandDelay":1,"clientTimeout":1000,"reconnectOnTimeout":true,"reconnectTimeout":2000,"parallelUnitIdsAllowed":true,"showErrors":false,"showWarnings":true,"showLogs":true},{"id":"f29b4c8fa4f860bf","type":"ha-entity-config","server":"7b4835df.5ff39c","deviceConfig":"","name":"CalcSWT","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"CalculatedSWT"},{"property":"icon","value":""},{"property":"entity_picture","value":""},{"property":"entity_category","value":""},{"property":"device_class","value":"temperature"},{"property":"unit_of_measurement","value":"°C"},{"property":"state_class","value":"measurement"}],"resend":false,"debugEnabled":false},{"id":"7b4835df.5ff39c","type":"server","name":"Home Assistant","addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false}]