NEWS
Intervallskript / Bewaesserungsskript
-
Hallo zusammen,
ich arbeite gerade an meinem ersten Skript und habe hier mal eine erste funktionierende Version. Ich möchte dieses Skript für meine Gartenbewaesserung verwenden, aber es ist recht universell gehalten, von daher kann man es für jede Art von Intervallschaltung verwenden.
`//----------------------------------------------------------------- // Skript zur Gartenbewässerung // // Author: Pumbadinho (IObroker Forum) // //ToDo: Bewaesserung.Auto als boolean anlegen //ToDo: Zeit ändern ohne Skript neu starten zu müssen //ToDo: Dauersumiteration optimieren // // Versionhistory // 0.1 : Initial creation //----------------------------------------------------------------- //----------------------------------------------------------------- // Deklarationen //----------------------------------------------------------------- var dauer = [1,1]; //Array für die Dauer der Intervallschritte (min) var dauersum = 0; //komulativer Dauer Wert var defaultDauer = 10; // ist ein intervall nicht gesetzt, wird der defaulwert verwendet var objekte = []; objekte[0] = ["hm-rpc.0.KEQXXXXXXX.1.STATE"]; // Hier die Objekte des ersten Intervalls Komma getrennt ablegen objekte[1] = ["hm-rpc.0.KEQXXXXXXX.1.STATE"]; // Hier die Objekte des ersten Intervalls Komma getrennt ablegen //Weitere Ojektarrays nach bedarf anlegen createState('Bewaesserung.Auto',true); // Erstellen des Objektes javascript.0.Bewaesserung.Auto createState('Bewaesserung.Start',"22:00"); // Erstellen des Objektes javascript.0.Bewaesserung.Start var jsBewStart = "javascript.0.Bewaesserung.Start"; // in den objekten angelegte variable zur Bestimmung ob start aktiv ist var jsBewAuto = "javascript.0.Bewaesserung.Auto"; // in den objekten angelegte variable zur Bestimmung ob Bew aktiv ist var prefixLog = "Bewaesserung - "; //----------------------------------------------------------------- // Erstellung CronJobs //----------------------------------------------------------------- /**/ objekte.forEach(function(element, index, array){ // Durchgehen der einzelnen Intervallgruppen dauersum = 0; for (var i = 0; i <= index-1; i++){ if (dauer[i]){ // Prüfung ob eine Dauer definiert ist dauersum += dauer[i]; // vorheriger Wert + länge aktuelles Intervall } else { dauersum += defaultDauer; // vorheriger Wert + Defaultwert } } var cronTime = addMinutesToCrontime(getCronTime(getState(jsBewStart).val),dauersum); // erstelle die Crontime String und addiere die dauersum Minuten log (prefixLog + parseInt(index+1) + ". Crontime Job erstellt: " + cronTime); schedule(cronTime,function(){ if(getState(jsBewAuto).val){ // Nur wenn javascript.0.Bewaesserung.Auto = true //log ("Old: " + objekte[index-1]); if (index > 0){ // Letzten Aktoren müssen nur deakviert werden, wenn es nicht die erste Gruppe ist objekte[index-1].forEach(function(elementi, indexi, arrayi){ // Die Aktoren des vorherigen Intervalls deaktivieren setState(elementi,false); log(prefixLog + elementi + " ausgeschaltet"); }); } element.forEach(function(elementi, indexi, arrayi){ // Die Aktoren des aktuellen Intervalls aktivieren setState(elementi,true); log(prefixLog + elementi + " eingeschaltet"); }); } }); }); // dektivieren letzter Aktoren if (dauer[objekte.length-1]){ // Prüfung ob eine Dauer definiert ist dauersum += dauer[objekte.length-1]; // vorheriger Wert + länge aktuelles Intervall } else { dauersum += defaultDauer; // vorheriger Wert + Defaultwert } var cronTime = addMinutesToCrontime(getCronTime(getState(jsBewStart).val),dauersum); // Erstelle die Crontime String und addiere die dauersum Minuten log (prefixLog + parseInt(objekte.length+1) + ". Crontime Job erstellt: " + cronTime); schedule(cronTime,function(){ if(getState(jsBewAuto).val){ // Nur wenn javascript.0.Bewaesserung.Auto = true //log ("Old: " + objekte[index-1]); objekte[objekte.length - 1].forEach(function(elementi, indexi, arrayi){ // Die vorher aktivierten Aktoren deaktivieren setState(elementi,false); log(elementi + " augeschaltet"); }); } }); /**/ //----------------------------------------------------------------- // Funktionen //----------------------------------------------------------------- // gibt die Zeit des Formats xx:xx als Cronzeit zurück x x * * * function getCronTime (zeit){ var hours = parseInt(zeit.split(":")[0]); var minutes = parseInt(zeit.split(":")[1]); return minutes + " " + hours + " * * *"; } //gibt die um difMinutes erhöhte Cronzeit zurück function addMinutesToCrontime(cronZeit, difMinutes){ var hours = parseInt(cronZeit.split(" ")[1]); var minutes = parseInt(cronZeit.split(" ")[0]) + difMinutes; if (minutes >= 60) { hours += parseInt(minutes/60); minutes = minutes % 60; } return minutes + " " + hours + " * * *"; }` Anmerkungen werden gerne genommen. wie ihr seht, stehen noch einige ToDo's an, aber das ich jetzt am Wochenende wegfahre, wollte ich euch das Skript schonmal unoptimiert präsentieren.[/i][/i]
-
Sehr schön! Ich bin gespannt wie es weitergeht!
Grüße
Solear
-
Wenn es jemand einsetzt würde ich mich sehr über die Erfahrungen freuen. Anregungen oder Ideen zur Anpassung versuche auch gerne zu realisieren.
Gesendet von meinem Nexus 6P mit Tapatalk