Seite 2 von 4
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 15.11.2021, 22:49
von massel
Hi,
ja das war blöd von mir nicht den ganzen Quelltext zu posten...
Code: Alles auswählen
<html><head></head><body><div id="pos0">
T.Speicher oben</div>
<div id="pos1">
77.0 °C</div>
<div id="pos2">
T.Speicher mitte</div>
<div id="pos3">
75.4 °C</div>
<div id="pos4">
T.Speicher unten</div>
<div id="pos5">
75.4 °C</div>
<div id="pos6">
T.Kollektor</div>
<div id="pos7">
6.4 °C</div>
<div id="pos8">
T.Walltherm Wasser</div>
<div id="pos9">
81.5 °C</div>
<div id="pos10">
T.Rauchgas</div>
<div id="pos11">
135.0 °C</div>
<div id="pos12">
T.Heizkreis VL 1</div>
<div id="pos13">
38.6 °C</div>
<div id="pos14">
T.Heizkreis VL 2</div>
<div id="pos15">
9999.9 °C</div>
<div id="pos16">
T.Außen</div>
<div id="pos17">
7.3 °C</div>
<div id="pos18">
Zusatzfühler 1</div>
<div id="pos19">
76.6 °C</div>
<div id="pos20">
Zusatzfühler 2</div>
<div id="pos21">
9999.9 °C</div>
<div id="pos22">
Eingang potentialfrei HK 1</div>
<div id="pos23">
AUS</div>
<div id="pos24">
Eingang potentialfrei HK 2</div>
<div id="pos25">
AUS</div>
<div id="pos26">
Walltherm Pumpe</div>
<div id="pos27" class="changex2" adresse="10040DA0187">
Auto/EIN</div>
<div id="pos28">
Zuluftklappe</div>
<div id="pos29" class="changex2" adresse="10140DA0187">
Auto/EIN</div>
<div id="pos30">
Solarpumpe</div>
<div id="pos31">
Thermostat 1</div>
<div id="pos32" class="changex2" adresse="10440DA0187">
Auto/AUS</div>
<div id="pos33" class="changex2" adresse="10240DA0187">
Auto/AUS</div>
<div id="pos34">
Rauchgassauger</div>
<div id="pos35" class="changex2" adresse="10540DA0187">
Auto/AUS</div>
<div id="pos36">
Zirkulationspumpe</div>
<div id="pos37" class="changex2" adresse="10640DA0187">
Auto/AUS</div>
<div id="pos38">
Mischer-Heizkreis 1</div>
<div id="pos39" class="changex2" adresse="10740910187">
Auto</div>
<div id="pos40">
Mischer-Heizkreis 2</div>
<div id="pos41" class="changex2" adresse="10940910187">
Auto</div>
<div id="pos42">
Heizkreispumpe 1</div>
<div id="pos43" class="changex2" adresse="10B40DA0187">
Auto/EIN</div>
<div id="pos44">
Heizkreispumpe 2</div>
<div id="pos45" class="changex2" adresse="10C40DA0187">
Auto/AUS</div>
<div id="pos46">
Thermostat 2</div>
<div id="pos47">
Thermostat 3</div>
<div id="pos48" class="changex2" adresse="10F40DA0187">
Auto/AUS</div>
<div id="pos49" class="changex2" adresse="10E40DA0187">
Auto/AUS</div>
<div id="pos50">
Eingänge:
</div>
<div id="pos51">
Ausgänge:
</div>
<div id="pos52" class="durchsichtig" onclick="location.href='schema.html#1'">
</div>
</body></html>
oder vom Script testen ausgelesen:
Code: Alles auswählen
<div id="pos0" >
T.Speicher oben</div>
<div id="pos1" >
77.0</div>
<div id="pos2" >
T.Speicher mitte</div>
<div id="pos3" >
75.4</div>
<div id="pos4" >
T.Speicher unten</div>
<div id="pos5" >
75.4</div>
<div id="pos6" >
T.Kollektor</div>
<div id="pos7" >
6.4</div>
<div id="pos8" >
T.Walltherm Wasser</div>
<div id="pos9" >
80.6</div>
<div id="pos10" >
T.Rauchgas</div>
<div id="pos11" >
132.6</div>
<div id="pos12" >
T.Heizkreis VL 1</div>
<div id="pos13" >
43.5</div>
<div id="pos14" >
T.Heizkreis VL 2</div>
<div id="pos15" >
9999.9</div>
<div id="pos16" >
T.Außen</div>
<div id="pos17" >
7.3</div>
<div id="pos18" >
Zusatzfühler 1</div>
<div id="pos19" >
76.8</div>
<div id="pos20" >
Zusatzfühler 2</div>
<div id="pos21" >
9999.9</div>
<div id="pos22" >
Eingang potentialfrei HK 1</div>
<div id="pos23" >
OFF</div>
<div id="pos24" >
Eingang potentialfrei HK 2</div>
<div id="pos25" >
OFF</div>
<div id="pos26" >
Walltherm Pumpe</div>
<div id="pos27" class="changex2" adresse="10040DA0187">
Auto/EIN</div>
<div id="pos28" >
Zuluftklappe</div>
<div id="pos29" class="changex2" adresse="10140DA0187">
Auto/EIN</div>
<div id="pos30" >
Solarpumpe</div>
<div id="pos31" >
Thermostat 1</div>
<div id="pos32" class="changex2" adresse="10440DA0187">
Auto/AUS</div>
<div id="pos33" class="changex2" adresse="10240DA0187">
Auto/AUS</div>
<div id="pos34" >
Rauchgassauger</div>
<div id="pos35" class="changex2" adresse="10540DA0187">
Auto/AUS</div>
<div id="pos36" >
Zirkulationspumpe</div>
<div id="pos37" class="changex2" adresse="10640DA0187">
Auto/AUS</div>
<div id="pos38" >
Mischer-Heizkreis 1</div>
<div id="pos39" class="changex2" adresse="10740910187">
Auto</div>
<div id="pos40" >
Mischer-Heizkreis 2</div>
<div id="pos41" class="changex2" adresse="10940910187">
Auto</div>
<div id="pos42" >
Heizkreispumpe 1</div>
<div id="pos43" class="changex2" adresse="10B40DA0187">
Auto/EIN</div>
<div id="pos44" >
Heizkreispumpe 2</div>
<div id="pos45" class="changex2" adresse="10C40DA0187">
Auto/AUS</div>
<div id="pos46" >
Thermostat 2</div>
<div id="pos47" >
Thermostat 3</div>
<div id="pos48" class="changex2" adresse="10F40DA0187">
Auto/AUS</div>
<div id="pos49" class="changex2" adresse="10E40DA0187">
Auto/AUS</div>
<div id="pos50" >
Eingänge:
</div>
<div id="pos51" >
Ausgänge:
</div>
<div id="pos52" class="durchsichtig" onClick="location.href='schema.html#1'">
</div>
Hatte die "Code"-Funktion noch nicht gekannt und wollte nicht alles vollschreiben
sorry
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 16.11.2021, 14:29
von Tyfys
Hallo massel
massel hat geschrieben: ↑15.11.2021, 22:49
Hatte die "Code"-Funktion noch nicht gekannt und wollte nicht alles vollschreiben
sorry
NP
Ich hatte noch einen kleinen Fehler im Skript zum Variablen schreiben.Da war mir eine Klammer verschütt gegangen.
Hier nun noch mal die beiden Versionen,allerdings nur für die Temperatur angaben ( bis Zusatzfühler 2).
Die Variablen anlisten:
Code: Alles auswählen
!Variablen und Werte für die ersten 21 Werte
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer von=0;
integer bis =21;
integer ix;
string stdout;
string stderr;
string suche = '<div id="pos';
string such2 = '</div>';
string index;
string wert;
string sysvar;
real sv_value;
string stdout = '<div id="pos0">T.Speicher oben</div><div id="pos1">77.0 °C</div><div id="pos2">T.Speicher mitte</div><div id="pos3">75.4 °C</div><div id="pos4">T.Speicher unten</div><div id="pos5">75.4 °C</div><div id="pos6">T.Kollektor</div><div id="pos7">6.4 °C</div><div id="pos8">T.Walltherm Wasser</div><div id="pos9">81.5 °C</div><div id="pos10">T.Rauchgas</div><div id="pos11">135.0 °C</div><div id="pos12">T.Heizkreis VL 1</div><div id="pos13">38.6 °C</div><div id="pos14">T.Heizkreis VL 2</div><div id="pos15">9999.9 °C</div><div id="pos16">T.Außen</div><div id="pos17">7.3 °C</div><div id="pos18">Zusatzfühler 1</div><div id="pos19">76.6 °C</div><div id="pos20">Zusatzfühler 2</div><div id="pos21">9999.9 °C</div><div id="pos22">Eingang potentialfrei HK 1</div><div id="pos23">AUS</div><div id="pos24">Eingang potentialfrei HK 2</div><div id="pos25">AUS</div><div id="pos26">Walltherm Pumpe</div><div id="pos27" class="changex2" adresse="10040DA0187">Auto/EIN</div><div id="pos28">Zuluftklappe</div><div id="pos29" class="changex2" adresse="10140DA0187">Auto/EIN</div><div id="pos30">Solarpumpe</div><div id="pos31">Thermostat 1</div><div id="pos32" class="changex2" adresse="10440DA0187">Auto/AUS</div><div id="pos33" class="changex2" adresse="10240DA0187">Auto/AUS</div><div id="pos34">Rauchgassauger</div><div id="pos35" class="changex2" adresse="10540DA0187">Auto/AUS</div><div id="pos36">Zirkulationspumpe</div><div id="pos37" class="changex2" adresse="10640DA0187">Auto/AUS</div><div id="pos38">Mischer-Heizkreis 1</div><div id="pos39" class="changex2" adresse="10740910187">Auto</div><div id="pos40">Mischer-Heizkreis 2</div><div id="pos41" class="changex2" adresse="10940910187">Auto</div><div id="pos42">Heizkreispumpe 1</div><div id="pos43" class="changex2" adresse="10B40DA0187">Auto/EIN</div><div id="pos44">Heizkreispumpe 2</div><div id="pos45" class="changex2" adresse="10C40DA0187">Auto/AUS</div><div id="pos46">Thermostat 2</div><div id="pos47">Thermostat 3</div><div id="pos48" class="changex2" adresse="10F40DA0187">Auto/AUS</div><div id="pos49" class="changex2" adresse="10E40DA0187">Auto/AUS</div><div id="pos50">Eingänge:</div><div id="pos51">Ausgänge: </div><div id="pos52" class="durchsichtig" onclick="location.href=\'schema.html\#1\'"></div>';
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
stdout = stdout.ToLatin();
stdout = stdout.Replace(" °C", "");
foreach(index, system.GenerateEnum(von, bis))
{
var such1 = suche # index;
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
ix = index.ToInteger() % 2;
if (ix == 0)
{
sysvar = wert.Replace(" ", "");
Write("SysVarName: " # sysvar);
}
else
{
sv_value = wert.ToFloat();
WriteLine(" mit Wert: " # sv_value);
}
}
Variablen ausgeben:
Code: Alles auswählen
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer von = 0; !erste div id pos nr
integer bis = 21; !letzte div id pos nr
integer ix;
string stdout;
string stderr;
string suche = '<div id="pos';
string such2 = '</div>';
string index;
string wert;
string sysvar;
real sv_value;
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
stdout = stdout.ToLatin();
stdout = stdout.Replace(" °C", "");
foreach(index, system.GenerateEnum(von, bis))
{
var such1 = suche # index ;
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">")+1);
ix = index.ToInteger() % 2;
if (ix == 0)
{
sysvar = wert.Replace(".", "").Replace(" ", "");
}
else
{
sv_value = wert.ToFloat();
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
}
}
}
Noch ein paar Fragen zur Verarbeitung der restlichen Werte.
Du willst diese in der CCU haben, um sie dort noch weiter zu verwerten in einem CCU-Programm.
Z.B. so: wenn T.Speicherunten grösser 22 Grad , dann mach das und das oder wenn WallthermPumpe gleich Auto/Ein dann mach dies und das.
Es dürfen die dann nur als Zahlen, Logikwerte oder Werteliste angelegt werden.
Dann muss man wissen, was da alles so kommen kann.
OFF bzw. ON, Auto/EIN bzw. Auto/AUS und ???
und brauchst du hiervon auch etwas
Code: Alles auswählen
Thermostat 2</div>
<div id="pos47" >
Thermostat 3</div>
<div id="pos48" class="changex2" adresse="10F40DA0187">
Auto/AUS</div>
<div id="pos49" class="changex2" adresse="10E40DA0187">
Auto/AUS</div>
<div id="pos50" >
da passt die vorherige Logik leider nicht....
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 17.11.2021, 19:07
von massel
Moin nochmal,
ich habe das Script eingegeben, aber leider aktualisiert er die Variablen nicht.
Es ist doch von der Logik her so, dass das Script nur in die Variablen schreibt, die in der CCU3 auch vorher schon angelegt worden sind, oder?
Das Zeitmodul steht auf "ganztägig, Zeitintervall alle 1 Minuten"
Hier sind die Variablen und das Programm. Hab ich noch was falsch eingestellt?
Was da noch an Daten von den Schaltzuständen der Pumpe kommen kann muss ich mal in Ruhe durchgucken. Ich schätze es ist OFF, Auto/EIN, Auto/AUS.
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 17.11.2021, 20:09
von Tyfys
Hallo massel.
Ich Blödmann hab die Erzeugung der Variablennamen nicht in beiden Skripts identisch gehabt.
Wenn du im Skript
Variablen ausgeben:
dieses Statement
gegen dieses Statement tauschst
sollte es nun endlich auch mit dem Füllen der Variablen klappen.
massel hat geschrieben: ↑17.11.2021, 19:07
Zeitintervall alle 1 Minuten
Das scheint mir doch etwas knapp zu sein. Die Verarbeitung auf meiner CCU2 dauert schon ein Weilchen.
Hattest du nicht geschrieben:
massel hat geschrieben: ↑14.11.2021, 15:23
Mir würde es alle 10 Minuten reichen
Zu den anderen Werten..
massel hat geschrieben: ↑17.11.2021, 19:07
Was da noch an Daten von den Schaltzuständen der Pumpe kommen kann muss ich mal in Ruhe durchgucken. Ich schätze es ist OFF, Auto/EIN, Auto/AUS.
Da schlage ich dann vor, du legst die als Variablentyp Logikwert an.
Als Wertebezeichung für
wahr dann
ON bzw
Auto/EIN
und für
falsch dann
OFF bzw
Auto/AUS
Dann fehlt nur noch deine Meinung zu Thermostat 2 und Thermostat 3
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 17.11.2021, 21:18
von Tyfys
Hallo massel
Noch einen Block gefunden, der eine andere Reihenfolge hat.
Code: Alles auswählen
<div id="pos30" >
Solarpumpe</div>
<div id="pos31" >
Thermostat 1</div>
<div id="pos32" class="changex2" adresse="10440DA0187">
Auto/AUS</div>
<div id="pos33" class="changex2" adresse="10240DA0187">
Auto/AUS</div>
Brauchst du da etwas von, wenn ja, wie gehört das zusammen.
Gilt auch noch für den bereits aufgegeben Block :
Code: Alles auswählen
<div id="pos46" >
Thermostat 2</div>
<div id="pos47" >
Thermostat 3</div>
<div id="pos48" class="changex2" adresse="10F40DA0187">
Auto/AUS</div>
<div id="pos49" class="changex2" adresse="10E40DA0187">
Auto/AUS</div>
aber prüft das in Ruhe - nur nicht hudeln
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 19.11.2021, 19:27
von Tyfys
Hallo massel
Hier einmal die vorläufigen Endversionen
Es werden alle Werte verarbeitet, bis auf die letzten Positionen, wo kein Wert erkennbar ist.
<div id="pos50" >
Eingänge:
</div>
<div id="pos51" >
Ausgänge:
</div>
<div id="pos52" class="durchsichtig" onClick="location.href='schema.html#1'">
</div>
hier das Skript zum Anlisten der Variablennamen:
Code: Alles auswählen
! CMI-Heizungsdaten Systemvariablennamen anlisten
!**************************************************************
! Variablen und Werte für die ersten 29 ids und 34-45
! Variablen mit Temperaturangaben anlegen als Variablentyp Zahl
! Variablen nicht mit Temperaturangaben anlegen als Variablentyp Logikwert ( wahr = an / falsch = aus
!**************************************************************
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer von = 0; !erste div id pos nr
integer bis = 29; !letzte div id pos nr
integer ix;
string stdout;
string stderr;
string suche = '<div id="pos';
string such2 = '</div>';
string index;
string wert;
string sysvar;
real sv_value;
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
if (stdout.Length() == 0 )
{
stdout = '<div id="pos0">T.Speicher oben</div><div id="pos1">77.0 °C</div><div id="pos2">T.Speicher mitte</div><div id="pos3">75.4 °C</div><div id="pos4">T.Speicher unten</div><div id="pos5">75.4 °C</div><div id="pos6">T.Kollektor</div><div id="pos7">6.4 °C</div><div id="pos8">T.Walltherm Wasser</div><div id="pos9">81.5 °C</div><div id="pos10">T.Rauchgas</div><div id="pos11">135.0 °C</div><div id="pos12">T.Heizkreis VL 1</div><div id="pos13">38.6 °C</div><div id="pos14">T.Heizkreis VL 2</div><div id="pos15">9999.9 °C</div><div id="pos16">T.Außen</div><div id="pos17">7.3 °C</div><div id="pos18">Zusatzfühler 1</div><div id="pos19">76.6 °C</div><div id="pos20">Zusatzfühler 2</div><div id="pos21">9999.9 °C</div><div id="pos22">Eingang potentialfrei HK 1</div><div id="pos23">AUS</div><div id="pos24">Eingang potentialfrei HK 2</div><div id="pos25">AUS</div><div id="pos26">Walltherm Pumpe</div><div id="pos27" class="changex2" adresse="10040DA0187">Auto/EIN</div><div id="pos28">Zuluftklappe</div><div id="pos29" class="changex2" adresse="10140DA0187">Auto/EIN</div><div id="pos30">Solarpumpe</div><div id="pos31">Thermostat 1</div><div id="pos32" class="changex2" adresse="10440DA0187">Auto/AUS</div><div id="pos33" class="changex2" adresse="10240DA0187">Auto/AUS</div><div id="pos34">Rauchgassauger</div><div id="pos35" class="changex2" adresse="10540DA0187">Auto/AUS</div><div id="pos36">Zirkulationspumpe</div><div id="pos37" class="changex2" adresse="10640DA0187">Auto/AUS</div><div id="pos38">Mischer-Heizkreis 1</div><div id="pos39" class="changex2" adresse="10740910187">Auto</div><div id="pos40">Mischer-Heizkreis 2</div><div id="pos41" class="changex2" adresse="10940910187">Auto</div><div id="pos42">Heizkreispumpe 1</div><div id="pos43" class="changex2" adresse="10B40DA0187">Auto/EIN</div><div id="pos44">Heizkreispumpe 2</div><div id="pos45" class="changex2" adresse="10C40DA0187">Auto/AUS</div><div id="pos46">Thermostat 2</div><div id="pos47">Thermostat 3</div><div id="pos48" class="changex2" adresse="10F40DA0187">Auto/AUS</div><div id="pos49" class="changex2" adresse="10E40DA0187">Auto/AUS</div><div id="pos50">Eingänge:</div><div id="pos51">Ausgänge: </div><div id="pos52" class="durchsichtig" onclick="location.href=\'schema.html\#1\'"></div>';
}
stdout = stdout.ToLatin();
stdout = stdout.Replace(" °C", "");
stdout = stdout.Replace("Auto/AUS" , "0");
stdout = stdout.Replace("Auto/EIN" , "1");
stdout = stdout.Replace("Auto" , "0");
stdout = stdout.Replace("OFF" , "0");
stdout = stdout.Replace("ON" , "1");
stdout = stdout.Replace("AUS" , "0");
stdout = stdout.Replace("EIN" , "1");
! Variablen und Werte für die ersten 29 ids und 34-45
integer loop = 0;
while (loop < 2)
{
foreach(index, system.GenerateEnum(von, bis))
{
var such1 = suche # index;
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
ix = index.ToInteger() % 2;
if (ix == 0)
{
sysvar = wert.Replace(" ", "");
Write("SysVarName: " # sysvar);
}
else
{
sv_value = wert.ToFloat();
WriteLine(" mit Wert: " # sv_value);
}
}
loop = loop + 1;
von = 34;
bis = 45;
}
!ausserhalb der anderen Logik
! das id pos - Paar getrennt durch "[" , Paare durch ";" getrennt
string sucharr = "30[32;31[33;46[48;47[49";
foreach(index, sucharr.Split(";"))
{
var such1 = suche # index.StrValueByIndex("[", 0);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sysvar = wert.Replace(" ", "");
Write("SysVarName: " # sysvar);
var such1 = suche # index.StrValueByIndex("[", 1);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sv_value = wert.ToFloat();
WriteLine(" mit Wert: " # sv_value);
}
und hier das zum Ausgeben der Werte in die angelegten Systemvariablen.
Code: Alles auswählen
! CMI-Heizungsdaten ausgeben in Systemvariablen
!**************************************************************
! Variablen mit Temperaturangaben anlegen als Variablentyp Zahl
! Variablen nicht mit Temperaturangaben anlegen als Variablentyp Logikwert ( wahr = an / falsch = aus
!**************************************************************
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer von = 0; !erste div id pos nr
integer bis = 29; !letzte div id pos nr
integer ix;
string stdout;
string stderr;
string suche = '<div id="pos';
string such2 = '</div>';
string index;
string wert;
string sysvar;
real sv_value;
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
stdout = stdout.ToLatin();
stdout = stdout.Replace(" °C", "");
stdout = stdout.Replace("Auto/AUS" , "0");
stdout = stdout.Replace("Auto/EIN" , "1");
stdout = stdout.Replace("Auto" , "0");
stdout = stdout.Replace("OFF" , "0");
stdout = stdout.Replace("ON" , "1");
stdout = stdout.Replace("AUS" , "0");
stdout = stdout.Replace("EIN" , "1");
! Variablen und Werte für die ersten 29 ids und 34-45
integer loop = 0;
while (loop < 2)
{
foreach(index, system.GenerateEnum(von, bis))
{
var such1 = suche # index;
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
ix = index.ToInteger() % 2;
if (ix == 0)
{
sysvar = wert.Replace(" ", "");
}
else
{
sv_value = wert.ToFloat();
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
}
}
}
loop = loop + 1;
von = 34;
bis = 45;
}
!ausserhalb der anderen Logik
! das id pos - Paar getrennt durch "[" , Paare durch ";" getrennt
string sucharr = "30[32;31[33;46[48;47[49";
foreach(index, sucharr.Split(";"))
{
var such1 = suche # index.StrValueByIndex("[", 0);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sysvar = wert.Replace(" ", "");
var such1 = suche # index.StrValueByIndex("[", 1);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sv_value = wert.ToFloat();
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
}
}
Gib mir gelegentlich Bescheid, ob alles so hinhaut
oder ob noch etwas geändert werden soll bzw. du noch Fragen dazu hast .
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 21.11.2021, 22:54
von massel
Hallo Tyfys,
ich bin schwer beeindruckt von der Mühe, die du dir machst. Danke!
Leider funktioniert auch das letzte Skript noch nicht so, dass es dir Werte in die Variablen schreibt. Egal welche ich angebe, anscheinend erreicht das Werte Ausgeben Skript (das 2.) die Variablen nicht.
Das Skript zum Anlisten funkioniert... Muss ich noch irgendwas einstellen oder installieren auf der CCU?
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 21.11.2021, 23:36
von Tyfys
Hallo massel.
Danke für die Blumen.
Aber wenn man einmal dabei ist....
Man hat ja irgendwo auch so ein paar Routinen.
Ich kann ja nur mit den Test Daten spielen, die du mir bereit gestellt hast.
Und da hab ich mal die Variable
T.HeizkreisVL1 angelegt.
- massel.png (5.63 KiB) 1364 mal betrachtet
Bei mir klappt's also.
Ich hab bei mir im 2.Skript natürlich diese Statemens nach
system.Exec("wget... eingefügt, sonst kann ich ja nichts testen.
Code: Alles auswählen
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
if (stdout.Length() == 0 )
{
stdout = '<div id="pos0">T.Speicher oben</div><div id="pos1">77.0 °C</div><div id="pos2">T.Speicher mitte</div><div id="pos3">75.4 °C</div><div id="pos4">T.Speicher unten</div><div id="pos5">75.4 °C</div><div id="pos6">T.Kollektor</div><div id="pos7">6.4 °C</div><div id="pos8">T.Walltherm Wasser</div><div id="pos9">81.5 °C</div><div id="pos10">T.Rauchgas</div><div id="pos11">135.0 °C</div><div id="pos12">T.Heizkreis VL 1</div><div id="pos13">38.6 °C</div><div id="pos14">T.Heizkreis VL 2</div><div id="pos15">9999.9 °C</div><div id="pos16">T.Außen</div><div id="pos17">7.3 °C</div><div id="pos18">Zusatzfühler 1</div><div id="pos19">76.6 °C</div><div id="pos20">Zusatzfühler 2</div><div id="pos21">9999.9 °C</div><div id="pos22">Eingang potentialfrei HK 1</div><div id="pos23">AUS</div><div id="pos24">Eingang potentialfrei HK 2</div><div id="pos25">AUS</div><div id="pos26">Walltherm Pumpe</div><div id="pos27" class="changex2" adresse="10040DA0187">Auto/EIN</div><div id="pos28">Zuluftklappe</div><div id="pos29" class="changex2" adresse="10140DA0187">Auto/EIN</div><div id="pos30">Solarpumpe</div><div id="pos31">Thermostat 1</div><div id="pos32" class="changex2" adresse="10440DA0187">Auto/AUS</div><div id="pos33" class="changex2" adresse="10240DA0187">Auto/AUS</div><div id="pos34">Rauchgassauger</div><div id="pos35" class="changex2" adresse="10540DA0187">Auto/AUS</div><div id="pos36">Zirkulationspumpe</div><div id="pos37" class="changex2" adresse="10640DA0187">Auto/AUS</div><div id="pos38">Mischer-Heizkreis 1</div><div id="pos39" class="changex2" adresse="10740910187">Auto</div><div id="pos40">Mischer-Heizkreis 2</div><div id="pos41" class="changex2" adresse="10940910187">Auto</div><div id="pos42">Heizkreispumpe 1</div><div id="pos43" class="changex2" adresse="10B40DA0187">Auto/EIN</div><div id="pos44">Heizkreispumpe 2</div><div id="pos45" class="changex2" adresse="10C40DA0187">Auto/AUS</div><div id="pos46">Thermostat 2</div><div id="pos47">Thermostat 3</div><div id="pos48" class="changex2" adresse="10F40DA0187">Auto/AUS</div><div id="pos49" class="changex2" adresse="10E40DA0187">Auto/AUS</div><div id="pos50">Eingänge:</div><div id="pos51">Ausgänge: </div><div id="pos52" class="durchsichtig" onclick="location.href=\'schema.html\#1\'"></div>';
}
Deshalb solltest du dieses noch einmal im Fenster Skript testen ausführen:
Code: Alles auswählen
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer ix;
string stdout;
string stderr;
system.Exec("wget --no-check-certificate -q -O - '" # url # "'" , &stdout, &stderr);
WriteLine(stdout);
Um zu prüfen ob der Abruf erfolgreich ist und etwas ausgegeben wird.
Allerdings macht mich das etwas stutzig:
massel hat geschrieben: ↑21.11.2021, 22:54
dass es dir Werte in die Variablen schreibt.
Egal welche ich angebe,
Was meinst du mit
Egal welche ich angebe ?
Eigentlich müsstest Du im Skript nichts ändern - nur die Systemvariablen anlegen, die du haben willst.
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 23.11.2021, 21:49
von massel
Tyfys hat geschrieben: ↑21.11.2021, 23:36
dass es dir Werte in die Variablen schreibt. Egal welche ich angebe,
Was meinst du mit Egal welche ich angebe ?
Sorry, ich meinte "Egal, welche in anlege". Ich muss ja diese Variablen mit den korrekt lautenden Namen im System angelegt haben, damit dein Skript den aktuellen Wert dort speichern kann.
Ich habe mal ein paar Screenshots gemacht. Vielleicht ist ja irgendwo noch irgendwas falsch eingegeben...
Oder brauche ich noch ein Plugin dafür?
Das angehängte Script habe ich getestet. Es greift auf den Quelltext der CMI Datenseite zu.
VG
ps.
https://www.mediafire.com/file/u7c7musr ... 2.cgi/file
hier ist das cgi file hochgeladen.
Re: TCL(?)-Script erstellung, Heizungsdaten auslesen
Verfasst: 23.11.2021, 22:51
von Tyfys
Hallo massel.
Vorweg: Du solltest dir mal die Servicemeldung anschauen - evt. ist da Handlungsbedarf.
Nun zu den CMI Daten.
Mindestens die Variable
T.HeizkreisVL1 ist ja auch richtig angelegt und müsste gefüllt werden.
( BTW: Du könntest bei den Grad Angaben noch die Masseinheit °C mit angeben).
Lass nun dieses Skript einmal im Fenster
Skript testen ausführen und poste mir das Ergebnis in CodeTags.
Ich hab da noch Ausgaben eingebaut.
Code: Alles auswählen
! CMI-Heizungsdaten ausgeben in Systemvariablen
!**************************************************************
! Variablen mit Temperaturangaben anlegen als Variablentyp Zahl
! Variablen nicht mit Temperaturangaben anlegen als Variablentyp Logikwert ( wahr = an / falsch = aus
!**************************************************************
string url = "http://admin:admin@192.168.178.95/schematic_files/2.cgi";
integer von = 0; !erste div id pos nr
integer bis = 29; !letzte div id pos nr
integer ix;
string stdout;
string stderr;
string suche = '<div id="pos';
string such2 = '</div>';
string index;
string wert;
string sysvar;
real sv_value;
system.Exec("wget --no-check-certificate -q -O - '" # url # "'", & stdout, & stderr);
if (stdout.Length() == 0)
{
WriteLine("keine Daten empfangen");
if (stderr.Length() > 0)
{
WriteLine("Fehlermeldung vom Server: " # stderr);
}
quit;
}
else
{
WriteLine(stdout);
}
stdout = stdout.ToLatin();
stdout = stdout.Replace(" °C", "");
stdout = stdout.Replace("Auto/AUS" , "0");
stdout = stdout.Replace("Auto/EIN" , "1");
stdout = stdout.Replace("Auto" , "0");
stdout = stdout.Replace("OFF" , "0");
stdout = stdout.Replace("ON" , "1");
stdout = stdout.Replace("AUS" , "0");
stdout = stdout.Replace("EIN" , "1");
! Variablen und Werte für die ersten 29 ids und 34-45
integer loop = 0;
while (loop < 2)
{
foreach(index, system.GenerateEnum(von, bis))
{
var such1 = suche # index;
WriteLine("Element: " # such1);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
ix = index.ToInteger() % 2;
if (ix == 0)
{
sysvar = wert.Replace(" ", "");
WriteLine("VariablenName: " # sysvar);
}
else
{
sv_value = wert.ToFloat();
WriteLine("VariablenWert: " # sv_value);
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
WriteLine("Variable: " # sysvar # " gespeichert mit Wert " # sv_value);
}
else
{
WriteLine("Variable: " # sysvar # " nicht angelegt für Wert " # sv_value);
}
}
}
loop = loop + 1;
von = 34;
bis = 45;
}
!ausserhalb der anderen Logik
! das id pos - Paar getrennt durch "[" , Paare durch ";" getrennt
string sucharr = "30[32;31[33;46[48;47[49";
foreach(index, sucharr.Split(";"))
{
var such1 = suche # index.StrValueByIndex("[", 0);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sysvar = wert.Replace(" ", "");
var such1 = suche # index.StrValueByIndex("[", 1);
wert = stdout.Substr(stdout.Find(such1) + such1.Length()).Substr(0, (stdout.Substr(stdout.Find(such1) + such1.Length()).Find(such2)));
wert = wert.Substr(wert.Find(">") + 1);
sv_value = wert.ToFloat();
object svdp = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvar);
if (svdp)
{
svdp.State(sv_value);
WriteLine("Variable: " # sysvar # " gespeichert mit Wert " # sv_value);
}
else
{
WriteLine("Variable: " # sysvar # " nicht angelegt für Wert " # sv_value);
}
}
Ist jedenfalls gediegen, dass bei dir nix klappt.