NEWS
HomeControlCenter van Bartels/Ravensberger Solar
-
Hallo zusammen!
Seit nunmehr 2 Jahren läuft bei mir (wohlgemerkt fast Problemlos) eine Raspberry mit IObroker.
Um den steigenden Strompreisen entgegen zu arbeiten habe ich mir heuer eine thermische Solaranlage für die Warmwassererzeugung geholt.
Leider bin ich wie man im Internet lesen kann wie viele andere den Fake Bewertungen der Fa. Ravensberger Solar auf den Leim gegangen. Der mitgelieferte Regler (wird unter dem Namen "HomeControlCenter" vertrieben)
arbeitet zwar offline
das war leider eine Falsche Annahme, Regelung läuft alles online wenn ich mir den Quelltext so ansehe
allerdings kann man das auslesen der Werte und setzen von Einstellungen nur online über die eigene Website vornehmen.
Schnittstellen gibt es keine. (Zumindest keine vom Hersteller dokumentierte)
Zu allem Überfluss ist die Firmware auch noch so schlecht programmiert dass sich der Controller in unregelmäßigen Abständen (12-72 Stunden) aufhängt.
Der Service der Firma ist unterirdisch, telefonisch gibt es eine Mehrwertnummer unter welcher man sich für Warteschleifenmelodie und unqualifizierte und unfreundliche Antworten noch Geld aus der Tasche ziehen lassen kann.
Wenn ich das was ich jetzt weiß vorher gewusst hätte wäre es wohl eine Steuerung der TA geworden...
Leider reicht jetzt das Budget dafür nicht mehr und eine Rücksendung ist gelinde gesagt wenn ich mir die Erfahrungsberichte mit dieser Firma ansehe Hoffnungslos.
Um jetzt die Heizpatrone (hängt an einem Shelly) trotzdem sinnvoll zu steuern und die Anlage automatisch bei einem Hänger zu resetten bis ich etwas anderes habe benötige ich die Daten der thermischen Anlage von der Website.Ich habe über die Google-Suche und auch über die Forensuche zwar ein paar Projekte gefunden die ähnlich sind,
allerdings komme ich mit Javascript nicht klar und kann die Scripte nicht an meine Anforderung umschreiben.Kann mir hier jemand von euch helfen?
Die Seite um welches es geht:
http://energycenter.vonbartels.de
(Zugangsdaten kann ich gerne per PM zu diagnosezwecken zur Verfügung stellen)Der Quelltext und ein Screenshot welche Daten ich brauche:
Übersicht.txtLogin-Page.txt
Und noch abschließend mein versuch etwas bestehendes dafür umzuschreiben
Ab Zeile 108 komme ich dann nicht weiter weil ich nicht weis wie ich die Daten eingrenzen bzw. Abfragen soll:const dpSchema = "javascript.0.Solar.Schema"; const dpLastCon = "javascript.0.Solar.LetzteVerbindung"; const dpRelai1 = "javascript.0.Solar.Relai1"; const dpRelai2 = "javascript.0.Solar.Relai2"; const dpRelai3 = "javascript.0.Solar.Relai3"; const dpRelai4 = "javascript.0.Solar.Relai4"; const dpRelai5 = "javascript.0.Solar.Relai5"; const dpRelai6 = "javascript.0.Solar.Relai6"; const dpRelai7 = "javascript.0.Solar.Relai7"; const dpRelai8 = "javascript.0.Solar.Relai8"; const dpSensorS1 = "javascript.0.Solar.SensorS1"; const dpSensorS2 = "javascript.0.Solar.SensorS2"; const dpSensorS3 = "javascript.0.Solar.SensorS3"; const dpSensorS4 = "javascript.0.Solar.SensorS4"; const dpSensorS5 = "javascript.0.Solar.SensorS5"; const dpSensorS6 = "javascript.0.Solar.SensorS6"; const dpSensorS7 = "javascript.0.Solar.SensorS7"; const dpSensorS8 = "javascript.0.Solar.SensorS8"; const dpSensorS9 = "javascript.0.Solar.SensorS9"; const dpSensorS10 = "javascript.0.Solar.SensorS10"; const dpSensorDS15 = "javascript.0.Solar.SensorDS15"; const dpSensorDS16 = "javascript.0.Solar.SensorDS16"; const dpSensorDS17 = "javascript.0.Solar.SensorDS17"; const dpSensorDS18 = "javascript.0.Solar.SensorDS18"; const dpSensorDS19 = "javascript.0.Solar.SensorDS19"; const dpSensorDS20 = "javascript.0.Solar.SensorDS20"; const dpSensorDS21 = "javascript.0.Solar.SensorDS21"; const dpSensorDS22 = "javascript.0.Solar.SensorDS22"; const dpSensorDS23 = "javascript.0.Solar.SensorDS23"; const dpSensorDS24 = "javascript.0.Solar.SensorDS24"; const dpSensorDS25 = "javascript.0.Solar.SensorDS25"; const dpSensorDS26 = "javascript.0.Solar.SensorDS26"; const dpSensorDS27 = "javascript.0.Solar.SensorDS27"; const dpSensorDS28 = "javascript.0.Solar.SensorDS28"; const dpSensorDS29 = "javascript.0.Solar.SensorDS29"; const dpSensorDS30 = "javascript.0.Solar.SensorDS30"; const dpSensorDS31 = "javascript.0.Solar.SensorDS31"; const dpSensorDS32 = "javascript.0.Solar.SensorDS32"; const dpSensorDS33 = "javascript.0.Solar.SensorDS33"; const dpSensorDS34 = "javascript.0.Solar.SensorDS34"; var user = "****"; var pass = "*****"; const request = require("request"); const cheerio = require("cheerio"); async function main() { var optionsLogin = { method: 'POST', url: "http://energycenter.vonbartels.de/", body: "BENUID=" + user + "&PASSWT=" + pass + "&login-form-submit=login", jar: true, followRedirect:true, followAllRedirects :true, headers: { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7", "cache-control": "no-cache", "content-type": "application/x-www-form-urlencoded", "dnt": "1", "origin": "http://energycenter.vonbartels.de/", "pragma": "no-cache", "sec-ch-ua": "\"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"108\", \"Google Chrome\";v=\"108\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "upgrade-insecure-requests": "1", "User-Agent": " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", "cookie": "cAccept=true; NETSERVICE=true; IQCARDPASSWT=; IQCARDBENUID= ", "Referer": "http://energycenter.vonbartels.de/" } }; var optionsReglerinfo = { method: 'GET', url: "http://energycenter.vonbartels.de/startseite", jar: true, followRedirect:true, followAllRedirects :true, headers: { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7", "cache-control": "no-cache", "dnt": "1", "origin": "http://energycenter.vonbartels.de", "pragma": "no-cache", "sec-ch-ua": "\"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"108\", \"Google Chrome\";v=\"108\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "sec-fetch-user": "?1", "upgrade-insecure-requests": "1", "User-Agent": " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", "Referer": "http://energycenter.vonbartels.de" } }; request.jar(); request.post(optionsLogin,()=>{ request.get(optionsReglerinfo,(error, response, body)=>{ const $ = cheerio.load(body); let titles = $('div[class="panel-body"] > fieldset > legend > strong').map((i,el)=>$(el).text().replace("Preise","").trim()); let dates = $('div[class="panel-body"] > fieldset').contents().filter(function() { return this.nodeType == 3 && this.data.replace(/\s/gm,"")!="" }).map((i,el)=>$(el).text().replace(/\s/gm,"").slice(0,-1)); let prices = $('div[class="panel-body"] > fieldset > strong').map((i,el)=>$(el).text()); if (titles.length==dates.length && titles.length==prices.length) { console.debug("website structure OK, found matching elements"); } else { console.debug("website structure is not OK, elements doesnt match"); return; } let data={}; for (var i=0;i<titles.length;i++) { data[titles[i]]={ title:titles[i], date:dates[i], price:prices[i] }; }; console.debug(data); writeDatapoint(data); }); }); function writeDatapoint(data) { console.debug("write dpSchema"); setState(dpSchema,JSON.stringify(data)); } } main()