Homematic und CMI verbinden

Unsere Heizung wird von einer UVR1611 (Universalregelung) von Technische Alternative gesteuert bzw. hängt über ein C.M.I. (Control and Monitoring Interface) im Netzwerk. Mit Hilfe eines Scriptes können die Sensorwerte der Heizungssteuerung in Homematic übernommen & weiterverarbeitet werden:

Als erstes muss eine Seite im Online-Schema der Steuerung erstellt werden, welche die zu übernehmenden Werte beinhaltet:

Schema

Wichtig hierbei ist, dass in den Bezeichnungen keine Umlaute und Sonderzeichen vorkommen. Leerzeichen am Besten durch einen _ ersetzen. Bei mir ist das die Seite 3 des Schemas.
Anschließend werden in der Homematic-CCU die betreffenden Variablen als Zahlenwert angelegt, und zwar genau so wie sie im Online-Schema beschriftet sind:

Variable

Nun zum Script, welches die Werte vom Online-Schema abgreift und in die Variablen speichert. Damit das Script funktioniert muss CUXD und CUXD.exec installiert sein:

var url = „http://USER:PASSWORT@CMI-IP-ADRESSE/schematic_files/3.cgi“;
dom.GetObject(CUxD.CUX2801001:1.CMD_SETS„).State(„wget -q –auth-no-challenge -O – ‚“#url#“‚“); dom.GetObject(CUxD.CUX2801001:1.CMD_QUERY_RET„).State(1); string srueck = dom.GetObject(CUxD.CUX2801001:1.CMD_RETS„).State(); string liste = „Aussentemperatur: \n|Raumtemperatur: \n|Sole-Vorlauf: \n|Solar-VL: \n|Solar-RL: \n|Puffer-VL: \n|Puffer-RL: \n|Strahlungssensor: \n|Aktuelle_Leistung: \n|Waermemenge_kwh: \n|Waermemenge_mwh: \n|Puffer_Oben: \n|Puffer_Oben_Mitte: \n|Puffer_Unten_Mitte: \n|Puffer_Unten: \n|Kollektor_Fassade: \n|Kollektor_Dach: \n|WMZ_Solar_VL: \n|WMZ_Solar_RL: \n|WMZ_Solar_Durchfluss: \n“; string slist =““; string i; foreach(i, liste.Split(„|“)) { var posValueStart = i; var posValueEnd = „°C“; var posValue = srueck.Find(posValueStart) + posValueStart.Length(); var stmp = srueck.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ; if (stmp.Find(„- „)== 0 ) { stmp = „-„#stmp.Substr(2, stmp.Length());} integer ikomma = stmp.Find(„,“); string saus1 = stmp.Substr(0, ikomma); string saus2 = saus1 + „.“ + stmp.Substr(ikomma + 1, 5); var zaus = saus2.ToFloat(); var name = i.Substr(0, i.Length()-3); dom.GetObject(„“#name#““).State(zaus); !slist = slist #name #“ = „#zaus #“\n“; } !WriteLine(slist);

Hier muss natürlich der Benutzer, das Login-Passwort sowie die IP-Adresse des CMI eingesetzt werden. Weiters muss die richtige *.cgi-Datei angegeben werden, in meinem Fall 3.cgi da es bei mir die 3. Seite war.

Schlussendlich muss das Script noch in ein Timer-Programm eingebaut werden, welches zb. alle 60 Sekunden ausgeführt wird. Von nun an können die Variablen weiterverwendet werden und zb. Aktoren abhängig von Raumtemperatur oder Sonnenstrahlung geschalten werden!

Mein besonderer Dank gilt dem User alchy von homematic-forum.de, der mir dieses Script erstellt hat.

 

Update 13.12.2016: Ein Fehler im Script hatte dau geführt, dass negative Werte immer als 0 angezeigt wurden. Das habe ich erst jetzt im Winter bemerkt, alchy war so freundlich und hat mir das Script nochmal überarbeitet, jetzt sollte alles funktionieren! Auch habe ich in der Zwischenzeit ein paar Werte hinzugefügt (Puffer-Temperaturen usw…), die Screenshots oben stimmen deshalb nicht mehr mit dem Script überein!