Habe es folgendermaßen gelöst:

Kreis1,2 und 3 sind meine Bewässerungskreise.
Pumpe "Winterbetrieb" (vergessen den Namen zu ändern!) ist die Pumpe für die Kreise1,2 und 3.
Pumpe nach Füllstand schalten, ist meine zweite Pumpe, wenn der Füllstand kurz vor Überlauf ist. Dann pumpe ich einen gewissen Level ab.
Meine View zum downloaden.
In Vis (View importieren) einfügen:
View Beregnung.txt
Dann unter Scripte einfügen:
Eigene States anlegen:
createState('javascript.0.AnAus', '', {
name: 'Kreis1 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.AnAus2', '', {
name: 'Kreis2 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.AnAus3', '', {
name: 'Kreis3 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.Kreis1', '', {
name: 'Kreis1 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.Kreis2', '', {
name: 'Kreis1 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.Kreis3', '', {
name: 'Kreis1 Beregnung',
type: 'number',
unit: ''
});
createState('javascript.0.Countdown.countdown', '', {
name: 'Countdown',
type: 'number',
unit: 'min'
});
createState('javascript.0.Countdown.countTrigger', '', {
name: 'Trigger',
type: 'number',
unit: ''
});
createState('javascript.0.Countdown.Zeitvorgabe', '', {
name: 'Zeitvorgabe',
type: 'boolean',
unit: ''
});
und natürlich einmal ausführen.
Script für Countdown, also die Auswahl der Zeit auf dem Zeitbalken. (Ist von pix)
/* Countdown
// http://forum.iobroker.net/viewtopic.php?f=32&t=3436&hilit=countdown
01.08.2016 pix
*/
var interval = null;
var countdown = 60 * 1000; // 60min * 60s * 1000ms
createState('Countdown.Sleeptimer.countdown', seconds2text(countdown), {name: 'Sleeptimer Countdown / Restzeit', type: 'string'});
createState('Countdown.Sleeptimer.countdown_seconds', countdown, {name: 'Sleeptimer Countdown / Restzeit in s', type: 'number', def: countdown});
createState('Countdown.Sleeptimer.afterCount', {name: 'Sleeptimer Countdown / afterCount', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.countTrigger', {name: 'Sleeptimer Countdown / countTrigger', type: 'boolean', def: false});
var idCountdown = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown',
idCountdown_sec = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown_seconds',
idAfterCount = 'javascript.'+ instance +'.Countdown.Sleeptimer.afterCount',
idTrigger = 'javascript.'+ instance +'.Countdown.Sleeptimer.countTrigger';
// SPEZIFISCHE UMSETZUNG für a-flow
createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min',
id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min',
id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min',
id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min',
id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min',
id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
// Countdown
function seconds2text(_seconds) {
var sec_num = parseInt(_seconds, 10); // don't forget the second param
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
var time;
if (hours > 0) {
// if (hours < 4) {hours = "0" + hours;}
if (minutes < 4) {minutes = "0" + minutes;}
if (seconds < 10) {seconds = "0" + seconds;}
// time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
time = hours + ':' + minutes + ':' + seconds + ' Std.';
} else if (minutes > 0) {
if (minutes < 4) {minutes = "0" + minutes;}
if (seconds < 10) {seconds = "0" + seconds;}
// time = minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
time = minutes + ':' + seconds + 'min';
} else {
if (seconds < 10) {seconds = "0" + seconds;}
// time = seconds + ' Sekunden'; // original
time = seconds + ' s';
}
return time;
}
function count() {
// remove trigger
if (getState(idTrigger).val) setState(idTrigger, false);
// Abbruch bei Knopfdruck
if ( getState(id5min).val || getState(id10min).val || getState(id15min).val || getState(id20min).val || getState(id30min).val || getState(id40min).val || getState(id60min).val ) {
setState(idCountdown, 00);
setState(idAfterCount, false);
clearInterval(interval);
interval = null;
nachricht = "Das Programm wird gestartet";
sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
}
if (countdown > 1) {
setState(idCountdown_sec, parseInt(countdown,10));
setState(idCountdown, seconds2text(--countdown));
} else {
clearInterval(interval);
interval = null;
setState(idCountdown_sec, 0);
setState(idCountdown, seconds2text(0));
setState(idAfterCount, true);
}
}
on(idTrigger, function (obj) {
if (obj.state.val) {
setState(idCountdown_sec, parseInt(countdown,10));
setState(idCountdown, seconds2text(countdown));
setState(idAfterCount, false);
if (!interval) {
count();
interval = setInterval(count, 1000);
}
}
});
// wenn idAfterCount true wird, kann eine Aktion ausgeführt werden
on(idAfterCount, function (obj) {
if (obj.state.val) {
log('Countdown abgelaufen');
// weitere Aktionen einfügen
// Sprachausgabe
nachricht = 'Das Programm ist fertig';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe fertig
sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht});
}
});
// Taster für VIS
createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min',
id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min',
id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min',
id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min',
id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min',
id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
function sleeptimer(dauer) {
if (interval) { // wenn Countdown schon läuft
clearInterval(interval);
interval = null;
setState(idCountdown_sec, parseInt(0,4));
setState(idCountdown, seconds2text(0));
log(dauer + 'min Sleeptimer gestoppt');
// Sprachausgabe
nachricht = 'Das Programm wird gestoppt';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein
sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
} else {
countdown = dauer * 60; // Dauer festlegen (in Minuten)
setState(idTrigger, true); // Countdown starten
log(dauer + 'min Sleeptimer gestartet');
// Sprachausgabe
// nachricht = 'Das Programm wird gestartet';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein
// sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
}
}
on(id5min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(5); // 5min Zeit übergeben
setStateDelayed(id5min, false, 250); // nach viertel Sekunde wieder auf false
}
});
on(id10min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(10); // 10min Zeit übergeben
setStateDelayed(id10min, false, 250); // nach viertel Sekunde wieder auf false
}
});
on(id15min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(15); // 15min Zeit übergeben
setStateDelayed(id15min, false, 250); // nach viertel Sekunde wieder auf false
}
});
on(id20min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(20); // 20min Zeit übergeben
setStateDelayed(id20min, false, 250); // nach viertel Sekunde wieder auf false
// Sprachausgabe
// nachricht = 'Das Programm wird gestartet';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein
// sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
}
});
on(id30min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(30); // 30min Zeit übergeben
setStateDelayed(id30min, false, 250); // nach viertel Sekunde wieder auf false
// Sprachausgabe
// nachricht = 'Das Programm wird gestartet';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein
// sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
}
});
on(id40min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(40); // 40min Zeit übergeben
setStateDelayed(id40min, false, 250); // nach viertel Sekunde wieder auf false
// Sprachausgabe
// nachricht = 'Das Pprogramm wird gestartet';
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein
// sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW
// setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht);
}
});
on(id60min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(60); // 60min Zeit übergeben
setStateDelayed(id60min, false, 250); // nach viertel Sekunde wieder auf false
}
});
Script für Pumpe Kreis1. Läuft bei mir über 12V Ventile, die ich dann bei Bedarf einschalte plus die Pumpe.
// Pumpe: Ausschalten nach x Minuten
// http://forum.iobroker.net/viewtopic.php?f=21&t=5067
function weiter() {
var Zeitvorgabe = getState('javascript.0.Countdown.Zeitvorgabe').val ; // Zeit auswählen
//#############################################################
// Bewässerung zunächst ausschalten beim erstmaligen Skriptstart
// um im Falle eines Reboots den zuvor laufenden Bewässerungstimer auszuschalten (Not-Aus),
// da er nach Reboot den zuvor gesetzten Ausschalttrigger nicht mehr ausführen kann
setState("hm-rpc.0.xxxxxxxxxxx.1.STATE", false);
setState("hm-rpc.0.xxxxxxxxxxx.4.STATE", false);
//#############################################################
log (Zeitvorgabe);
if (Zeitvorgabe === 0 || Zeitvorgabe === isNaN) Zeitvorgabe = 30;
setStateDelayed("hm-rpc.0.xxxxxxxxxx.1.STATE", true); // Kreis 1 Ventil einschalten
setStateDelayed("hm-rpc.0.xxxxxxxxxx.4.STATE", true, 1000); // nach 1 Sek. Pumpe ein
setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", Zeitvorgabe); // OnTime setzen
// Countdown starten für Anzeige der Zeit auf View
setState('javascript.0.Countdown.countTrigger', true); // Countdown Brunnen starten
setStateDelayed("javascript.0.AnAus", 0, (Zeitvorgabe*60*1000)); // nach x Min. ausschalten -> Pumpe
setStateDelayed("hm-rpc.0.xxxxxxxxx.2.STATE", false); // Ventil 2 auf false setzen
setStateDelayed("hm-rpc.0.xxxxxxxxx.3.STATE", false); // Ventil 3 auf false setzen
sendTo('telegram', "Brunnen eingeschaltet. \nNach " + (Zeitvorgabe) + " Minuten wird er wieder automatisch ausgeschaltet.");
//log ("Brunnen eingeschaltet. Nach " + (Zeitvorgabe*60*1000) + " Sekunden wird er wieder automatisch ausgeschaltet.");
}
function weiter2() {
setState("hm-rpc.0.xxxxxxxxxx.1.STATE", false); // Brunnen Ventil aus
setState("hm-rpc.0.xxxxxxxxxx.4.STATE", false); // Brunnen Pumpe aus
sendTo('telegram', "Brunnen ausgeschaltet.");
//log ("Brunnen ausgeschaltet.");
setState('javascript.0.Countdown.countTrigger', false); // Countdown Pumpe aus
setState('javascript.0.Countdown.Zeitvorgabe', 0); // Zeitvorwahl auf Null setzen
setState('javascript.0.Countdown.countdown', 0); // Countdown auf Null setzen
setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", 0); // OnTime auf Null
}
on({id: "javascript.0.AnAus", change: "ne", val: 1}, function() { // Bewaesserung Kreis1 einschalten
//log("Auslöser Schalter - Cux: Brunnen ein");
weiter();
event("Gartenpumpe Kreis1 läuft"); // in eventlist schreiben
// Sprachausgabe
// nachricht = 'Kreis eins ist eingeschalten '
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Kreis 1 ein
Ausgabe = "Kreis eins ist eingeschalten";
sendTo("paw.0",'TabKueche',{send: 'say', text: Ausgabe}); // Sprachausgabe ueber PAW
});
on({id: "javascript.0.AnAus", change: "ne", val: 0}, function() { // Bewaesserung Kreis1 ausschalten
weiter2();
event("Gartenpumpe Kreis1 aus");
// Sprachausgabe
// nachricht = 'Kreis eins ist ausgeschalten '
// setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Kreis 1 aus
Ausgabe = "Kreis eins ist ausgeschalten";
sendTo("paw.0",'TabKueche',{send: 'say', text: Ausgabe}); // Sprachausgabe ueber PAW
});
Falls du verschiedene Kreise hast, kannst du das Script dann für deine Kreise anpassen.
Ich habe bei mir 3 Scripte laufen. Für jeden Kreis ein eigenes Script.
Kann man sicherlich eleganter lösen! Bei mir läuft es jedenfalls sehr gut.
Hoffe, dir geholfen zu haben.