I denna artikeln ska jag försöka beskriva mitt lilla projekt med att övervaka min IVT-490 värmepump med en Raspberry P.
Jag har hämtat mycket kunskap från dessa två forum-trådar :
http://www.varmepumpsforum.com/vpforum/index.php?topic=27306.15Tanken
och
http://www.byggahus.se/forum/varme-allmant/44487-prata-med-ivt-490-a-5.html
Min värmepump har ett interface som ser ut såhär :
Man behöver slå på variabeldumpning på pannan för att få ut information. Man kommer in i Admin mode genom att hålla in högra knappen i 5-10 sekunder. Sedan letar man upp “Installation och igångkörning” och där finner man “Variabeldumpning till PC”. Med det påslaget så får man ut data 1 gång per minut. (source; Niclas Hedlund)
Citerar Niclas.Hedlund om interfacet från Värmepumpsforum:
Baudraten är 9600baud och 8 databitar, 1stopbit och ingen paritet.
Tänk på att TxD som är markerat på bilden är data UT från pumpen, och RxD data IN till pumpen.
Då jag inte lyckats få tag på en kontakt så fick jag använda mig av en plastpåseklämma (som man köper på MAXI) som jag vänt på och satt två skruvar i, och så har jag silvertejp också…. ja ja det är ju på egen risk 🙂
EDIT: Nu funkade inte min plastklämma så bra så jag lödde dit trådarna istället, nu funkar det bättre. MEN så hörde Fredrik Winkvist av sig och berättade vilken kontakt man skulle ha, och den ska funka perfekt. För er som söker så heter den “2.54mm Pitch 2×5 Pin Double Row Angle IDC Pin Headers 10 Pins”. Ett stort Tack till Fredrik, här är en länk till eBay som säkert blir outdated men så länge den finns kvar kan länken vara bra: http://www.ebay.com/itm/20-Pcs-2-54mm-Pitch-2×5-Pin-Double-Row-Angle-IDC-Pin-Headers-10-Pins-/310784076520?pt=LH_DefaultDomain_0&hash=item485c2caae8
Specification:
Product Name | IDC Pin Header |
Position | 5 |
Pin Number | 10 |
Row | 2 |
Mounting Angle | 90 Degree |
Pin Pitch | 2.54mm/0.1″ |
Pin Length | 4mm/ 0.16″ 12mm/ 0.47″ |
Total Size | 19 x 9.5 x 22mm/ 0.75″ x 0.37″ x 0.87″ ( L*W*H) |
Material | Plastic, Metal |
Color | Black, Silver Tone |
Net Weight | 66g |
Package Content | 20 x Angle IDC Pin Headers |
Description:
Features double row, 90 degree mounting angle, male pin header, electronic component, IDC connector.
This pin header is an ideal connector for the PCB board and intergrated circuit, used widely in the computer, breadboard, LCD, TV and other home appliances.
När detta var gjort var jag tvungen att koppla in det via typ USB, så jag köpte en sådan
här på ebay. http://www.ebay.co.uk/itm/6PIN-CP2102-USB-2-0-to-UART-TTL-Electronic-Connector-Serial-Converter-Module-/390568169609?pt=UK_Computing_Parallel_Serial_PS_2&hash=item5aefad5089
Varje minut så skickar den ut 37-parametrar som är ;-separerade, se EXCEL filen; Loggning-2. (loggfilen kommer också från Värmepumpsforumet; inskickat av Larsmaja)
En rad kan se ut såhär :
1 |
360; 315; 33; 478; 445; 447; -512; 774; -512;0;0;0;0;1;0;0;1;1;0;0; 296; 311; 326; 341; 495; 520; 545; 301; 326; 351; 435; 105; 26; 0; 0; 0; 0 |
Där alla temperaturer är heltal med 1 decimals noggrannhet, så 315 betyder 31,5 grader Celsius.
360 är sekvensummer
315 är Framledningstemperatur (GT1), dvs 31,5 grader
33 är Utetemperatur (GT2), dvs 3,1 grader
478 är Tapvarmvatten (GT3-1), dvs 47,8 grader
445 är Varmvatten(GT3-2), dvs 44,5 grader
447 är Värmevatten(GT3-3), dvs 44,7 grader
-512 är Rumstemperatur(GT5), men jag har inte den givaren så den visar -512
774 är Hetgastemperatur(GT6), dvs 77,4 grader
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
root["framledn"] = ivt[1]; //Framledning root["ute"] = ivt[2]; //Ute root["tappvarmvtopp"] = ivt[3]; //Tappvarmvatten Topp root["varmevmitt"] = ivt[4]; //Varmvatten Mitt root["varmevbotton"] = ivt[5]; //Värmevatten Botten root["inne"] = ivt[6]; //Rumstemp root["hetgas"] = ivt[7]; //Hetgas root["egtemp"] = ivt[8]; //Extra Acc-Tank root["tryckvakt"] = ivt[9]; //Tryckvakt root["hogtryck"] = ivt[10]; //Högtryck root["lagtryck"] = ivt[11]; //Lågtryck root["egsemester"] = ivt[12]; //Semester aktiv? root["kompressor"] = ivt[13]; //Kompressor aktiv root["schuntoppen"] = ivt[14]; //SV1 Öppna root["schuntstangd"] = ivt[15]; //SV1 Stäng root["cirkpump"] = ivt[16]; //P1 Rad //root["flakt"] = ivt[17]; //Fläkt root["larm"] = ivt[18]; //Larm aktiv //root["20"] = ivt[19]; //Extern P2 //root["21"] = ivt[20]; //LLT GT1 //root["22"] = ivt[21]; //LL GT1 root["bvframledning"] = ivt[22]; //BV GT1 //root["24"] = ivt[23]; //UL GT1 //root["25"] = ivt[24]; //LL GT3:2 //root["26"] = ivt[25]; //ULT GT3:2 //root["27"] = ivt[26]; //UL GT3:2 //root["28"] = ivt[27]; //LL GT3:3 //root["29"] = ivt[28]; //BV GT3:3 root["extravv1"] = ivt[29]; //SV3 BV Förskj root["extravv2"] = ivt[30]; //Effekt ink vit VV behov root["extravv3"] = ivt[31]; //Tillskotstimer VV behov //root["33"] = ivt[32]; //Tappv prio root["elpatron"] = ivt[33]; //Tillskott i %/10 //root["35"] = ivt[34]; //Tillskott RAD root["extravv4"] = ivt[35]; //Tillskott Tillägg //root["37"] = ivt[36]; //Default SV2 Open |
I bilden nedan ser man de olika givarna GT1-7.
På min Raspberry pi skrev jag ett enkelt script som läser från USB-serieporten och postar på en websida som jag har gjort, där jag helt enkelt lägger in det i en MySQL databas )oerhört enkelt, bara timestamp och så det ;-separerade datan (två kolumner, pga av att jag ville komma igång, skulle såklart haft 38 kolumner så man kunde göra lite mer SQL, men det får bli en annan gång…)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import requests import serial import time from time import gmtime, strftime import re pattern = re.compile(r'\s+') def readlineCR(port): rv = "" while True: ch = port.read() rv += ch if ch == '\r' or ch == '': return rv def post(timestamp,data) : payload = {'timestamp': timestamp, 'data': data} try : r = requests.post("http://domain.com/path/file.php", data=payload) print(r.text) except Exception as e: print "Oops! unable to post result!",e.__doc__,e.message port = serial.Serial("/dev/ttyUSB0", baudrate = 9600, timeout = 60) while True: rcv='' try : rcv = readlineCR(port) except Exception as e: print "Oops! problems reading from USB!" print e.__doc__ print e.message rcv = re.sub(pattern, '',rcv) timeStamp = strftime("%Y-%m-%d %H:%M:%S", gmtime()) print(timeStamp+rcv) if rcv : post( timeStamp,rcv) else : print "Empty data..." |
Jag har noterat att ibland så ramlar mina trådar ur, och så får jag inget resultat, då blir serieporten inte nåbar 🙂 och då får jag lite roliga felutskrifter… och såklart blir diagrammen dåligt uppdaterade….
Jag har gjort en websida (PHP and Javascript) där jag använt Highcharts för att rendera diagrammen. Ta en titt här http://tsoft.se/varmepanna/
Fredrik Winkvist var dessutom lite uppfinningsrik och berättade att man använda strömförsörjningen från värmepumpens 5Volt ut till Raspberry Pi;n. Ta en kik på bilden nedan.
Förbättringsförslag är alltid välkomna, så hör av er !
Mitt nästa projekt, när jag får tid…. är att mäta strömförbrukningen hemma…
-Tobias