Hallo,
mit 2.12a versuchte ich mehrere Variationen::
a) Angabe nur Raum
Gebe ich nur den Raum ein dann regelt er den Thermostat zwar, die Öffnung des Fensters (ein HMIP-SWDO) wird aber nicht erkannt
(Hinweis: das Gewerk "Verschluss" besteht und da ist der HMIP-SWDO auch zugewiesen)
b) kein Raum
Gebe ich den Raum nicht ein, dafür aber den Thermostat und den Fensterkontakt, funktioniert nichts.
C) Angabe Raum und Datenpunkt Thermostat
und bei Sensoren dann den Fensterkontakt
regelt er den Thermostat zwar, die Öffnung des Fensters (ein HMIP-SWDO) wird aber nicht erkannt
-->weitere Erkenntnis: auch wenn ich einen herkömmlichen (also nicht-IP) Fensterkontakt HM-Sec-SC-2" als Fensterkontakt angebe, habe ich gleiches Ergebnis.
Im Script muss also noch etwas anderes im Bezug auf die Tür- und Fensterkontakte (als die Zeile mit der Definition der Sensoren) nicht stimmen...
Code: Alles auswählen
Skript bearbeiten
! KiZiJ Version 2.12
! Script von Erik Groennerud - 8.2009- MM.2013
! Ergaenzung von Zauberlehrling
! Optimiert und ergaenzt von Petrus (Peter) - 01.2018
! Performance Ideen von Goersch
! **************************************************************************
! Angabe fuer "raum" nur notwendig, wenn das Script die Thermostate
! und Sensoren automatisch ermitteln soll. Andernfalls leer lassen.
! **************************************************************************
string raum = "KiZiJ";
! **************************************************************************
! Eingabe fuer Thermostate (nur wenn "raum" nicht angegeben ist):
! HM-CC-TC <SERIENNUMMER>:2.SETPOINT
! HM-CC-RT-DN <SERIENNUMMER>:4.SET_TEMPERATURE
! HM-TC-IT-WM-W-EU <SERIENNUMMER>:2.SET_TEMPERATURE
! **************************************************************************
string thermostate = "BidCos-RF.KEQxxxxxx6:4.SET_TEMPERATURE";
! **************************************************************************
! Eingabe fuer Sensoren (optional und nur, wenn "raum" nicht angegeben ist):
! Bsp. HM-Sec-SC-2 <SERIENNUMMER>:1.STATE
! **************************************************************************
string sensoren = "HmIP-RF.0000xxxxxx9931:1.STATE"; ! Angabe mehrerer Sensoren moeglich -> Eingaben mit ";" trennen
! **************************************************************************
! Namen der Systemvariablen in der CCU
! Namen von nicht verwendeten Systemvarialen einfach leer lassen
! **************************************************************************
string sv_Heizperiode = "Heizperiode"; ! Fuer Pruefung, ob Winter oder Sommer
string sv_Partytemperatur = "Partytemperatur"; ! Selbsterklaerend
string sv_Urlaub1 = "Urlaub"; ! Fuer Pruefung, ob Urlaub und auf Reisen => Temperatur "grad_urlaub"
string sv_Urlaub2 = "Urlaub2"; ! Fuer Pruefung, ob Urlaub und zu Hause => Temperatur Zeitleiste Sa. oder So.
string sv_Gaeste = "Gaeste2"; ! Fuer Pruefung, ob Gaeste im Hause sind => Temperatur "grad_gaeste"
string sv_Anwesenheit = "Anwesenheit"; ! Fuer Pruefung, ob ausser Haus => Temperatur "grad_aa"
string sv_Feiertag = "Feiertag_heute"; ! Fuer Pruefung, ob heute Feiertag ist => Temperatur Zeitleiste Sa. oder So.
string Gewerk_Verschluss = "Verschluss"; ! Gewerk in der CCU fuer die Veschluesse
! **************************************************************************
! Temperaturen 6-30 Grad, 0 = OFF, 100=ON
real grad_0 = 17.0;
real grad_1 = 18.0;
real grad_2 = 19.0;
real grad_3 = 20.0;
real grad_4 = 20.5;
real grad_5 = 21.0;
real grad_6 = 21.5;
real grad_7 = 22.0;
real grad_8 = 22.5;
real grad_9 = 23.0;
real grad_fenster = 6; ! Temperatur bei offenem Fenster -1 = off
real grad_urlaub = 16; ! Temperatur, wenn Urlaub und auf Reisen -1 = off
real grad_gaeste = 22; ! Temperatur fuer Gaeste -1 = off
real grad_aa = 18; ! Temperatur ausser haus, wird als Absenkung benutzt, -1 = OFF (immer Anwesenheit)
string deltaStdMin = "0:31"; ! deltaStdMin mit "hh:mm" setzten (Std / Min immer zweistellig) Differenzzeit, die manuelle Temperatur erhalten bleibt bis überschrieben wird
integer woche = 0; ! 0=7 Tage Woche, 1=Montag=Wochentags & Samstag=Wochenende, 2= Montag=Woche, 3=Montag=Wochentags & Samstag=Samstag & Sonntag=Sonntag
integer leiste = 1; ! Welche Zeitleiste aktiv ist
if (leiste == 1){
! Zeitleiste 1
! Uhrzeit 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
! 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111122345421111111111111111122335543222111";
string zeitleiste_die = "111111111122345421111111111111111122335543222111";
string zeitleiste_mit = "111111111122345421111111111111111122335543222111";
string zeitleiste_don = "111111111122345421111111111111111122335543222111";
string zeitleiste_fre = "111111111122345421111111111111111122335543222111";
string zeitleiste_sam = "111111111111111335333333333333333333333333332211";
string zeitleiste_son = "111111111111111335333333333333333333333533332211";
};
if (leiste == 2){
! Zeitleiste 2
! Uhrzeit 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
! 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
string zeitleiste_mon = "111111111111223335555555555555555555333333333322";
string zeitleiste_die = "111111111111223335555555555555555555333333333322";
string zeitleiste_mit = "111111111111223335555555555555555555333333333322";
string zeitleiste_don = "111111111111223335555555555555555555333333333322";
string zeitleiste_fre = "111111111111223335555555555555555555333333333322";
string zeitleiste_sam = "111111111111111334555555555555555555555333333322";
string zeitleiste_son = "111111111111111334555555555555555555555333333322";
};
boolean debug = 0; ! Zu Testzwecken: Ausgaben im Parser und Werte werden bei jedem Skriptaufruf gesendet!
! Im Normalbetrieb muss debug immer auf 0 sein!
boolean syslog = 0; ! 1= Infos erfolgen ins Syslog ; 0= Kein Syslog (Standard)
!******************************************************
! Ab hier Script CODE - Do not change behind this line
!******************************************************
! Script abbrechen, wenn Eingaben nicht korrekt.
if (((!raum) && (!thermostate)) || (!sv_Heizperiode)) {
if (debug) { WriteLine("Angaben fuer raum und/oder thermostate pruefen!"); }
if (syslog) {
string stdout;
string stderr;
system.Exec("logger -t script -p user.debug Heizungsthermostatscript: " # raum # " Variablen raum und thermostate pruefen!\n", &stdout, &stderr);
}
quit;
}
! Umwandeln deltaStdMin in Sekunden
integer stunde = deltaStdMin.Substr(0, 2).ToInteger();
integer minute = deltaStdMin.Substr(3, 2).ToInteger();
integer setdelta = (stunde * 3600) + (minute * 60);
object regler; ! Datenobjekt des Reglers fuer die Solltemperatur
object svObj; ! Datenobjekt fuer die Ueberpruefung der Systemvariablen
real soll_neu; ! Die neue Solltemperatur fuer den Raumthermostaten (Regler).
real soll_alt; ! Die alte Solltemperatur der Zeitleiste, die zuletzt aktuell war.
real soll_ist = -1; ! Die aktuelle Solltemperatur im Raumthermostat (Regler).
time sv_timestamp; ! Zeitstempel der Systemvariablen, die zuletzt geaendert worden ist (Wert in Sekunden).
time rt_timestamp; ! Zeitstempel, wann die Solltemperatur im RT zuletzt gesetzt wurde.
boolean prioritaet = false; ! Ist prioritaet = true, dann wird die neue Solltemperatur auf jeden Fall in den Regler geschrieben.
! Beginn Thermostate abfragen
if (raum) {
var myAssembly = dom.GetObject(raum);
string itemID;
var OldItem;
! Solltemperatur im Raumthermostat ermitteln.
foreach(itemID, myAssembly.EnumUsedIDs()) {
var item = dom.GetObject(itemID);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
! Wenn Raumthermostat gefunden wurde...
if (device.HssType() == "HM-CC-RT-DN") {
if (OldItem<>device) {
regler = dom.GetObject("BidCos-RF." # device.Address() # ":4.SET_TEMPERATURE");
soll_ist = regler.Value();
OldItem=device;
if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-CC-RT-DN)"); }
}
} else {
if (device.HssType() == "HM-CC-TC") {
if (OldItem<>device) {
regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SETPOINT");
soll_ist = regler.Value();
OldItem=device;
if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-CC-TC)"); }
}
} else {
if (device.HssType() == "HM-TC-IT-WM-W-EU") {
if (OldItem<>device) {
regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SET_TEMPERATURE");
soll_ist = regler.Value();
OldItem=device;
if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-TC-IT-WM-W-EU)"); }
}
}
}
}
}
}
} else {
! Aktuelle Solltemperatur auslesen
regler = dom.GetObject("BidCos-RF." # thermostate);
if (regler) {
soll_ist = regler.Value();
if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (BidCos-RF." # thermostate # ")"); }
} else { quit; }
}
! Ende Thermostate abfragen
! Beginn Ermittlung Solltemperatur
! Heizperiode pruefen
if (dom.GetObject(sv_Heizperiode).State()) {
soll_neu = 100.0;
prioritaet = true;
} else {
integer offen = 0;
if ((raum) && (Gewerk_Verschluss)) {
! Alle Geraete im "raum" abfragen und auswerten.
var myAssembly = dom.GetObject(raum);
string itemID;
foreach(itemID, myAssembly.EnumUsedIDs()) {
var item = dom.GetObject(itemID);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
! Pruefen, ob Verschluss offen
! Testen, ob Fenster Dachluken, usw. offen sind. Diese muessen dem jeweiligen Raum und dem "Gewerk_Verschluss" zugeordnet sein
! Alle Gewerke dem Raum zugeordneten Geraete untersuchen
! Andere als die aufgefuehrten Sensoren oder Aktoren, die als Verschluss dienen, einfach in nachfolgender IF-Anweisung aendern oder ergaenzen.
! Tuerfensterkontakte Jalousienaktor / Dachluken Funk Jalousienaktor / Dachluken Wired Schliesserkontakt-Sensor Hutschienenmontage Fenster-Drehgriffsensoren Funk-Rollladenaktor fuer Markenschalter
if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-LC-Bl1-FM") || (device.HssType() == "HMW-LC-Bl1-DR") || (device.HssType() == "HMW-Sen-SC-12-DR") || (device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HM-Sec-RHS-2") || (device.HssType() == "HM-LC-Bl1PBU-FM") || (device.HssType() == "HmIP-SRH") || (device.HssType() == "HmIP-SWDO-I") || (device.HssType() == "HMIP-SWDO")) {
var myChannel = dom.GetObject(item);
string id;
foreach(id, myChannel.ChnFunction()) {
var func = dom.GetObject(id);
if (func.Name() == Gewerk_Verschluss) {
if (item.State() > 0) {
offen = offen + 1.00;
if (debug) { WriteLine(device.HssType() # ": geöffnet"); }
} else { if (debug) { WriteLine(device.HssType() # ": geschlossen"); }}
}
}
}
}
}
} else {
if (sensoren) {
string id;
foreach (id, sensoren.Split(";")) {
var item = dom.GetObject("BidCos-RF." # id);
if (item) {
if (item.State() > 0) {
offen = offen + 1.00;
if (debug) {WriteLine("Verschluss (" # id # ") ist offen!");}
} else {
if (debug) {WriteLine("Verschluss (" # id # ") ist geschlossen!");}
}
} else { if (debug) {WriteLine("Fehler:" # id # " ist kein Verschluss-Objekt!");}}
}
}
}
! Wenn ein Verschluss im Raum offen ist, dann Fenstertemperatur einstellen
if (offen > 0) { ! Fenster offen, Ventile einstellen
if (soll_ist <= grad_fenster) { ! Wenn soll_ist niedriger als grad_fenster (z.B. Ventile zu -> soll_ist = 0), dann nichts machen
soll_neu = soll_ist;
} else {
soll_neu = grad_fenster;
prioritaet = true;
}
} else {
! Timestamp "Partytemperatur" festhalten
boolean b_svVar = false;
sv_timestamp = "1970-01-01 01:00:00";
if (sv_Partytemperatur) {
svObj = dom.GetObject(sv_Partytemperatur);
if (svObj) {
sv_timestamp = svObj.Timestamp();
! Partytemperatur testen und einstellen; -1 = deaktiviert
if (svObj.Value() > -1) { b_svVar = true; }
}
}
if (b_svVar) { !Wenn Partytemperatur, dann einstellen
soll_neu = svObj.Value();
} else {
! Pruefen ob Timestamp "Urlaub" juenger ist als "Partytemperatur" => Wenn ja, merken
if (sv_Urlaub1) {
svObj = dom.GetObject(sv_Urlaub1);
if (svObj) {
time settime = svObj.Timestamp();
if (settime > sv_timestamp) {sv_timestamp = settime;}
if ((svObj.State()) && (grad_urlaub > -1)) { boolean b_svVar = true; }
}
}
! Urlaub testen und einstellen; -1 = deaktiviert
if (b_svVar) { !Wenn im Urlaub und grad_urlaub nicht -1 (deaktiviert)
soll_neu = grad_urlaub;
} else {
if (sv_Gaeste) {
! Pruefen ob Timestamp "Gaeste" juenger ist als "Urlaub" => Wenn ja, merken
svObj = dom.GetObject(sv_Gaeste);
if (svObj) {
settime = svObj.Timestamp();
if (settime > sv_timestamp) {sv_timestamp = settime;}
! Gaeste testen und einstellen, -1 = deaktiviert
if ((svObj.State()) && (grad_gaeste > -1)) { b_svVar = true; }
}
}
if (b_svVar){ !Wenn Gaeste im Haus und grad_gaeste nicht -1 (deaktiviert)
soll_neu = grad_gaeste;
} else {
if (sv_Anwesenheit) {
svObj = dom.GetObject(sv_Anwesenheit);
if (svObj) {
! Pruefen ob Timestamp "Anwesenheit" juenger ist als "Gaeste" => Wenn ja, merken
settime = svObj.Timestamp();
if (settime > sv_timestamp) {sv_timestamp = settime;}
if ((!svObj.State()) && (grad_aa > -1)) { b_svVar = true; }
}
}
! Differenzen von ausser Haus Testen und beachten
if (b_svVar) {
soll_neu = grad_aa;
} else {
string zeitleiste_heute; ! Die Temperaturleiste fuer den aktuellen Tag.
string zeitleiste_gestern; ! Die Temperaturleiste von gestern.
string heizwert; ! Enthaelt den Wert, der in der Zeitleiste zum jetzigen Zeitpunkt gilt.
! Hier nun die Auswertung der Zeitleisten
!Auswerten, welche Zeitleiste heute ist
integer tag = system.Date("%u");
if ((tag == 1) && (woche == 0)) {zeitleiste_heute = zeitleiste_mon;} else {
if ((tag == 2) && (woche == 0)) {zeitleiste_heute = zeitleiste_die;} else {
if ((tag == 3) && (woche == 0)) {zeitleiste_heute = zeitleiste_mit;} else {
if ((tag == 4) && (woche == 0)) {zeitleiste_heute = zeitleiste_don;} else {
if ((tag == 5) && (woche == 0)) {zeitleiste_heute = zeitleiste_fre;} else {
if ((tag == 6) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_sam;} else {
if ((tag == 7) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_son;} else {
if ((tag >= 1) && (tag <= 5) && ((woche == 1) || (woche == 3))) {zeitleiste_heute = zeitleiste_mon;} else {
if ((tag >= 6) && (tag <= 7) && (woche == 1)) {zeitleiste_heute = zeitleiste_sam;} else {
if (woche == 2) {zeitleiste_heute = zeitleiste_mon;} }}}}}}}}}
! An Feiertagen oder bei Urlaub und zu Hause, gilt die Temperatur von Samstag bzw. Sonntag
b_svVar = false;
if (sv_Urlaub2) { svObj = dom.GetObject(sv_Urlaub2); if (svObj) { if (svObj.State()) { b_svVar = true; }}}
if (((b_svVar) || (dom.GetObject(sv_Feiertag).State())) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_son;} else {
if (((b_svVar) || (dom.GetObject(sv_Feiertag).State())) && (woche == 1)) {zeitleiste_heute = zeitleiste_sam;}}
! Position der Zeitleiste bestimmen
if (system.Date("%M").ToInteger() > 29) {integer add = 1;} else {integer add = 0;}
integer sTime = (system.Date("%H").ToInteger()*2)+add;
heizwert = zeitleiste_heute.Substr(sTime, 1);
! Temperatur bestimmen, die gesetzt werden soll
if (heizwert == "0") {soll_neu = grad_0;} else {
if (heizwert == "1") {soll_neu = grad_1;} else {
if (heizwert == "2") {soll_neu = grad_2;} else {
if (heizwert == "3") {soll_neu = grad_3;} else {
if (heizwert == "4") {soll_neu = grad_4;} else {
if (heizwert == "5") {soll_neu = grad_5;} else {
if (heizwert == "6") {soll_neu = grad_6;} else {
if (heizwert == "7") {soll_neu = grad_7;} else {
if (heizwert == "8") {soll_neu = grad_8;} else {
if (heizwert == "9") {soll_neu = grad_9;} }}}}}}}}}
! letzte Solltemeratur bestimmen, dabei muss der wert von 00:00 beachtet werden - der letzte Wert war gestern
if (sTime == 0) {
if ((tag == 1) && ((woche == 0) || (woche == 3))) {zeitleiste_gestern = zeitleiste_son;} else {
if ((tag == 2) && (woche == 0)) {zeitleiste_gestern = zeitleiste_mon;} else {
if ((tag == 3) && (woche == 0)) {zeitleiste_gestern = zeitleiste_die;} else {
if ((tag == 4) && (woche == 0)) {zeitleiste_gestern = zeitleiste_mit;} else {
if ((tag == 5) && (woche == 0)) {zeitleiste_gestern = zeitleiste_don;} else {
if ((tag == 6) && (woche == 0)) {zeitleiste_gestern = zeitleiste_fre;} else {
if ((tag == 7) && ((woche == 0) || (woche == 3))) {zeitleiste_gestern = zeitleiste_sam;} else {
if ((tag >= 2) && (tag <= 6) && ((woche == 1) || (woche == 3))) {zeitleiste_gestern = zeitleiste_mon;} else {
if (((tag == 1) || (tag == 7)) && (woche == 1)) {zeitleiste_gestern = zeitleiste_sam;} else {
if (woche == 2) {zeitleiste_gestern = zeitleiste_mon;} }}}}}}}}}
heizwert = zeitleiste_gestern.Substr(47, 1);
} else {
heizwert = zeitleiste_heute.Substr((sTime-1), 1);
}
! Temperatur bestimmen, die in der letzten 30 Minutenn war
if (heizwert == "0") {soll_alt = grad_0;} else {
if (heizwert == "1") {soll_alt = grad_1;} else {
if (heizwert == "2") {soll_alt = grad_2;} else {
if (heizwert == "3") {soll_alt = grad_3;} else {
if (heizwert == "4") {soll_alt = grad_4;} else {
if (heizwert == "5") {soll_alt = grad_5;} else {
if (heizwert == "6") {soll_alt = grad_6;} else {
if (heizwert == "7") {soll_alt = grad_7;} else {
if (heizwert == "8") {soll_alt = grad_8;} else {
if (heizwert == "9") {soll_alt = grad_9;} }}}}}}}}}
} !Ende IF Anwesenheit
} !Ende IF Gaeste
} !Ende IF Urlaub
} !Ende IF Partytemperatur
} !Ende IF Fenster offen
} !Ende IF Heizungsperiode
! Ende Ermittlung Solltemperatur
! ******************************
if (soll_ist >= 0) { ! Wenn RT geantwortet hat (Sollwert konnte ausgelesen werden)...
! ...dann pruefen ob neue Solltemperatur in RT geschrieben werden muss.
if (soll_ist <> soll_neu) { ! Wenn aktuelle Solltemperatur = neue Solltemp., dann nichts machen
time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); ! wie spaet ist es jetzt?
rt_timestamp = regler.Timestamp();
integer diff = now.ToInteger() - rt_timestamp.ToInteger();
if ((diff >= setdelta) || (prioritaet) || (soll_ist == grad_fenster) || (sv_timestamp >= rt_timestamp) || ((soll_ist == soll_alt) && (soll_alt <> soll_neu))) {
regler.State(soll_neu);
if (debug) {
WriteLine("Neue Solltemperatur (" # soll_neu.ToString(1) # "°C) an Thermostat gesendet!");
WriteLine("Letzter Zeitstempel (Sollwertänderung Thermostat): " # rt_timestamp);
}
if (syslog){
string stdout;
string stderr;
system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n", &stdout, &stderr);
system.Exec("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n", &stdout, &stderr);
system.Exec("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.", &stdout, &stderr);
system.Exec("logger -t script -p user.debug Offene_Luken: " # offen , &stdout, &stderr);
}
} else {
if (debug) {
WriteLine("\rAuswertung (ODER-Verknüpfung):");
WriteLine("1. (diff >= setdelta) : ("#diff.ToString()#" >= "#setdelta.ToString()#") : "#(diff >= setdelta));
WriteLine("2. (prioritaet) : "#prioritaet);
WriteLine("3. (soll_ist == grad_fenster) : ("#soll_ist.ToString(1)#"°C == "#grad_fenster.ToString(1)#"°C) : "#(soll_ist == grad_fenster));
WriteLine("4. (sv_timestamp >= rt_timestamp) : ("#sv_timestamp#" >= "#rt_timestamp#") : "#(sv_timestamp >= rt_timestamp));
WriteLine("5. ((soll_ist == soll_alt) && (soll_alt <> soll_neu)) : (("#soll_ist.ToString(1)#"°C == "#soll_alt.ToString(1)#"°C) && ("#soll_alt.ToString(1)#"°C <> "#soll_neu.ToString(1)#"°C)) : "#((soll_ist == soll_alt) && (soll_alt <> soll_neu)));
WriteLine("Ergebnis = False = Keine Solltemperatur an Thermostat gesendet!");
}
}
} else { if (debug) { WriteLine("Keine neue Solltemperatur (" # soll_neu.ToString(1) #"°C)"); }}
} else {
if (syslog) {
string stdout;
string stderr;
system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!", &stdout, &stderr);
}
}
$val$ = $this$ = $src$ =
Fehlerprüfung
Abbrechen OK
Admin
Startseite > Programme und Verknüpfungen > Programme > Programmerstellung
Alarmmeldungen (0)
Abmelden
Servicemeldungen (0)
Startseite
Status und Bedienung
Programme und Verknüpfungen
Einstellungen
Hilfe
Geräte anlernen
Name Beschreibung Bedingung (Wenn...) Aktivität (Dann.., Sonst..) Aktion
Heizungsscript zentral Zeit: Periodisch Ganztägig beginnend am 05.09.2014 zu Zeitpunkten auslösen Skript: ... sofort ausführen systemintern
Bedingung: Wenn...
Periodisch Ganztägig beginnend am 05.09.2014
ODER
Anwesenheit bei
ODER
Anwesenheit bei
ODER
Gaeste bei
ODER
Gaeste bei
ODER
Heizperiode bei
ODER
Heizperiode bei
ODER
Partytemperatur im Wertebereich größer als -1.00
ODER
Partytemperatur im Wertebereich kleiner als 100.00
ODER
Fenster_Bad LEQ0174684:1 bei
ODER
Fenster_Bad LEQ0174684:1 bei
ODER
Fenster_Kueche LEQ0174394:1 bei
ODER
Fenster_Kueche LEQ0174394:1 bei
ODER
Fenster_Bedroom LEQ0498572:1 bei
ODER
Fenster_Bedroom LEQ0498572:1 bei
ODER
Fenster_Yasmin LEQ1061321:1 bei
ODER
Fenster_Yasmin LEQ1061321:1 bei
ODER
Fenster_Gast_WC LEQ0210042:1 bei
ODER
Fenster_Gast_WC LEQ0210042:1 bei
ODER
Fenster_Justin 0000D3C98C9931:1 bei
ODER
Fenster_Justin 0000D3C98C9931:1 bei
ODER
Tuer_Bedroom_0007D7099CF352:1 bei
ODER
Tuer_Bedroom_0007D7099CF352:1 bei
ODER
Tuer_Bedroom_0007D7099CF352:1 bei
ODER
Fenster_Lunch_HmIP-SWDO-I 00109709A3C14A:1 bei
ODER
Fenster_Lunch_HmIP-SWDO-I 00109709A3C14A:1 bei
Aktivität: Dann...Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
string raum = "Lunch" ; ! ! Version 2.0 ! Script von Erik ...
string raum = "Living" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Bath" ; ! ! Version 2.0 ! Script von Erik G...
string raum = "WC_Gast" ; ! ! Version 2.0 ! Script von Eri...
string raum = "KiZiY" ; ! ! Version 2.0 ! Script von Erik ...
! KiZiJ Version 2.12 ! Script von Erik Groennerud - ...
string raum = "Flur" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Kueche" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Bedroom" ; ! ! Version 2.0 ! Script von Eri...
Aktivität:
Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
Abbrechen
OK
Einstellungen als neues
Programm speichern
Skript testen
Vermutlich liegt der Fehler irgendwo hier:
Code: Alles auswählen
if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-LC-Bl1-FM") || (device.HssType() == "HMW-LC-Bl1-DR") || (device.HssType() == "HMW-Sen-SC-12-DR") || (device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HM-Sec-RHS-2") || (device.HssType() == "HM-LC-Bl1PBU-FM") || (device.HssType() == "HmIP-SRH") || (device.HssType() == "HmIP-SWDO-I") || (device.HssType() == "HMIP-SWDO")) {
var myChannel = dom.GetObject(item);
string id;
foreach(id, myChannel.ChnFunction()) {
var func = dom.GetObject(id);
if (func.Name() == Gewerk_Verschluss) {
if (item.State() > 0) {
offen = offen + 1.00;
if (debug) { WriteLine(device.HssType() # ": geöffnet"); }
} else { if (debug) { WriteLine(device.HssType() # ": geschlossen"); }}
}
}
}
}
}
} else {
if (sensoren) {
string id;
foreach (id, sensoren.Split(";")) {
var item = dom.GetObject("BidCos-RF." # id);
if (item) {
if (item.State() > 0) {
offen = offen + 1.00;
if (debug) {WriteLine("Verschluss (" # id # ") ist offen!");}
} else {
if (debug) {WriteLine("Verschluss (" # id # ") ist geschlossen!");}
}
} else { if (debug) {WriteLine("Fehler:" # id # " ist kein Verschluss-Objekt!");}}
}
}
}
! Wenn ein Verschluss im Raum offen ist, dann Fenstertemperatur einstellen
if (offen > 0) { ! Fenster offen, Ventile einstellen
if (soll_ist <= grad_fenster) { ! Wenn soll_ist niedriger als grad_fenster (z.B. Ventile zu -> soll_ist = 0), dann nichts machen
soll_neu = soll_ist;
} else {
soll_neu = grad_fenster;
prioritaet = true;
}
} else {
Leider bin ich nicht so ganz der Profi, um den fehler zu finden...