NEWS
Bewässerungssteuerung per Interface in View
-
HI,
hab in meinem Garten eine Pumpe in einem Schacht die mit einem HM Aktor (HM-LC-Sw2-FM) geschaltet werden.
In dem Schacht befindet sich auch ein Wassersensor (HM-Sen-Wa-Od).
Daher hab ich einen % Satz der Füllung und lasse mir den umrechnen in einen Liter Wert.
Nun würde ich gern mir ein Interface einbinden wollen, das ich einmal vorgeben kann die Bewässerung soll entweder z.b. 10min dauern oder 10% von der Füllung sollen verteilt werden.
Eingegeben mit +- oder Pfeiltasten und einer Bestätigungstaste?!
Wenn man dies noch mit Wochentagen kombinieren könnte wäre das ein Traum.
Hat jemand so etwas schon mal gemacht und kann mir da weiter helfen??
Vielen Dank für Eure Unterstützung
Tobias -
Oder kann man über ein Fenster wenigsten Die Dauer vorgeben wielange der Aktor eingeschaltet sein soll?
-
Habe es folgendermaßen gelöst:
![alt text]( image url)
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: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.