Mikäli AIT:n maalämpöpumppua ohjaavan Luxtronikin tarjoama oma webbisivu, appis ja etäohjaus ei syystä tai toisesta riitä omiin loggailu- tai ohjailutarpeisiin, luxtronikkia voi myös lukea ja ohjailla webbiliittymää vastaavasti omilla ohjelmilla.
Uudempien firmisten (3.81 ja etiäpäin) ohjaus on websocket-pohjainen.
Mutta ihan ensiksi, mikäli luxtronikin haluaa löytää paikallisverkosta, pitää lähettää UDP-broadcast porttiin 4444. Nämä bytet toimahtavat:
byte[] buffer = { 0x32, 0x30, 0x30, 0x30, 0x3b, 0x31, 0x31, 0x31, 0x3b, 0x31, 0x3b, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20 };
Luxtronik vastaa lähettämällä porttiin 4444 UDP viestin jonka koko on 100 byteä. Siispä tarvitsee kuunnella tuota porttia mikäli haluaa ottaa kopin tuosta viestistä. Viestin sisällöstä en tiedä enkä välitä, mutta tuosta lähetyksestä selviää Luxtronikin IP-osoite. Toki sen voi kovakoodaillakin, eihän tuo vaikea ole vääntää väkisin pysymään vakiona.
Websocket-protokolla näkyy ihan katsomalla luxtronikin webbisivun lähdekoodia (right-click, view page source). Sieltä sitten Lux.js esiin ja hämmästelemään.
Lukeminen lyhyesti:
Luo websocket luxtronikkiin IP-osoitteen avulla. Portti on ainakin minulla 8214, aina. Mutta teoriassa tuon portinkin voisi lukea hakemalla Lux.js:n luxtronikin webbiservulta. Siellä se killittää lähdekoodissa.
Socketin osoite on tämmöistä muotoa: "ws://192.168.1.113:8214"
Ja protokollaksi täytyy laittaa "Lux_WS".
Login laitetaan lähettämällä websockettiin viesti: "LOGIN;999999" <- laita salasanasi tuohon
(tässä kohtaa socketista pitää lukea vastaus)
Websocketista tulee XML-pulautus joka on tämäntapainen:
<?xml version="1.0"?><Navigation id='0x299bc0'><item id='0x2483c8'><name>Informaatio</name><item id='0x249440'><name>Lämpötilat</name></item><item id='0x249488'><name>Tilat sisäänmeno</name></item><item id='0x2494d0'><name>Tilat ulostulo</name></item><item id='0x2991e0'><name>Käyntiajat</name></item><item id='0x2481d0'><name>Käyttötunnit</name></item><item id='0x248188'><name>Häiriöloki</name></item><item id='0x248140'><name>Pysähtymistieto</name></item><item id='0x29a230'><name>Laitetiedot</name></item><item id='0x29a1e8'><name>Kalorimetri</name></item><item id='0x29a1a0'><name>BMS</name></item></item><item id='0x296ee0'><name>Asetukset</name><item id='0x2b4c20'><name>Toimintatila</name></item><item id='0x28c378'><name>Lämpötilat</name></item><item id='0x2b5010'><name>Järjestelmäasetukset</name></item></item><item id='0x29a148'><name>Kirjautuminen: Asentaja</name></item></Navigation>
Huom. normaalisti tuonne ei ole kirjauduttu Asentajaksi, mutta minä nyt olin.
Tuolta parsitaan haluttu heksa-id, esimerkiksi nyt 0x2483c8 antaisi kaiken informaation. Sepä lähetetään sitten websokettiin näin: "GET;0x2483c8"
Ja taas tulee sockettiin luettavaksi paljon xml:ää josta voi parsia kaiken mahdollisen haluamansa tiedon.
Jos haluaa pelkät päivittyneet tiedot heksojen kanssa, ilman nimiä, voi jatkaa kutsumalla periodisesti vain "REFRESH". Tällöin websocketista tulee joukko pelkkiä heksoja ja arvoja, nuo arvot saa mäpättyä nimiin aiemman pulautuksen tiedoista heksojen avulla.
Asetusten muuttaminen menee näin:
Ensin luetaan asetus-sivu ID:n nojalla (id pitää parsia edellisestä XML:stä esiin, se vaihtelee): "GET;0x296ee0"
(taas luetaan XML socketista)
Sitten parsitaan asetussivulta vaikkapa haluttu muutettava lämpötila, sanotaan vaikka lämmityksen hystereesi:
<?xml version="1.0"?><Content id='0x296ee0'><name>Asetukset</name><item id='0x2b4c20'><name>Toimintatila</name><item id='0x2b5068'><name>Paluuvesikierto</name><option value='0'>Automaattinen</option><option value='1'>Lisälämpö</option><option value='2'>Juhla</option><option value='3'>Loma-aika</option><option value='4'>Pois</option><raw>0</raw><value>Automaattinen</value></item><item id='0x28adf0'><name>Lämmin käyttövesi</name><option value='0'>Automaattinen</option><option value='1'>Lisälämpö</option><option value='2'>Juhla</option><option value='3'>Loma-aika</option><option value='4'>Pois</option><raw>0</raw><value>Automaattinen</value></item></item><item id='0x28c378'><name>Lämpötilat</name><item id='0x299ee0'><name>Paluurajoitus</name><min>350</min><max>700</max><step>10</step><unit>°C</unit><div>10.00</div><raw>590</raw><value>59.0°C</value></item><item id='0x295d40'><name>Hystereesi: Lämmitys</name><min>5</min><max>60</max><step>5</step><unit> K</unit><div>10.00</div><raw>15</raw><value>1.5 K</value></item>
(snip, leikkasin loput pois koska noita on paljon)
Lämmityksen hystereesillä olisi yo. nojalla heksa-id 0x295d40
Lähetetään haluttu uusi asetus näin: "SET;set_0x295d40;10"
Lämpötiloja asettaessa heksa pitää laittaa tuolla tapaa etuliitteellä "set_". Tuo luku 10 tarkoittaa yhtä astetta. Noissa arvoissa on käytössä jakaja, tämän hystereesin tapauksessa se on 10 joten 10/10 = 1K. Myös minimi, maksimi ja askeleet joiden välein asetusta voi muuttaa, tulee XML:n seassa.
Asetukset tallennetaan näin: "SAVE;1"
Käytännössä toki asentaja-logini pitää tehdä ensin jotta asetuksia voi muuttaa. En edes jaksanut opetella sitä koska en ole ihan vielä keksinyt mitä automaatiota haluaisin oikeasti tällä tapaa pumpulle tehdä. Tuskin jaksan mitään, kunhan kokeilin että onnistuu. Toivottavasti tästä oli jollekulle apua.
Loppuun disclaimer: omalla vastuulla! Lukeminen ei pumppua vahingoittane, mutta asetusten automaattisen mälväilyn kanssa olisin astetta varovaisempi. Jos jauhatte eepromminne rikki niin ei ollut minun vikani.