erstmal vielen Dank für das Programm. Ich habe schon mehrere Anläufe gemacht um es zum Laufen zu bekommen.
Aber irgendwie kriege ich es nicht hin. Ich vermute mal, dass irgendwas mit den Kanalbezeichnungen (Hauptschalter, Ventile) der Geräte nicht passt.
Hauptschalter (CuxD):
Schaltaktor Ventile:Name:Hauptschalter Bewässerung
Typenbezeichnung:HM-PB-2-WM
Seriennummer: CUX2801003
Das angepasste script Bewässerung_Timer:Name:VentilKreis1
Typenbezeichnung:HmIP-MOD-OC8
Seriennummer:000D1BE9A4E74A:10
Code: Alles auswählen
!! ---------- Version 1.3 --------
!! Zeit in Sekunden aktuell für jeden Kanal
real beregnungszeit = 100;
integer anzahlkreise = 5; !!<<User Eingabe Anzahl der Kreise <<
!! Hier die Adresse des Benutzten Timers eintragen
string cuxdtimer = "CUX2800001:1"; !!<< User Eingabe hier kommt euer Timer mit der exakten Bezeichnun rein<<
var source = dom.GetObject ("$src$");
string sourceDP = "manuall";
if (source) {
sourceDP = source.Name();
}
integer kreis=0;
if (sourceDP.Find("CUxD."#cuxdtimer)>-1) {
!! Script wurde durch Timer ausgelöst aktuellen Wasserkreis ermitteln und um 1 hochzählen
!! aktuell laufenden Kreis ermitteln
var wk = dom.GetObject("Wasserkreis");
kreis = wk.State();
!! um eins erhöhen
kreis = kreis + 1;
!! wenn maximale Anzahl erreicht dann auf 0 setzen um alles auszuschalten
if (kreis>anzahlkreise) {
kreis = 0;
!! Hier auch den Hauptschalter ausschalten
dom.GetObject("HM-PB-2-WM.Hauptschalter:1.STATE").State(0); !!<<User Eingabe hier die genaue Bezeichnung des Hauptschalter Ausgangs<<
}
} else {
!! Script wurde anderweilig gestartet Wasserkreis auf 1 setzen damit die Beregnung von vorn beginnt.
!! hier dann auch den Hauptschalter einschalten
kreis = 1;
dom.GetObject("HM-PB-2-WM.Hauptschalter:1.STATE").State(1); !!<<User Eingabe hier die genaue Bezeichnung des Hauptschalter Ausgangs<<
}
!! und Neuen Wasserkreis in die Variable speichern
dom.GetObject("Wasserkreis").State(kreis);
!! Timer setzen um dieses Script nach xxx Sekunden wieder zu starten
if (kreis>0) {
string list = dom.GetObject("Beregnungszeiten").ValueList();
string part = list.StrValueByIndex(";",kreis-1);
if (part.ToInteger()>0) {
beregnungszeit = part.ToInteger();
var objsap = dom.GetObject("Beregnung_Saison");
beregnungszeit = part.ToFloat();
if (objsap) {
real sap = 0.0+objsap.State().ToInteger();
real fc = (sap/100.0);
beregnungszeit = beregnungszeit * fc;
}
}
dom.GetObject("CUxD."#cuxdtimer#".TIMER_SET").State(beregnungszeit.ToInteger());
}
Code: Alles auswählen
string strchnl = "HmIP-MOD-OC8.VentilKreis1|HmIP-MOD-OC8.VentilKreis2|HmIP-MOD-OC8.VentilKreis3|HmIP-MOD-OC8.VentilKreis4|HmIP-MOD-OC8.VentilKreis5|"; !!<< User Eingabe hier werden die Kannäle auf denenen die Magnetventile liegen bekannt gegeben<<
var source = dom.GetObject ("Wasserkreis");
var sourceDP = source.State();
integer numSource = sourceDP.ToInteger();
string splitter = "|";
string channel = strchnl.StrValueByIndex(splitter,numSource-1);
string switchOnDp = "CUX2801003."#channel#".STATE";
foreach(channel,strchnl.Split(splitter)) {
string tmpdpname = "CUX2801003."#channel#".STATE";
var datapoint = dom.GetObject(tmpdpname);
if (datapoint) {
if (tmpdpname == switchOnDp) {
datapoint.State(1);
} else {
datapoint.State(0);
}
}
}
Vielen Dank vorab!
Gruß
Alfi84