Page 1 of 1

Data From Solvis SC2 and Remote

Posted: Thursday 30 April 2020 15:04
by thomasbaetge
Hi everyone,

after quite some research in various ressources, I managed to read Data from my Solvis Max heating system (via Solvisemote, their network box) into Domoticz, using node-red.
If anyone needs or wants that too, I'd be happy to provide a detailled how-to.

Re: Data From Solvis SC2 and Remote

Posted: Thursday 11 June 2020 9:38
by jrtimmerman
Goodmorning,

I'm also looking into reading the data from the solvis max into Node red. Next step for me would be to connect this towards a database / domotics system.

greetings Jeroen

Re: Data From Solvis SC2 and Remote

Posted: Friday 12 June 2020 16:30
by thomasbaetge
cool.... if you need any help, let me know :)

Re: Data From Solvis SC2 and Remote

Posted: Monday 22 June 2020 22:15
by jrtimmerman
Can you share your flow with me? I have trouble connecting and questioning the rc2.

Re: Data From Solvis SC2 and Remote

Posted: Tuesday 23 June 2020 8:43
by thomasbaetge
Sure, no problem.
Getting data ist the easy part (HTTP request node), parsing is a bit more complicated. I don't use all, just the data I am interested in.

the dashboard nodes are optional.

Code: Select all

[{"id":"bfcf1ef4.6b3da","type":"tab","label":"Solvis","disabled":false,"info":""},{"id":"5536b632.9cf8b8","type":"http request","z":"bfcf1ef4.6b3da","name":"Read Solvis data","method":"GET","ret":"txt","paytoqs":false,"url":"192.168.2.8/sc2_val.xml","tls":"","persist":false,"proxy":"","authType":"digest","x":110,"y":120,"wires":[["fcd8cf2c.24b8e","7a2eb9f4.887178"]]},{"id":"960a6f0a.5a777","type":"inject","z":"bfcf1ef4.6b3da","name":"10 Minuten","topic":"","payload":"","payloadType":"date","repeat":"600","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":60,"wires":[["5536b632.9cf8b8"]]},{"id":"fcd8cf2c.24b8e","type":"debug","z":"bfcf1ef4.6b3da","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":350,"y":60,"wires":[]},{"id":"328f6e86.9b4d12","type":"function","z":"bfcf1ef4.6b3da","name":"Aussentemperatur","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(75,77)+results.substring(73,75),16)/10\nif (num > 32767)\n{num = num - 65536\n    num = num *-1\n}\n\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":180,"wires":[["919ca55.302d858","a2930263.b2bc5"]]},{"id":"22a2976a.a16a88","type":"function","z":"bfcf1ef4.6b3da","name":"Kollektortemperatur","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(67,69)+results.substring(65,67),16)/10\nif (num > 32767)\n{num = num - 65536\n//    num = num *-1\n}\n\n//num = num / 10\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":220,"wires":[["2fff28aa.6e21d8"]]},{"id":"d4a6b429.aaed78","type":"function","z":"bfcf1ef4.6b3da","name":"Solarertrag","func":"var results = msg.payload\nvar energy = parseInt(results.substring(187,189)+results.substring(185,187),16)\n\nvar prev = flow.get(\"energy\")||0\n\nif (prev !== 0)\n{\nvar current = energy - prev\n\n\nmsg.topic = \"energy\"\nmsg.payload = current\n\nreturn msg;\n}","outputs":1,"noerr":0,"x":410,"y":360,"wires":[["a7905f0b.e7a53","64e456e3.c10dc8"]]},{"id":"7a2eb9f4.887178","type":"function","z":"bfcf1ef4.6b3da","name":"Error","func":"if (msg.payload.substring(0, 5)!= \"Error\")\n{\nreturn msg;\n}","outputs":1,"noerr":0,"x":130,"y":260,"wires":[["328f6e86.9b4d12","22a2976a.a16a88","d4a6b429.aaed78","316b870e.25f698","814ff91.6157e08","a6f30dfb.905a7","de211b7f.952fa8","ed2f0c38.d12c7","b2392a38.ccc5d8"]]},{"id":"316b870e.25f698","type":"function","z":"bfcf1ef4.6b3da","name":"Fehlercode","func":"var results = msg.payload\nvar num = parseInt(results.substring(167,169),16)\n\nmsg.payload = num\n\nif (num !== 0)\n{\n  msg.payload = {\n    \"command\": \"sendnotification\",\n    \"subject\": \"Solvis\",\n    \"body\": \"Heizung Fehlercode: \" + num.toString(),\n    \"priority\": 0}\n\nreturn msg;\n}","outputs":1,"noerr":0,"x":410,"y":120,"wires":[["c9504299.c2f35"]]},{"id":"c9504299.c2f35","type":"mqtt out","z":"bfcf1ef4.6b3da","name":"","topic":"domoticz/in","qos":"","retain":"","broker":"f80d8629.7db0e8","x":1090,"y":340,"wires":[]},{"id":"814ff91.6157e08","type":"function","z":"bfcf1ef4.6b3da","name":"Solarleistung","func":"\nvar results = msg.payload\n\nvar num = parseInt(results.substring(221,223)+results.substring(219,221),16)/10\nvar newmsg = {payload:\"\", topic:\"\"};\nnewmsg.topic = \"Solarleistung\"\nnewmsg.payload = num\n\nvar power = num * 1000 //umrechnen in Watt\n\nmsg.topic = \"power\"\nmsg.payload = power.toString() + \";0.000\"\nreturn [msg, newmsg];","outputs":2,"noerr":0,"x":410,"y":300,"wires":[["a7905f0b.e7a53"],["b3e172e2.1a139"]]},{"id":"919ca55.302d858","type":"function","z":"bfcf1ef4.6b3da","name":"","func":"\n\nmsg.payload = { \n    \"idx\" :346,\n    \"nvalue\" :0,\n    \"svalue\" :msg.payload.toString()\n     \n}\nreturn msg;","outputs":1,"noerr":0,"x":670,"y":180,"wires":[["c9504299.c2f35"]]},{"id":"bbf97d5b.3c6d9","type":"debug","z":"bfcf1ef4.6b3da","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":950,"y":780,"wires":[]},{"id":"a7905f0b.e7a53","type":"join","z":"bfcf1ef4.6b3da","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"2","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":630,"y":300,"wires":[["82c7aa82.2f7408"]]},{"id":"82c7aa82.2f7408","type":"function","z":"bfcf1ef4.6b3da","name":"","func":"var watt = parseInt(msg.payload.power)\n\nvar kw = msg.payload.energy\nkw = kw * 1000\nnode.warn(kw)\nvar sval = watt.toString() + \";\" + kw.toString()\n\nmsg.payload = { \n    \"idx\" :345,\n    \"nvalue\" :0,\n    \"svalue\" :sval\n     \n}\nreturn msg;","outputs":1,"noerr":0,"x":760,"y":300,"wires":[["c9504299.c2f35"]]},{"id":"11eca12a.3fdacf","type":"inject","z":"bfcf1ef4.6b3da","name":"00:00 - 06:00 Uhr","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"0 0-5 * * *","once":false,"onceDelay":0.1,"x":430,"y":720,"wires":[["e17ecc48.7f74b"]]},{"id":"e17ecc48.7f74b","type":"http request","z":"bfcf1ef4.6b3da","name":"Read Solvis data","method":"GET","ret":"txt","paytoqs":false,"url":"192.168.2.8/sc2_val.xml","tls":"","persist":false,"proxy":"","authType":"digest","x":690,"y":720,"wires":[["4f7f67d0.ecd8e8"]]},{"id":"834624af.ff1dc8","type":"function","z":"bfcf1ef4.6b3da","name":"Solarertrag täglich","func":"var results = msg.payload\nvar energy = parseInt(results.substring(187,189)+results.substring(185,187),16)\nnode.warn(energy)\nif (energy !== 0)\n{\nflow.set(\"energy\", energy)\n}\n","outputs":1,"noerr":0,"x":1110,"y":720,"wires":[[]]},{"id":"a2930263.b2bc5","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"d11d2982.29e7a8","order":1,"width":0,"height":0,"gtype":"donut","title":"Außentemperatur","label":"Grad","format":"{{value}}","min":"-20","max":"45","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1270,"y":200,"wires":[]},{"id":"2fff28aa.6e21d8","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"73178ce2.40eb64","order":2,"width":0,"height":0,"gtype":"gage","title":"Kollektortemperatur","label":"Grad","format":"{{value}}","min":"0","max":"200","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1270,"y":240,"wires":[]},{"id":"b3e172e2.1a139","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"73178ce2.40eb64","order":1,"width":0,"height":0,"gtype":"gage","title":"Solarleistung","label":"KW","format":"{{value}}","min":0,"max":"20","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1250,"y":300,"wires":[]},{"id":"a6f30dfb.905a7","type":"function","z":"bfcf1ef4.6b3da","name":"Solar Vorlauf","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(55,57)+results.substring(53,55),16)/10\nif (num > 32767)\n{num = num - 65536\n    num = num *-1\n}\n\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":420,"wires":[["d00c4739.6cc638"]]},{"id":"de211b7f.952fa8","type":"function","z":"bfcf1ef4.6b3da","name":"Solar Rücklauf","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(59,61)+results.substring(57,59),16)/10\nif (num > 32767)\n{num = num - 65536\n    num = num *-1\n}\n\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":460,"wires":[["1ca859dd.bc8ff6"]]},{"id":"d00c4739.6cc638","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"d11d2982.29e7a8","order":2,"width":0,"height":0,"gtype":"gage","title":"Solar Vorlauf","label":"Grad","format":"{{value}}","min":"0","max":"150","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1250,"y":420,"wires":[]},{"id":"1ca859dd.bc8ff6","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"d11d2982.29e7a8","order":3,"width":0,"height":0,"gtype":"gage","title":"Solar Rücklauf","label":"Grad","format":"{{value}}","min":"0","max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1260,"y":460,"wires":[]},{"id":"ed2f0c38.d12c7","type":"function","z":"bfcf1ef4.6b3da","name":"Puffer unten","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(71,73)+results.substring(69,71),16)/10\nif (num > 32767)\n{num = num - 65536\n    num = num *-1\n}\n\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":520,"wires":[["caad8c37.97e06"]]},{"id":"caad8c37.97e06","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"d11d2982.29e7a8","order":5,"width":0,"height":0,"gtype":"gage","title":"Puffertemperatur unten","label":"Grad","format":"{{value}}","min":"0","max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1290,"y":520,"wires":[]},{"id":"b2392a38.ccc5d8","type":"function","z":"bfcf1ef4.6b3da","name":"Heizung Vorlauf","func":"var results = msg.payload\n\nvar num = parseInt(results.substring(83,85)+results.substring(81,83),16)/10\nif (num > 32767)\n{num = num - 65536\n    num = num *-1\n}\n\n\nmsg.payload = num\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":580,"wires":[["e799055a.1de8c8"]]},{"id":"e799055a.1de8c8","type":"ui_gauge","z":"bfcf1ef4.6b3da","name":"","group":"d11d2982.29e7a8","order":4,"width":0,"height":0,"gtype":"gage","title":"Heizung Vorlauf","label":"Grad","format":"{{value}}","min":"0","max":"70","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1260,"y":580,"wires":[]},{"id":"4f7f67d0.ecd8e8","type":"function","z":"bfcf1ef4.6b3da","name":"Error","func":"var night = flow.get(\"night\")\n\nif (msg.payload.substring(0, 5)!= \"Error\")\n{\n\nreturn msg;\n\n}","outputs":1,"noerr":0,"x":870,"y":720,"wires":[["834624af.ff1dc8"]]},{"id":"64e456e3.c10dc8","type":"debug","z":"bfcf1ef4.6b3da","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":940,"y":120,"wires":[]},{"id":"f80d8629.7db0e8","type":"mqtt-broker","z":"","name":"Controlberry","broker":"192.168.2.40","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"d11d2982.29e7a8","type":"ui_group","z":"","name":"Temperatur","tab":"cdcbf2bf.b1403","order":1,"disp":true,"width":"6","collapse":false},{"id":"73178ce2.40eb64","type":"ui_group","z":"","name":"Solar","tab":"cdcbf2bf.b1403","order":2,"disp":true,"width":"6","collapse":false},{"id":"cdcbf2bf.b1403","type":"ui_tab","z":"","name":"Solvis","icon":"dashboard","disabled":false,"hidden":false}]

Re: Data From Solvis SC2 and Remote

Posted: Tuesday 30 June 2020 11:19
by jrtimmerman
Thanks, the code is working..... can you explain a bit of the function and how you convert the values? you first grab text 75-77 and then 73-75 ? can you explain why?

Can I relate this to the modbus fields as given by solvis?

Many thanks in advance.

Re: Data From Solvis SC2 and Remote

Posted: Tuesday 30 June 2020 12:25
by thomasbaetge
actually I took the parsing logic from an older thread in a different forum and simply adopted it to javascript.
The original thread (German) can be found here:

https://homematic-forum.de/forum/viewto ... 19&t=33085

I also took the field values (offsets) from there, but they are not all correct for my newer version of the SC2, possibly due to changes in the software over time. so I had to find a few by myself by trial and error.

as for modbus, sorry, I can not help with that, as I am not familiar.