Beitrag
von Goglo » 05.04.2013, 17:22
Das ist mal wieder ein echter homematic
Es liegt an der Systemvariablen svBuero, die dem Kanal2 des Reglers zugeordnet ist. Ohne die Variable funktioniert's. Mit Variable muss man auf das Kanalobjekt ein mal zusätzlich zugreifen, damit es funktionierte. Die eine zusätzliche Anweisung tut logisch nichts, ist dem Gesamtablauf des Skripts überaus zuträglich.
Hier das funktionierende Skript
Code: Alles auswählen
integer maxEntries = 384; ! max Eintraege im Umlaufpuffer festlegen. z.B. alle 5 Minuten für 24h = 288.
!Skript zum protokollieren der Heizungsdate eines Raums. Je Raum darf dabei nur ein
!Regler vorhanden sein und die an diesen Regler angelernten Stellantriebe müssen
!auch diesem Raum zugeordnet sein. Skript ist vorbereitet auf die max. vier Stellantriebe,
!ich glaube aber, dass die eh alle gleich geregelt werden, weshalb nur einer aktiv ist.
!Liste von Räumen mit Thermostatreglern und Stellantrieben zum Protokollieren
string logRooms = "Baden";
!Name der Systemvariablen ist prefix<raumname>
string prefix = "Heizung_";
!----------------------------------------------------------------------------------------------------------------------------
time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime();
! Zum durchhangeln durch die Kanäle eines Raums
string chn_s;
var chn;
! dito für die Datenpunkte des Kanals
string dp_s;
var dp;
string logVal;
foreach(logVal, logRooms.Split(";"))
{
! Die zu protokollierenden Datenpunkte initialisieren
string vvs1 = "";
string vvs2 = "";
string vvs3 = "";
string vvs4 = "";
string setp = "";
string temp = "";
string hmdt = "";
! Die Systemvariable, wohin gespeichert wird ermitteln
var sysVar = dom.GetObject(prefix # logVal);
var room = dom.GetObject(logVal);
!Alle Räume durchklappern
foreach(chn_s, room.EnumUsedIDs()) {
chn = dom.GetObject(chn_s);
!und innerhalb eines Raums alle Kanäle
foreach(dp_s, chn.DPs()){
dp = dom.GetObject(dp_s);
string dpType = dp.HssType(); ! <<<<------------ irre wichtig. ehrlich.
if(dp.HssType() == "VALVE_STATE"){
if(vvs1 == ""){
vvs1 = dp.Value().ToString();}
else{
if(vvs2 == ""){vvs2 = dp.Value().ToString();}
else{
if(vvs3 == ""){vvs3 = dp.Value().ToString();}
else{
if(vvs4 == ""){vvs4 = dp.Value().ToString();}
}
}
}
}
if(dp.HssType() == "SETPOINT"){
setp = dp.Value().ToString();
!Kürzen auf eine Nachkommastelle
setp = setp.Substr(0, setp.Find(".")+2);
}
if(dp.HssType() == "TEMPERATURE"){
temp = dp.Value().ToString();
!Kürzen auf eine Nachkommastelle
temp = temp.Substr(0, temp.Find(".")+2);
}
if(dp.HssType() == "HUMIDITY"){
hmdt = dp.Value();
}
}
}
!Nicht gefundene Stellregler mit 0 initialisieren
if(vvs1 == ""){vvs1="0";}
if(vvs2 == ""){vvs2="0";}
if(vvs3 == ""){vvs3="0";}
if(vvs4 == ""){vvs4="0";}
!Hier wird der neue Eintrag zusammengebastelt
string newEntry = now.ToString() # "," # setp # "," # temp # "," # hmdt # "," # vvs1;
! WriteLine(newEntry);
string newString;
string clpString;
string oldString = sysVar.Variable();
if(sysVar.Variable() == "???"){
newString = "1;"#newEntry;
}
else{
! erstes Feld enthält den Zähler aktuell
integer cnt = oldString.StrValueByIndex(";",0).ToInteger();
! cnt entfernen: alles ab dem ersten ";"
integer i = oldString.Find(";");
integer l = oldString.Length();
clpString = oldString.Substr(i+1,l-i+1);
if(cnt < maxEntries){
cnt = cnt + 1;
}
else{
!Umlaufpuffer voll, erstes Element entfernen
i = clpString.Find(";");
l = clpString.Length();
clpString = clpString.Substr(i+1,l-i+1);
}
!neues Element hinten dranhängen
newString = cnt # ";" # clpString # ";" # newEntry;
}
! WriteLine(newString);
sysVar.State(newString);
}
83 Kanäle in 50 Geräten:
3x HM-LC-Sw1-Pl, 1x HM-WDS10-TH-O, 5x HM-PB-4-WM, 3x HM-PB-2-WM, 3x HM-LC-Dim1T-FM, 2x HM-Sec-SC, 4x HM-Sec-RHS, 5x HM-CC-VD, 4x HM-CC-TC, 5x HM-LC-Sw1-FM, 2x HM-Sec-MDIR, 1x HM-WDS30-T-O, 1x HM-LC-Sw1-Pl-2, 2x HM-PB-2-WM55, 1x HM-LC-Dim1L-CV, 1x HM-CCU-1, 1x HM-PBI-4-FM, 1x HM-LC-Dim1L-Pl-2, 1x HM-LC-Dim1T-CV, 1x HM-LC-Dim1L-Pl, 1x HM-LC-Sw2-FM, 1x HM-LC-Sw1-SM, 1x HM-Sec-WDS
82 Kanäle in 43 Geräten:
1x HM-PB-2-WM, 2x HM-LC-Bl1-FM, 3x HM-LC-Bl1PBU-FM, 3x HM-PB-2-WM55, 2x HM-PB-4-WM, 9x HM-CC-VD, 8x HM-CC-TC, 2x HM-LC-Sw2-FM, 1x HM-WDS10-TH-O, 1x HM-CCU-1, 1x HM-Sen-MDIR-O, 4x HM-LC-Sw1-FM, 2x HM-SwI-3-FM, 1x HM-LC-Sw4-SM, 1x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-WDS30-T-O